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
25 class SimpleList(gtk.ScrolledWindow):
\r
27 Stellt eine einfache Liste mit Laufbalken dar. Das wird mit
\r
28 den Objekten ScrolledWindow und TreeView erreicht.
\r
30 @todo Decouple SimpleList from scrolled window to be able to hildonize it
\r
41 gtk.ScrolledWindow.__init__(self)
\r
42 self._selectedItem = None # (<Position>, <Key>, <Value>)
\r
45 self._itemlist = gtk.ListStore(str, str)
\r
48 self.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
\r
49 self.set_shadow_type(gtk.SHADOW_IN)
\r
52 self._itemView = gtk.TreeView(self._itemlist)
\r
53 self._itemView.set_headers_visible(False)
\r
54 self._itemView.get_selection().set_mode(gtk.SELECTION_BROWSE)
\r
55 self._itemView.connect("cursor-changed", self._on_cursor_changed)
\r
56 self._itemView.connect("row-activated", self._on_row_activated)
\r
57 self._itemView.show()
\r
59 # Key-Spalte hinzuf�gen
\r
60 self._keyCell = gtk.CellRendererText()
\r
61 self._keyColumn = gtk.TreeViewColumn("Key")
\r
62 self._keyColumn.pack_start(self._keyCell, True)
\r
63 self._keyColumn.add_attribute(self._keyCell, "text", self.KEY_IDX)
\r
64 self._keyColumn.set_visible(False)
\r
65 self._itemView.append_column(self._keyColumn)
\r
67 # Value-Spalte hinzufügen
\r
68 self._valueCell = gtk.CellRendererText()
\r
69 self._valueCell.set_property("ellipsize", pango.ELLIPSIZE_END)
\r
70 self._valueColumn = gtk.TreeViewColumn("Caption")
\r
71 self._valueColumn.pack_start(self._valueCell, True)
\r
72 self._valueColumn.add_attribute(self._valueCell, "text", self.VALUE_IDX)
\r
73 self._itemView.append_column(self._valueColumn)
\r
76 # Leider funktioniert die Suche im Moment nicht so
\r
77 # wie ich das möchte. Deshalb habe ich die Suche abgeschaltet.
\r
78 self._itemView.set_enable_search(False)
\r
81 self.add(self._itemView)
\r
84 def append_item(self, value, key = ""):
\r
86 F�gt der Liste Werte und wenn gew�nscht, Schl�ssel hinzu.
\r
89 self._itemlist.append([key, value])
\r
91 def select_last_item(self):
\r
92 path = str(len(self._itemlist)-1)
\r
93 self._itemView.set_cursor(path, self._valueColumn)
\r
94 return len(self._itemlist)-1
\r
96 def change_item(self, pos, value, key = ""):
\r
97 self._itemlist[pos] = [key, value]
\r
99 def remove_item(self, pos):
\r
100 model = self._itemView.get_model()
\r
101 self._itemlist.remove(model.get_iter(str(pos)))
\r
103 def get_item(self, pos):
\r
104 return self._itemlist[pos]
\r
106 def clear_items(self):
\r
107 self._itemlist.clear()
\r
109 def get_selection_data(self):
\r
111 Gibt die Variable self._selectedItem zur�ck.
\r
112 Diese enth�lt ein Tupel. (<Position>, <Key>, <Value>)
\r
115 return self._selectedItem # (<Position>, <Key>, <Value>)
\r
117 def set_eventfunction_cursor_changed(self, function):
\r
119 Verbindet die �bergebene Funktion mit dem
\r
120 Signal "cursor-changed".
\r
123 self._itemView.connect("cursor-changed", function)
\r
125 def _on_row_activated(self, treeview, path, view_column, data = None):
\r
127 Setzt den Wert von self._selectedItems. Dieser Wert kann
\r
128 mit der Methode "get_selection_data" abgerufen werden.
\r
131 iter = self._itemlist.get_iter(path)
\r
135 self._selectedItem = (
\r
136 path[0], # Position
\r
137 self._itemlist.get_value(iter, self.KEY_IDX), # Key
\r
138 self._itemlist.get_value(iter, self.VALUE_IDX) # Value
\r
141 def _on_cursor_changed(self, widget, data1 = None, data2 = None):
\r
143 Setzt den Wert von self._selectedItems. Dieser Wert kann
\r
144 mit der Methode "get_selection_data" abgerufen werden.
\r
147 selection = widget.get_selection()
\r
148 (model, iter) = selection.get_selected()
\r
152 self._selectedItem = (
\r
153 int(selection.get_selected_rows()[1][0][0]), # Position
\r
154 str(model.get_value(iter, self.KEY_IDX)), # Key
\r
155 str(model.get_value(iter, self.VALUE_IDX)) # Value
\r