def SetItems(parentItem, fictiveObjects, level): level += 1 for object in fictiveObjects: type = object.type if type not in showTypes and type != "nameismain": continue # Construct text if type == "import": text = "→ %s (%s)" % (object.name, object.text) elif type == "todo": text = object.name elif type == "nameismain": text = object.text elif type == "class": text = object.name elif type == "def": text = object.name + "()" elif type == "attribute": text = "- " + object.name elif type in ("cell", "##", "#%%", "# %%"): type = "cell" text = "## " + object.name + " " * 120 else: text = "%s %s" % (type, object.name) # Create item thisItem = QtWidgets.QTreeWidgetItem(parentItem, [text]) color = QtGui.QColor(colours[object.type]) thisItem.setForeground(0, QtGui.QBrush(color)) font = thisItem.font(0) font.setBold(True) if type == "cell": font.setUnderline(True) thisItem.setFont(0, font) thisItem.linenr = object.linenr # Is this the current item? if ln and object.linenr <= ln and object.linenr2 > ln: selectedItem[0] = thisItem # Any children that we should display? if object.children: SetItems(thisItem, object.children, level) # Set visibility thisItem.setExpanded(bool(level < showLevel))
def updateStructure(self): """Updates the tree.""" # Get editor editor = pyzo.editors.getCurrentEditor() if not editor: return # Something to show result = pyzo.parser._getResult() if result is None: return # Do the ids match? id0, id1, id2 = self._currentEditorId, id(editor), result.editorId if id0 != id1 or id0 != id2: return # Get current line number and the structure ln = editor.textCursor().blockNumber() ln += 1 # is ln as in line number area # Define colours colours = { "cell": "#b58900", "class": "#cb4b16", "def": "#073642", "attribute": "#657b83", "import": "#268bd2", "todo": "#d33682", "nameismain": "#859900", } # colours = {'cell':'#007F00', 'class':'#0000FF', 'def':'#007F7F', # 'attribute':'#444444', 'import':'#8800BB', 'todo':'#FF3333', # 'nameismain':'#007F00'} # Define what to show showTypes = self._config.showTypes # Define to what level to show (now is also a good time to save) showLevel = int(self._slider.value()) self._config.level = showLevel showLevel = showLevel if showLevel < 5 else 99 # Define function to set items selectedItem = [None] def SetItems(parentItem, fictiveObjects, level): level += 1 for object in fictiveObjects: type = object.type if type not in showTypes and type != "nameismain": continue # Construct text if type == "import": text = "→ %s (%s)" % (object.name, object.text) elif type == "todo": text = object.name elif type == "nameismain": text = object.text elif type == "class": text = object.name elif type == "def": text = object.name + "()" elif type == "attribute": text = "- " + object.name elif type in ("cell", "##", "#%%", "# %%"): type = "cell" text = "## " + object.name + " " * 120 else: text = "%s %s" % (type, object.name) # Create item thisItem = QtWidgets.QTreeWidgetItem(parentItem, [text]) color = QtGui.QColor(colours[object.type]) thisItem.setForeground(0, QtGui.QBrush(color)) font = thisItem.font(0) font.setBold(True) if type == "cell": font.setUnderline(True) thisItem.setFont(0, font) thisItem.linenr = object.linenr # Is this the current item? if ln and object.linenr <= ln and object.linenr2 > ln: selectedItem[0] = thisItem # Any children that we should display? if object.children: SetItems(thisItem, object.children, level) # Set visibility thisItem.setExpanded(bool(level < showLevel)) # Go self._tree.setUpdatesEnabled(False) self._tree.clear() SetItems(self._tree, result.rootItem.children, 0) self._tree.setUpdatesEnabled(True) # Handle selected item selectedItem = selectedItem[0] if selectedItem: selectedItem.setBackground(0, QtGui.QBrush(QtGui.QColor("#CCC"))) self._tree.scrollToItem(selectedItem) # ensure visible