Debugger/VariablesViewer.py

changeset 4568
5a5666ab6e89
parent 4563
881340f4bd0c
child 4631
5c1a96925da4
equal deleted inserted replaced
4566:a2e8f3c420ec 4568:5a5666ab6e89
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():
713 if parentItem.populated: 672 if parentItem.populated:
714 return 673 return
715 674
716 try: 675 try:
717 parentItem.expand() 676 parentItem.expand()
718 self.__resort()
719 except AttributeError: 677 except AttributeError:
720 super(VariablesViewer, self).expandItem(parentItem) 678 super(VariablesViewer, self).expandItem(parentItem)
721 679
722 def collapseItem(self, parentItem): 680 def collapseItem(self, parentItem):
723 """ 681 """
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 """

eric ide

mercurial