Mercurial > lcfOS
diff python/astviewer.py @ 168:49f1ab80d040
Added awesome icons
author | Windel Bouwman |
---|---|
date | Fri, 22 Mar 2013 19:09:38 +0100 |
parents | 598d3888a11c |
children | ee0d30533dae |
line wrap: on
line diff
--- a/python/astviewer.py Fri Mar 22 17:40:13 2013 +0100 +++ b/python/astviewer.py Fri Mar 22 19:09:38 2013 +0100 @@ -1,18 +1,27 @@ from PyQt4.QtCore import * from PyQt4.QtGui import * -from c3 import Visitor +from c3 import Visitor, astnodes class AstModelBuilder: def __init__(self): + self.functionIco = QIcon(QPixmap('functionicon.png').scaled(32, 32)) + self.variableIco = QIcon(QPixmap('variableicon.png').scaled(32, 32)) self.visitor = Visitor(self.p1, self.p2) + self.model = QStandardItemModel() def build(self, pkg): - model = QStandardItemModel() - model.setHorizontalHeaderLabels(['Object', 'Type']) - self.curItem = model.invisibleRootItem() + self.model.clear() + self.model.setHorizontalHeaderLabels(['Object', 'Type']) + self.curItem = self.model.invisibleRootItem() self.visitor.visit(pkg) - return model def p1(self, node): - i = QStandardItem(str(node)) + if type(node) is astnodes.Variable: + i = QStandardItem(self.variableIco, str(node)) + elif type(node) is astnodes.Function: + i = QStandardItem(self.functionIco, str(node)) + elif type(node) is astnodes.Package: + i = QStandardItem(str(node)) + else: + return typ = str(node.typ) if hasattr(node, 'typ') else '' ti = QStandardItem(str(typ)) ti.setData(node) @@ -20,7 +29,8 @@ self.curItem.appendRow([i, ti]) self.curItem = i def p2(self, node): - self.curItem = self.curItem.parent() + if type(node) in [astnodes.Variable, astnodes.Function, astnodes.Package]: + self.curItem = self.curItem.parent() # The actual widget: class AstViewer(QTreeView): @@ -29,13 +39,12 @@ super(AstViewer, self).__init__(parent) self.clicked.connect(self.selectHandler) self.modelBuilder = AstModelBuilder() + self.setModel(self.modelBuilder.model) def setAst(self, ast): """ Create a new model and add all ast elements to it """ - print(ast) - if ast: - self.setModel(self.modelBuilder.build(ast)) - self.expandAll() + self.modelBuilder.build(ast) + self.expandAll() def selectHandler(self, index): if not index.isValid():