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():