Fixing a bug with launching from a fresh system
[quicknote] / src / simple_list.py
index 027185a..34849da 100644 (file)
@@ -9,11 +9,14 @@ it under the terms of the GNU General Public License version 2 as
 published by the Free Software Foundation.\r
 """\r
 \r
+import logging\r
 \r
-import pygtk\r
-pygtk.require("2.0")\r
+import pango\r
 import gtk\r
 \r
+import hildonize\r
+import gtk_toolbox\r
+\r
 \r
 try:\r
        _\r
@@ -21,127 +24,145 @@ except NameError:
        _ = lambda x: x\r
 \r
 \r
-class SimpleList(gtk.ScrolledWindow):\r
+_moduleLogger = logging.getLogger(__name__)\r
+\r
+\r
+class SimpleList(object):\r
        """\r
        Stellt eine einfache Liste mit Laufbalken dar. Das wird mit\r
        den Objekten ScrolledWindow und TreeView erreicht.\r
        """\r
 \r
+       KEY_IDX = 0\r
+       VALUE_IDX = 1\r
+\r
        def __init__(self):\r
                """\r
                Initialisieren\r
                """\r
-\r
-               gtk.ScrolledWindow.__init__(self)\r
-               self.selected_item = None # (<Position>, <Key>, <Value>)\r
-\r
-               # Liste\r
-               self.list_store = gtk.ListStore(str, str)\r
-\r
-               # ScrolledWindow\r
-               self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)\r
-               self.set_shadow_type(gtk.SHADOW_IN)\r
+               self._selectedItem = None # (<Position>, <Key>, <Value>)\r
 \r
                # Treeview\r
-               self.tree_view = gtk.TreeView(self.list_store)\r
-               self.tree_view.set_headers_visible(False)\r
-               self.tree_view.get_selection().set_mode(gtk.SELECTION_BROWSE)\r
-               self.tree_view.connect("cursor-changed", self._on_cursor_changed)\r
-               self.tree_view.connect("row-activated", self._on_row_activated)\r
-               self.tree_view.show()\r
+               self._itemlist = gtk.ListStore(str, str)\r
+               self._itemView = gtk.TreeView(self._itemlist)\r
+               self._itemView.set_headers_visible(False)\r
+               self._itemView.get_selection().set_mode(gtk.SELECTION_SINGLE)\r
+               self._itemView.connect("cursor-changed", self._on_cursor_changed)\r
+               self._itemView.connect("row-activated", self._on_row_activated)\r
+               self._itemView.show()\r
 \r
                # Key-Spalte hinzuf�gen\r
-               self.key_cell = gtk.CellRendererText()\r
-               self.key_column = gtk.TreeViewColumn("Key")\r
-               self.key_column.pack_start(self.key_cell, True)\r
-               self.key_column.add_attribute(self.key_cell, "text", 0)\r
-               self.key_column.set_visible(False)\r
-               self.tree_view.append_column(self.key_column)\r
+               self._keyCell = gtk.CellRendererText()\r
+               self._keyColumn = gtk.TreeViewColumn("Key")\r
+               self._keyColumn.pack_start(self._keyCell, True)\r
+               self._keyColumn.add_attribute(self._keyCell, "text", self.KEY_IDX)\r
+               self._keyColumn.set_visible(False)\r
+               self._itemView.append_column(self._keyColumn)\r
 \r
                # Value-Spalte hinzufügen\r
-               self.value_cell = gtk.CellRendererText()\r
-               self.value_column = gtk.TreeViewColumn("Caption")\r
-               self.value_column.pack_start(self.value_cell, True)\r
-               self.value_column.add_attribute(self.value_cell, "text", 1)\r
-               self.tree_view.append_column(self.value_column)\r
+               self._valueCell = gtk.CellRendererText()\r
+               self._valueCell.set_property("ellipsize", pango.ELLIPSIZE_END)\r
+               self._valueColumn = gtk.TreeViewColumn("Caption")\r
+               self._valueColumn.pack_start(self._valueCell, True)\r
+               self._valueColumn.add_attribute(self._valueCell, "text", self.VALUE_IDX)\r
+               self._itemView.append_column(self._valueColumn)\r
 \r
                # Suchspalte setzen\r
                # Leider funktioniert die Suche im Moment nicht so \r
                # wie ich das möchte. Deshalb habe ich die Suche abgeschaltet.\r
-               self.tree_view.set_enable_search(False)\r
+               self._itemView.set_enable_search(False)\r
 \r
-               # Anzeigen\r
-               self.add(self.tree_view)\r
-               self.show()\r
+               self._maemo5HackVBox = gtk.VBox()\r
+               self._maemo5HackVBox.pack_start(self._itemView)\r
+               self._maemo5HackViewport = gtk.Viewport()\r
+               self._maemo5HackViewport.add(self._maemo5HackVBox)\r
+\r
+               # ScrolledWindow\r
+               self._scrolledWindow = gtk.ScrolledWindow()\r
+               self._scrolledWindow.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)\r
+               self._scrolledWindow.set_shadow_type(gtk.SHADOW_IN)\r
+               self._scrolledWindow.add(self._maemo5HackViewport)\r
+\r
+               self._scrolledWindow = hildonize.hildonize_scrollwindow(self._scrolledWindow)\r
+               self._scrolledWindow.show()\r
+\r
+       @property\r
+       def widget(self):\r
+               return self._scrolledWindow\r
 \r
        def append_item(self, value, key = ""):\r
                """\r
                F�gt der Liste Werte und wenn gew�nscht, Schl�ssel hinzu.\r
                """\r
 \r
-               self.list_store.append([key, value])\r
+               self._itemlist.append([key, value])\r
 \r
        def select_last_item(self):\r
-               path = str(len(self.list_store)-1)\r
-               self.tree_view.set_cursor(path, self.value_column)\r
-               return len(self.list_store)-1\r
+               path = str(len(self._itemlist)-1)\r
+               self._itemView.set_cursor(path, self._valueColumn)\r
+               return len(self._itemlist)-1\r
 \r
        def change_item(self, pos, value, key = ""):\r
-               self.list_store[pos] = [key, value]\r
+               self._itemlist[pos] = [key, value]\r
 \r
        def remove_item(self, pos):\r
-               model = self.tree_view.get_model()\r
-               self.list_store.remove(model.get_iter(str(pos)))\r
+               model = self._itemView.get_model()\r
+               self._itemlist.remove(model.get_iter(str(pos)))\r
 \r
        def get_item(self, pos):\r
-               return self.list_store[pos]\r
+               return self._itemlist[pos]\r
 \r
        def clear_items(self):\r
-               self.list_store.clear()\r
+               self._itemlist.clear()\r
 \r
-       def _on_row_activated(self, treeview, path, view_column, data = None):\r
+       def get_selection_data(self):\r
                """\r
-               Setzt den Wert von self.selected_items. Dieser Wert kann\r
-               mit der Methode "get_selection_data" abgerufen werden.\r
+               Gibt die Variable self._selectedItem zur�ck.\r
+               Diese enth�lt ein Tupel. (<Position>, <Key>, <Value>)\r
                """\r
 \r
-               iter = self.list_store.get_iter(path)\r
-\r
-               if iter:\r
-                       self.selected_item = (\r
-                               path[0], # Position\r
-                               self.list_store.get_value(iter, 0), # Key\r
-                               self.list_store.get_value(iter, 1) # Value\r
-                       )\r
+               return self._selectedItem  # (<Position>, <Key>, <Value>)\r
 \r
-       def _on_cursor_changed(self, widget, data1 = None, data2 = None):\r
+       def set_eventfunction_cursor_changed(self, function):\r
                """\r
-               Setzt den Wert von self.selected_items. Dieser Wert kann\r
-               mit der Methode "get_selection_data" abgerufen werden.\r
+               Verbindet die �bergebene Funktion mit dem \r
+               Signal "cursor-changed".\r
                """\r
 \r
-               selection = widget.get_selection()\r
-               (model, iter) = selection.get_selected()\r
-\r
-               if iter:\r
-                       self.selected_item = (\r
-                               int(selection.get_selected_rows()[1][0][0]), # Position\r
-                               str(model.get_value(iter, 0)), # Key\r
-                               str(model.get_value(iter, 1)) # Value\r
-                       )\r
+               self._itemView.connect("cursor-changed", function)\r
+               self._itemView.connect("row-activated", function)\r
 \r
-       def get_selection_data(self):\r
+       @gtk_toolbox.log_exception(_moduleLogger)\r
+       def _on_row_activated(self, treeview, path, view_column, data = None):\r
                """\r
-               Gibt die Variable self.selected_item zur�ck.\r
-               Diese enth�lt ein Tupel. (<Position>, <Key>, <Value>)\r
+               Sets the value of self._selectedItems. This value can\r
+               be retrieved using the method "get_selection_data.\r
                """\r
 \r
-               return self.selected_item  # (<Position>, <Key>, <Value>)\r
+               iter = self._itemlist.get_iter(path)\r
+               if not iter:\r
+                       return\r
+\r
+               self._selectedItem = (\r
+                       path[0], # Position\r
+                       self._itemlist.get_value(iter, self.KEY_IDX), # Key\r
+                       self._itemlist.get_value(iter, self.VALUE_IDX) # Value\r
+               )\r
 \r
-       def set_eventfunction__cursor_changed(self, function):\r
+       @gtk_toolbox.log_exception(_moduleLogger)\r
+       def _on_cursor_changed(self, widget, data1 = None, data2 = None):\r
                """\r
-               Verbindet die �bergebene Funktion mit dem \r
-               Signal "cursor-changed".\r
+               Sets the value of self._selectedItems. This value can\r
+               be retrieved using the method "get_selection_data.\r
                """\r
 \r
-               self.tree_view.connect("cursor-changed", function)\r
+               selection = widget.get_selection()\r
+               (model, iter) = selection.get_selected()\r
+               if not iter:\r
+                       return\r
+\r
+               self._selectedItem = (\r
+                       int(selection.get_selected_rows()[1][0][0]), # Position\r
+                       str(model.get_value(iter, self.KEY_IDX)), # Key\r
+                       str(model.get_value(iter, self.VALUE_IDX)) # Value\r
+               )\r