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
14 pygtk.require("2.0")
\r
24 class SimpleList(gtk.ScrolledWindow):
\r
26 Stellt eine einfache Liste mit Laufbalken dar. Das wird mit
\r
27 den Objekten ScrolledWindow und TreeView erreicht.
\r
35 gtk.ScrolledWindow.__init__(self)
\r
36 self.selected_item = None # (<Position>, <Key>, <Value>)
\r
39 self.list_store = gtk.ListStore(str, str)
\r
42 self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
\r
43 self.set_shadow_type(gtk.SHADOW_IN)
\r
46 self.tree_view = gtk.TreeView(self.list_store)
\r
47 self.tree_view.set_headers_visible(False)
\r
48 self.tree_view.get_selection().set_mode(gtk.SELECTION_BROWSE)
\r
49 self.tree_view.connect("cursor-changed", self._on_cursor_changed)
\r
50 self.tree_view.connect("row-activated", self._on_row_activated)
\r
51 self.tree_view.show()
\r
53 # Key-Spalte hinzuf�gen
\r
54 self.key_cell = gtk.CellRendererText()
\r
55 self.key_column = gtk.TreeViewColumn("Key")
\r
56 self.key_column.pack_start(self.key_cell, True)
\r
57 self.key_column.add_attribute(self.key_cell, "text", 0)
\r
58 self.key_column.set_visible(False)
\r
59 self.tree_view.append_column(self.key_column)
\r
61 # Value-Spalte hinzufügen
\r
62 self.value_cell = gtk.CellRendererText()
\r
63 self.value_column = gtk.TreeViewColumn("Caption")
\r
64 self.value_column.pack_start(self.value_cell, True)
\r
65 self.value_column.add_attribute(self.value_cell, "text", 1)
\r
66 self.tree_view.append_column(self.value_column)
\r
69 # Leider funktioniert die Suche im Moment nicht so
\r
70 # wie ich das möchte. Deshalb habe ich die Suche abgeschaltet.
\r
71 self.tree_view.set_enable_search(False)
\r
74 self.add(self.tree_view)
\r
77 def append_item(self, value, key = ""):
\r
79 F�gt der Liste Werte und wenn gew�nscht, Schl�ssel hinzu.
\r
82 self.list_store.append([key, value])
\r
84 def select_last_item(self):
\r
85 path = str(len(self.list_store)-1)
\r
86 self.tree_view.set_cursor(path, self.value_column)
\r
87 return len(self.list_store)-1
\r
89 def change_item(self, pos, value, key = ""):
\r
90 self.list_store[pos] = [key, value]
\r
92 def remove_item(self, pos):
\r
93 model = self.tree_view.get_model()
\r
94 self.list_store.remove(model.get_iter(str(pos)))
\r
96 def get_item(self, pos):
\r
97 return self.list_store[pos]
\r
99 def clear_items(self):
\r
100 self.list_store.clear()
\r
102 def _on_row_activated(self, treeview, path, view_column, data = None):
\r
104 Setzt den Wert von self.selected_items. Dieser Wert kann
\r
105 mit der Methode "get_selection_data" abgerufen werden.
\r
108 iter = self.list_store.get_iter(path)
\r
111 self.selected_item = (
\r
112 path[0], # Position
\r
113 self.list_store.get_value(iter, 0), # Key
\r
114 self.list_store.get_value(iter, 1) # Value
\r
117 def _on_cursor_changed(self, widget, data1 = None, data2 = None):
\r
119 Setzt den Wert von self.selected_items. Dieser Wert kann
\r
120 mit der Methode "get_selection_data" abgerufen werden.
\r
123 selection = widget.get_selection()
\r
124 (model, iter) = selection.get_selected()
\r
127 self.selected_item = (
\r
128 int(selection.get_selected_rows()[1][0][0]), # Position
\r
129 str(model.get_value(iter, 0)), # Key
\r
130 str(model.get_value(iter, 1)) # Value
\r
133 def get_selection_data(self):
\r
135 Gibt die Variable self.selected_item zur�ck.
\r
136 Diese enth�lt ein Tupel. (<Position>, <Key>, <Value>)
\r
139 return self.selected_item # (<Position>, <Key>, <Value>)
\r
141 def set_eventfunction__cursor_changed(self, function):
\r
143 Verbindet die �bergebene Funktion mit dem
\r
144 Signal "cursor-changed".
\r
147 self.tree_view.connect("cursor-changed", function)
\r