parmTemplate insertBefore Folder

   2148   1   0
User Avatar
Member
19 posts
Joined: 9月 2011
Offline
Hi.

I am trying to make Parm Menu Tool to move parameter position. It's just getting parmTemplate and remove original one and putting it on before the parameter above the original one by insertBefore(). It basically works but if it's located on top in folder, I want get it out of the folder. So in that case, I tried to put on before the folder that contained original parameter. But It doesn't work. If the parameter was under the folder, it works.

Please check the picture, in my head, the target Folder for insertBefore(Folder, Parm) is same at the cases labelA and LabelB. but somehow labelA can't go Before Folder. If anyone know the any trick, please let me know.

parm = kwargs["parms"][0]
parmTmp = parm.parmTemplate()
node = parm.node()
parmGroup = node.parmTemplateGroup()
parmIndexes = parmGroup.findIndices(parmTmp)
curFolder = parmGroup
parmHierarchy = [curFolder]
for i in parmIndexes:
	curItem = curFolder.parmTemplates()[i]
	if curItem.type().name() == "Folder":
		curFolder = curItem
		parmHierarchy.append(curItem)
index = parmIndexes[-1]
if index == 0:
	parmUp = parmHierarchy[-1]
else:
	parmUp = parmHierarchy[-1].parmTemplates()[index-1]
print parmUp
parmGroup.remove(parmTmp)
parmGroup.insertBefore(parmUp,parmTmp)
node.setParmTemplateGroup(parmGroup)

Thanks,
Ryoji
Edited by ryoji - 2016年11月5日 21:02:29

Attachments:
parmPos.png (54.5 KB)

User Avatar
Member
19 posts
Joined: 9月 2011
Offline
My co-worker helped it.

Once I removed any parm from folder the folder that connected to my variable is no longer same object. I just needed to reselect the folder from parmTemplateGroup. that makes sense.

And I made this script to move parameter. just wanted to share.

from PySide import QtCore
from PySide import QtGui
parm = kwargs["parms"][0]
parmTmp = parm.parmTemplate()
node = parm.node()
parmGroup = node.parmTemplateGroup()
class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()
    
    def initUI(self):
        Lbox = QtGui.QVBoxLayout()
        
        mpos = QtGui.QCursor().pos()
        self.setGeometry(mpos.x() - 100 ,mpos.y() - 200 ,250,120)
        self.setWindowTitle('Parm Up & Down')
        
        self.checkBox = QtGui.QCheckBox('Keep in Current Folder', self)
        Lbox.addWidget(self.checkBox)    
        
        upButton = QtGui.QPushButton('Up', self)
        Lbox.addWidget(upButton)
        upButton.clicked.connect( self.upButtonPress )
        
        downButton = QtGui.QPushButton('Down', self)
        Lbox.addWidget(downButton)
        downButton.clicked.connect( self.downButtonPress )
        
        self.setLayout(Lbox)
        
    def HierarchyIndexies(self):
        return parmGroup.findIndices(parmTmp)
        
    def HierarchyFolders(self):
        curFolder = parmGroup
        parmHierarchy = [curFolder]
        for i in self.HierarchyIndexies():
            curItem = curFolder.parmTemplates()[i]
            if curItem.type().name() == "Folder":
                curFolder = curItem
                parmHierarchy.append(curItem)
        return parmHierarchy
        
    def upButtonPress(self):
        index = self.HierarchyIndexies()[-1]
        folder = self.HierarchyFolders()[-1]
        if index == 0:
            parmNext = folder
        else:
            parmNext = folder.parmTemplates()[index-1]
        
        if not (index == 0 and self.checkBox.isChecked()):
            parmGroup.remove(parmTmp)
            parmRef = parmGroup.find(parmNext.name())
            if index != 0 and parmRef.type().name() == "Folder" and not self.checkBox.isChecked():
                parmGroup.appendToFolder(parmRef,parmTmp)
            else:
                parmGroup.insertBefore(parmRef,parmTmp)
            node.setParmTemplateGroup(parmGroup)
    
    def downButtonPress(self):
        index = self.HierarchyIndexies()[-1]
        folder = self.HierarchyFolders()[-1]
        folNum = len(folder.parmTemplates())-1
        if index == folNum:
            parmNext = folder
        else:
            parmNext = folder.parmTemplates()[index+1]
        
        if not (index == folNum and self.checkBox.isChecked()):
            parmGroup.remove(parmTmp)
            parmRef = parmGroup.find(parmNext.name())
            if index != folNum and parmRef.type().name() == "Folder" and not self.checkBox.isChecked():
                if len(parmRef.parmTemplates()) != 0:
                    parmGroup.insertBefore(parmRef.parmTemplates()[0],parmTmp)
                else:
                    parmGroup.appendToFolder(parmRef,parmTmp)
            else:
                parmGroup.insertAfter(parmRef,parmTmp)
            node.setParmTemplateGroup(parmGroup)
dialog = Example()
dialog.show()

Ryoji
Edited by ryoji - 2016年11月12日 01:35:15

Attachments:
parmUpDown.gif (209.1 KB)

  • Quick Links