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.
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.
fromPySideimportQtCorefromPySideimportQtGuiparm=kwargs["parms"][0]parmTmp=parm.parmTemplate()node=parm.node()parmGroup=node.parmTemplateGroup()classExample(QtGui.QWidget):def__init__(self):super(Example,self).__init__()self.initUI()definitUI(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)defHierarchyIndexies(self):returnparmGroup.findIndices(parmTmp)defHierarchyFolders(self):curFolder=parmGroupparmHierarchy=[curFolder]foriinself.HierarchyIndexies():curItem=curFolder.parmTemplates()[i]ifcurItem.type().name()=="Folder":curFolder=curItemparmHierarchy.append(curItem)returnparmHierarchydefupButtonPress(self):index=self.HierarchyIndexies()[-1]folder=self.HierarchyFolders()[-1]ifindex==0:parmNext=folderelse:parmNext=folder.parmTemplates()[index-1]ifnot(index==0andself.checkBox.isChecked()):parmGroup.remove(parmTmp)parmRef=parmGroup.find(parmNext.name())ifindex!=0andparmRef.type().name()=="Folder"andnotself.checkBox.isChecked():parmGroup.appendToFolder(parmRef,parmTmp)else:parmGroup.insertBefore(parmRef,parmTmp)node.setParmTemplateGroup(parmGroup)defdownButtonPress(self):index=self.HierarchyIndexies()[-1]folder=self.HierarchyFolders()[-1]folNum=len(folder.parmTemplates())-1ifindex==folNum:parmNext=folderelse:parmNext=folder.parmTemplates()[index+1]ifnot(index==folNumandself.checkBox.isChecked()):parmGroup.remove(parmTmp)parmRef=parmGroup.find(parmNext.name())ifindex!=folNumandparmRef.type().name()=="Folder"andnotself.checkBox.isChecked():iflen(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()