view python/astviewer.py @ 153:e05b2b216bfc

Added common
author Windel Bouwman
date Sat, 02 Mar 2013 09:58:31 +0100
parents 5a965e9664f2
children e023d3ce1d63
line wrap: on
line source

from PyQt4.QtCore import *
from PyQt4.QtGui import *

def astToNamedElement(astNode, parentNode):
   """ Helper to convert and AST tree to NamedElement tree: """
   item = QStandardItem(str(astNode))
   item.setData(astNode)
   parentNode.appendRow(item)
   for c in astNode.getChildren():
      astToNamedElement(c, item)

# The actual widget:
class AstViewer(QTreeView):
   sigNodeSelected = pyqtSignal(object)
   def __init__(self, parent=None):
      super(AstViewer, self).__init__(parent)
      self.setHeaderHidden(True)
      self.clicked.connect(self.selectHandler)

   def setAst(self, ast):
      """ Create a new model and add all ast elements to it """
      model = QStandardItemModel()
      if ast:
         astToNamedElement(ast, model.invisibleRootItem())
      self.setModel( model )
      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)