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