Sha256: b0c713059c850491cb69f5d3a41a7d06d387301e66b3f969e598dc1df4d75c64
Contents?: true
Size: 1.52 KB
Versions: 1
Compression:
Stored size: 1.52 KB
Contents
# frozen_string_literal: true class Calc def initialize @number = 0 @previous = nil @op = nil end def to_s @number.to_s end (0..9).each do |n| define_method "press_#{n}" do @number = @number.to_i * 10 + n end end def press_clear @number = 0 end {add: '+', sub: '-', times: '*', div: '/'}.each do |meth, op| define_method "press_#{meth}" do press_equals if @op @op = op @previous = @number @number = nil end end def press_equals @number = @previous.send(@op, @number.to_i) unless @previous.nil? || @op.nil? || @number.nil? @op = nil end end number_field = nil number = Calc.new Shoes.app height: 250, width: 200, resizable: false do background "#EEC".."#996", curve: 5, margin: 2 stack margin: 2 do stack margin: 8 do number_field = para strong(number) end flow width: 218, margin: 4 do %w[7 8 9 / 4 5 6 * 1 2 3 - 0 Clr = +].each do |btn| button btn, width: 46, height: 46 do method = case btn when /[0-9]/ then 'press_' + btn when 'Clr' then 'press_clear' when '=' then 'press_equals' when '+' then 'press_add' when '-' then 'press_sub' when '*' then 'press_times' when '/' then 'press_div' end number.send(method) number_field.replace strong(number) end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
shoes-4.0.0.rc1 | samples/simple_calc.rb |