Class: Gtk::Layout
- Inherits:
-
Object
- Object
- Gtk::Layout
- Includes:
- Freightrain::LayoutWidget
- Defined in:
- lib/extensions/gtk/widgets/gtk_layout.rb
Instance Attribute Summary collapse
-
#elements ⇒ Object
Returns the value of attribute elements.
-
#viewmodel ⇒ Object
writeonly
Sets the attribute viewmodel.
Instance Method Summary collapse
- #bind(options) ⇒ Object
-
#default_display_logic(elements, enumerable) ⇒ Object
TODO:remove.
- #display_logic(enumerable) ⇒ Object
- #get_new_item ⇒ Object
- #selected ⇒ Object
- #selected=(val) ⇒ Object
- #set_display_logic ⇒ Object
- #setup ⇒ Object
Methods included from Freightrain::LayoutWidget
Instance Attribute Details
#elements ⇒ Object
Returns the value of attribute elements.
8 9 10 |
# File 'lib/extensions/gtk/widgets/gtk_layout.rb', line 8 def elements @elements end |
#viewmodel=(value) ⇒ Object (writeonly)
Sets the attribute viewmodel
7 8 9 |
# File 'lib/extensions/gtk/widgets/gtk_layout.rb', line 7 def viewmodel=(value) @viewmodel = value end |
Instance Method Details
#bind(options) ⇒ Object
76 77 78 79 80 81 82 |
# File 'lib/extensions/gtk/widgets/gtk_layout.rb', line 76 def bind() if [:property].to_s == "elements" @viewmodel = ([:element].to_s + "_element_view_model").to_sym [:force] = true end super() end |
#default_display_logic(elements, enumerable) ⇒ Object
TODO:remove
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/extensions/gtk/widgets/gtk_layout.rb', line 24 def default_display_logic(elements, enumerable) #TODO: clean this mess height = elements.length delta = enumerable.length - elements.length delta.abs.times do if delta > 0 item = self.get_new_item self.put(item.control, 0, item.control.height_request * height) elements << item height += 1 else item = self.children.last self.remove(item) elements.delete_if {|element| element.control == item } end end height_factor = self.get_new_item.control.height_request self.height = elements.length * height_factor (0...elements.length).each do |index| elements[index].value = enumerable[index] end end |
#display_logic(enumerable) ⇒ Object
47 48 49 50 51 52 53 |
# File 'lib/extensions/gtk/widgets/gtk_layout.rb', line 47 def display_logic(enumerable) if @display_logic @display_logic.call(self, @elements, enumerable) else default_display_logic(@elements, enumerable) end end |
#get_new_item ⇒ Object
84 85 86 87 88 89 90 |
# File 'lib/extensions/gtk/widgets/gtk_layout.rb', line 84 def get_new_item item = Freightrain[@viewmodel] item.signals.each do |key, signal| signal.connect(@signals[key]) if @signals[key] end return item end |
#selected ⇒ Object
66 67 68 |
# File 'lib/extensions/gtk/widgets/gtk_layout.rb', line 66 def selected return @elements.select { |element| element.selected == true}.first end |
#selected=(val) ⇒ Object
70 71 72 73 74 |
# File 'lib/extensions/gtk/widgets/gtk_layout.rb', line 70 def selected=(val) @elements.each do |element| element.set_selection(val == element.value) end end |
#set_display_logic ⇒ Object
55 56 57 58 59 |
# File 'lib/extensions/gtk/widgets/gtk_layout.rb', line 55 def set_display_logic @display_logic = lambda do |, elements, enumerable| yield(, elements, enumerable) end end |
#setup ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/extensions/gtk/widgets/gtk_layout.rb', line 10 def setup @signals ||= {} selected_callback = @signals[:selected] @signals[:selected] = lambda do |value| elements.each do |item| item.set_selection(item.value == value) end selected_callback.call(value) if selected_callback end @elements ||= [] @ready = true end |