class Compilator::CompilatorView
Public Class Methods
new(controller)
click to toggle source
Calls superclass method
# File lib/compilator.rb, line 120 def initialize(controller) super(controller) @root = TkRoot.new @root.title = 'Compilator' @root.bind('Key') do |event| val = event.valid_fields['keysym'].downcase if val == 'return' Thread.new do @controller.notify_action(self, :key_enter_pressed, {:value => @entry_variable.value, :location => @notebook.selected}.merge(Hash[('a'..'j').collect{|el| [el,instance_variable_get("@entry_variable_"+el)]}])) end elsif val == 'escape' Thread.new do @controller.notify_action(self, :button_raz_pressed, :location => @notebook.selected) end elsif val == 'delete' Thread.new do @controller.notify_action(self, :key_delete_pressed, :location => @notebook.selected) end elsif @controller.model.score.has_key?(val) Thread.new do @controller.notify_action(self,:key_pressed, :key => val, :location => @notebook.selected) end end end @notebook = Tk::Tile::Notebook.new(@root) do place('x' => 0, 'y' => 0) end @window_calc = Tk::Tile::Frame.new(@notebook) @controller.model.calculatrice = @window_calc @font_button = TkFont.new("size" => 24) @entry_variable = TkVariable.new @entry = Tk::Tile::Entry.new(@window_calc) @entry.justify = 'right' @entry.validate = 'key' @entry.textvariable = @entry_variable @entry.validatecommand do |valid| false end @controller.model.score.keys.each do |key| var_name = "@button_"+key instance_variable_set(var_name.to_sym,Tk::Tile::Button.new(@window_calc)) button = instance_variable_get(var_name.to_sym) button['text'] = key.upcase button['width'] = 1 button.bind('ButtonPress') do Thread.new do @controller.notify_action(self,:button_pressed, :key => key, :location => @notebook.selected) end end end Tk::Tile::Style.configure('Red.TButton', {"foreground" => 'red', 'font' => @font_button}) @button_r['style'] = 'Red.TButton' Tk::Tile::Style.configure('Orange.TButton', {"foreground" => 'orange', 'font' => @font_button}) @button_o['style'] = 'Orange.TButton' Tk::Tile::Style.configure('Yellow.TButton', {"foreground" => 'yellow', 'font' => @font_button}) @button_j['style'] = 'Yellow.TButton' Tk::Tile::Style.configure('Lime.TButton', {"foreground" => 'lime green', 'font' => @font_button}) @button_c['style'] = 'Lime.TButton' Tk::Tile::Style.configure('Green.TButton', {"foreground" => 'green', 'font' => @font_button}) @button_v['style'] = 'Green.TButton' @button_e['underline'] = 0 Tk::Tile::Style.configure('Underline.TButton', {"foreground" => 'green', 'font' => @font_button}) @button_e['style'] = 'Underline.TButton' @button_raz = Tk::Tile::Button.new(@window_calc) @button_raz['text'] = 'RàZ' @button_raz['width'] = 1 Tk::Tile::Style.configure('Medium.TButton', {'font' => TkFont.new('size' => 12)}) @button_raz['style'] = 'Medium.TButton' @button_raz.bind('ButtonPress') do Thread.new do @controller.notify_action(self,:button_raz_pressed) end end @button_equal = Tk::Tile::Button.new(@window_calc) @button_equal['text'] = '=' Tk::Tile::Style.configure('Big.TButton', {'font' => TkFont.new('size' => 24)}) @button_equal['style'] = 'Big.TButton' @button_equal['width'] = 1 @button_equal.bind('ButtonPress') do Thread.new do @controller.notify_action(self,:button_equal_pressed, :value => @entry_variable.value) end end @label_result = Tk::Tile::Label.new(@window_calc) @label_result.justify = 'right' Tk::Tile::Style.configure('Big.TLabel',{'font' => TkFont.new('size' => 14)}) @label_result['style'] = 'Big.TLabel' #onglet total @window_total = Tk::Tile::Frame.new(@notebook) @controller.model.total = @window_total @paned_fraction = Tk::Tile::Paned.new(@window_total) {'co' => ['a','b'], 'ce' => ['c','d'], 'ee' => ['e','f'], 'eoc' => ['g','h'], 'eoi'=> ['i','j']}.each do |key,value| label_name = "@label_frame_"+key instance_variable_set(label_name.to_sym,Tk::Tile::Labelframe.new(@paned_fraction)) label_frame = instance_variable_get(label_name.to_sym) label_frame['text'] = key.upcase value.each do |val| entry_name = "@entry_"+val entry_variable_name = "@entry_variable_"+val instance_variable_set(entry_name.to_sym,Tk::Tile::Entry.new(label_frame)) instance_variable_set(entry_variable_name.to_sym,TkVariable.new) entry = instance_variable_get(entry_name.to_sym) entry_variable = instance_variable_get(entry_variable_name.to_sym) entry.width = 3 entry.textvariable = entry_variable entry.validate = 'key' entry.validatecommand do |valid| if (0..9).map{|el| el.to_s}.include?(valid.string) true else false end end end end @paned_result = Tk::Tile::Paned.new(@window_total) @label_frame_brut = Tk::Tile::Labelframe.new(@paned_result) @label_frame_brut['text'] = 'Résultat brut' @label_result_brut = Tk::Tile::Label.new(@label_frame_brut) @label_result_brut['text'] = '0' @label_result_brut.justify = 'right' @label_frame_arrondi = Tk::Tile::Labelframe.new(@paned_result) @label_frame_arrondi['text'] = "Résultat arrondi au centième" @label_result_arrondi = Tk::Tile::Label.new(@label_frame_arrondi) @label_result_arrondi['text'] = '0' @label_result_arrondi.justify = 'right' @paned_button = Tk::Tile::Paned.new(@window_total) for n in (0..9) var_name = "@button_"+n.to_s instance_variable_set(var_name.to_sym,Tk::Tile::Button.new(@paned_button)) button = instance_variable_get(var_name.to_sym) button['text'] = n.to_s button['style'] = 'Big.TButton' button['width'] = 1 end @button_raz_total = Tk::Tile::Button.new(@paned_button) @button_raz_total['text'] = 'RàZ' @button_raz_total.bind('ButtonPress') do puts "rrrr" Thread.new do @controller.notify_action(self,:button_raz_pressed, :location => @notebook.selected) end end @button_del = Tk::Tile::Button.new(@paned_button) @button_del['text'] = 'Del/Suppr' @button_calcul = Tk::Tile::Button.new(@paned_button) @button_calcul['text'] = 'Calculer' @button_calcul.bind('ButtonPress') do Thread.new do @controller.notify_action(self,:button_calcul_pressed, {:location => @notebook.selected}.merge(Hash[('a'..'j').collect{|el| [el,instance_variable_get("@entry_variable_"+el)]}])) end end #ajout TkGrid.columnconfigure( @root, 0, :weight => 1 ) TkGrid.rowconfigure( @root, 0, :weight => 1 ) TkGrid.columnconfigure( @window_calc, 0, :weight => 1) TkGrid.columnconfigure( @window_calc, 1, :weight => 1 ) TkGrid.columnconfigure( @window_calc, 2, :weight => 1 ) TkGrid.rowconfigure( @window_calc, 0, :weight => 0) TkGrid.rowconfigure( @window_calc, 1, :weight => 1) TkGrid.rowconfigure( @window_calc, 2, :weight => 1) TkGrid.rowconfigure( @window_calc, 3, :weight => 1) TkGrid.rowconfigure( @window_calc, 4, :weight => 0) TkGrid.columnconfigure(@window_total,0, :weight => 1) TkGrid.rowconfigure(@window_total, 0, :weight => 0) TkGrid.rowconfigure(@window_total, 1, :weight => 0) TkGrid.rowconfigure(@window_total, 2, :weight => 1) TkGrid.columnconfigure(@paned_fraction, 0, :weight =>1) TkGrid.columnconfigure(@paned_fraction, 1, :weight =>1) TkGrid.columnconfigure(@paned_fraction, 2, :weight =>1) TkGrid.columnconfigure(@paned_fraction, 3, :weight =>1) TkGrid.columnconfigure(@paned_fraction, 4, :weight =>1) TkGrid.columnconfigure(@paned_result, 0, :weight =>1) TkGrid.columnconfigure(@paned_result, 1, :weight =>1) @notebook.add(@window_calc, :text => 'Calculatrice') @notebook.add(@window_total, :text => 'Total') @notebook.grid(:column => 0, :row => 0, :sticky => 'nsew') @entry.grid(:column => 0, :row => 0, :columnspan => 3, :sticky => 'new') @button_r.grid(:column => 0, :row => 1, :sticky => 'nsew') @button_o.grid(:column => 1, :row => 1, :sticky => 'nsew') @button_j.grid(:column => 2, :row => 1, :sticky => 'ewns') @button_c.grid(:column => 0, :row => 2, :sticky => 'ewns') @button_v.grid(:column => 1, :row => 2, :sticky => 'ewns') @button_e.grid(:column => 2, :row => 2, :sticky => 'ewns') @button_raz.grid(:column => 0, :row => 3, :sticky => 'ewns') @button_equal.grid(:column => 1, :row => 3, :columnspan => 2, :sticky => 'ewns') @label_result.grid(:column => 0, :row => 4, :columnspan => 3, :sticky => 'ews') @paned_fraction.grid(:column => 0, :row => 0, :sticky => 'ew') @label_frame_co.grid(:column => 0, :row => 0) @entry_a.grid(:column => 0, :row => 0) @entry_b.grid(:column => 0, :row => 1) @label_frame_ce.grid(:column => 1, :row => 0) @entry_c.grid(:column => 0, :row => 0) @entry_d.grid(:column => 0, :row => 1) @label_frame_ee.grid(:column => 2, :row => 0) @entry_e.grid(:column => 0, :row => 0) @entry_f.grid(:column => 0, :row => 1) @label_frame_eoc.grid(:column => 3, :row => 0) @entry_g.grid(:column => 0, :row => 0) @entry_h.grid(:column => 0, :row => 1) @label_frame_eoi.grid(:column => 4, :row => 0) @entry_i.grid(:column => 0, :row => 0) @entry_j.grid(:column => 0, :row => 1) @paned_result.grid(:column => 0, :row => 1, :sticky => 'ew') @label_frame_brut.grid(:column => 0, :row => 0, :sticky => 'ew') @label_result_brut.grid(:column => 0, :row => 0, :sticky => 'ew') @label_frame_arrondi.grid(:column => 1, :row => 0, :sticky => 'ew') @label_result_arrondi.grid(:column => 0, :row => 0, :sticky => 'ew') @paned_button.grid(:column => 0, :row => 2) @button_raz_total.grid(:column => 0, :row => 0) @button_del.grid(:column => 0, :row => 1) @button_calcul.grid(:column => 0, :row => 2, :columnspan => 6, :sticky => 'ew' ) for n in (0..4) do button1 = instance_variable_get("@button_"+n.to_s) button2 = instance_variable_get("@button_"+(n+5).to_s) button1.grid(:column => n+1, :row => 0) button2.grid(:column => n+1, :row => 1) end end
Public Instance Methods
close()
click to toggle source
# File lib/compilator.rb, line 399 def close end
display()
click to toggle source
# File lib/compilator.rb, line 396 def display end
property_change(event)
click to toggle source
# File lib/compilator.rb, line 402 def property_change(event) if event.property_name == "last_key_pressed" Thread.new do @entry_variable.set_value(@entry_variable.value+event.new_value) end elsif event.property_name == 'result' Thread.new do @label_result.text = event.new_value.to_s end elsif event.property_name == 'raz' Thread.new do @entry_variable.set_value('') end elsif event.property_name == 'delete' Thread.new do @entry_variable.set_value(@entry_variable.value[0..-2]) end elsif event.property_name == 'result_total' Thread.new do @label_result_brut.text = event.new_value.to_s end elsif event.property_name == 'result_arrondi' Thread.new do @label_result_arrondi.text = event.new_value.to_s end elsif event.property_name == 'raz_total' puts "coucou" Thread.new do ('a'..'j').each do |el| instance_variable_get("@entry_variable_"+el).set_value('') end end end end