class GtkApp::View
Public Class Methods
new(controller, builder_file, *args)
click to toggle source
@param [GtkApp::Controller] controller @param [String] builder_file Path the Gtk
builder file
Calls superclass method
# File lib/gtk_app/view.rb, line 8 def initialize(controller, builder_file, *args) super() # options = args.extract_options! self.add_from_file(builder_file) self.connect_signals { |handler| controller.method(handler) } # self.title = options[:title] if options.key?(:title) end
Public Instance Methods
method_missing(id, *args, &block)
click to toggle source
Calls superclass method
# File lib/gtk_app/view.rb, line 17 def method_missing(id, *args, &block) method_name = id.to_s widget_name = (method_name =~ /([!=]|<{2})$/ ? method_name.chop : method_name) widget = self["#{widget_name}"] super unless widget bang_proc, equal_proc, append_proc = case widget when Gtk::TextView then [ lambda { widget.buffer.text }, lambda { |*argv| widget.buffer.text = argv[0].to_s }, lambda { |text| widget.buffer.text << text.to_s } ] when Gtk::ComboBox then [ lambda { widget.active_text }, lambda do |*argv| if argv[0].is_a?(Fixnum) widget.active = argv[0] elsif widget.model result = nil widget.model.each do |m, p, i| result = iter if iter[0] =~ /\A#{argv[0]}/i end widget.active_iter = result if result end end, lambda { |text| widget.append_text(text.to_s) } ] when Gtk::ToggleButton, Gtk::CheckButton then [ lambda { widget.active? }, lambda { |*argv| widget.active = argv[0] }, nil ] when Gtk::TreeView then [ lambda { widget.selection.selected }, nil, lambda do |row| iter = widget.model.append if row.is_a?(Gtk::TreeIter) (0..model.n_columns).each { |i| iter[i] = row[i] } else row.each_with_index { |v,i| iter[i] = v } end iter end ] else if widget.respond_to?(:text) [ lambda { widget.text }, lambda { |*argv| widget.text = argv[0].to_s }, lambda { |text| widget.text = ("#{widget.text}" << text) } ] else [nil, nil, nil]; end end class_eval do define_method(:"#{widget_name}", lambda { widget }) define_method(:"#{widget_name}!", bang_proc) if bang_proc define_method(:"#{widget_name}=", equal_proc) if equal_proc end widget.class_eval do define_method("<<", append_proc) end if append_proc send(:"#{method_name}", *args, &block) end