Mercurial > lcfOS
comparison 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 |
comparison
equal
deleted
inserted
replaced
164:e023d3ce1d63 | 165:598d3888a11c |
---|---|
1 from PyQt4.QtCore import * | 1 from PyQt4.QtCore import * |
2 from PyQt4.QtGui import * | 2 from PyQt4.QtGui import * |
3 from c3 import Visitor | 3 from c3 import Visitor |
4 | 4 |
5 def astToNamedElement(astNode, parentNode): | 5 class AstModelBuilder: |
6 """ Helper to convert and AST tree to NamedElement tree: """ | 6 def __init__(self): |
7 item = QStandardItem(str(astNode)) | 7 self.visitor = Visitor(self.p1, self.p2) |
8 item.setData(astNode) | 8 def build(self, pkg): |
9 parentNode.appendRow(item) | 9 model = QStandardItemModel() |
10 for c in astNode.getChildren(): | 10 model.setHorizontalHeaderLabels(['Object', 'Type']) |
11 astToNamedElement(c, item) | 11 self.curItem = model.invisibleRootItem() |
12 self.visitor.visit(pkg) | |
13 return model | |
14 def p1(self, node): | |
15 i = QStandardItem(str(node)) | |
16 typ = str(node.typ) if hasattr(node, 'typ') else '' | |
17 ti = QStandardItem(str(typ)) | |
18 ti.setData(node) | |
19 i.setData(node) | |
20 self.curItem.appendRow([i, ti]) | |
21 self.curItem = i | |
22 def p2(self, node): | |
23 self.curItem = self.curItem.parent() | |
12 | 24 |
13 # The actual widget: | 25 # The actual widget: |
14 class AstViewer(QTreeView): | 26 class AstViewer(QTreeView): |
15 sigNodeSelected = pyqtSignal(object) | 27 sigNodeSelected = pyqtSignal(object) |
16 def __init__(self, parent=None): | 28 def __init__(self, parent=None): |
17 super(AstViewer, self).__init__(parent) | 29 super(AstViewer, self).__init__(parent) |
18 self.setHeaderHidden(True) | |
19 self.clicked.connect(self.selectHandler) | 30 self.clicked.connect(self.selectHandler) |
31 self.modelBuilder = AstModelBuilder() | |
20 | 32 |
21 def setAst(self, ast): | 33 def setAst(self, ast): |
22 """ Create a new model and add all ast elements to it """ | 34 """ Create a new model and add all ast elements to it """ |
23 model = QStandardItemModel() | |
24 print(ast) | 35 print(ast) |
25 if ast: | 36 if ast: |
26 astToNamedElement(ast, model.invisibleRootItem()) | 37 self.setModel(self.modelBuilder.build(ast)) |
27 self.setModel(model) | 38 self.expandAll() |
28 self.expandAll() | |
29 | 39 |
30 def selectHandler(self, index): | 40 def selectHandler(self, index): |
31 if not index.isValid(): | 41 if not index.isValid(): |
32 return | 42 return |
33 model = self.model() | 43 model = self.model() |