class Rgw::PropertyEditor
Attributes
selectedElement[R]
Public Class Methods
new(props, type)
click to toggle source
Calls superclass method
# File lib/rgw/property-editor.rb, line 32 def initialize props, type super(:orientation => :vertical) @widgetDefaults = [] @selectedElement = nil table = create_prop_editor props, type pack_start table, :expand => false, :fill => false, :padding => 4 end
Public Instance Methods
create_prop_editor(props, type=nil)
click to toggle source
# File lib/rgw/property-editor.rb, line 43 def create_prop_editor props, type=nil table = Gtk::Table.new props.length() + 1, 2 table.column_spacings = 8 table.row_spacings = 4 unless type.nil? headline = Gtk::Label.new headline.markup = '<b><big>' + type + '</big></b>' headline.xalign = 0.1 table.attach headline, 0, 2, 0, 1, Gtk::AttachOptions::EXPAND | Gtk::AttachOptions::FILL, Gtk::AttachOptions::EXPAND | Gtk::AttachOptions::FILL end 0.upto(props.length()-1) { |a| create_prop_entry props[a], table, a + 1} table.show_all table end
create_prop_entry(data, table, row)
click to toggle source
# File lib/rgw/property-editor.rb, line 62 def create_prop_entry data, table, row label = Gtk::Label.new label.xalign = 1.0 widget = nil case data[:type] when :iRadio label.text = data[:label] hbox = Gtk::Box.new :horizontal i = 0 while true do sym = ('img' + i.to_s).to_sym break if data[sym].nil? i += 1 end group = nil 0.upto(i-1) do |n| if n == 0 button = Gtk::RadioButton.new group = button else button = Gtk::RadioButton.new group end hbox.pack_start button, :expand => false, :fill => false, :padding => 2 button.draw_indicator = false sym = ('img' + n.to_s).to_sym # img = Gtk::Image.new(:file => Rgw::PIXMAP_PATH + data[sym] + '.png') button.image = img button.signal_connect(:toggled) do |widget| 0.upto(widget.group.length() - 1) do |m| if widget.group[m].active? signal_emit :property_changed, data[:id0], widget.group.length() - 1 - m break end end end end group.group[i - 1 - data[:default0]].active = true @widgetDefaults << [group, data] hbox.show_all widget = hbox when :sSpin label.text = data[:label] widget = Rgw::SyncedSpinButton.new data[:range].first, data[:range].last, data[:step], data[:synced] @widgetDefaults << [widget, data] widget.set_values data[:default0], data[:default1] widget.signal_connect(:value1_changed) {|wid, val| signal_emit :property_changed, data[:id0], val} widget.signal_connect(:value2_changed) {|wid, val| signal_emit :property_changed, data[:id1], val} when :spin label.text = data[:label] widget = Gtk::SpinButton.new data[:range].first, data[:range].last, data[:step] widget.value = data[:default0] @widgetDefaults << [widget, data] widget.signal_connect(:value_changed) do |wid| signal_emit :property_changed, data[:id0], wid.value end when :toggle label.text = data[:label].split[0..-2].join(' ') widget = Gtk::ToggleButton.new data[:label].split[-1] widget.active = data[:default0] @widgetDefaults << [widget, data] widget.signal_connect(:toggled) do |wid| signal_emit :property_changed, data[:id0], wid.active? end when :entry label.text = data[:label] widget = Gtk::Entry.new widget.text = data[:default0] @widgetDefaults << [widget, data] widget.signal_connect(:changed) do |wid| signal_emit :property_changed, data[:id0], wid.text end when :color label.text = data[:label] # fix for ruby gtk 2.2.0 col = data[:default0].map{|c| c * 0xffff}.take(3) color = Gdk::Color.new *col #color = Gdk::RGBA.new(*data[:default0]) widget = Gtk::ColorButton.new color widget.use_alpha = true @widgetDefaults << [widget, data] widget.signal_connect(:color_set) do |wid| cl = wid.rgba signal_emit :property_changed, data[:id0], [cl.red, cl.green, cl.blue, cl.alpha] end when :combo label.text = data[:label] widget = Gtk::ComboBoxText.new data[:entries].each {|entry| widget.append nil, entry} @widgetDefaults << [widget, data] widget.signal_connect(:changed) do |wid| signal_emit :property_changed, data[:id0], wid.active end when :label widget = Gtk::Label.new widget.set_xalign 0.0 @widgetDefaults << [widget, data] table.attach widget, 0, 2, row, row+1, nil, nil, 6, 0 return when :radioRevealer rbox = Gtk::Box.new :vertical table.attach_defaults rbox, 0, 2, row, row+1 rbox.pack_start Gtk::Separator.new(:horizontal), :expand => :false, :fill => :false label.set_xalign(0.5) label.markup = '<span size="large" weight="bold">' + data[:label] + '</span>' rbox.pack_start label, :expand => :false, :fill => :false widget = Rgw::RadioRevealer.new rbox.pack_start widget, :expand => :false, :fill => :false @widgetDefaults << [widget, data] data[:revealSections].each do |section| revealerChild = create_prop_editor section[:data] label = Gtk::Label.new label.markup = '<span size="medium" weight="bold">' + section[:section] + '</span>' widget.create_entry label, revealerChild widget.signal_connect(:revealed) do |wid, idx| signal_emit :property_changed, data[:id0], idx end end return else raise RuntimeError, 'invalid property type' end table.attach_defaults label, 0, 1, row, row+1 table.attach_defaults widget, 1, 2, row, row+1 end
set_defaults()
click to toggle source
# File lib/rgw/property-editor.rb, line 226 def set_defaults @widgetDefaults.each do |data| # set from defaults if data[1][:useDefault] if data[1][:type] == :iRadio # the buttons in a radio button group are orderd reverse. strange... data[0].group[data[0].group.length() - 1 - data[1][:default0]].active = true elsif data[1][:type] == :toggle data[0].active = data[1][:default0] elsif data[1][:type] == :spin data[0].value = data[1][:default0] elsif data[1][:type] == :sSpin data[0].set_values data[1][:default0], data[1][:default1] elsif data[1][:type] == :entry data[0].text = data[1][:default0] elsif data[1][:type] == :color col = Gdk::RGBA.new(*data[1][:default0]) data[0].rgba = col elsif data[1][:type] == :combo data[0].active = data[1][:default0] elsif data[1][:type] == :label data[0].markup = data[1][:default0] elsif data[1][:type] == :radioRevealer data[0].active = data[1][:default0] else raise RuntimeError, 'invalid type in set_defaults useDefault' end # move from the widget into the data store else if data[1][:type] == :iRadio nb = data[0].group.length 0.upto(nb - 1) do |i| if data[0].group[i].active? signal_emit :property_changed, data[1][:id0], nb - 1 - i break end end elsif data[1][:type] == :toggle f = data[0].active? ? 1.0 : 0.0 signal_emit :property_changed, data[1][:id0], f elsif data[1][:type] == :spin signal_emit :property_changed, data[1][:id0], data[0].value elsif data[1][:type] == :sSpin s1, s2 = *data[0].get_values signal_emit :property_changed, data[1][:id0], s1 if s1 >= 0.0 signal_emit :property_changed, data[1][:id1], s2 if s2 >= 0.0 elsif data[1][:type] == :entry signal_emit :property_changed, data[1][:id0], data[0].text elsif data[1][:type] == :color cl = data[0].rgba signal_emit :property_changed, data[1][:id0], [cl.red, cl.green, cl.blue, cl.alpha] elsif data[1][:type] == :combo signal_emit :property_changed, data[1][:id0], data[0].active elsif data[1][:type] == :label # do nothing, because a label doesn't generate events elsif data[1][:type] == :radioRevealer signal_emit :property_changed, data[1][:id0], data[0].active else raise RuntimeError, 'invalid type in set_defaults !useDefault' end end end end
set_from_data()
click to toggle source
# File lib/rgw/property-editor.rb, line 196 def set_from_data @widgetDefaults.each do |data| val1 = @selectedElement.get_by_name data[1][:id0] if data[1][:type] == :iRadio data[0].group[data[0].group.length() - 1 - val1].active = true elsif data[1][:type] == :toggle data[0].active = val1 elsif data[1][:type] == :spin data[0].value = val1 elsif data[1][:type] == :sSpin val2 = @selectedElement.get_by_name data[1][:id1] data[0].set_values val1, val2 elsif data[1][:type] == :entry data[0].text = val1 elsif data[1][:type] == :color col = Gdk::RGBA.new *val1 data[0].rgba = col elsif data[1][:type] == :combo data[0].active = val1 elsif data[1][:type] == :label data[0].markup = val1 elsif data[1][:type] == :radioRevealer data[0].active = val1 else raise RuntimeError, 'invalid type in set_from_data' end end end
set_selected_element(element)
click to toggle source
# File lib/rgw/property-editor.rb, line 191 def set_selected_element element @selectedElement = element end
signal_do_property_changed(foo, bla;)
click to toggle source
# File lib/rgw/property-editor.rb, line 30 def signal_do_property_changed foo, bla; end