Advertisement
swarley

Calculator

Feb 18th, 2012
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 3.47 KB | None | 0 0
  1. require 'gtk2'
  2.  
  3.  
  4. class RubyApp < Gtk::Window
  5.  
  6.     def initialize
  7.         super
  8.    
  9.         set_title "Calculator"
  10.         signal_connect "destroy" do
  11.             Gtk.main_quit
  12.         end
  13.        
  14.         init_ui
  15.  
  16.         set_default_size 300, 250
  17.         set_window_position Gtk::Window::POS_CENTER
  18.        
  19.         show_all
  20.     end
  21.    
  22.     def init_ui
  23.         @calc_buffer = ""
  24.         vbox = Gtk::VBox.new false, 2
  25.        
  26.         mb = Gtk::MenuBar.new
  27.         filemenu = Gtk::Menu.new
  28.         file = Gtk::MenuItem.new "File"
  29.         file.set_submenu filemenu
  30.         mb.append file
  31.  
  32.         vbox.pack_start mb, false, false, 0
  33.  
  34.         table = Gtk::Table.new 5, 4, true
  35.    
  36.     buttons = {
  37.             :cls   => Gtk::Button.new("Cls"),
  38.             :bck   => Gtk::Button.new("Bck"),  
  39.             :close => Gtk::Button.new("Close"),
  40.             :"7"   => Gtk::Button.new("7"),
  41.             :"8"   => Gtk::Button.new("8"),
  42.             :"9"   => Gtk::Button.new("9"),
  43.             :/     => Gtk::Button.new("/"),
  44.             :"4"   => Gtk::Button.new("4"),
  45.             :"5"   => Gtk::Button.new("5"),
  46.             :"6"   => Gtk::Button.new("6"),
  47.             :"3"   => Gtk::Button.new("3"),
  48.             :"2"   => Gtk::Button.new("2"),
  49.             :"1"   => Gtk::Button.new("1"),
  50.             :"0"   => Gtk::Button.new("0"),
  51.             :*     => Gtk::Button.new("*"),
  52.             :-     => Gtk::Button.new("-"),
  53.             :+     => Gtk::Button.new("+"),
  54.             :"="   => Gtk::Button.new("="),
  55.             :"."   => Gtk::Button.new(".")
  56.     }
  57.     display = Gtk::Entry.new
  58.     display.set_editable false
  59.     buttons.keys.each do |key|
  60.         if key == :"0"
  61.             buttons[key].signal_connect("clicked") {@calc_buffer += "0"; display.text = @calc_buffer }
  62.         elsif key.to_s.to_i != 0
  63.             buttons[key].signal_connect("clicked") {@calc_buffer += key.to_s; display.text = @calc_buffer }
  64.         elsif key == :close
  65.             buttons[key].signal_connect("clicked") { Gtk.main_quit }
  66.         elsif key == :bck
  67.             buttons[key].signal_connect("clicked") { @calc_buffer = @calc_buffer.split(//)[0..-2].join(''); display.text = @calc_buffer}
  68.         elsif key == :cls
  69.             buttons[key].signal_connect("clicked") { @calc_buffer = ""; display.text = @calc_buffer }
  70.         elsif key == :"="
  71.             buttons[key].signal_connect("clicked") { eval("puts #{@calc_buffer}"); @calc_buffer = eval(@calc_buffer).to_s; display.text = @calc_buffer}
  72.         else
  73.             buttons[key].signal_connect("clicked") { @calc_buffer += key.to_s; display.text = @calc_buffer }
  74.         end
  75.     end
  76.  
  77.         table.attach buttons[:cls], 0, 1, 0, 1
  78.         table.attach buttons[:bck], 1, 2, 0, 1
  79.         table.attach Gtk::Label.new, 2, 3, 0, 1
  80.         table.attach buttons[:close], 3, 4, 0, 1
  81.  
  82.         table.attach buttons[:"7"], 0, 1, 1, 2
  83.         table.attach buttons[:"8"], 1, 2, 1, 2
  84.         table.attach buttons[:"9"], 2, 3, 1, 2
  85.         table.attach buttons[:"/"], 3, 4, 1, 2
  86.  
  87.         table.attach buttons[:"4"], 0, 1, 2, 3
  88.         table.attach buttons[:"5"], 1, 2, 2, 3
  89.         table.attach buttons[:"6"], 2, 3, 2, 3
  90.         table.attach buttons[:"*"], 3, 4, 2, 3
  91.  
  92.         table.attach buttons[:"1"], 0, 1, 3, 4
  93.         table.attach buttons[:"2"], 1, 2, 3, 4
  94.         table.attach buttons[:"3"], 2, 3, 3, 4
  95.         table.attach buttons[:"-"], 3, 4, 3, 4
  96.  
  97.         table.attach buttons[:"0"], 0, 1, 4, 5
  98.         table.attach buttons[:"."], 1, 2, 4, 5
  99.         table.attach buttons[:"="], 2, 3, 4, 5
  100.         table.attach buttons[:"+"], 3, 4, 4, 5
  101.         vbox.pack_start display, false, false, 0
  102.        
  103.         vbox.pack_end table, true, true, 0
  104.        
  105.         add vbox
  106.  
  107.     end
  108. end
  109.  
  110. Gtk.init
  111.     window = RubyApp.new
  112. Gtk.main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement