027185a25b21c294238314b4a4592d11386c72e9
[quicknote] / src / simple_list.py
1 #!/usr/bin/env python2.5\r
2 # -*- coding: utf-8 -*-\r
3 \r
4 """\r
5  Copyright (C) 2007 Christoph Würstle and in big parts by Gerold Penz\r
6 \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
10 """\r
11 \r
12 \r
13 import pygtk\r
14 pygtk.require("2.0")\r
15 import gtk\r
16 \r
17 \r
18 try:\r
19         _\r
20 except NameError:\r
21         _ = lambda x: x\r
22 \r
23 \r
24 class SimpleList(gtk.ScrolledWindow):\r
25         """\r
26         Stellt eine einfache Liste mit Laufbalken dar. Das wird mit\r
27         den Objekten ScrolledWindow und TreeView erreicht.\r
28         """\r
29 \r
30         def __init__(self):\r
31                 """\r
32                 Initialisieren\r
33                 """\r
34 \r
35                 gtk.ScrolledWindow.__init__(self)\r
36                 self.selected_item = None # (<Position>, <Key>, <Value>)\r
37 \r
38                 # Liste\r
39                 self.list_store = gtk.ListStore(str, str)\r
40 \r
41                 # ScrolledWindow\r
42                 self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)\r
43                 self.set_shadow_type(gtk.SHADOW_IN)\r
44 \r
45                 # Treeview\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
52 \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
60 \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
67 \r
68                 # Suchspalte setzen\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
72 \r
73                 # Anzeigen\r
74                 self.add(self.tree_view)\r
75                 self.show()\r
76 \r
77         def append_item(self, value, key = ""):\r
78                 """\r
79                 F�gt der Liste Werte und wenn gew�nscht, Schl�ssel hinzu.\r
80                 """\r
81 \r
82                 self.list_store.append([key, value])\r
83 \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
88 \r
89         def change_item(self, pos, value, key = ""):\r
90                 self.list_store[pos] = [key, value]\r
91 \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
95 \r
96         def get_item(self, pos):\r
97                 return self.list_store[pos]\r
98 \r
99         def clear_items(self):\r
100                 self.list_store.clear()\r
101 \r
102         def _on_row_activated(self, treeview, path, view_column, data = None):\r
103                 """\r
104                 Setzt den Wert von self.selected_items. Dieser Wert kann\r
105                 mit der Methode "get_selection_data" abgerufen werden.\r
106                 """\r
107 \r
108                 iter = self.list_store.get_iter(path)\r
109 \r
110                 if iter:\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
115                         )\r
116 \r
117         def _on_cursor_changed(self, widget, data1 = None, data2 = None):\r
118                 """\r
119                 Setzt den Wert von self.selected_items. Dieser Wert kann\r
120                 mit der Methode "get_selection_data" abgerufen werden.\r
121                 """\r
122 \r
123                 selection = widget.get_selection()\r
124                 (model, iter) = selection.get_selected()\r
125 \r
126                 if iter:\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
131                         )\r
132 \r
133         def get_selection_data(self):\r
134                 """\r
135                 Gibt die Variable self.selected_item zur�ck.\r
136                 Diese enth�lt ein Tupel. (<Position>, <Key>, <Value>)\r
137                 """\r
138 \r
139                 return self.selected_item  # (<Position>, <Key>, <Value>)\r
140 \r
141         def set_eventfunction__cursor_changed(self, function):\r
142                 """\r
143                 Verbindet die �bergebene Funktion mit dem \r
144                 Signal "cursor-changed".\r
145                 """\r
146 \r
147                 self.tree_view.connect("cursor-changed", function)\r