From dbdb3cf0352f0c2b314711dc8737655496099aa0 Mon Sep 17 00:00:00 2001 From: Denis Fomin <fominde@gmail.com> Date: Thu, 16 Aug 2012 17:58:00 +0400 Subject: [PATCH] plugin system. add plugin icon support --- src/plugins/gui.py | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/src/plugins/gui.py b/src/plugins/gui.py index ef921ef48..1029662ce 100644 --- a/src/plugins/gui.py +++ b/src/plugins/gui.py @@ -27,7 +27,7 @@ GUI classes related to plug-in management. __all__ = ['PluginsWindow'] import pango -import gtk, gobject +import gtk, gobject, os import gtkgui_helpers from dialogs import WarningDialog, YesNoDialog, ArchiveChooserDialog @@ -69,12 +69,18 @@ class PluginsWindow(object): self.plugin_name_label.set_attributes(attr_list) self.installed_plugins_model = gtk.ListStore(gobject.TYPE_PYOBJECT, - gobject.TYPE_STRING, gobject.TYPE_BOOLEAN, gobject.TYPE_BOOLEAN) + gobject.TYPE_STRING, gobject.TYPE_BOOLEAN, gobject.TYPE_BOOLEAN, + gtk.gdk.Pixbuf) self.installed_plugins_treeview.set_model(self.installed_plugins_model) self.installed_plugins_treeview.set_rules_hint(True) renderer = gtk.CellRendererText() - col = gtk.TreeViewColumn(_('Plugin'), renderer, text=NAME) + col = gtk.TreeViewColumn(_('Plugin'))#, renderer, text=NAME) + cell = gtk.CellRendererPixbuf() + col.pack_start(cell, False) + col.add_attribute(cell, 'pixbuf', ICON) + col.pack_start(renderer, True) + col.add_attribute(renderer, 'text', NAME) self.installed_plugins_treeview.append_column(col) renderer = gtk.CellRendererToggle() @@ -83,6 +89,10 @@ class PluginsWindow(object): activatable=ACTIVATABLE) self.installed_plugins_treeview.append_column(col) + icon = gtk.Image() + self.def_icon = icon.render_icon(gtk.STOCK_PREFERENCES, + gtk.ICON_SIZE_MENU) + # connect signal for selection change selection = self.installed_plugins_treeview.get_selection() selection.connect('changed', @@ -102,6 +112,7 @@ class PluginsWindow(object): self.window.show_all() gtkgui_helpers.possibly_move_window_in_current_desktop(self.window) + def on_plugins_notebook_switch_page(self, widget, page, page_num): gobject.idle_add(self.xml.get_object('close_button').grab_focus) @@ -162,8 +173,17 @@ class PluginsWindow(object): self.installed_plugins_model.set_sort_column_id(1, gtk.SORT_ASCENDING) for plugin in pm.plugins: + icon = self.get_plugin_icon(plugin) self.installed_plugins_model.append([plugin, plugin.name, - plugin.active and plugin.activatable, plugin.activatable]) + plugin.active and plugin.activatable, plugin.activatable, icon]) + + def get_plugin_icon(self, plugin): + icon_file = os.path.join(plugin.__path__, os.path.split( + plugin.__path__)[1]) + '.png' + icon = self.def_icon + if os.path.isfile(icon_file): + icon = gtk.gdk.pixbuf_new_from_file_at_size(icon_file, 16, 16) + return icon @log_calls('PluginsWindow') def installed_plugins_toggled_cb(self, cell, path): @@ -249,7 +269,7 @@ class PluginsWindow(object): break iter_ = model.append([plugin, plugin.name, False, - plugin.activatable]) + plugin.activatable, self.get_plugin_icon(plugin)]) sel = self.installed_plugins_treeview.get_selection() sel.select_iter(iter_) @@ -272,7 +292,7 @@ class PluginsWindow(object): return model = self.installed_plugins_model iter_ = model.append([plugin, plugin.name, False, - plugin.activatable]) + plugin.activatable], self.get_plugin_icon(plugin)) sel = self.installed_plugins_treeview.get_selection() sel.select_iter(iter_) -- GitLab