def setup_ui(self): """Sets up the UI.""" builder = Gtk.Builder() builder.add_from_file(os.path.join(get_ui_dir(), "greeter.ui")) self.toplevel_widget = builder.get_object("toplevel_vbox") self.__topvbox = builder.get_object("topvbox") self.__welcome_vbox = builder.get_object("welcome_vbox") self.__recent_projects_vbox = builder.get_object("recent_projects_vbox") self.__recent_projects_labelbox = builder.get_object("recent_projects_labelbox") self.__search_entry = builder.get_object("search_entry") self.__search_entry.connect("search-changed", self.__search_changed_cb) self.__recent_projects_listbox = builder.get_object("recent_projects_listbox") self.__recent_projects_listbox.set_selection_mode(Gtk.SelectionMode.NONE) self.__recent_projects_listbox.connect( "row_activated", self.__projects_row_activated_cb) self.__infobar = builder.get_object("infobar") fix_infobar(self.__infobar) self.__infobar.hide() self.__infobar.connect("response", self.__infobar_response_cb) self.__actionbar = builder.get_object("actionbar") self.__remove_projects_button = builder.get_object("remove_projects_button") self.__remove_projects_button.get_style_context().add_class("destructive-action") self.__remove_projects_button.connect("clicked", self.__remove_projects_clicked_cb) self.__setup_css() self.headerbar = self.__create_headerbar() self.__set_keyboard_shortcuts()
def _createUI(self): builder = Gtk.Builder() builder.add_from_file(os.path.join(get_ui_dir(), "titleeditor.ui")) builder.connect_signals(self) self.widget = builder.get_object("box1") # To be used by tabsmanager self.infobar = builder.get_object("infobar") fix_infobar(self.infobar) self.editing_box = builder.get_object("editing_box") self.textarea = builder.get_object("textview") toolbar = builder.get_object("toolbar") toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_INLINE_TOOLBAR) self.textbuffer = self.textarea.props.buffer self.textbuffer.connect("changed", self._textChangedCb) self.font_button = builder.get_object("fontbutton1") self.foreground_color_button = builder.get_object("fore_text_color") self.background_color_button = builder.get_object("back_color") settings = ["valignment", "halignment", "x-absolute", "y-absolute"] for setting in settings: self.settings[setting] = builder.get_object(setting) for n, en in list({_("Absolute"): "absolute", _("Top"): "top", _("Center"): "center", _("Bottom"): "bottom", _("Baseline"): "baseline"}.items()): self.settings["valignment"].append(en, n) for n, en in list({_("Absolute"): "absolute", _("Left"): "left", _("Center"): "center", _("Right"): "right"}.items()): self.settings["halignment"].append(en, n)
def _createUI(self): builder = Gtk.Builder() builder.add_from_file(os.path.join(get_ui_dir(), "titleeditor.ui")) builder.connect_signals(self) self.widget = builder.get_object("box1") # To be used by tabsmanager self.infobar = builder.get_object("infobar") fix_infobar(self.infobar) self.editing_box = builder.get_object("base_table") self.textarea = builder.get_object("textview") self.textbuffer = self.textarea.props.buffer self.textbuffer.connect("changed", self._textChangedCb) self.font_button = builder.get_object("fontbutton1") self.foreground_color_button = builder.get_object("fore_text_color") self.background_color_button = builder.get_object("back_color") self.color_picker_foreground_widget = ColorPickerButton() self.color_picker_foreground_widget.show() self.color_picker_foreground = builder.get_object( "color_picker_foreground") self.color_picker_foreground.add(self.color_picker_foreground_widget) self.color_picker_foreground_widget.connect( "value-changed", self._color_picker_value_changed_cb, self.foreground_color_button, "color") self.color_picker_background_widget = ColorPickerButton() self.color_picker_background_widget.show() self.background_color_picker = builder.get_object( "color_picker_background") self.background_color_picker.add(self.color_picker_background_widget) self.color_picker_background_widget.connect( "value-changed", self._color_picker_value_changed_cb, self.background_color_button, "foreground-color") settings = ["valignment", "halignment", "x-absolute", "y-absolute"] for setting in settings: self.settings[setting] = builder.get_object(setting) for n, en in list({ _("Absolute"): "absolute", _("Top"): "top", _("Center"): "center", _("Bottom"): "bottom", _("Baseline"): "baseline" }.items()): self.settings["valignment"].append(en, n) for n, en in list({ _("Absolute"): "absolute", _("Left"): "left", _("Center"): "center", _("Right"): "right" }.items()): self.settings["halignment"].append(en, n)
def createInfoBar(self, text): """Creates an infobar to be displayed at the top.""" label = Gtk.Label(label=text) label.set_line_wrap(True) infobar = Gtk.InfoBar() fix_infobar(infobar) infobar.props.message_type = Gtk.MessageType.OTHER infobar.get_content_area().add(label) self.infobar_box.pack_start(infobar, False, False, 0) return infobar
def setup_ui(self): """Sets up the UI.""" builder = Gtk.Builder() builder.add_from_file(os.path.join(get_ui_dir(), "greeter.ui")) logo = builder.get_object("logo") icon_theme = Gtk.IconTheme.get_default() pixbuf = icon_theme.load_icon("org.pitivi.Pitivi", 256, Gtk.IconLookupFlags.FORCE_SIZE) logo.set_from_pixbuf(pixbuf) self.toplevel_widget = builder.get_object("toplevel_vbox") self.toplevel_widget.drag_dest_set(Gtk.DestDefaults.ALL, [URI_TARGET_ENTRY], Gdk.DragAction.COPY) self.toplevel_widget.connect("drag-data-received", self.__drag_data_received_cb) self.__topvbox = builder.get_object("topvbox") self.__welcome_vbox = builder.get_object("welcome_vbox") self.__recent_projects_vbox = builder.get_object( "recent_projects_vbox") self.__recent_projects_labelbox = builder.get_object( "recent_projects_labelbox") self.__search_entry = builder.get_object("search_entry") self.__search_entry.connect("search-changed", self.__search_changed_cb) self.__recent_projects_listbox = builder.get_object( "recent_projects_listbox") self.__recent_projects_listbox.set_selection_mode( Gtk.SelectionMode.NONE) self.__recent_projects_listbox.connect( "row_activated", self.__projects_row_activated_cb) self.__recent_projects_listbox.connect("button-press-event", self.__projects_button_press_cb) self.__infobar = builder.get_object("infobar") fix_infobar(self.__infobar) self.__infobar.hide() self.__infobar.connect("response", self.__infobar_response_cb) self.__actionbar = builder.get_object("actionbar") self.__remove_projects_button = builder.get_object( "remove_projects_button") self.__remove_projects_button.get_style_context().add_class( "destructive-action") self.__remove_projects_button.connect( "clicked", self.__remove_projects_clicked_cb) self.__setup_css() self.headerbar = self.__create_headerbar() self._create_actions()
def __add_proxies_section(self): """Adds a section for proxy settings.""" prefs = self._prepare_prefs_widgets(self.prefs["_proxies"]) self.proxy_width_widget = widgets.NumericWidget(lower=1, width_chars=4) self.proxy_width_widget.set_widget_value( self.app.settings.default_scaled_proxy_width) self.widgets["default_scaled_proxy_width"] = self.proxy_width_widget self.proxy_height_widget = widgets.NumericWidget(lower=1, width_chars=4) self.proxy_height_widget.set_widget_value( self.app.settings.default_scaled_proxy_height) self.widgets["default_scaled_proxy_height"] = self.proxy_height_widget size_box = Gtk.Box(spacing=SPACING) size_box.pack_start(self.proxy_width_widget, False, False, 0) size_box.pack_start(Gtk.Label("×"), False, False, 0) size_box.pack_start(self.proxy_height_widget, False, False, 0) size_box.set_tooltip_text( _("This resolution will be used as the" " default target resolution for new projects and projects missing" " scaled proxy meta-data.")) self.scaled_proxy_size_revert_button = self._create_revert_button() self.proxy_infobar = Gtk.InfoBar.new() fix_infobar(self.proxy_infobar) self.proxy_infobar.set_message_type(Gtk.MessageType.WARNING) self.proxy_infobar.add_button(_("Project Settings"), Gtk.ResponseType.OK) self.scaled_proxies_infobar_label = Gtk.Label.new() self.proxy_infobar.get_content_area().add( self.scaled_proxies_infobar_label) self.proxy_infobar.show_all() prefs.append((_("Initial proxy size for new projects"), size_box, self.scaled_proxy_size_revert_button, None)) container = self._create_props_container(prefs) container.pack_start(self.proxy_infobar, False, False, 0) self._add_page("_proxies", container) self.__update_scaled_proxies_infobar() self.__update_proxy_size_revert_button() self.proxy_width_widget.connect_value_changed( self.__scaled_proxy_size_change_cb) self.proxy_height_widget.connect_value_changed( self.__scaled_proxy_size_change_cb) self.scaled_proxy_size_revert_button.connect( "clicked", self.__reset_option_cb, "default_scaled_proxy_width", "default_scaled_proxy_height") self.proxy_infobar.connect("response", self.__proxy_infobar_cb)
def __init__(self, app, preferences_dialog): Gtk.ScrolledWindow.__init__(self) list_store = PluginManagerStore.new(app, preferences_dialog) if list_store.get_n_items(): plugins_box = PluginsBox(list_store) else: # We could use Gtk.ListBox.set_placeholder, but it # appears bad inside the list widget. placeholder_label = Gtk.Label.new(_("No plugins available")) placeholder_label.props.margin = 4 * PADDING placeholder_label.props.margin_top = 10 * PADDING placeholder_label.show() plugins_box = placeholder_label self._infobar_revealer = Gtk.Revealer() self._infobar = Gtk.InfoBar() fix_infobar(self._infobar) self._infobar_label = Gtk.Label() self._setup_infobar() note_label = Gtk.Label.new() note_label.set_markup( _("You can create <a href='{doc_url}'>plugins</a> into your <a href='{dir_url}'>plugins directory</a>." ).format(doc_url="http://developer.pitivi.org/Plugins.html", dir_url=GLib.filename_to_uri(get_user_plugins_dir(), None))) note_label.props.margin_top = PADDING * 4 note_label.props.margin_bottom = PADDING * 2 wrapper_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.add(wrapper_box) self.set_min_content_height(500) self.set_min_content_width(600) wrapper_box.pack_start(self._infobar_revealer, expand=False, fill=False, padding=0) wrapper_box.pack_start(plugins_box, expand=False, fill=False, padding=0) wrapper_box.pack_start(note_label, expand=False, fill=False, padding=0) # Helpers self._infobar_timer = None
def _createUI(self): builder = Gtk.Builder() builder.add_from_file(os.path.join(get_ui_dir(), "titleeditor.ui")) builder.connect_signals(self) self.widget = builder.get_object("box1") # To be used by tabsmanager self.infobar = builder.get_object("infobar") fix_infobar(self.infobar) self.editing_box = builder.get_object("base_table") self.textarea = builder.get_object("textview") self.textbuffer = self.textarea.props.buffer self.textbuffer.connect("changed", self._textChangedCb) self.font_button = builder.get_object("fontbutton1") self.foreground_color_button = builder.get_object("fore_text_color") self.background_color_button = builder.get_object("back_color") self.color_picker_foreground_widget = ColorPickerButton() self.color_picker_foreground_widget.show() self.color_picker_foreground = builder.get_object("color_picker_foreground") self.color_picker_foreground.add(self.color_picker_foreground_widget) self.color_picker_foreground_widget.connect("value-changed", self._color_picker_value_changed_cb, self.foreground_color_button, "color") self.color_picker_background_widget = ColorPickerButton() self.color_picker_background_widget.show() self.background_color_picker = builder.get_object("color_picker_background") self.background_color_picker.add(self.color_picker_background_widget) self.color_picker_background_widget.connect("value-changed", self._color_picker_value_changed_cb, self.background_color_button, "foreground-color") settings = ["valignment", "halignment", "x-absolute", "y-absolute"] for setting in settings: self.settings[setting] = builder.get_object(setting) for n, en in list({_("Absolute"): "absolute", _("Top"): "top", _("Center"): "center", _("Bottom"): "bottom", _("Baseline"): "baseline"}.items()): self.settings["valignment"].append(en, n) for n, en in list({_("Absolute"): "absolute", _("Left"): "left", _("Center"): "center", _("Right"): "right"}.items()): self.settings["halignment"].append(en, n)
def setup_ui(self): """Sets up the UI.""" builder = Gtk.Builder() builder.add_from_file(os.path.join(get_ui_dir(), "greeter.ui")) self.toplevel_widget = builder.get_object("scrolled_window") self.__recent_projects_listbox = builder.get_object("recent_projects_listbox") self.__recent_projects_listbox.set_selection_mode(Gtk.SelectionMode.NONE) self.__recent_projects_listbox.connect( "row_activated", self.__projects_row_activated_cb) self.__infobar = builder.get_object("infobar") fix_infobar(self.__infobar) self.__infobar.hide() self.__infobar.connect("response", self.__infobar_response_cb) self.__setup_css() self.headerbar = self.__create_headerbar() self.__set_keyboard_shortcuts()
def __init__(self, app): self.app = app self.builder = Gtk.Builder() self.builder.add_from_file( os.path.join(get_ui_dir(), "startupwizard.ui")) self.builder.connect_signals(self) self.window = self.builder.get_object("window1") # The line below is supremely important, it will NOT work if set # only by the GtkBuilder file. The DIALOG TypeHint allows proper # attachment (visually, behaviorally) to MainWindow, and # prevents other windows from showing on top too easily. self.window.set_type_hint(Gdk.WindowTypeHint.DIALOG) self.recent_chooser = self.builder.get_object("recentchooser2") # FIXME: gtk creates a combo box with only one item, but there is no # simple way to hide it. _filter = Gtk.RecentFilter() _filter.set_name(_("Projects")) for asset in GES.list_assets(GES.Formatter): _filter.add_pattern('*.' + asset.get_meta(GES.META_FORMATTER_EXTENSION)) self.recent_chooser.add_filter(_filter) missing_button = self.builder.get_object("missing_deps_button") if not missing_soft_deps: missing_button.hide() vbox = self.builder.get_object("topvbox") self.infobar = Gtk.InfoBar() fix_infobar(self.infobar) vbox.pack_start(self.infobar, True, True, 0) if self.app.getLatest(): self._appVersionInfoReceivedCb(self.app, None) else: self.app.connect("version-info-received", self._appVersionInfoReceivedCb)
def __init__(self, app): self.app = app self.builder = Gtk.Builder() self.builder.add_from_file( os.path.join(get_ui_dir(), "startupwizard.ui")) self.builder.connect_signals(self) self.window = self.builder.get_object("window1") # The line below is supremely important, it will NOT work if set # only by the GtkBuilder file. The DIALOG TypeHint allows proper # attachment (visually, behaviorally) to MainWindow, and # prevents other windows from showing on top too easily. self.window.set_type_hint(Gdk.WindowTypeHint.DIALOG) self.recent_chooser = self.builder.get_object("recentchooser2") # FIXME: gtk creates a combo box with only one item, but there is no # simple way to hide it. _filter = Gtk.RecentFilter() _filter.set_name(_("Projects")) for asset in GES.list_assets(GES.Formatter): _filter.add_pattern( '*.' + asset.get_meta(GES.META_FORMATTER_EXTENSION)) self.recent_chooser.add_filter(_filter) missing_button = self.builder.get_object("missing_deps_button") if not missing_soft_deps: missing_button.hide() vbox = self.builder.get_object("topvbox") self.infobar = Gtk.InfoBar() fix_infobar(self.infobar) vbox.pack_start(self.infobar, True, True, 0) if self.app.getLatest(): self._appVersionInfoReceivedCb(self.app, None) else: self.app.connect( "version-info-received", self._appVersionInfoReceivedCb)
def setup_ui(self): """Sets up the UI.""" builder = Gtk.Builder() builder.add_from_file(os.path.join(get_ui_dir(), "greeter.ui")) self.toplevel_widget = builder.get_object("toplevel_vbox") self.toplevel_widget.drag_dest_set( Gtk.DestDefaults.ALL, [URI_TARGET_ENTRY], Gdk.DragAction.COPY) self.toplevel_widget.connect("drag-data-received", self.__drag_data_received_cb) self.__topvbox = builder.get_object("topvbox") self.__welcome_vbox = builder.get_object("welcome_vbox") self.__recent_projects_vbox = builder.get_object("recent_projects_vbox") self.__recent_projects_labelbox = builder.get_object("recent_projects_labelbox") self.__search_entry = builder.get_object("search_entry") self.__search_entry.connect("search-changed", self.__search_changed_cb) self.__recent_projects_listbox = builder.get_object("recent_projects_listbox") self.__recent_projects_listbox.set_selection_mode(Gtk.SelectionMode.NONE) self.__recent_projects_listbox.connect( "row_activated", self.__projects_row_activated_cb) self.__recent_projects_listbox.connect( "button-press-event", self.__projects_button_press_cb) self.__infobar = builder.get_object("infobar") fix_infobar(self.__infobar) self.__infobar.hide() self.__infobar.connect("response", self.__infobar_response_cb) self.__actionbar = builder.get_object("actionbar") self.__remove_projects_button = builder.get_object("remove_projects_button") self.__remove_projects_button.get_style_context().add_class("destructive-action") self.__remove_projects_button.connect("clicked", self.__remove_projects_clicked_cb) self.__setup_css() self.headerbar = self.__create_headerbar() self.__set_keyboard_shortcuts()
def __init__(self, app, preferences_dialog): Gtk.ScrolledWindow.__init__(self) list_store = PluginManagerStore.new(app, preferences_dialog) viewport = Gtk.Viewport() self._wrapper_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) plugins_box = PluginsBox(list_store) viewport.add(self._wrapper_box) self._infobar_revealer = Gtk.Revealer() self._infobar = Gtk.InfoBar() fix_infobar(self._infobar) self._infobar_label = Gtk.Label() self._setup_infobar() self.add_with_viewport(viewport) self.set_min_content_height(500) self.set_min_content_width(600) self._wrapper_box.pack_start(self._infobar_revealer, False, False, 0) self._wrapper_box.pack_start(plugins_box, False, False, 0) # Helpers self._infobar_timer = None
def __init__(self, app, clip_properties): Gtk.Expander.__init__(self) self.set_expanded(True) self.set_label(_("Effects")) Loggable.__init__(self) # Global variables related to effects self.app = app self._project = None self._selection = None self.clip = None self._effect_config_ui = None self.effects_properties_manager = EffectsPropertiesManager(app) setup_custom_effect_widgets(self.effects_properties_manager) self.clip_properties = clip_properties no_effect_label = Gtk.Label( _("To apply an effect to the clip, drag it from the Effect Library.")) no_effect_label.set_line_wrap(True) self.no_effect_infobar = Gtk.InfoBar() fix_infobar(self.no_effect_infobar) self.no_effect_infobar.props.message_type = Gtk.MessageType.OTHER self.no_effect_infobar.get_content_area().add(no_effect_label) # The toolbar that will go between the list of effects and properties buttons_box = Gtk.ButtonBox() buttons_box.set_halign(Gtk.Align.END) buttons_box.set_margin_end(SPACING) buttons_box.props.margin_top = SPACING / 2 remove_effect_button = Gtk.Button() remove_icon = Gtk.Image.new_from_icon_name("list-remove-symbolic", Gtk.IconSize.BUTTON) remove_effect_button.set_image(remove_icon) remove_effect_button.set_always_show_image(True) remove_effect_button.set_label(_("Remove effect")) buttons_box.pack_start(remove_effect_button, expand=False, fill=False, padding=0) # We need to specify Gtk.TreeDragSource because otherwise we are hitting # bug https://bugzilla.gnome.org/show_bug.cgi?id=730740. class EffectsListStore(Gtk.ListStore, Gtk.TreeDragSource): """Just a work around!""" # pylint: disable=non-parent-init-called def __init__(self, *args): Gtk.ListStore.__init__(self, *args) # Set the source index on the storemodel directly, # to avoid issues with the selection_data API. # FIXME: Work around # https://bugzilla.gnome.org/show_bug.cgi?id=737587 self.source_index = None def do_drag_data_get(self, path, unused_selection_data): self.source_index = path.get_indices()[0] self.storemodel = EffectsListStore(bool, str, str, str, str, object) self.treeview = Gtk.TreeView(model=self.storemodel) self.treeview.set_property("has_tooltip", True) self.treeview.set_headers_visible(False) self.treeview.props.margin_top = SPACING self.treeview.props.margin_left = SPACING # Without this, the treeview hides the border of its parent. # I should file a bug about this. self.treeview.props.margin_right = 1 activated_cell = Gtk.CellRendererToggle() activated_cell.props.xalign = 0 activated_cell.props.xpad = 0 activated_cell.connect("toggled", self._effectActiveToggleCb) self.treeview.insert_column_with_attributes(-1, _("Active"), activated_cell, active=COL_ACTIVATED) type_col = Gtk.TreeViewColumn(_("Type")) type_col.set_spacing(SPACING) type_col.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) type_cell = Gtk.CellRendererText() type_cell.props.xpad = PADDING type_col.pack_start(type_cell, expand=True) type_col.add_attribute(type_cell, "text", COL_TYPE) self.treeview.append_column(type_col) name_col = Gtk.TreeViewColumn(_("Effect name")) name_col.set_spacing(SPACING) name_cell = Gtk.CellRendererText() name_cell.props.xpad = PADDING name_cell.set_property("ellipsize", Pango.EllipsizeMode.END) name_col.pack_start(name_cell, expand=True) name_col.add_attribute(name_cell, "text", COL_NAME_TEXT) self.treeview.append_column(name_col) # Allow the entire expander to accept EFFECT_TARGET_ENTRY when # drag&dropping. self.drag_dest_set(Gtk.DestDefaults.DROP, [EFFECT_TARGET_ENTRY], Gdk.DragAction.COPY) # Allow also the treeview to accept EFFECT_TARGET_ENTRY when # drag&dropping so the effect can be dragged at a specific position. self.treeview.enable_model_drag_dest([EFFECT_TARGET_ENTRY], Gdk.DragAction.COPY) # Enable reordering by drag&drop. self.treeview.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK, [EFFECT_TARGET_ENTRY], Gdk.DragAction.MOVE) self.treeview_selection = self.treeview.get_selection() self.treeview_selection.set_mode(Gtk.SelectionMode.SINGLE) self._infobar = clip_properties.createInfoBar( _("Select a clip on the timeline to configure its associated effects")) self._infobar.show_all() # Prepare the main container widgets and lay out everything self._expander_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self._vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self._vbox.pack_start(self.treeview, expand=False, fill=False, padding=0) self._vbox.pack_start(buttons_box, expand=False, fill=False, padding=0) separator = Gtk.Separator(orientation=Gtk.Orientation.HORIZONTAL) separator.set_margin_top(SPACING) separator.set_margin_left(SPACING) separator.set_margin_right(SPACING) self._vbox.pack_start(separator, expand=False, fill=False, padding=0) self._vbox.show_all() self._expander_box.pack_start(self.no_effect_infobar, expand=False, fill=False, padding=0) self._expander_box.pack_start(self._vbox, expand=False, fill=False, padding=0) self._expander_box.show_all() self.add(self._expander_box) self.hide() effects_actions_group = Gio.SimpleActionGroup() self.treeview.insert_action_group("clipproperties-effects", effects_actions_group) buttons_box.insert_action_group("clipproperties-effects", effects_actions_group) self.app.shortcuts.register_group("clipproperties-effects", _("Clip Effects"), position=60) self.remove_effect_action = Gio.SimpleAction.new("remove-effect", None) self.remove_effect_action.connect("activate", self._removeEffectCb) effects_actions_group.add_action(self.remove_effect_action) self.app.shortcuts.add("clipproperties-effects.remove-effect", ["Delete"], _("Remove the selected effect")) self.remove_effect_action.set_enabled(False) remove_effect_button.set_action_name("clipproperties-effects.remove-effect") # Connect all the widget signals self.treeview_selection.connect("changed", self._treeviewSelectionChangedCb) self.connect("drag-motion", self._drag_motion_cb) self.connect("drag-leave", self._drag_leave_cb) self.connect("drag-data-received", self._drag_data_received_cb) self.treeview.connect("drag-motion", self._drag_motion_cb) self.treeview.connect("drag-leave", self._drag_leave_cb) self.treeview.connect("drag-data-received", self._drag_data_received_cb) self.treeview.connect("query-tooltip", self._treeViewQueryTooltipCb) self.app.project_manager.connect_after( "new-project-loaded", self._newProjectLoadedCb) self.connect('notify::expanded', self._expandedCb)
def __init__(self, app): Gtk.Box.__init__(self) Loggable.__init__(self) self.app = app self.element = None self._pixdir = os.path.join(get_pixmap_dir(), "transitions") icon_theme = Gtk.IconTheme.get_default() self._question_icon = icon_theme.load_icon("dialog-question", 48, 0) self.set_orientation(Gtk.Orientation.VERTICAL) # Whether a child widget has the focus. self.container_focused = False # Tooltip handling self._current_transition_name = None self._current_tooltip_icon = None # Searchbox self.searchbar = Gtk.Box() self.searchbar.set_orientation(Gtk.Orientation.HORIZONTAL) # Prevents being flush against the notebook self.searchbar.set_border_width(3) self.searchEntry = Gtk.Entry() self.searchEntry.set_icon_from_icon_name( Gtk.EntryIconPosition.SECONDARY, "edit-clear-symbolic") self.searchEntry.set_placeholder_text(_("Search...")) self.searchbar.pack_end(self.searchEntry, True, True, 0) self.props_widgets = Gtk.Grid() self.props_widgets.props.margin = PADDING self.props_widgets.props.column_spacing = SPACING self.border_mode_normal = Gtk.RadioButton( group=None, label=_("Normal")) self.border_mode_normal.set_active(True) self.props_widgets.attach(self.border_mode_normal, 0, 0, 1, 1) self.border_mode_loop = Gtk.RadioButton( group=self.border_mode_normal, label=_("Loop")) self.props_widgets.attach(self.border_mode_loop, 0, 1, 1, 1) self.border_scale = Gtk.Scale.new(Gtk.Orientation.HORIZONTAL, None) self.border_scale.set_draw_value(False) self.props_widgets.attach(self.border_scale, 1, 0, 1, 2) self.invert_checkbox = Gtk.CheckButton(label=_("Reverse direction")) self.invert_checkbox.props.margin_top = SPACING self.props_widgets.attach(self.invert_checkbox, 1, 2, 1, 1) # Set the default values self.__updateBorderScale() self.infobar = Gtk.InfoBar() fix_infobar(self.infobar) self.infobar.props.message_type = Gtk.MessageType.OTHER txtlabel = Gtk.Label() txtlabel.set_line_wrap(True) txtlabel.set_text( _("Create a transition by overlapping two adjacent clips on the " "same layer. Click the transition on the timeline to change " "the transition type.")) self.infobar.get_content_area().add(txtlabel) self.storemodel = Gtk.ListStore(GES.Asset, str, str, GdkPixbuf.Pixbuf) self.iconview_scrollwin = Gtk.ScrolledWindow() self.iconview_scrollwin.set_shadow_type(Gtk.ShadowType.ETCHED_IN) # FIXME: the "never" horizontal scroll policy in GTK2 messes up iconview # Re-enable this when we switch to GTK3 # See also http://python.6.n6.nabble.com/Cannot-shrink-width-of-scrolled-textview-tp1945060.html # self.iconview_scrollwin.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) self.iconview = Gtk.IconView(model=self.storemodel) self.iconview.set_pixbuf_column(COL_ICON) # We don't show text because we have a searchbar and the names are ugly # self.iconview.set_text_column(COL_NAME_TEXT) self.iconview.set_item_width(48 + 10) self.iconview_scrollwin.add(self.iconview) self.iconview.set_property("has_tooltip", True) self.searchEntry.connect("changed", self._searchEntryChangedCb) self.searchEntry.connect("icon-press", self._searchEntryIconClickedCb) self.iconview.connect("query-tooltip", self._queryTooltipCb) # Speed-up startup by only checking available transitions on idle GLib.idle_add(self._loadAvailableTransitionsCb) self.pack_start(self.infobar, False, False, 0) self.pack_start(self.searchbar, False, False, 0) self.pack_start(self.iconview_scrollwin, True, True, 0) self.pack_start(self.props_widgets, False, False, 0) # Create the filterModel for searching self.modelFilter = self.storemodel.filter_new() self.iconview.set_model(self.modelFilter) self.infobar.show_all() self.iconview_scrollwin.show_all() self.iconview.hide() self.props_widgets.set_sensitive(False) self.props_widgets.hide() self.searchbar.hide()