1
# Copyright (C) 2008 Valmantas Paliksa <walmis at balticum-tv dot lt>
2
# Copyright (C) 2008 Tadas Dailyda <tadas at dailyda dot com>
4
# Licensed under the GNU General Public License Version 3
6
# This program is free software: you can redistribute it and/or modify
7
# it under the terms of the GNU General Public License as published by
8
# the Free Software Foundation, either version 3 of the License, or
9
# (at your option) any later version.
11
# This program is distributed in the hope that it will be useful,
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
# GNU General Public License for more details.
16
# You should have received a copy of the GNU General Public License
17
# along with this program. If not, see <http://www.gnu.org/licenses/>.
22
class GenericList(gtk.TreeView):
24
def __init__(self, data):
25
gtk.TreeView.__init__(self)
26
self.selection = self.get_selection()
31
def _load(self, data):
38
for i in range(len(data)):
39
types.append(data[i][1])
43
self.liststore = gtk.ListStore(*types)
44
self.set_model(self.liststore)
46
for i in range(len(data)):
48
self.ids[data[i][0]] = i
51
if len(data[i]) == 5 or len(data[i]) == 6:
53
column = gtk.TreeViewColumn(data[i][4])
55
column.pack_start(data[i][2])
56
column.set_attributes(data[i][2], **data[i][3])
60
column.set_properties(**data[i][5])
62
self.columns[data[i][0]] = column
63
self.append_column(column)
68
(model, iter) = self.selection.get_selected()
75
if type(id) == gtk.TreeIter:
78
iter = self.get_iter(id)
82
if self.liststore.iter_is_valid(iter):
83
self.liststore.remove(iter)
89
def _add(self, **columns):
90
ids_len = len(self.ids)
91
cols_len = len(columns)
94
for k, v in self.ids.iteritems():
98
for k, v in columns.iteritems():
100
items[self.ids[k]] = v
102
raise Exception, "Invalid key %s" % k
104
return items.values()
106
def append(self, **columns):
107
vals = self._add(**columns)
108
return self.liststore.append(vals)
110
def prepend(self, **columns):
111
vals = self._add(**columns)
112
return self.liststore.prepend(vals)
114
def get_conditional(self, **cols):
117
for i in range(len(self.liststore)):
119
for k, v in cols.iteritems():
123
if matches == len(cols):
131
def set(self, id, **cols):
132
if type(id) == gtk.TreeIter:
135
iter = self.get_iter(id)
138
for k, v in cols.iteritems():
139
self.liststore.set(iter, self.ids[k], v)
146
def get(self, id, *items):
150
if type(id) == gtk.TreeIter:
153
iter = self.get_iter(id)
155
for k, v in self.ids.iteritems():
156
ret[k] = self.liststore.get(iter, v)[0]
158
for i in range(len(items)):
159
if items[i] in self.ids:
160
ret[items[i]] = self.liststore.get(iter, self.ids[items[i]])[0]
169
def get_iter(self, path):
174
return self.liststore.get_iter(path)
179
self.liststore.clear()
181
def compare(self, iter_a, iter_b):
182
if iter_a != None and iter_b != None:
183
return self.get_model().get_path(iter_a) == self.get_model().get_path(iter_b)
1
from gi.repository import Gtk
2
from gi.repository import GObject
5
# noinspection PyAttributeOutsideInit
6
class GenericList(Gtk.TreeView):
7
def __init__(self, data):
8
GObject.GObject.__init__(self)
9
self.selection = self.get_selection()
12
def _load(self, data):
17
for i in range(len(data)):
18
types.append(data[i][1])
22
self.liststore = Gtk.ListStore(*types)
23
self.set_model(self.liststore)
25
for i in range(len(data)):
27
self.ids[data[i][0]] = i
29
if len(data[i]) == 5 or len(data[i]) == 6:
31
column = Gtk.TreeViewColumn(data[i][4])
33
column.pack_start(data[i][2], True)
34
column.set_attributes(data[i][2], **data[i][3])
37
column.set_properties(**data[i][5])
39
self.columns[data[i][0]] = column
40
self.append_column(column)
43
(model, iter) = self.selection.get_selected()
48
if type(id) == Gtk.TreeIter:
51
iter = self.get_iter(id)
55
if self.liststore.iter_is_valid(iter):
56
self.liststore.remove(iter)
61
def _add(self, **columns):
63
for k, v in self.ids.items():
66
for k, v in columns.items():
68
items[self.ids[k]] = v
70
raise Exception("Invalid key %s" % k)
74
def append(self, **columns):
75
vals = self._add(**columns)
76
return self.liststore.append(vals)
78
def prepend(self, **columns):
79
vals = self._add(**columns)
80
return self.liststore.prepend(vals)
82
def get_conditional(self, **cols):
85
for i in range(len(self.liststore)):
87
for k, v in cols.items():
91
if matches == len(cols):
98
def set(self, id, **cols):
99
if type(id) == Gtk.TreeIter:
102
iter = self.get_iter(id)
105
for k, v in cols.items():
106
self.liststore.set(iter, self.ids[k], v)
111
def get(self, id, *items):
115
if type(id) == Gtk.TreeIter:
118
iter = self.get_iter(id)
120
for k, v in self.ids.items():
121
ret[k] = self.liststore.get(iter, v)[0]
123
for i in range(len(items)):
124
if items[i] in self.ids:
125
ret[items[i]] = self.liststore.get(iter, self.ids[items[i]])[0]
131
def get_iter(self, path):
136
return self.liststore.get_iter(path)
141
self.liststore.clear()
143
def compare(self, iter_a, iter_b):
144
if iter_a is not None and iter_b is not None:
145
return self.get_model().get_path(iter_a) == self.get_model().get_path(iter_b)