[kupfer] Allow filtering the list of plugins in Kupfer's Preferences
- From: Ulrik Sverdrup <usverdrup src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [kupfer] Allow filtering the list of plugins in Kupfer's Preferences
- Date: Sun, 24 Jan 2010 14:23:50 +0000 (UTC)
commit 49d55ec67b62ede615669b25ea81d6fd91d3b598
Author: Karol BÄ?dkowski <karol bedkowsk+gh gmail com>
Date: Sun Jan 24 15:18:31 2010 +0100
Allow filtering the list of plugins in Kupfer's Preferences
We automatically switch to the plugin information for the first
filtered match, with a slight delay.
We filter against plugin names and descriptions, with a higher
match threshold for descriptions.
data/preferences.ui | 17 ++++++++++++-
kupfer/ui/preferences.py | 58 ++++++++++++++++++++++++++++++++++++++--------
2 files changed, 63 insertions(+), 12 deletions(-)
---
diff --git a/data/preferences.ui b/data/preferences.ui
index a53d382..6b4aee0 100644
--- a/data/preferences.ui
+++ b/data/preferences.ui
@@ -311,6 +311,19 @@
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
+ <object class="GtkEntry" id="entry_plugins_filter">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <signal name="changed" handler="on_entry_plugins_filter_changed"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
<object class="GtkScrolledWindow" id="plugin_list_parent">
<property name="visible">True</property>
<property name="can_focus">True</property>
@@ -322,7 +335,7 @@
</child>
</object>
<packing>
- <property name="position">0</property>
+ <property name="position">1</property>
</packing>
</child>
<child>
@@ -335,7 +348,7 @@
<property name="expand">False</property>
<property name="fill">False</property>
<property name="padding">5</property>
- <property name="position">1</property>
+ <property name="position">2</property>
</packing>
</child>
</object>
diff --git a/kupfer/ui/preferences.py b/kupfer/ui/preferences.py
index ff50932..a806c21 100644
--- a/kupfer/ui/preferences.py
+++ b/kupfer/ui/preferences.py
@@ -10,7 +10,8 @@ from xdg import DesktopEntry as desktop
from kupfer import config, pretty, utils, icons, version
-from kupfer.core import settings, plugins
+from kupfer import scheduler, kupferstring
+from kupfer.core import settings, plugins, relevance
from kupfer.ui import keybindings
class PreferencesWindowController (pretty.OutputMixin):
@@ -41,6 +42,7 @@ class PreferencesWindowController (pretty.OutputMixin):
self.buttonremovedirectory = builder.get_object("buttonremovedirectory")
checkautostart = builder.get_object("checkautostart")
checkstatusicon = builder.get_object("checkstatusicon")
+ self.entry_plugins_filter = builder.get_object('entry_plugins_filter')
setctl = settings.GetSettingsController()
self.entrykeybinding.set_text(setctl.get_keybinding())
@@ -88,17 +90,10 @@ class PreferencesWindowController (pretty.OutputMixin):
#self.table.append_column(icon_col)
self.table.append_column(col)
+ self.plugin_list_timer = scheduler.Timer()
self.plugin_info = utils.locale_sort(plugins.get_plugin_info(),
key= lambda rec: rec["localized_name"])
- for info in self.plugin_info:
- plugin_id = info["name"]
- if setctl.get_plugin_is_hidden(plugin_id):
- continue
- enabled = setctl.get_plugin_enabled(plugin_id)
- name = info["localized_name"]
- desc = info["description"]
- text = u"%s" % name
- self.store.append((plugin_id, enabled, "kupfer-object", text))
+ self._refresh_plugin_list()
self.output_debug("Standard Plugins: %d" % len(self.store))
self.table.show()
self.pluglist_parent.add(self.table)
@@ -230,6 +225,46 @@ class PreferencesWindowController (pretty.OutputMixin):
pass
def on_closebutton_clicked(self, widget):
self.hide()
+
+ def _refresh_plugin_list(self):
+ self.store.clear()
+ setctl = settings.GetSettingsController()
+ s_filter = self.entry_plugins_filter.get_text()
+ us_filter = kupferstring.tounicode(s_filter).lower()
+
+ if us_filter:
+ self.plugin_list_timer.set_ms(300, self._show_focus_topmost_plugin)
+ else:
+ self.plugin_list_timer.invalidate()
+
+ for info in self.plugin_info:
+ plugin_id = info["name"]
+ if setctl.get_plugin_is_hidden(plugin_id):
+ continue
+ enabled = setctl.get_plugin_enabled(plugin_id)
+ name = info["localized_name"]
+ folded_name = kupferstring.tofolded(name)
+ desc = info["description"]
+ text = u"%s" % name
+
+ if us_filter:
+ name_score = relevance.score(name, us_filter)
+ fold_name_score = relevance.score(folded_name, us_filter)
+ desc_score = relevance.score(desc, us_filter)
+ if not name_score and not fold_name_score and desc_score < 0.9:
+ continue
+
+ self.store.append((plugin_id, enabled, "kupfer-object", text))
+
+ def _show_focus_topmost_plugin(self):
+ try:
+ first_row = iter(self.store).next()
+ except StopIteration:
+ return
+ plugin_id = first_row[0]
+ self.show_focus_plugin(plugin_id)
+
+
def on_checkplugin_toggled(self, cell, path):
checkcol = self.columns.index("enabled")
plugin_id = self._id_for_table_path(path)
@@ -511,6 +546,9 @@ class PreferencesWindowController (pretty.OutputMixin):
it = self.dir_store.get_iter(curpath)
self.remove_directory_model(it, store=True)
+ def on_entry_plugins_filter_changed(self, widget):
+ self._refresh_plugin_list()
+
def dir_table_cursor_changed(self, table):
curpath, curcol = table.get_cursor()
if not curpath or not self.dir_store:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]