Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'gtk2'
- class RubyApp < Gtk::Window
- def initialize
- super
- set_title "Calculator"
- signal_connect "destroy" do
- Gtk.main_quit
- end
- init_ui
- set_default_size 300, 250
- set_window_position Gtk::Window::POS_CENTER
- show_all
- end
- def init_ui
- @calc_buffer = ""
- vbox = Gtk::VBox.new false, 2
- mb = Gtk::MenuBar.new
- filemenu = Gtk::Menu.new
- file = Gtk::MenuItem.new "File"
- file.set_submenu filemenu
- mb.append file
- vbox.pack_start mb, false, false, 0
- table = Gtk::Table.new 5, 4, true
- buttons = {
- :cls => Gtk::Button.new("Cls"),
- :bck => Gtk::Button.new("Bck"),
- :close => Gtk::Button.new("Close"),
- :"7" => Gtk::Button.new("7"),
- :"8" => Gtk::Button.new("8"),
- :"9" => Gtk::Button.new("9"),
- :/ => Gtk::Button.new("/"),
- :"4" => Gtk::Button.new("4"),
- :"5" => Gtk::Button.new("5"),
- :"6" => Gtk::Button.new("6"),
- :"3" => Gtk::Button.new("3"),
- :"2" => Gtk::Button.new("2"),
- :"1" => Gtk::Button.new("1"),
- :"0" => Gtk::Button.new("0"),
- :* => Gtk::Button.new("*"),
- :- => Gtk::Button.new("-"),
- :+ => Gtk::Button.new("+"),
- :"=" => Gtk::Button.new("="),
- :"." => Gtk::Button.new(".")
- }
- display = Gtk::Entry.new
- display.set_editable false
- buttons.keys.each do |key|
- if key == :"0"
- buttons[key].signal_connect("clicked") {@calc_buffer += "0"; display.text = @calc_buffer }
- elsif key.to_s.to_i != 0
- buttons[key].signal_connect("clicked") {@calc_buffer += key.to_s; display.text = @calc_buffer }
- elsif key == :close
- buttons[key].signal_connect("clicked") { Gtk.main_quit }
- elsif key == :bck
- buttons[key].signal_connect("clicked") { @calc_buffer = @calc_buffer.split(//)[0..-2].join(''); display.text = @calc_buffer}
- elsif key == :cls
- buttons[key].signal_connect("clicked") { @calc_buffer = ""; display.text = @calc_buffer }
- elsif key == :"="
- buttons[key].signal_connect("clicked") { eval("puts #{@calc_buffer}"); @calc_buffer = eval(@calc_buffer).to_s; display.text = @calc_buffer}
- else
- buttons[key].signal_connect("clicked") { @calc_buffer += key.to_s; display.text = @calc_buffer }
- end
- end
- table.attach buttons[:cls], 0, 1, 0, 1
- table.attach buttons[:bck], 1, 2, 0, 1
- table.attach Gtk::Label.new, 2, 3, 0, 1
- table.attach buttons[:close], 3, 4, 0, 1
- table.attach buttons[:"7"], 0, 1, 1, 2
- table.attach buttons[:"8"], 1, 2, 1, 2
- table.attach buttons[:"9"], 2, 3, 1, 2
- table.attach buttons[:"/"], 3, 4, 1, 2
- table.attach buttons[:"4"], 0, 1, 2, 3
- table.attach buttons[:"5"], 1, 2, 2, 3
- table.attach buttons[:"6"], 2, 3, 2, 3
- table.attach buttons[:"*"], 3, 4, 2, 3
- table.attach buttons[:"1"], 0, 1, 3, 4
- table.attach buttons[:"2"], 1, 2, 3, 4
- table.attach buttons[:"3"], 2, 3, 3, 4
- table.attach buttons[:"-"], 3, 4, 3, 4
- table.attach buttons[:"0"], 0, 1, 4, 5
- table.attach buttons[:"."], 1, 2, 4, 5
- table.attach buttons[:"="], 2, 3, 4, 5
- table.attach buttons[:"+"], 3, 4, 4, 5
- vbox.pack_start display, false, false, 0
- vbox.pack_end table, true, true, 0
- add vbox
- end
- end
- Gtk.init
- window = RubyApp.new
- Gtk.main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement