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
 published by the Free Software Foundation.\r
 """\r
 \r
+import logging\r
 \r
 \r
-import pygtk\r
-pygtk.require("2.0")\r
+import pango\r
 import gtk\r
 \r
 import gtk\r
 \r
+import hildonize\r
+import gtk_toolbox\r
+\r
 \r
 try:\r
        _\r
 \r
 try:\r
        _\r
@@ -21,127 +24,145 @@ except NameError:
        _ = lambda x: x\r
 \r
 \r
        _ = 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
        """\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
        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
 \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
 \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
 \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
 \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
 \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
 \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
 \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
 \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
 \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
 \r
        def get_item(self, pos):\r
-               return self.list_store[pos]\r
+               return self._itemlist[pos]\r
 \r
        def clear_items(self):\r
 \r
        def clear_items(self):\r
-               self.list_store.clear()\r
+               self._itemlist.clear()\r
 \r
 \r
-       def _on_row_activated(self, treeview, path, view_column, data = None):\r
+       def get_selection_data(self):\r
                """\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
                """\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
 \r
-       def _on_cursor_changed(self, widget, data1 = None, data2 = None):\r
+       def set_eventfunction_cursor_changed(self, function):\r
                """\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
                """\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
 \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
                """\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
                """\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
 \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
                """\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
                """\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