~mhr3/dee/add-changesets

« back to all changes in this revision

Viewing changes to bindings/python3/Dee.py

  • Committer: Michal Hruby
  • Date: 2012-06-27 15:38:12 UTC
  • mto: (369.1.1 dee)
  • mto: This revision was merged to the branch mainline in revision 370.
  • Revision ID: michal.mhr@gmail.com-20120627153812-iyj8uem8v30j29nt
Revert R368

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
from gi.overrides import override
2
 
from gi.importer import modules
3
 
 
4
 
Dee = modules['Dee']._introspection_module
5
 
from gi.repository import GLib
6
 
 
7
 
__all__ = []
8
 
 
9
 
class RowWrapper:
10
 
    def __init__ (self, model, itr):
11
 
        self.model = model
12
 
        self.itr = itr
13
 
    
14
 
    def __getitem__ (self, column):
15
 
        return self.model.get_value(self.itr, column)
16
 
    
17
 
    def __setitem__ (self, column, val):
18
 
        self.model.set_value (self.itr, column, val)
19
 
    
20
 
    def __iter__ (self):
21
 
        for column in range(self.model.get_n_columns()):
22
 
            yield self.model.get_value (self.itr, column)
23
 
    
24
 
    def __len__ (self):
25
 
        return self.model.get_n_columns()
26
 
    
27
 
    def __str__ (self):
28
 
        return "(%s)" % ", ".join(map(str,self))
29
 
    
30
 
    def __eq__ (self, other):
31
 
        if not isinstance (other, RowWrapper):
32
 
            return False
33
 
        if self.model != other.model:
34
 
            return False
35
 
        return self.itr == other.itr
36
 
 
37
 
class Model(Dee.Model):
38
 
 
39
 
    def __init__(self):
40
 
        Dee.Model.__init__(self)
41
 
 
42
 
    def set_schema (self, *args):
43
 
        self.set_schema_full (tuple(args), len(args))
44
 
    
45
 
    def _build_row (self, args):
46
 
        result = []
47
 
        for i, arg in enumerate(args):
48
 
            if isinstance(arg, GLib.Variant):
49
 
                result.append(arg)
50
 
            else:
51
 
                result.append(GLib.Variant(self.get_column_schema(i), arg))
52
 
        return tuple(result)
53
 
    
54
 
    def prepend (self, *args):
55
 
        return self.prepend_row (self._build_row(args))
56
 
    
57
 
    def append (self, *args):
58
 
        return self.append_row (self._build_row(args))
59
 
    
60
 
    def insert (self, pos, *args):
61
 
        return self.insert_row (pos, self._build_row(args))
62
 
    
63
 
    def insert_before (self, iter, *args):
64
 
        return self.insert_row_before (iter, self._build_row(args))
65
 
    
66
 
    def insert_sorted (self, sort_func, *args):
67
 
        return self.insert_row_sorted (self._build_row(args), sort_func, None)
68
 
   
69
 
    def find_sorted (self, sort_func, *args):
70
 
        return self.find_row_sorted (self._build_row(args), sort_func, None)
71
 
    
72
 
    def get_schema (self):
73
 
        return Dee.Model.get_schema(self)[0]
74
 
    
75
 
    def get_value (self, itr, column):
76
 
        return Dee.Model.get_value (self, itr, column).unpack()
77
 
    
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)
83
 
    
84
 
    def __getitem__ (self, itr):
85
 
        if isinstance (itr, int):
86
 
            itr = self.get_iter_at_row(itr)
87
 
        return RowWrapper(self, itr)
88
 
    
89
 
    def __setitem__ (self, itr, row):
90
 
        max_col = self.get_n_columns ()
91
 
        for column, value in enumerate (row):
92
 
            if column >= max_col:
93
 
                raise IndexError("Too many columns in row assignment: %s" % column)
94
 
            self.set_value (itr, column, value)
95
 
    
96
 
    def get_row (self, itr):
97
 
        return self[itr]
98
 
    
99
 
    def __iter__ (self):
100
 
        itr = self.get_first_iter ()
101
 
        last = self.get_last_iter ()
102
 
        while itr != last:
103
 
            yield self.get_row(itr)
104
 
            itr = self.next(itr)
105
 
        raise StopIteration
106
 
    
107
 
    def __len__ (self):
108
 
        return self.get_n_rows()
109
 
        
110
 
        
111
 
 
112
 
Model = override(Model)
113
 
__all__.append('Model')
114
 
 
115