1 from PySide2
import QtCore
4 def __init__( self, nodeData = '', parentNode = None ):
6 self.nodeData = nodeData
7 self.parentNode = parentNode
9 def addChild( self, childNode ):
10 if not childNode
in self.childNodes:
11 self.childNodes.append( childNode )
12 childNode.parentNode = self
14 def removeChild( self, childNode ):
15 if childNode
in self.childNodes:
16 self.childNodes.remove( childNode )
18 def removeAll( self ):
21 def child( self, rowNum ):
22 if rowNum < 0
or rowNum >= len(self.childNodes):
return None
23 return self.childNodes[rowNum]
25 def indexOf( self, childNode ):
26 if not childNode
in self.childNodes:
return -1
27 return self.childNodes.index( childNode )
29 def childCount( self ):
30 return len( self.childNodes )
32 def columnCount( self ):
36 if self.parentNode <>
None:
37 return self.parentNode.indexOf( self )
40 def data( self, column = 0 ):
44 return self.parentNode
46 def printNodes( self, level = 0 ):
47 for index
in range( 0, level ):
50 for childNode
in self.childNodes:
51 childNode.printNodes( level + 1 )
53 class NamespaceTreeModel( QtCore.QAbstractItemModel ):
54 def __init__( self, rootNode = node() ):
55 super( QtCore.QAbstractItemModel, self ).__init__()
57 self.rootNode = rootNode
59 def index( self, rowNum, columnNum, parentIndex ):
60 if not self.hasIndex( rowNum, columnNum, parentIndex ):
61 return QtCore.QModelIndex()
63 if not parentIndex.isValid():
64 parentNode = self.rootNode
66 parentNode = parentIndex.internalPointer()
70 lChildNode = parentNode.child( rowNum )
71 if lChildNode <>
None:
73 return self.createIndex( rowNum, columnNum, lChildNode )
75 return QtCore.QModelIndex()
77 def parent( self, index ):
79 if not index.isValid():
80 return QtCore.QModelIndex()
82 curNode = index.internalPointer()
83 if curNode == self.rootNode:
84 return QtCore.QModelIndex()
87 return self.createIndex( curNode.row(), 0, curNode.parentNode )
89 def rowCount( self, parentIndex ):
91 if parentIndex.column() > 0:
94 if not parentIndex.isValid():
95 curNode = self.rootNode
97 curNode = parentIndex.internalPointer()
99 return curNode.childCount()
101 def columnCount( self, parentIndex ):
103 if parentIndex.isValid():
104 return parentIndex.internalPointer().columnCount()
106 return self.rootNode.columnCount()
108 def data( self, index, role ):
110 if not index.isValid():
113 if role <> QtCore.Qt.DisplayRole:
116 return index.internalPointer().data( index.column() )
118 def flags( self, index ):
120 if not index.isValid():
123 return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable
125 def headerData( self, section, orientation, role ):
127 if orientation == QtCore.Qt.Horizontal
and role == QtCore.Qt.DisplayRole:
128 return self.rootNode.data( section )