← Back to team overview

zeitgeist team mailing list archive

[Branch ~zeitgeist/zeitgeist/bluebird] Rev 389: Add tools/gtk/zeitgeist-data-sources-gtk.py from Python branch

 

------------------------------------------------------------
revno: 389
committer: Siegfried-Angel Gevatter Pujals <siegfried@xxxxxxxxxxxx>
branch nick: bluebird
timestamp: Wed 2012-02-08 14:02:57 +0100
message:
  Add tools/gtk/zeitgeist-data-sources-gtk.py from Python branch
added:
  tools/README
  tools/gtk/
  tools/gtk/zeitgeist-data-sources-gtk.py


--
lp:zeitgeist
https://code.launchpad.net/~zeitgeist/zeitgeist/bluebird

Your team Zeitgeist Framework Team is subscribed to branch lp:zeitgeist.
To unsubscribe from this branch go to https://code.launchpad.net/~zeitgeist/zeitgeist/bluebird/+edit-subscription
=== added file 'tools/README'
--- tools/README	1970-01-01 00:00:00 +0000
+++ tools/README	2012-02-08 13:02:57 +0000
@@ -0,0 +1,11 @@
+This directory contains little utilities related to Zeitgeist.
+
+Distributors
+-------------------
+
+Be aware that those utilities may have a different license than the main
+Zeitgeist engine (for example, GPLv3+ instead of LGPLv3+).
+
+Also, note that they are optional utilities. In case you package them,
+don't put them in the same package as the Zeitgeist engine if that adds
+unnecessary dependencies.

=== added directory 'tools/gtk'
=== added file 'tools/gtk/zeitgeist-data-sources-gtk.py'
--- tools/gtk/zeitgeist-data-sources-gtk.py	1970-01-01 00:00:00 +0000
+++ tools/gtk/zeitgeist-data-sources-gtk.py	2012-02-08 13:02:57 +0000
@@ -0,0 +1,137 @@
+#! /usr/bin/env python
+# -.- coding: utf-8 -.-
+#
+# Zeitgeist
+#
+# Copyright © 2010 Siegfried Gevatter <siegfried@xxxxxxxxxxxx>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2.1 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import gtk
+import gobject
+from gettext import install, ngettext # TODO: Setup translations.
+
+from zeitgeist.datamodel import Interpretation, Manifestation, DataSource
+from zeitgeist.client import ZeitgeistDBusInterface
+
+CLIENT = ZeitgeistDBusInterface()
+REGISTRY = CLIENT.get_extension("DataSourceRegistry", "data_source_registry")
+
+class DataSourceList(gtk.TreeView):
+    
+    def __init__(self, activate_callback=None, select_callback=None):
+        super(DataSourceList, self).__init__()
+        
+        self.store = gtk.TreeStore(str, str, bool, bool, gobject.TYPE_PYOBJECT)
+        self.selection = self.get_selection() # gtk.TreeSelection
+        self.set_model(self.store)
+        self.set_search_column(0)
+        
+        col = self._create_column(_("Name"))
+        col[0].add_attribute(col[1], "text", 0)
+        col = self._create_column(_("Description"))
+        col[0].add_attribute(col[1], "text", 1)
+        col = self._create_column(_("Running?"))
+        col[0].add_attribute(col[1], "text", 2)
+        col = self._create_column(_("Enabled?"), gtk.CellRendererToggle())
+        col[1].set_property("activatable", 1)
+        col[0].add_attribute(col[1], "active", 3)
+        col[1].connect("toggled", self._toggle_checkbox, self.store, 3,
+            activate_callback)
+        
+        self.selection.connect("changed", self._selection_changed,
+            select_callback)
+        
+        for datasource in REGISTRY.GetDataSources():
+            self._add_item(datasource)
+    
+    def __len__(self):
+        return len(self.store)
+    
+    def _create_column(self, name, cell_renderer=gtk.CellRendererText()):
+        column = gtk.TreeViewColumn(name, cell_renderer)
+        column.set_expand(True)
+        column.set_sort_column_id(0)
+        self.append_column(column)
+        return (column, cell_renderer)
+    
+    def _toggle_checkbox(self, renderer, row, store, pos, callback):
+        treeiter = store.get_iter(row)
+        store.set(treeiter, pos, not store.get_value(treeiter, pos))
+        if callback:
+            callback(store.get_value(treeiter, 4))
+    
+    def _selection_changed(self, treeselection, callback):
+        store, treeiter = treeselection.get_selected()
+        if callback:
+            callback(store.get_value(treeiter, 4))
+    
+    def _add_item(self, datasource):
+        self.store.append(None, [datasource[DataSource.Name],
+            datasource[DataSource.Description], datasource[DataSource.Running],
+            datasource[DataSource.Enabled], DataSource(*datasource)])
+
+class MainWindow(gtk.Window):
+
+    def __init__(self):
+        super(MainWindow, self).__init__()
+        self.set_title("Manage Zeitgeist data-sources")
+        self.connect("destroy", self.quit)
+        
+        self.mainbox = gtk.VBox()
+        self.add(self.mainbox)
+
+        self.list = DataSourceList(self.toggle_datasource,
+            self.update_selection)
+        self.mainbox.pack_start(self.list)
+        
+        self.mainbox.pack_start(gtk.HSeparator(), expand=False)
+        self.selected_title = gtk.Label(ngettext(
+            "There is 1 registered data-source.",
+            "There are %d registered data-sources." % len(self.list),
+            len(self.list)))
+        self.mainbox.pack_start(self.selected_title, expand=False, padding=5)
+        
+        self.show_all()
+        
+        self.detailsbox = gtk.VBox()
+        self.mainbox.pack_start(self.detailsbox, expand=False)
+        
+        description_label = gtk.Label()
+        description_label.set_alignment(0, 0)
+        description_label.set_markup("<b>%s</b>" % _("Description"))
+        self.detailsbox.pack_start(description_label, expand=False)
+        
+        self.selected_description = gtk.Label()
+        self.selected_description.set_alignment(0, 0)
+        self.detailsbox.pack_start(self.selected_description, expand=False)
+    
+    def toggle_datasource(self, datasource):
+        enabled = not datasource[DataSource.Enabled]
+        REGISTRY.SetDataSourceEnabled(datasource[DataSource.UniqueId], enabled)
+        datasource[DataSource.Enabled] = enabled
+    
+    def update_selection(self, datasource):
+        self.selected_title.set_markup("<b>%s</b> - <i>%s</i>" % (
+            datasource[DataSource.Name], datasource[DataSource.UniqueId]))
+        self.selected_description.set_markup("<i>%s</i>" % (
+            datasource[DataSource.Description]))
+        self.detailsbox.show_all()
+    
+    def quit(self, *discard):
+        gtk.main_quit()
+
+if __name__ == "__main__":
+    main = MainWindow()
+    gtk.main()