view python/libs/widgets/astviewer.py @ 64:4a27c28c7d0f

File movage
author windel
date Sun, 07 Oct 2012 17:13:47 +0200
parents python/apps/ide/astviewer.py@32078200cdd6
children
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)