def __init__(self, parent=None): if self.is_not_unique(): return super(PluginWindow, self).__init__() self.set_title(_("Plugins")) self.set_border_width(12) self.set_default_size(655, 404) self.set_transient_for(parent) paned = Paned() vbox = Gtk.VBox(spacing=6) sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.ALWAYS) model = ObjectStore() filter_model = ObjectModelFilter(child_model=model) tv = PluginListView() tv.set_model(filter_model) tv.set_rules_hint(True) tv.connect("plugin-toggled", self.__plugin_toggled) fb = Gtk.HBox(spacing=6) filter_combo = PluginFilterCombo() filter_combo.connect("changed", lambda s: filter_model.refilter()) fb.pack_start(filter_combo, False, True, 0) filter_entry = ClearEntry() filter_entry.connect("changed", lambda s: filter_model.refilter()) filter_entry.enable_clear_button() fb.pack_start(filter_entry, True, True, 0) sw.add(tv) sw.set_shadow_type(Gtk.ShadowType.IN) sw.set_size_request(200, -1) bbox = Gtk.HBox(homogeneous=True, spacing=12) errors = qltk.Button(_("Show _Errors"), Icons.DIALOG_WARNING) errors.set_focus_on_click(False) errors.connect('clicked', self.__show_errors) errors.set_no_show_all(True) bbox.pack_start(errors, True, True, 0) pref_box = PluginPreferencesContainer() if const.DEBUG: refresh = qltk.Button(_("_Refresh"), Icons.VIEW_REFRESH) refresh.set_focus_on_click(False) refresh.connect('clicked', self.__refresh, tv, pref_box, errors, filter_combo) bbox.pack_start(refresh, True, True, 0) vbox.pack_start(fb, False, True, 0) vbox.pack_start(sw, True, True, 0) vbox.pack_start(bbox, False, True, 0) paned.pack1(vbox, True, False) close = qltk.Button(_("_Close"), Icons.WINDOW_CLOSE) close.connect('clicked', lambda *x: self.destroy()) bb_align = Align(halign=Gtk.Align.END, valign=Gtk.Align.END) bb = Gtk.HButtonBox() bb.set_layout(Gtk.ButtonBoxStyle.END) bb.pack_start(close, True, True, 0) bb_align.add(bb) selection = tv.get_selection() selection.connect('changed', self.__selection_changed, pref_box) selection.emit('changed') right_box = Gtk.VBox(spacing=12) right_box.pack_start(pref_box, True, True, 0) self.use_header_bar() if not self.has_close_button(): right_box.pack_start(bb_align, True, True, 0) paned.pack2(Align(right_box, left=6), True, False) paned.set_position(250) self.add(paned) self.__refill(tv, pref_box, errors, filter_combo) self.connect('destroy', self.__destroy) filter_model.set_visible_func( self.__filter, (filter_entry, filter_combo)) self.get_child().show_all() filter_entry.grab_focus() restore_id = config.get("memory", "plugin_selection") tv.select_by_plugin_id(restore_id)
def __init__(self, parent=None): if self.is_not_unique(): return super(PluginWindow, self).__init__() self.set_title(_("Plugins")) self.set_default_size(700, 500) self.set_transient_for(parent) self.enable_window_tracking("plugin_prefs") paned = Paned() vbox = Gtk.VBox() sw = ScrolledWindow() sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.ALWAYS) model = ObjectStore() filter_model = ObjectModelFilter(child_model=model) tv = PluginListView() tv.set_model(filter_model) tv.set_rules_hint(True) tv.connect("plugin-toggled", self.__plugin_toggled) fb = Gtk.HBox(spacing=6) filter_combo = PluginFilterCombo() filter_combo.connect("changed", lambda s: filter_model.refilter()) fb.pack_start(filter_combo, False, True, 0) filter_entry = ClearEntry() filter_entry.connect("changed", lambda s: filter_model.refilter()) filter_entry.enable_clear_button() fb.pack_start(filter_entry, True, True, 0) sw.add(tv) sw.set_shadow_type(Gtk.ShadowType.IN) sw.set_size_request(200, -1) bbox = Gtk.HBox(homogeneous=True, spacing=12) errors = qltk.Button(_("Show _Errors"), Icons.DIALOG_WARNING) errors.set_focus_on_click(False) errors.connect('clicked', self.__show_errors) errors.set_no_show_all(True) bbox.pack_start(Align(errors, border=6, right=-6), True, True, 0) pref_box = PluginPreferencesContainer() if const.DEBUG: refresh = qltk.Button(_("_Refresh"), Icons.VIEW_REFRESH) refresh.set_focus_on_click(False) refresh.connect('clicked', self.__refresh, tv, pref_box, errors, filter_combo) bbox.pack_start(Align(refresh, border=6), True, True, 0) vbox.pack_start(Align(fb, border=6, right=-6), False, True, 0) vbox.pack_start(sw, True, True, 0) vbox.pack_start(bbox, False, True, 0) paned.pack1(vbox, False, False) close = qltk.Button(_("_Close"), Icons.WINDOW_CLOSE) close.connect('clicked', lambda *x: self.destroy()) bb_align = Align(halign=Gtk.Align.END, valign=Gtk.Align.END) bb = Gtk.HButtonBox() bb.set_layout(Gtk.ButtonBoxStyle.END) bb.pack_start(close, True, True, 0) bb_align.add(bb) selection = tv.get_selection() selection.connect('changed', self.__selection_changed, pref_box) selection.emit('changed') right_box = Gtk.VBox(spacing=12) right_box.pack_start(pref_box, True, True, 0) self.use_header_bar() if not self.has_close_button(): right_box.pack_start(bb_align, True, True, 0) paned.pack2(Align(right_box, border=12), True, False) paned.set_position(250) self.add(paned) self.__refill(tv, pref_box, errors, filter_combo) self.connect('destroy', self.__destroy) filter_model.set_visible_func(self.__filter, (filter_entry, filter_combo)) self.get_child().show_all() filter_entry.grab_focus() restore_id = config.get("memory", "plugin_selection") tv.select_by_plugin_id(restore_id)
def __init__(self, parent): if self.is_not_unique(): return super(PluginWindow, self).__init__() self.set_title(_("Plugins") + " - Quod Libet") self.set_border_width(12) self.set_default_size(655, 404) self.set_transient_for(parent) hbox = gtk.HBox(spacing=12) vbox = gtk.VBox(spacing=6) sw = gtk.ScrolledWindow() sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS) tv = HintedTreeView() model = gtk.ListStore(object, object) filter = model.filter_new() tv.set_model(filter) tv.set_rules_hint(True) filter_entry = ClearEntry() filter_entry.connect("changed", lambda s: filter.refilter()) combo_store = gtk.ListStore(str, int) filter_combo = gtk.ComboBox(combo_store) cell = gtk.CellRendererText() filter_combo.pack_start(cell, True) filter_combo.add_attribute(cell, "text", 0) filter_combo.connect("changed", lambda s: filter.refilter()) combo_sep = lambda model, iter: model[iter][1] == SEP filter_combo.set_row_separator_func(combo_sep) fb = gtk.HBox(spacing=6) fb.pack_start(filter_combo, expand=False) filter_entry.enable_clear_button() fb.pack_start(filter_entry) render = gtk.CellRendererToggle() def cell_data(col, render, model, iter): row = model[iter] render.set_active(row[1].enabled(row[0])) render.connect('toggled', self.__toggled, filter) column = gtk.TreeViewColumn("enabled", render) column.set_cell_data_func(render, cell_data) tv.append_column(column) render = gtk.CellRendererPixbuf() def cell_data2(col, render, model, iter): icon = getattr(model[iter][0], 'PLUGIN_ICON', gtk.STOCK_EXECUTE) if gtk.stock_lookup(icon): render.set_property('stock-id', icon) else: render.set_property('icon-name', icon) column = gtk.TreeViewColumn("image", render) column.set_cell_data_func(render, cell_data2) tv.append_column(column) render = gtk.CellRendererText() render.set_property('ellipsize', pango.ELLIPSIZE_END) render.set_property('xalign', 0.0) column = gtk.TreeViewColumn("name", render) def cell_data3(col, render, model, iter): render.set_property('text', model[iter][0].PLUGIN_NAME) column.set_cell_data_func(render, cell_data3) column.set_expand(True) tv.append_column(column) sw.add(tv) sw.set_shadow_type(gtk.SHADOW_IN) sw.set_size_request(250, -1) tv.set_headers_visible(False) bbox = gtk.HBox(homogeneous=True, spacing=12) errors = qltk.Button(_("Show _Errors"), gtk.STOCK_DIALOG_WARNING) errors.set_focus_on_click(False) bbox.pack_start(errors) refresh = gtk.Button(stock=gtk.STOCK_REFRESH) refresh.set_focus_on_click(False) bbox.pack_start(refresh) vbox.pack_start(fb, expand=False) vbox.pack_start(sw) vbox.pack_start(bbox, expand=False) hbox.pack_start(vbox, expand=False) selection = tv.get_selection() desc = WrapLabel() desc.set_selectable(True) selection.connect('changed', self.__description, desc) prefs = gtk.Frame() prefs.set_shadow_type(gtk.SHADOW_NONE) close = gtk.Button(stock=gtk.STOCK_CLOSE) close.connect('clicked', lambda *x: self.destroy()) bb_align = gtk.Alignment(0, 1, 1, 0) bb = gtk.HButtonBox() bb.set_layout(gtk.BUTTONBOX_END) bb.pack_start(close) bb_align.add(bb) vb2 = gtk.VBox(spacing=12) vb2.pack_start(desc, expand=False) vb2.pack_start(prefs, expand=False) vb2.pack_start(bb_align) hbox.pack_start(vb2, expand=True) self.add(hbox) selection.connect('changed', self.__preferences, prefs) refresh.connect('clicked', self.__refresh, tv, desc, errors, filter_combo, combo_store) errors.connect('clicked', self.__show_errors) tv.get_selection().emit('changed') refresh.clicked() self.connect('destroy', self.__destroy) filter.set_visible_func( self.__filter, (filter_entry, filter_combo, combo_store)) self.show_all() filter_entry.grab_focus() restore_id = config.get("memory", "plugin_selection") def restore_sel(row): return row[0].PLUGIN_ID == restore_id if not tv.select_by_func(restore_sel, one=True) and tv.get_model(): tv.set_cursor((0,))