--- a/src/eric7/Debugger/VariablesViewer.py Fri Apr 26 15:20:23 2024 +0200 +++ b/src/eric7/Debugger/VariablesViewer.py Tue May 14 10:07:11 2024 +0200 @@ -1031,11 +1031,12 @@ @type QModelIndex """ node = self.proxyModel.mapToSource(index).internalPointer() - if node.hasChildren and index.column() == 0: - state = self.isExpanded(index) - self.setExpanded(index, not state) - else: - self.__showVariableDetails(index) + if node: + if node.hasChildren and index.column() == 0: + state = self.isExpanded(index) + self.setExpanded(index, not state) + else: + self.__showVariableDetails(index) def __mdlRequestExpand(self, modelIndex): """ @@ -1054,8 +1055,12 @@ self.menu = QMenu() self.menu.addAction(self.tr("Show Details..."), self.__showDetails) self.menu.addSeparator() - self.menu.addAction(self.tr("Expand"), self.__expandChildren) - self.menu.addAction(self.tr("Collapse"), self.__collapseChildren) + self.__expandChildrenAct = self.menu.addAction( + self.tr("Expand Subitems"), self.__expandChildren + ) + self.__collapseChildrenAct = self.menu.addAction( + self.tr("Collapse Subitems"), self.__collapseChildren + ) self.menu.addAction(self.tr("Collapse All"), self.collapseAll) self.menu.addSeparator() self.menu.addAction(self.tr("Refresh"), self.__refreshView) @@ -1079,7 +1084,11 @@ @type QPoint """ gcoord = self.mapToGlobal(coord) - if self.indexAt(coord).isValid(): + index = self.indexAt(coord) + if index.isValid(): + expanded = self.isExpanded(index) + self.__expandChildrenAct.setEnabled(expanded) + self.__collapseChildrenAct.setEnabled(expanded) self.menu.popup(gcoord) else: self.backMenu.popup(gcoord) @@ -1090,12 +1099,13 @@ """ index = self.currentIndex() node = self.proxyModel.mapToSource(index).internalPointer() - for child in node.children: - if child.hasChildren: - row = node.children.index(child) - idx = self.varModel.createIndex(row, 0, child) - idx = self.proxyModel.mapFromSource(idx) - self.expand(idx) + if node: + for child in node.children: + if child.hasChildren: + row = node.children.index(child) + idx = self.varModel.createIndex(row, 0, child) + idx = self.proxyModel.mapFromSource(idx) + self.expand(idx) def __collapseChildren(self): """ @@ -1103,12 +1113,13 @@ """ index = self.currentIndex() node = self.proxyModel.mapToSource(index).internalPointer() - for child in node.children: - row = node.children.index(child) - idx = self.varModel.createIndex(row, 0, child) - idx = self.proxyModel.mapFromSource(idx) - if self.isExpanded(idx): - self.collapse(idx) + if node: + for child in node.children: + row = node.children.index(child) + idx = self.varModel.createIndex(row, 0, child) + idx = self.proxyModel.mapFromSource(idx) + if self.isExpanded(idx): + self.collapse(idx) def __refreshView(self): """ @@ -1136,6 +1147,8 @@ from .VariableDetailDialog import VariableDetailDialog node = self.proxyModel.mapToSource(index).internalPointer() + if node is None: + return val = node.value vtype = node.type