class Syskit::GUI::WidgetList
Constants
- ListItem
Public Class Methods
new(parent = nil, auto_resize: true)
click to toggle source
Calls superclass method
# File lib/syskit/gui/widget_list.rb, line 18 def initialize(parent = nil, auto_resize: true) super(parent) @main_layout = Qt::VBoxLayout.new(self) @widgets = Array.new @main_layout.size_constraint = Qt::Layout::SetMinAndMaxSize @auto_resize = auto_resize if auto_resize @main_layout.add_stretch(1) end @separators = Hash.new end
Public Instance Methods
add_after(widget, after, permanent: false)
click to toggle source
# File lib/syskit/gui/widget_list.rb, line 49 def add_after(widget, after, permanent: false) if after.respond_to?(:to_str) after = @separators.fetch(after) end if i = @widgets.index { |w| w.widget == after } @main_layout.insert_widget(i + 1, widget) @widgets.insert(i + 1, ListItem.new(widget, permanent)) else Kernel.raise ArgumentError, "#{after} is not part of #{self}" end end
add_before(widget, before, permanent: false)
click to toggle source
# File lib/syskit/gui/widget_list.rb, line 37 def add_before(widget, before, permanent: false) if before.respond_to?(:to_str) before = @separators.fetch(before) end if i = @widgets.index { |w| w.widget == before } @main_layout.insert_widget(i, widget) @widgets.insert(i, ListItem.new(widget, permanent)) else Kernel.raise ArgumentError, "#{before} is not part of #{self}" end end
add_separator(name, label, permanent: true)
click to toggle source
# File lib/syskit/gui/widget_list.rb, line 31 def add_separator(name, label, permanent: true) add_widget(w = Qt::Label.new(label, self), permanent: permanent) @separators[name] = w w end
add_widget(w, permanent: false)
click to toggle source
# File lib/syskit/gui/widget_list.rb, line 61 def add_widget(w, permanent: false) @widgets << ListItem.new(w, permanent) if auto_resize? @main_layout.insert_widget(@widgets.size - 1, w) else @main_layout.add_widget(w) end end
auto_resize?()
click to toggle source
# File lib/syskit/gui/widget_list.rb, line 4 def auto_resize? @auto_resize end
children_size_updated()
click to toggle source
# File lib/syskit/gui/widget_list.rb, line 70 def children_size_updated s = self.size new_height = @widgets.inject(0) do |h, w| h + if w.widget.hidden? then 0 else w.widget.contents_height end end if new_height != s.height self.size = s end end
clear_widgets(&filter)
click to toggle source
Clear widgets for which the given filter returns true
It removes all widgets if no filter is given
@yieldparam [ListItem] item
# File lib/syskit/gui/widget_list.rb, line 102 def clear_widgets(&filter) filter ||= ->(w) { true } separators = @separators.values kept_widgets = Array.new while !@widgets.empty? w = @widgets.last if !separators.include?(w.widget) && !w.permanent? && filter[w.widget] @main_layout.remove_widget(w.widget) w.widget.dispose else kept_widgets.unshift w end @widgets.pop end ensure @widgets.concat(kept_widgets) end
each_widget() { |widget| ... }
click to toggle source
Enumerate the widgets in the list
# File lib/syskit/gui/widget_list.rb, line 90 def each_widget return enum_for(__method__) if !block_given? @widgets.each do |item| yield(item.widget) end end
resizeEvent(event)
click to toggle source
# File lib/syskit/gui/widget_list.rb, line 82 def resizeEvent(event) s = self.size s.width = event.size.width self.size = s event.accept end