104 Public method to delete all children (cleaning the subtree). |
104 Public method to delete all children (cleaning the subtree). |
105 """ |
105 """ |
106 for itm in self.takeChildren(): |
106 for itm in self.takeChildren(): |
107 del itm |
107 del itm |
108 |
108 |
109 def key(self, column): |
|
110 """ |
|
111 Public method generating the key for this item. |
|
112 |
|
113 @param column the column to sort on (integer) |
|
114 @return text of the column (string) |
|
115 """ |
|
116 return self.text(column) |
|
117 |
|
118 def __lt__(self, other): |
|
119 """ |
|
120 Special method to check, if the item is less than the other one. |
|
121 |
|
122 @param other reference to item to compare against (QTreeWidgetItem) |
|
123 @return true, if this item is less than other (boolean) |
|
124 """ |
|
125 column = self.treeWidget().sortColumn() |
|
126 return self.key(column) < other.key(column) |
|
127 |
|
128 def expand(self): |
109 def expand(self): |
129 """ |
110 """ |
130 Public method to expand the item. |
111 Public method to expand the item. |
131 |
112 |
132 Note: This is just a do nothing and should be overwritten. |
113 Note: This is just a do nothing and should be overwritten. |
207 Array elements have numbers as names, but the key must be |
188 Array elements have numbers as names, but the key must be |
208 right justified and zero filled to 6 decimal places. Then |
189 right justified and zero filled to 6 decimal places. Then |
209 element 2 will have a key of '000002' and appear before |
190 element 2 will have a key of '000002' and appear before |
210 element 10 with a key of '000010' |
191 element 10 with a key of '000010' |
211 """ |
192 """ |
212 keyStr = self.text(0) |
193 col0Str = self.text(0) |
213 self.arrayElementKey = "{0:6d}".format(int(keyStr)) |
194 self.setText(0, "{0:6d}".format(int(col0Str))) |
214 |
|
215 def key(self, column): |
|
216 """ |
|
217 Public method generating the key for this item. |
|
218 |
|
219 @param column the column to sort on (integer) |
|
220 @return key of the item (string) |
|
221 """ |
|
222 if column == 0: |
|
223 return self.arrayElementKey |
|
224 else: |
|
225 return VariableItem.key(self, column) |
|
226 |
195 |
227 |
196 |
228 class SpecialArrayElementVarItem(SpecialVarItem): |
197 class SpecialArrayElementVarItem(SpecialVarItem): |
229 """ |
198 """ |
230 Class implementing a QTreeWidgetItem that represents a special array |
199 Class implementing a QTreeWidgetItem that represents a special array |
248 Array elements have numbers as names, but the key must be |
217 Array elements have numbers as names, but the key must be |
249 right justified and zero filled to 6 decimal places. Then |
218 right justified and zero filled to 6 decimal places. Then |
250 element 2 will have a key of '000002' and appear before |
219 element 2 will have a key of '000002' and appear before |
251 element 10 with a key of '000010' |
220 element 10 with a key of '000010' |
252 """ |
221 """ |
253 keyStr = self.text(0)[:-2] # strip off [], () or {} |
222 col0Str = self.text(0)[:-2] # strip off [], () or {} |
254 self.arrayElementKey = "{0:6d}".format(int(keyStr)) |
223 indicator = self.text(0)[-2:] |
255 |
224 self.setText(0, "{0:6d}{1}".format(int(col0Str), indicator)) |
256 def key(self, column): |
|
257 """ |
|
258 Public method generating the key for this item. |
|
259 |
|
260 @param column the column to sort on (integer) |
|
261 @return key of the item (string) |
|
262 """ |
|
263 if column == 0: |
|
264 return self.arrayElementKey |
|
265 else: |
|
266 return SpecialVarItem.key(self, column) |
|
267 |
225 |
268 |
226 |
269 class VariablesViewer(QTreeWidget): |
227 class VariablesViewer(QTreeWidget): |
270 """ |
228 """ |
271 Class implementing the variables viewer widget. |
229 Class implementing the variables viewer widget. |
344 header.setSortIndicatorShown(True) |
302 header.setSortIndicatorShown(True) |
345 if qVersion() >= "5.0.0": |
303 if qVersion() >= "5.0.0": |
346 header.setSectionsClickable(True) |
304 header.setSectionsClickable(True) |
347 else: |
305 else: |
348 header.setClickable(True) |
306 header.setClickable(True) |
|
307 header.sectionClicked.connect(self.__sectionClicked) |
349 header.resizeSection(0, 120) # variable column |
308 header.resizeSection(0, 120) # variable column |
350 header.resizeSection(1, 150) # value column |
309 header.resizeSection(1, 150) # value column |
351 |
310 |
352 self.__createPopupMenus() |
311 self.__createPopupMenus() |
353 self.setContextMenuPolicy(Qt.CustomContextMenu) |
312 self.setContextMenuPolicy(Qt.CustomContextMenu) |
435 if len(vlist): |
394 if len(vlist): |
436 self.resortEnabled = False |
395 self.resortEnabled = False |
437 for (var, vtype, value) in vlist: |
396 for (var, vtype, value) in vlist: |
438 self.__addItem(None, vtype, var, value) |
397 self.__addItem(None, vtype, var, value) |
439 |
398 |
440 # reexpand tree |
399 # re-expand tree |
441 openItems = sorted(self.openItems[:]) |
400 openItems = sorted(self.openItems[:]) |
442 self.openItems = [] |
401 self.openItems = [] |
443 for itemPath in openItems: |
402 for itemPath in openItems: |
444 itm = self.__findItem(itemPath, 0) |
403 itm = self.__findItem(itemPath, 0) |
445 if itm is not None: |
404 if itm is not None: |
482 if vlist: |
441 if vlist: |
483 itm = self.__findItem(vlist[0], 0) |
442 itm = self.__findItem(vlist[0], 0) |
484 for var, vtype, value in vlist[1:]: |
443 for var, vtype, value in vlist[1:]: |
485 self.__addItem(itm, vtype, var, value) |
444 self.__addItem(itm, vtype, var, value) |
486 |
445 |
487 # reexpand tree |
446 # re-expand tree |
488 openItems = sorted(self.openItems[:]) |
447 openItems = sorted(self.openItems[:]) |
489 self.openItems = [] |
448 self.openItems = [] |
490 for itemPath in openItems: |
449 for itemPath in openItems: |
491 itm = self.__findItem(itemPath, 0) |
450 itm = self.__findItem(itemPath, 0) |
492 if itm is not None and not itm.isExpanded(): |
451 if itm is not None and not itm.isExpanded(): |
731 |
689 |
732 try: |
690 try: |
733 parentItem.collapse() |
691 parentItem.collapse() |
734 except AttributeError: |
692 except AttributeError: |
735 super(VariablesViewer, self).collapseItem(parentItem) |
693 super(VariablesViewer, self).collapseItem(parentItem) |
736 |
694 |
737 def __resort(self): |
695 def __sectionClicked(self): |
|
696 """ |
|
697 Private method handling a click onto a header section. |
|
698 """ |
|
699 self.__resort() |
|
700 |
|
701 def __resort(self, parent=None): |
738 """ |
702 """ |
739 Private method to resort the tree. |
703 Private method to resort the tree. |
|
704 |
|
705 @param parent reference to a parent item |
|
706 @type QTreeWidgetItem |
740 """ |
707 """ |
741 if self.resortEnabled: |
708 if self.resortEnabled: |
742 self.sortItems(self.sortColumn(), |
709 if parent is not None: |
743 self.header().sortIndicatorOrder()) |
710 parent.sortChildren(self.sortColumn(), |
|
711 self.header().sortIndicatorOrder()) |
|
712 else: |
|
713 self.sortItems(self.sortColumn(), |
|
714 self.header().sortIndicatorOrder()) |
744 |
715 |
745 def handleResetUI(self): |
716 def handleResetUI(self): |
746 """ |
717 """ |
747 Public method to reset the VariablesViewer. |
718 Public method to reset the VariablesViewer. |
748 """ |
719 """ |