Mercurial > lcfOS
view python/astviewer.py @ 165:598d3888a11c
Added front class and fided AST view
author | Windel Bouwman |
---|---|
date | Fri, 22 Mar 2013 15:12:38 +0100 |
parents | e023d3ce1d63 |
children | 49f1ab80d040 |
line wrap: on
line source
from PyQt4.QtCore import * from PyQt4.QtGui import * from c3 import Visitor class AstModelBuilder: def __init__(self): self.visitor = Visitor(self.p1, self.p2) def build(self, pkg): model = QStandardItemModel() model.setHorizontalHeaderLabels(['Object', 'Type']) self.curItem = model.invisibleRootItem() self.visitor.visit(pkg) return model def p1(self, node): i = QStandardItem(str(node)) typ = str(node.typ) if hasattr(node, 'typ') else '' ti = QStandardItem(str(typ)) ti.setData(node) i.setData(node) self.curItem.appendRow([i, ti]) self.curItem = i def p2(self, node): self.curItem = self.curItem.parent() # The actual widget: class AstViewer(QTreeView): sigNodeSelected = pyqtSignal(object) def __init__(self, parent=None): super(AstViewer, self).__init__(parent) self.clicked.connect(self.selectHandler) self.modelBuilder = AstModelBuilder() 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() def selectHandler(self, index): if not index.isValid(): return model = self.model() item = model.itemFromIndex(index) node = item.data() self.sigNodeSelected.emit(node)