Start of slow work to hildonize this mess
[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 pango\r
14 import gtk\r
15 \r
16 import hildonize\r
17 \r
18 \r
19 try:\r
20         _\r
21 except NameError:\r
22         _ = lambda x: x\r
23 \r
24 \r
25 class SimpleList(gtk.ScrolledWindow):\r
26         """\r
27         Stellt eine einfache Liste mit Laufbalken dar. Das wird mit\r
28         den Objekten ScrolledWindow und TreeView erreicht.\r
29 \r
30         @todo Decouple SimpleList from scrolled window to be able to hildonize it\r
31         """\r
32 \r
33         KEY_IDX = 0\r
34         VALUE_IDX = 1\r
35 \r
36         def __init__(self):\r
37                 """\r
38                 Initialisieren\r
39                 """\r
40 \r
41                 gtk.ScrolledWindow.__init__(self)\r
42                 self._selectedItem = None # (<Position>, <Key>, <Value>)\r
43 \r
44                 # Liste\r
45                 self._itemlist = gtk.ListStore(str, str)\r
46 \r
47                 # ScrolledWindow\r
48                 self.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)\r
49                 self.set_shadow_type(gtk.SHADOW_IN)\r
50 \r
51                 # Treeview\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
58 \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
66 \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
74 \r
75                 # Suchspalte setzen\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
79 \r
80                 # Anzeigen\r
81                 self.add(self._itemView)\r
82                 self.show()\r
83 \r
84         def append_item(self, value, key = ""):\r
85                 """\r
86                 F�gt der Liste Werte und wenn gew�nscht, Schl�ssel hinzu.\r
87                 """\r
88 \r
89                 self._itemlist.append([key, value])\r
90 \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
95 \r
96         def change_item(self, pos, value, key = ""):\r
97                 self._itemlist[pos] = [key, value]\r
98 \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
102 \r
103         def get_item(self, pos):\r
104                 return self._itemlist[pos]\r
105 \r
106         def clear_items(self):\r
107                 self._itemlist.clear()\r
108 \r
109         def get_selection_data(self):\r
110                 """\r
111                 Gibt die Variable self._selectedItem zur�ck.\r
112                 Diese enth�lt ein Tupel. (<Position>, <Key>, <Value>)\r
113                 """\r
114 \r
115                 return self._selectedItem  # (<Position>, <Key>, <Value>)\r
116 \r
117         def set_eventfunction_cursor_changed(self, function):\r
118                 """\r
119                 Verbindet die �bergebene Funktion mit dem \r
120                 Signal "cursor-changed".\r
121                 """\r
122 \r
123                 self._itemView.connect("cursor-changed", function)\r
124 \r
125         def _on_row_activated(self, treeview, path, view_column, data = None):\r
126                 """\r
127                 Setzt den Wert von self._selectedItems. Dieser Wert kann\r
128                 mit der Methode "get_selection_data" abgerufen werden.\r
129                 """\r
130 \r
131                 iter = self._itemlist.get_iter(path)\r
132                 if not iter:\r
133                         return\r
134 \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
139                 )\r
140 \r
141         def _on_cursor_changed(self, widget, data1 = None, data2 = None):\r
142                 """\r
143                 Setzt den Wert von self._selectedItems. Dieser Wert kann\r
144                 mit der Methode "get_selection_data" abgerufen werden.\r
145                 """\r
146 \r
147                 selection = widget.get_selection()\r
148                 (model, iter) = selection.get_selected()\r
149                 if not iter:\r
150                         return\r
151 \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
156                 )\r