1 #!/usr/bin/env python2.5
\r
2 # -*- coding: utf-8 -*-
\r
5 Copyright (C) 2007 Christoph Würstle and in big parts by Gerold Penz
\r
7 This program is free software; you can redistribute it and/or modify
\r
8 it under the terms of the GNU General Public License version 2 as
\r
9 published by the Free Software Foundation.
\r
27 _moduleLogger = logging.getLogger(__name__)
\r
30 class SimpleList(object):
\r
32 Stellt eine einfache Liste mit Laufbalken dar. Das wird mit
\r
33 den Objekten ScrolledWindow und TreeView erreicht.
\r
43 self._selectedItem = None # (<Position>, <Key>, <Value>)
\r
46 self._itemlist = gtk.ListStore(str, str)
\r
47 self._itemView = gtk.TreeView(self._itemlist)
\r
48 self._itemView.set_headers_visible(False)
\r
49 self._itemView.get_selection().set_mode(gtk.SELECTION_SINGLE)
\r
50 self._itemView.connect("cursor-changed", self._on_cursor_changed)
\r
51 self._itemView.connect("row-activated", self._on_row_activated)
\r
52 self._itemView.show()
\r
54 # Key-Spalte hinzuf�gen
\r
55 self._keyCell = gtk.CellRendererText()
\r
56 self._keyColumn = gtk.TreeViewColumn("Key")
\r
57 self._keyColumn.pack_start(self._keyCell, True)
\r
58 self._keyColumn.add_attribute(self._keyCell, "text", self.KEY_IDX)
\r
59 self._keyColumn.set_visible(False)
\r
60 self._itemView.append_column(self._keyColumn)
\r
62 # Value-Spalte hinzufügen
\r
63 self._valueCell = gtk.CellRendererText()
\r
64 self._valueCell.set_property("ellipsize", pango.ELLIPSIZE_END)
\r
65 self._valueColumn = gtk.TreeViewColumn("Caption")
\r
66 self._valueColumn.pack_start(self._valueCell, True)
\r
67 self._valueColumn.add_attribute(self._valueCell, "text", self.VALUE_IDX)
\r
68 self._itemView.append_column(self._valueColumn)
\r
71 # Leider funktioniert die Suche im Moment nicht so
\r
72 # wie ich das möchte. Deshalb habe ich die Suche abgeschaltet.
\r
73 self._itemView.set_enable_search(False)
\r
75 self._maemo5HackVBox = gtk.VBox()
\r
76 self._maemo5HackVBox.pack_start(self._itemView)
\r
77 self._maemo5HackViewport = gtk.Viewport()
\r
78 self._maemo5HackViewport.add(self._maemo5HackVBox)
\r
81 self._scrolledWindow = gtk.ScrolledWindow()
\r
82 self._scrolledWindow.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
\r
83 self._scrolledWindow.set_shadow_type(gtk.SHADOW_IN)
\r
84 self._scrolledWindow.add(self._maemo5HackViewport)
\r
86 self._scrolledWindow = hildonize.hildonize_scrollwindow(self._scrolledWindow)
\r
87 self._scrolledWindow.show()
\r
91 return self._scrolledWindow
\r
93 def append_item(self, value, key = ""):
\r
95 F�gt der Liste Werte und wenn gew�nscht, Schl�ssel hinzu.
\r
98 self._itemlist.append([key, value])
\r
100 def select_last_item(self):
\r
101 path = str(len(self._itemlist)-1)
\r
102 self._itemView.set_cursor(path, self._valueColumn)
\r
103 return len(self._itemlist)-1
\r
105 def change_item(self, pos, value, key = ""):
\r
106 self._itemlist[pos] = [key, value]
\r
108 def remove_item(self, pos):
\r
109 model = self._itemView.get_model()
\r
110 self._itemlist.remove(model.get_iter(str(pos)))
\r
112 def get_item(self, pos):
\r
113 return self._itemlist[pos]
\r
115 def clear_items(self):
\r
116 self._itemlist.clear()
\r
118 def get_selection_data(self):
\r
120 Gibt die Variable self._selectedItem zur�ck.
\r
121 Diese enth�lt ein Tupel. (<Position>, <Key>, <Value>)
\r
124 return self._selectedItem # (<Position>, <Key>, <Value>)
\r
126 def set_eventfunction_cursor_changed(self, function):
\r
128 Verbindet die �bergebene Funktion mit dem
\r
129 Signal "cursor-changed".
\r
132 self._itemView.connect("cursor-changed", function)
\r
133 self._itemView.connect("row-activated", function)
\r
135 @gtk_toolbox.log_exception(_moduleLogger)
\r
136 def _on_row_activated(self, treeview, path, view_column, data = None):
\r
138 Sets the value of self._selectedItems. This value can
\r
139 be retrieved using the method "get_selection_data.
\r
142 iter = self._itemlist.get_iter(path)
\r
146 self._selectedItem = (
\r
147 path[0], # Position
\r
148 self._itemlist.get_value(iter, self.KEY_IDX), # Key
\r
149 self._itemlist.get_value(iter, self.VALUE_IDX) # Value
\r
152 @gtk_toolbox.log_exception(_moduleLogger)
\r
153 def _on_cursor_changed(self, widget, data1 = None, data2 = None):
\r
155 Sets the value of self._selectedItems. This value can
\r
156 be retrieved using the method "get_selection_data.
\r
159 selection = widget.get_selection()
\r
160 (model, iter) = selection.get_selected()
\r
164 self._selectedItem = (
\r
165 int(selection.get_selected_rows()[1][0][0]), # Position
\r
166 str(model.get_value(iter, self.KEY_IDX)), # Key
\r
167 str(model.get_value(iter, self.VALUE_IDX)) # Value
\r