Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/samples/simple-calc.rb
diff options
context:
space:
mode:
authorIshan Bansal <ishan@seeta.in>2011-02-04 12:53:17 (GMT)
committer Ishan Bansal <ishan@seeta.in>2011-02-04 12:53:17 (GMT)
commitee852209b70c803e6ab1bb69b71c7dafcb1448e7 (patch)
treeac20673816893b398aed4c4da463b157d9e4899e /samples/simple-calc.rb
Imported Upstream version 1HEADmaster
Diffstat (limited to 'samples/simple-calc.rb')
-rw-r--r--samples/simple-calc.rb70
1 files changed, 70 insertions, 0 deletions
diff --git a/samples/simple-calc.rb b/samples/simple-calc.rb
new file mode 100644
index 0000000..f49587b
--- /dev/null
+++ b/samples/simple-calc.rb
@@ -0,0 +1,70 @@
+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
+ if @op
+ press_equals
+ end
+ @op = op
+ @previous, @number = @number, nil
+ end
+ end
+
+ def press_equals
+ @number = @previous.send(@op, @number.to_i)
+ @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]/; 'press_'+btn
+ when 'Clr'; 'press_clear'
+ when '='; 'press_equals'
+ when '+'; 'press_add'
+ when '-'; 'press_sub'
+ when '*'; 'press_times'
+ when '/'; 'press_div'
+ end
+
+ number.send(method)
+ number_field.replace strong(number)
+ end
+ end
+ end
+ end
+
+end