PyMaxExplorer/explorer.py
2 UI platform which demostrate the PySide ui loading and
3 display object tree on explorer.
7 from PySide
import QtCore, QtGui
10 from maxDataModels
import mxTreeNode
11 from qtViewModels
import vmodelMaxObjects
14 uitype, basetype = MaxPlus.LoadUiType(os.path.join(os.path.dirname(__file__),
'mainUI.ui'))
16 class PyMaxExplorer(basetype,uitype):
17 def __init__(self, parent=None):
18 super(PyMaxExplorer,self).__init__(parent)
22 self.setupMaxCallbacks()
24 def setupMaxCallbacks(self):
25 self._callbackItem = rt.NodeEventCallback(all=self.cbNodeEvent)
27 def teardownMaxCallbacks(self):
28 self._callbackItem =
None
30 def buildViewModel(self):
31 self._rootNode = self.buildTree(rt.rootNode)
32 self._proxyModel = QtGui.QSortFilterProxyModel()
33 self._model = vmodelMaxObjects(self._rootNode)
34 self._proxyModel.setSourceModel(self._model)
35 self._proxyModel.setDynamicSortFilter(
True)
36 self._proxyModel.setFilterCaseSensitivity(QtCore.Qt.CaseInsensitive)
37 self.treeView_objects.setModel(self._proxyModel)
38 self.treeView_objects.setSortingEnabled(
True)
39 QtCore.QObject.connect(self.uiGraphFilter, QtCore.SIGNAL(
"textChanged(QString)"), self._proxyModel.setFilterRegExp)
41 def connectActions(self):
42 self.connect(self.actionWatch, QtCore.SIGNAL(
'triggered()'),self.actWatch)
43 self.connect(self.actionAbout, QtCore.SIGNAL(
'triggered()'),self.actAbout)
44 self.connect(self.actionRefresh, QtCore.SIGNAL(
'triggered()'),self.actRefresh)
45 self.connect(self.actionExit, QtCore.SIGNAL(
'triggered()'),self.actExit)
46 self.connect(self.actionUndo, QtCore.SIGNAL(
'triggered()'),self.actUndo)
47 self.connect(self.actionRedo, QtCore.SIGNAL(
'triggered()'),self.actRedo)
53 QtGui.QMessageBox.about(self,
"PyMaxExplorer 1.0",
"PyMaxExplorer is a demo for pymxs and PySide usage on 3ds Max")
67 def cbNodeEvent(self, event, node):
70 def buildTree(self, mxObj, parent = None, userName = ''):
74 newNode = mxTreeNode(nodeName, parent)
75 for c
in mxObj.children:
76 self.buildTree(c, newNode)