2 # -*- coding: utf-8 -*-
5 This file is part of Multilist.
7 Multilist is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
12 Multilist is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with Multilist. If not, see <http://www.gnu.org/licenses/>.
20 Copyright (C) 2008 Christoph Würstle
37 _moduleLogger = logging.getLogger(__name__)
40 class TripleToggleCellRenderer(gtk.CellRendererToggle):
43 "status": (gobject.TYPE_STRING, "Status",
44 "Status", "", gobject.PARAM_READWRITE),
48 'status_changed' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_INT, gobject.TYPE_STRING)),
52 gtk.CellRendererToggle.__init__(self)
53 self.set_property("activatable", True)
54 self.connect('toggled', self._on_toggled)
57 @gtk_toolbox.log_exception(_moduleLogger)
58 def do_set_property(self, property, value):
59 if getattr(self, property.name) == value:
62 setattr(self, property.name, value)
64 if property.name == "status":
65 active, inconsistent = {
70 self.set_property("active", active)
71 self.set_property("inconsistent", inconsistent)
73 @gtk_toolbox.log_exception(_moduleLogger)
74 def do_get_property(self, property):
75 return getattr(self, property.name)
77 @gtk_toolbox.log_exception(_moduleLogger)
78 def _on_toggled(self, widget, path):
79 self.emit("status_changed", int(path), "-1")
82 gobject.type_register(TripleToggleCellRenderer)
87 def __init__(self, db, liststorehandler, parent_window):
89 self.parent_window = parent_window
90 self.liststorehandler = liststorehandler
92 gtk.VBox.__init__(self, homogeneous = False, spacing = 0)
94 logging.info("libview, init")
96 self.scrolled_window = None
100 ls = self.liststorehandler.get_liststore()
101 self.treeview.set_model(ls)
103 def del_active_row(self):
104 path, col = self.treeview.get_cursor()
107 row_iter = self.treeview.get_model().get_iter(path)
108 self.liststorehandler.del_row(irow, row_iter)
110 def sort_func_function(self, model, iter1, iter2, data = None):
113 def reload_view(self):
114 # create the TreeView using liststore
115 self.modelsort = gtk.TreeModelSort(self.liststorehandler.get_liststore())
116 self.modelsort.set_sort_column_id(2, gtk.SORT_ASCENDING)
118 self.treeview = gtk.TreeView(self.modelsort)
119 self.treeview.set_headers_visible(True)
120 self.treeview.set_reorderable(False)
122 self.cell = range(self.liststorehandler.get_colcount())
123 self.tvcolumn = range(self.liststorehandler.get_colcount())
125 m = self.liststorehandler.get_unitsstore()
127 for i in range(self.liststorehandler.get_colcount()):
132 if self.db.ladeDirekt("showcol_"+str(self.liststorehandler.get_colname(i)), default) == "1":
134 self.cell[i] = TripleToggleCellRenderer()
135 self.tvcolumn[i] = gtk.TreeViewColumn("", self.cell[i])
136 self.cell[i].connect( 'status_changed', self._on_col_toggled)
137 self.tvcolumn[i].set_attributes( self.cell[i], status = i)
139 self.cell[i] = gtk.CellRendererCombo()
140 self.tvcolumn[i] = gtk.TreeViewColumn(self.liststorehandler.get_colname(i), self.cell[i])
141 self.cell[i].set_property("model", m)
142 self.cell[i].set_property('text-column', i)
143 self.cell[i].set_property('editable', True)
144 self.cell[i].connect("edited", self._on_col_edited, i)
145 self.tvcolumn[i].set_attributes( self.cell[i], text = i)
147 self.cell[i] = gtk.CellRendererText()
148 self.tvcolumn[i] = gtk.TreeViewColumn(self.liststorehandler.get_colname(i), self.cell[i])
149 self.cell[i].set_property('editable', True)
150 self.cell[i].set_property('editable-set', True)
151 self.cell[i].connect("edited", self._on_col_edited, i)
152 self.tvcolumn[i].set_attributes(self.cell[i], text = i)
154 self.cell[i].set_property('cell-background', 'lightgray')
155 self.tvcolumn[i].set_sort_column_id(i)
156 self.tvcolumn[i].set_resizable(True)
157 self.treeview.append_column(self.tvcolumn[i])
159 if self.scrolled_window is not None:
160 self.scrolled_window.destroy()
162 self.scrolled_window = gtk.ScrolledWindow()
163 self.scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
165 self.scrolled_window.add(self.treeview)
166 self.pack_start(self.scrolled_window, expand = True, fill = True, padding = 0)
171 @gtk_toolbox.log_exception(_moduleLogger)
172 def _on_col_edited(self, cell, irow, new_text, icol = None):
174 self.liststorehandler.update_row(irow, icol, new_text)
176 print cell, irow, new_text, icol
178 @gtk_toolbox.log_exception(_moduleLogger)
179 def _on_col_toggled(self, widget, irow, status):
180 ls = self.treeview.get_model()
182 if self.liststorehandler.get_filter() == self.liststorehandler.SHOW_ACTIVE:
183 if ls[irow][1] == "0":
184 self.liststorehandler.update_row(irow, 1, "1")
186 self.liststorehandler.update_row(irow, 1, "0")
188 if ls[irow][1] == "1":
189 self.liststorehandler.update_row(irow, 1, "-1")
190 elif ls[irow][1] == "0":
191 self.liststorehandler.update_row(irow, 1, "1")
193 self.liststorehandler.update_row(irow, 1, "0")