1 '''
2 '''
3
4 from PyQt4 import QtCore, QtGui
5
6 import vqt.colors as vq_colors
7 import visgraph.pathcore as vg_path
8
10
12 self.colnum = colnum
13 self.asc = asc
14
16 x1val = x1.rowdata[self.colnum]
17 x2val = x2.rowdata[self.colnum]
18 if self.asc:
19 return cmp(x1val, x2val)
20
21 return cmp(x2val, x1val)
22
24
26 self.parent = parent
27 self.rowdata = list(rowdata)
28 self.children = []
29
34
36 return self.children[row]
37
39 return len(self.children)
40
42 return len(self.rowdata)
43
44 - def data(self, column):
45 if column > len(self.rowdata):
46 return None
47 return str(self.rowdata[column])
48
50 '''
51 Retrieve our row number.
52 '''
53 if self.parent:
54 return self.parent.children.index(self)
55 return 0
56
58 '''
59 A QT tree model that uses the tree API from visgraph
60 to hold the data...
61 '''
62
63 columns = ( 'A first column!', 'The Second Column!')
64 editable = None
65
66 - def __init__(self, parent=None, columns=None):
76
79
80 - def append(self, rowdata, parent=None):
81 if parent == None:
82 parent = self.rootnode
83
84 pidx = self.createIndex(parent.row(), 0, parent)
85 i = len(parent.children)
86 self.beginInsertRows(pidx, i, i)
87 node = parent.append(rowdata)
88 self.endInsertRows()
89 self.layoutChanged.emit()
90 return node
91
92 - def sort(self, colnum, order=0):
93 cmpf = VQTreeSorter(colnum, order)
94 self.layoutAboutToBeChanged.emit()
95 self.rootnode.children.sort(cmp=cmpf)
96 self.layoutChanged.emit()
97
106
109
110 - def data(self, index, role):
111 if not index.isValid():
112 return None
113
114 item = index.internalPointer()
115 if role == QtCore.Qt.DisplayRole:
116 return item.data(index.column())
117
118 if role == QtCore.Qt.UserRole:
119 return item
120
121 return None
122
123 - def setData(self, index, value, role=QtCore.Qt.EditRole):
124
125 node = index.internalPointer()
126 if not node:
127 return False
128
129
130 if role == QtCore.Qt.EditRole:
131 value = self.vqEdited(node, index.column(), value)
132 if value == None:
133 return False
134
135 node.rowdata[index.column()] = value
136 self.dataChanged.emit(index, index)
137
138 return True
139
141 if ( orientation == QtCore.Qt.Horizontal and
142 role == QtCore.Qt.DisplayRole):
143
144 return self.columns[column]
145
146 return None
147
148 - def index(self, row, column, parent):
149
150 if not self.hasIndex(row, column, parent):
151 return QtCore.QModelIndex()
152
153 pitem = parent.internalPointer()
154 if not pitem:
155 pitem = self.rootnode
156
157 item = pitem.child(row)
158 if not item:
159 return QtCore.QModelIndex()
160
161 return self.createIndex(row, column, item)
162
164
165 if not index.isValid():
166 return QtCore.QModelIndex()
167
168 item = index.internalPointer()
169 if not item:
170 return QtCore.QModelIndex()
171
172 pitem = item.parent
173
174 if pitem == self.rootnode:
175 return QtCore.QModelIndex()
176
177 if pitem == None:
178 return QtCore.QModelIndex()
179
180 return self.createIndex(pitem.row(), 0, pitem)
181
182 - def rowCount(self, parent=QtCore.QModelIndex()):
183
184 if parent.column() > 0:
185 return 0
186
187 pitem = parent.internalPointer()
188 if not pitem:
189 pitem = self.rootnode
190
191 return len(pitem.children)
192
194
195 - def __init__(self, parent=None, cols=None):
203
205 c = self.model().columnCount()
206 for i in xrange(c):
207 self.resizeColumnToContents(i)
208
210 model.dataChanged.connect( self.dataChanged )
211 model.rowsInserted.connect( self.rowsInserted )
212 return QtGui.QTreeView.setModel(self, model)
213