from gi.repository import Gtk class Method: def run(self, files, output, full_width, full_height): raise NotImplementedError() def stack(self, files): raise NotImplementedError() def __init__(self): self.id = "" self.name = "" self.properties = [] # Let the tool set values self.on_init() self.props = {} for property in self.properties: self.props[property.id] = property # Create widget for tool self.widget = Gtk.Grid() self.widget.set_column_spacing(8) self.widget.set_row_spacing(6) self.widget.set_halign(Gtk.Align.FILL) self.widget.set_hexpand(True) vpos = 0 for property in self.properties: # Create Header if(property.type == "Header"): header = Gtk.HBox() header.set_margin_top(6) if(vpos != 0): # Add a Separator separator = Gtk.Separator() separator.set_margin_top(6) separator.show() self.widget.attach(separator, 0, vpos, 3, 1) vpos += 1 title = Gtk.Label() title.set_halign(Gtk.Align.START) if(property.is_subheading): title.set_markup("%s" % property.name) else: title.set_markup("%s" % property.name) header.add(title) self.widget.attach(header, 0, vpos, 3, 1) # Create Combo elif(property.type == "Combo"): label = Gtk.Label() label.set_halign(Gtk.Align.END) label.set_justify(Gtk.Justification.RIGHT) label.set_text(property.name) self.widget.attach(label, 0, vpos, 1, 1) combo = Gtk.ComboBoxText() combo.set_hexpand(True) self.widget.attach(combo, 1, vpos, 1, 1) for option in property.options: combo.append_text(option) property.set_widget(combo) # Create Spin elif (property.type == "Spin"): label = Gtk.Label() label.set_halign(Gtk.Align.END) label.set_justify(Gtk.Justification.RIGHT) label.set_text(property.name) self.widget.attach(label, 0, vpos, 1, 1) adjustment = Gtk.Adjustment() adjustment.set_lower(property.min) adjustment.set_upper(property.max) adjustment.set_step_increment((property.max - property.min) / 100) property.set_widget(adjustment) spin = Gtk.SpinButton() spin.set_adjustment(adjustment) spin.set_hexpand(True) spin.set_digits(3) property.ui_widget = spin self.widget.attach(spin, 1, vpos, 1, 1) # Create Toggle elif(property.type == "Toggle"): label = Gtk.Label() label.set_halign(Gtk.Align.END) label.set_justify(Gtk.Justification.RIGHT) label.set_text(property.name) self.widget.attach(label, 0, vpos, 1, 1) toggle = Gtk.ToggleButton() toggle.set_label("Enable") toggle.set_hexpand(True) self.widget.attach(toggle, 1, vpos, 1, 1) property.set_widget(toggle) # Create Slider elif (property.type == "Slider"): label = Gtk.Label() label.set_halign(Gtk.Align.END) label.set_justify(Gtk.Justification.RIGHT) label.set_text(property.name) self.widget.attach(label, 0, vpos, 1, 1) adjustment = Gtk.Adjustment() adjustment.set_lower(property.min) adjustment.set_upper(property.max) adjustment.set_step_increment((property.max - property.min)/100) property.set_widget(adjustment) slider = Gtk.Scale() slider.set_adjustment(adjustment) slider.set_digits(2) slider.set_hexpand(True) slider.set_value_pos(Gtk.PositionType.RIGHT) property.ui_widget = slider self.widget.attach(slider, 1, vpos, 1, 1) if(property.type != "Header"): # Create reset button icon = Gtk.Image() icon.set_from_icon_name("edit-clear-symbolic", Gtk.IconSize.BUTTON) reset_button = Gtk.Button() reset_button.set_image(icon) reset_button.connect("clicked", property.reset_value) property.reset_button = reset_button self.widget.attach(reset_button, 2, vpos, 1, 1) vpos += 1 separator = Gtk.Separator() separator.set_margin_top(6) separator.show() self.widget.attach(separator, 0, vpos, 3, 1) self.widget.show_all() def on_init(self): raise NotImplementedError()