1
from gi.overrides import override
2
from gi.importer import modules
4
Dee = modules['Dee']._introspection_module
5
from gi.repository import GLib
10
def __init__ (self, model, itr):
14
def __getitem__ (self, column):
15
return self.model.get_value(self.itr, column)
17
def __setitem__ (self, column, val):
18
self.model.set_value (self.itr, column, val)
21
for column in range(self.model.get_n_columns()):
22
yield self.model.get_value (self.itr, column)
25
return self.model.get_n_columns()
28
return "(%s)" % ", ".join(map(str,self))
30
def __eq__ (self, other):
31
if not isinstance (other, RowWrapper):
33
if self.model != other.model:
35
return self.itr == other.itr
37
class Model(Dee.Model):
40
Dee.Model.__init__(self)
42
def set_schema (self, *args):
43
self.set_schema_full (tuple(args), len(args))
45
def _build_row (self, args):
47
for i, arg in enumerate(args):
48
if isinstance(arg, GLib.Variant):
51
result.append(GLib.Variant(self.get_column_schema(i), arg))
54
def prepend (self, *args):
55
return self.prepend_row (self._build_row(args))
57
def append (self, *args):
58
return self.append_row (self._build_row(args))
60
def insert (self, pos, *args):
61
return self.insert_row (pos, self._build_row(args))
63
def insert_before (self, iter, *args):
64
return self.insert_row_before (iter, self._build_row(args))
66
def insert_sorted (self, sort_func, *args):
67
return self.insert_row_sorted (self._build_row(args), sort_func, None)
69
def find_sorted (self, sort_func, *args):
70
return self.find_row_sorted (self._build_row(args), sort_func, None)
72
def get_schema (self):
73
return Dee.Model.get_schema(self)[0]
75
def get_value (self, itr, column):
76
return Dee.Model.get_value (self, itr, column).unpack()
78
def set_value (self, itr, column, value):
79
var = GLib.Variant (self.get_column_schema(column), value)
80
if isinstance (itr, int):
81
itr = self.get_iter_at_row(itr)
82
Dee.Model.set_value (self, itr, column, var)
84
def __getitem__ (self, itr):
85
if isinstance (itr, int):
86
itr = self.get_iter_at_row(itr)
87
return RowWrapper(self, itr)
89
def __setitem__ (self, itr, row):
90
max_col = self.get_n_columns ()
91
for column, value in enumerate (row):
93
raise IndexError("Too many columns in row assignment: %s" % column)
94
self.set_value (itr, column, value)
96
def get_row (self, itr):
100
itr = self.get_first_iter ()
101
last = self.get_last_iter ()
103
yield self.get_row(itr)
108
return self.get_n_rows()
112
Model = override(Model)
113
__all__.append('Model')