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
23 class SimpleList(gtk.ScrolledWindow):
\r
25 Stellt eine einfache Liste mit Laufbalken dar. Das wird mit
\r
26 den Objekten ScrolledWindow und TreeView erreicht.
\r
37 gtk.ScrolledWindow.__init__(self)
\r
38 self._selectedItem = None # (<Position>, <Key>, <Value>)
\r
41 self._itemlist = gtk.ListStore(str, str)
\r
44 self.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
\r
45 self.set_shadow_type(gtk.SHADOW_IN)
\r
48 self._itemView = gtk.TreeView(self._itemlist)
\r
49 self._itemView.set_headers_visible(False)
\r
50 self._itemView.get_selection().set_mode(gtk.SELECTION_BROWSE)
\r
51 self._itemView.connect("cursor-changed", self._on_cursor_changed)
\r
52 self._itemView.connect("row-activated", self._on_row_activated)
\r
53 self._itemView.show()
\r
55 # Key-Spalte hinzuf�gen
\r
56 self._keyCell = gtk.CellRendererText()
\r
57 self._keyColumn = gtk.TreeViewColumn("Key")
\r
58 self._keyColumn.pack_start(self._keyCell, True)
\r
59 self._keyColumn.add_attribute(self._keyCell, "text", self.KEY_IDX)
\r
60 self._keyColumn.set_visible(False)
\r
61 self._itemView.append_column(self._keyColumn)
\r
63 # Value-Spalte hinzufügen
\r
64 self._valueCell = gtk.CellRendererText()
\r
65 self._valueCell.set_property("ellipsize", pango.ELLIPSIZE_END)
\r
66 self._valueColumn = gtk.TreeViewColumn("Caption")
\r
67 self._valueColumn.pack_start(self._valueCell, True)
\r
68 self._valueColumn.add_attribute(self._valueCell, "text", self.VALUE_IDX)
\r
69 self._itemView.append_column(self._valueColumn)
\r
72 # Leider funktioniert die Suche im Moment nicht so
\r
73 # wie ich das möchte. Deshalb habe ich die Suche abgeschaltet.
\r
74 self._itemView.set_enable_search(False)
\r
77 self.add(self._itemView)
\r
80 def append_item(self, value, key = ""):
\r
82 F�gt der Liste Werte und wenn gew�nscht, Schl�ssel hinzu.
\r
85 self._itemlist.append([key, value])
\r
87 def select_last_item(self):
\r
88 path = str(len(self._itemlist)-1)
\r
89 self._itemView.set_cursor(path, self._valueColumn)
\r
90 return len(self._itemlist)-1
\r
92 def change_item(self, pos, value, key = ""):
\r
93 self._itemlist[pos] = [key, value]
\r
95 def remove_item(self, pos):
\r
96 model = self._itemView.get_model()
\r
97 self._itemlist.remove(model.get_iter(str(pos)))
\r
99 def get_item(self, pos):
\r
100 return self._itemlist[pos]
\r
102 def clear_items(self):
\r
103 self._itemlist.clear()
\r
105 def get_selection_data(self):
\r
107 Gibt die Variable self._selectedItem zur�ck.
\r
108 Diese enth�lt ein Tupel. (<Position>, <Key>, <Value>)
\r
111 return self._selectedItem # (<Position>, <Key>, <Value>)
\r
113 def set_eventfunction_cursor_changed(self, function):
\r
115 Verbindet die �bergebene Funktion mit dem
\r
116 Signal "cursor-changed".
\r
119 self._itemView.connect("cursor-changed", function)
\r
121 def _on_row_activated(self, treeview, path, view_column, data = None):
\r
123 Setzt den Wert von self._selectedItems. Dieser Wert kann
\r
124 mit der Methode "get_selection_data" abgerufen werden.
\r
127 iter = self._itemlist.get_iter(path)
\r
131 self._selectedItem = (
\r
132 path[0], # Position
\r
133 self._itemlist.get_value(iter, self.KEY_IDX), # Key
\r
134 self._itemlist.get_value(iter, self.VALUE_IDX) # Value
\r
137 def _on_cursor_changed(self, widget, data1 = None, data2 = None):
\r
139 Setzt den Wert von self._selectedItems. Dieser Wert kann
\r
140 mit der Methode "get_selection_data" abgerufen werden.
\r
143 selection = widget.get_selection()
\r
144 (model, iter) = selection.get_selected()
\r
148 self._selectedItem = (
\r
149 int(selection.get_selected_rows()[1][0][0]), # Position
\r
150 str(model.get_value(iter, self.KEY_IDX)), # Key
\r
151 str(model.get_value(iter, self.VALUE_IDX)) # Value
\r