PyMaxExplorer/qtViewModels.py

PyMaxExplorer/qtViewModels.py
1 '''
2  view models for 3ds Max object tree
3 '''
4 from PySide2 import QtCore
5 import os
6 
7 class vmodelMaxObjects(QtCore.QAbstractItemModel):
8  def __init__(self, root, parent = None, header = "Scene objects tree"):
9  super(vmodelMaxObjects, self).__init__(parent)
10  self._header = header
11  self._root = root
12 
13  def index(self, row, column, parent):
14  n = self.getNode(parent).child(row)
15  if n:
16  return self.createIndex(row, column, n)
17  else:
18  return QtCore.QModelIndex()
19 
20  def getNode(self, index):
21  if not index.isValid() or not index.internalPointer():
22  return self._root
23  return index.internalPointer()
24 
25  def columnCount(self, parent):
26  return 1
27 
28  def rowCount(self, parent):
29  parentnode = self._root
30  if parent.isValid():
31  parentnode = parent.internalPointer()
32  return parentnode.numChildren()
33 
34  def data(self, index, role):
35  if index.isValid() and index.internalPointer() and role == QtCore.Qt.DisplayRole and index.column() == 0:
36  return index.internalPointer()._name
37 
38  def setData(self, index, value, role = QtCore.Qt.EditRole):
39  if not index.isValid() or not index.internalPointer() and role != QtCore.Qt.EditRole:
40  node.setData(index.column(), value)
41  self.dataChanged.emit(index, index)
42  return True
43  return False
44 
45  def headerData(self, section, orientation, role):
46  if role == QtCore.Qt.DisplayRole and section == 0:
47  return self._header
48  return None
49 
50  def flags(self, index):
51  return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEditable
52 
53  def parent(self, index):
54  parentNode = self.getNode(index).parent()
55  if parentNode == self._root:
56  return QtCore.QModelIndex()
57  return self.createIndex(parentNode.row(), 0, parentNode)