1
|
1 from PyQt4.QtCore import *
|
|
2 from PyQt4.QtGui import *
|
164
|
3 from c3 import Visitor
|
1
|
4
|
|
5 def astToNamedElement(astNode, parentNode):
|
|
6 """ Helper to convert and AST tree to NamedElement tree: """
|
|
7 item = QStandardItem(str(astNode))
|
4
|
8 item.setData(astNode)
|
1
|
9 parentNode.appendRow(item)
|
|
10 for c in astNode.getChildren():
|
|
11 astToNamedElement(c, item)
|
|
12
|
|
13 # The actual widget:
|
|
14 class AstViewer(QTreeView):
|
4
|
15 sigNodeSelected = pyqtSignal(object)
|
1
|
16 def __init__(self, parent=None):
|
|
17 super(AstViewer, self).__init__(parent)
|
|
18 self.setHeaderHidden(True)
|
4
|
19 self.clicked.connect(self.selectHandler)
|
1
|
20
|
|
21 def setAst(self, ast):
|
|
22 """ Create a new model and add all ast elements to it """
|
|
23 model = QStandardItemModel()
|
164
|
24 print(ast)
|
1
|
25 if ast:
|
|
26 astToNamedElement(ast, model.invisibleRootItem())
|
164
|
27 self.setModel(model)
|
1
|
28 self.expandAll()
|
|
29
|
4
|
30 def selectHandler(self, index):
|
1
|
31 if not index.isValid():
|
|
32 return
|
4
|
33 model = self.model()
|
|
34 item = model.itemFromIndex(index)
|
|
35 node = item.data()
|
|
36 self.sigNodeSelected.emit(node)
|
1
|
37
|
|
38
|