def __setup_spin_button(self, widget_name, property_name): """Creates a SpinButton for editing a property value.""" spinbtn = self.builder.get_object(widget_name) handler_id = spinbtn.connect("value-changed", self._onValueChangedCb, property_name) disable_scroll(spinbtn) self.spin_buttons[property_name] = spinbtn self.spin_buttons_handler_ids[property_name] = handler_id
def __init__(self, matches=None, choices=None, default=None): if not default: # In the case of text widgets, a blank default is an empty string default = "" Gtk.Box.__init__(self) DynamicWidget.__init__(self, default) self.set_orientation(Gtk.Orientation.HORIZONTAL) self.set_border_width(0) self.set_spacing(0) if choices: self.combo = Gtk.ComboBoxText.new_with_entry() self.text = self.combo.get_child() self.combo.show() disable_scroll(self.combo) self.pack_start(self.combo, expand=False, fill=False, padding=0) for choice in choices: self.combo.append_text(choice) else: self.text = Gtk.Entry() self.text.show() self.pack_start(self.text, expand=False, fill=False, padding=0) self.matches = None self.last_valid = None self.valid = False self.send_signal = True self.text.connect("changed", self._textChanged) self.text.connect("activate", self._activateCb) if matches: if type(matches) is str: self.matches = re.compile(matches) else: self.matches = matches self._textChanged(None)
def __init__(self, matches=None, choices=None, default=None): if not default: # In the case of text widgets, a blank default is an empty string default = "" Gtk.Box.__init__(self) DynamicWidget.__init__(self, default) self.set_orientation(Gtk.Orientation.HORIZONTAL) self.set_border_width(0) self.set_spacing(0) if choices: self.combo = Gtk.ComboBoxText.new_with_entry() self.text = self.combo.get_child() self.combo.show() disable_scroll(self.combo) self.pack_start(self.combo, expand=False, fill=False, padding=0) for choice in choices: self.combo.append_text(choice) else: self.text = Gtk.Entry() self.text.show() self.pack_start(self.text, expand=False, fill=False, padding=0) self.matches = None self.last_valid = None self.valid = False self.send_signal = True self.text.connect("changed", self.__text_changed_cb) self.text.connect("activate", self.__activate_cb) if matches: if type(matches) is str: self.matches = re.compile(matches) else: self.matches = matches self.__text_changed_cb(None)
def __setupSpinButton(self, widget_name, property_name): """ Create a spinbutton widget and connect its signals to change property values. While focused, disable the timeline actions' sensitivity. """ spinbtn = self.builder.get_object(widget_name) spinbtn.connect("output", self._onValueChangedCb, property_name) disable_scroll(spinbtn) self.spin_buttons[property_name] = spinbtn
def do_create_widget(self, effect_widget, effect): """Creates a widget if the `create_widget` handlers did not.""" effect_name = effect.get_property("bin-description") self.log('UI is being auto-generated for "%s"', effect_name) effect_widget.add_widgets( create_property_widget_func=self.create_property_widget, with_reset_button=True) disable_scroll(effect_widget) self._post_configuration(effect, effect_widget)
def __init__(self, app): Gtk.ScrolledWindow.__init__(self) Loggable.__init__(self) self.app = app self.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) viewport = Gtk.Viewport() viewport.set_shadow_type(Gtk.ShadowType.ETCHED_IN) viewport.show() self.add(viewport) vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) vbox.show() viewport.add(vbox) self.clips_box = Gtk.Box() self.clips_box.set_orientation(Gtk.Orientation.VERTICAL) self.clips_box.show() vbox.pack_start(self.clips_box, False, False, 0) self.transformation_expander = TransformationProperties(app) self.transformation_expander.set_vexpand(False) vbox.pack_start(self.transformation_expander, False, False, 0) self.speed_expander = TimeProperties(app) self.speed_expander.set_vexpand(False) vbox.pack_start(self.speed_expander, False, False, 0) self.title_expander = TitleProperties(app) self.title_expander.set_vexpand(False) vbox.pack_start(self.title_expander, False, False, 0) self.color_expander = ColorProperties(app) self.color_expander.set_vexpand(False) vbox.pack_start(self.color_expander, False, False, 0) self.effect_expander = EffectProperties(app) self.effect_expander.set_vexpand(False) vbox.pack_start(self.effect_expander, False, False, 0) self.helper_box = self.create_helper_box() self.clips_box.pack_start(self.helper_box, False, False, 0) disable_scroll(vbox) self.transformation_expander.set_source(None) self.speed_expander.set_clip(None) self.title_expander.set_source(None) self.color_expander.set_source(None) self.effect_expander.set_clip(None) self._project = None self._selection = None
def __init__(self, choices, default=None): Gtk.Box.__init__(self) DynamicWidget.__init__(self, default) self.choices = None self.values = None self.set_orientation(Gtk.Orientation.HORIZONTAL) self.contents = Gtk.ComboBoxText() self.pack_start(self.contents, expand=False, fill=False, padding=0) self.setChoices(choices) self.contents.show() disable_scroll(self.contents) cell = self.contents.get_cells()[0] cell.props.ellipsize = Pango.EllipsizeMode.END
def __init__(self, upper=None, lower=None, default=None): Gtk.Box.__init__(self) DynamicWidget.__init__(self, default) self.set_orientation(Gtk.Orientation.HORIZONTAL) self.set_spacing(SPACING) self._type = None reasonable_limit = 5000 with_slider = (lower is not None and lower > -reasonable_limit and upper is not None and upper < reasonable_limit) self.adjustment = Gtk.Adjustment() # Limit the limits, otherwise the widget appears huge. # Workaround https://bugzilla.gnome.org/show_bug.cgi?id=727294 # If these hardcoded limits are a problem, the fix should be passing # the proper limits using the upper and lower parameters. if upper is None: upper = GLib.MAXINT16 if lower is None: lower = GLib.MININT16 self.adjustment.props.lower = max(GLib.MININT16, lower) self.adjustment.props.upper = min(upper, GLib.MAXINT16) if with_slider: self.slider = Gtk.Scale.new( Gtk.Orientation.HORIZONTAL, self.adjustment) self.pack_end(self.slider, expand=False, fill=False, padding=0) self.slider.show() disable_scroll(self.slider) self.slider.set_size_request(width=100, height=-1) self.slider.props.draw_value = False # Abuse GTK3's progressbar "fill level" feature to provide # a visual indication of the default value on property sliders. if default is not None: self.slider.set_restrict_to_fill_level(False) self.slider.set_fill_level(float(default)) self.slider.set_show_fill_level(True) self.spinner = Gtk.SpinButton(adjustment=self.adjustment) self.pack_start(self.spinner, expand=False, fill=False, padding=0) self.spinner.show() disable_scroll(self.spinner)
def __init__(self, upper=None, lower=None, default=None): Gtk.Box.__init__(self) DynamicWidget.__init__(self, default) self.set_orientation(Gtk.Orientation.HORIZONTAL) self.set_spacing(SPACING) self._type = None reasonable_limit = 5000 with_slider = (lower is not None and lower > -reasonable_limit and upper is not None and upper < reasonable_limit) self.adjustment = Gtk.Adjustment() # Limit the limits, otherwise the widget appears huge. # Workaround https://bugzilla.gnome.org/show_bug.cgi?id=727294 # If these hardcoded limits are a problem, the fix should be passing # the proper limits using the upper and lower parameters. if upper is None: upper = GLib.MAXINT16 if lower is None: lower = GLib.MININT16 self.adjustment.props.lower = max(GLib.MININT16, lower) self.adjustment.props.upper = min(upper, GLib.MAXINT16) if with_slider: self.slider = Gtk.Scale.new(Gtk.Orientation.HORIZONTAL, self.adjustment) self.pack_end(self.slider, expand=False, fill=False, padding=0) self.slider.show() disable_scroll(self.slider) self.slider.set_size_request(width=100, height=-1) self.slider.props.draw_value = False # Abuse GTK3's progressbar "fill level" feature to provide # a visual indication of the default value on property sliders. if default is not None: self.slider.set_restrict_to_fill_level(False) self.slider.set_fill_level(float(default)) self.slider.set_show_fill_level(True) self.spinner = Gtk.SpinButton(adjustment=self.adjustment) self.pack_start(self.spinner, expand=False, fill=False, padding=0) self.spinner.show() disable_scroll(self.spinner)
def __setupSpinButton(self, widget_name, property_name): """Creates a SpinButton for editing a property value.""" spinbtn = self.builder.get_object(widget_name) spinbtn.connect("output", self._onValueChangedCb, property_name) disable_scroll(spinbtn) self.spin_buttons[property_name] = spinbtn