def _createHeader(self, columnLayout, **kw): IECoreMaya.CompoundParameterUI._createHeader(self, columnLayout, **kw) maya.cmds.rowLayout(numberOfColumns=2, parent=columnLayout) collapsable = True with IECore.IgnoredExceptions(KeyError): collapsable = self.parameter.userData()["UI"]["collapsable"].value lable = "Class" if collapsable else self.label() font = "smallPlainLabelFont" if collapsable else "tinyBoldLabelFont" maya.cmds.text(label=lable, font=font, align="right", annotation=self.description()) self.__menuParent = maya.cmds.iconTextStaticLabel( image="arrowDown.xpm", font="smallBoldLabelFont", label=self.__menuParentLabel(), style="iconAndTextHorizontal", height=23, ) # popup menu can be activated with either right or left buttons IECoreMaya.Menu(self.__menuDefinition, self.__menuParent) IECoreMaya.Menu(self.__menuDefinition, self.__menuParent, button=1)
def __init__( self, node, parameter, **kw ) : IECoreMaya.ParameterUI.__init__( self, node, parameter, maya.cmds.frameLayout( labelVisible = False, collapsable = False, ), **kw ) # passing borderVisible=False to the constructor does bugger all so we do it here instead. maya.cmds.frameLayout( self._topLevelUI(), edit=True, borderVisible=False ) collapsible = self.__parameterIsCollapsible() self.__kw = kw.copy() if collapsible : self.__kw["hierarchyDepth"] = self.__kw.get( "hierarchyDepth", -1 ) + 1 collapsed = self._retrieveCollapsedState( collapsible ) self.__collapsible = IECoreMaya.Collapsible( annotation = self.description(), label = self.label(), labelFont = IECoreMaya.CompoundParameterUI._labelFont( self.__kw["hierarchyDepth"] ), labelIndent = IECoreMaya.CompoundParameterUI._labelIndent( self.__kw["hierarchyDepth"] ), labelVisible = collapsible, collapsed = collapsed, expandCommand = self.__expand, collapseCommand = self.__collapse, ) self.__formLayout = maya.cmds.formLayout( parent=self.__collapsible.frameLayout() ) self.__buttonRow = maya.cmds.rowLayout( nc=3, adj=3, cw3=( 25, 25, 40 ), parent=self.__formLayout ) self.__addButton = maya.cmds.picture( image="ie_addIcon_grey.xpm", parent=self.__buttonRow, width=21 ) IECoreMaya.Menu( IECore.curry( self.__classMenuDefinition, None ), self.__addButton ) IECoreMaya.Menu( IECore.curry( self.__classMenuDefinition, None ), self.__addButton, button=1 ) self.__toolsButton = maya.cmds.picture( image="ie_actionIcon_grey.xpm", parent=self.__buttonRow, width=21 ) IECoreMaya.Menu( IECore.curry( self.__toolsMenuDefinition, None ), self.__toolsButton ) IECoreMaya.Menu( IECore.curry( self.__toolsMenuDefinition, None ), self.__toolsButton, button=1 ) self.__classInfo = [] self.__childUIs = {} # mapping from parameter name to ui name self.replace( node, parameter )
def _addPopupMenu( self, parentUI, **kw ) : existingMenus = maya.cmds.control( parentUI, query=True, popupMenuArray=True ) if existingMenus : for m in existingMenus : maya.cmds.deleteUI( m, menu=True ) IECoreMaya.Menu( definition = IECore.curry( self.__popupMenuDefinition, **kw ), parent = parentUI ) if "button1" in kw and kw["button1"] : IECoreMaya.Menu( definition = IECore.curry( self.__popupMenuDefinition, **kw ), parent = parentUI, button = 1 )
def _dagMenu( parentMenu, sceneShape ) : menuDef = _menuDefinition( sceneShape ) if not menuDef : return # Pass menu definition to registered callbacks to collect changes / additions for callback in __dagMenuCallbacks : callback( menuDef, sceneShape ) # build menu from menu definition cortexMenu = IECoreMaya.Menu( menuDef, parentMenu, keepCallback = True )
def createCortexMenu(): if os.environ.get("IECOREMAYA_DISABLE_MENU", "0") == "1": return m = IECore.MenuDefinition() m.append("/Create Op", { "subMenu": opCreationMenuDefinition, }) global __cortexMenu __cortexMenu = IECoreMaya.Menu(m, "MayaWindow", "Cortex")._topLevelUI()
def createMenu(label, definition, parent): global __cortexMenus __cortexMenus[label] = (definition, IECoreMaya.Menu(definition, parent, label)._topLevelUI())
def __drawHeaderParameterControl(self, parameter, fnPH): ## \todo This would be so much easier if we could just use ParameterUI # instances for each of the controls. We can't because they all do their # own labelling and are layed out for an attribute editor. if we do the # todo in ParameterUI to remove the labels and stuff then we can do the # todo here. control = None parameterPlugPath = fnPH.parameterPlugPath(parameter) annotation = IECore.StringUtil.wrap( "%s\n\n%s" % (parameterPlugPath.split(".")[1], parameter.description), 48) if parameter.presetsOnly: control = maya.cmds.iconTextStaticLabel( image="arrowDown.xpm", font="smallBoldLabelFont", style="iconAndTextHorizontal", height=23, width=80, annotation=annotation, ) IECoreMaya.Menu(IECore.curry(self.__presetsMenu, parameter), control) IECoreMaya.Menu(IECore.curry(self.__presetsMenu, parameter), control, button=1) self.__presetParameters.append(parameter) self.__presetUIs.append(control) if self.__attributeChangedCallbackId is None: self.__attributeChangedCallbackId = IECoreMaya.CallbackId( maya.OpenMaya.MNodeMessage.addAttributeChangedCallback( self.__vectorParent().node(), self.__attributeChanged)) self.__updatePresetLabel(len(self.__presetUIs) - 1) elif isinstance(parameter, IECore.BoolParameter): control = maya.cmds.checkBox(label="", annotation=annotation) maya.cmds.connectControl(control, parameterPlugPath) elif isinstance(parameter, IECore.FloatParameter): control = maya.cmds.floatField(annotation=annotation, minValue=parameter.minValue, maxValue=parameter.maxValue, width=45, pre=4) maya.cmds.connectControl(control, parameterPlugPath) elif isinstance(parameter, IECore.IntParameter): kw = {} if parameter.hasMinValue(): kw["minValue"] = parameter.minValue if parameter.hasMaxValue(): kw["maxValue"] = parameter.maxValue control = maya.cmds.intField(annotation=annotation, width=45, **kw) maya.cmds.connectControl(control, parameterPlugPath) elif isinstance(parameter, IECore.Color3fParameter): control = maya.cmds.attrColorSliderGrp( label="", columnWidth=((1, 1), (2, 30), (3, 1)), columnAttach=((1, "both", 0), (2, "both", 0), (3, "left", 0)), attribute=parameterPlugPath, annotation=annotation, showButton=False) elif isinstance(parameter, IECore.StringParameter): control = maya.cmds.textField(annotation=annotation, width=150) maya.cmds.connectControl(control, parameterPlugPath) elif isinstance(parameter, IECore.V2fParameter): control = maya.cmds.rowLayout(nc=2, cw2=(45, 45)) column1 = maya.cmds.floatField(annotation=annotation, width=45, pre=4, parent=control) maya.cmds.connectControl(column1, parameterPlugPath + "X") column2 = maya.cmds.floatField(annotation=annotation, width=45, pre=4, parent=control) maya.cmds.connectControl(column2, parameterPlugPath + "Y") else: IECore.msg( IECore.Msg.Level.Warning, "ClassVectorParameterUI", "Parameter \"%s\" has unsupported type for inclusion in header ( %s )." % (parameter.name, parameter.typeName())) return control
def __buildOptionalHeaderUI(self, formLayout, attachForm, attachControl, lastControl): defaultLabel = "" try: parentUIUserData = self.__vectorParent().parameter.userData()["UI"] defaultLabelStyle = parentUIUserData["defaultChildLabel"].value if 'classname' in defaultLabelStyle.lower(): defaultLabel = self.__class()[2] if defaultLabelStyle.startswith('abbreviated'): if "classNameFilter" in parentUIUserData: classNameFilter = parentUIUserData["classNameFilter"].value defaultLabel = defaultLabel.replace( classNameFilter.strip('*'), '') if defaultLabelStyle.endswith('ToUI'): defaultLabel = maya.mel.eval('interToUI( "%s" )' % defaultLabel) defaultDescription = self.__class()[0].description except: defaultLabel = "" defaultDescription = "" labelPlugPath = self.__labelPlugPath() if labelPlugPath or defaultLabel: label = maya.cmds.getAttr( labelPlugPath) if labelPlugPath else defaultLabel description = self.__parameter[ "label"].description if labelPlugPath else defaultDescription self.__label = maya.cmds.text( parent=formLayout, align="left", label=label, font=IECoreMaya.CompoundParameterUI._labelFont( self.__kw["hierarchyDepth"]), annotation=IECore.StringUtil.wrap(description, 48), width=190 - IECoreMaya.CompoundParameterUI._labelIndent( self.__kw["hierarchyDepth"]), recomputeSize=False, ) if labelPlugPath: lockedLabel = False with IECore.IgnoredExceptions(KeyError): lockedLabel = self.__parameter["label"].userData( )["UI"]["locked"] if not lockedLabel: renameMenu = IECore.MenuDefinition([ ("Change label...", { "command": self.__changeLabel }), ]) IECoreMaya.Menu(renameMenu, self.__label) IECoreMaya.Menu(renameMenu, self.__label, button=1) attachForm += [ (self.__label, "top", 0), (self.__label, "bottom", 0), ] attachControl += [ (self.__label, "left", 4, lastControl), ] lastControl = self.__label return self.__drawHeaderParameterControls( formLayout, attachForm, attachControl, lastControl, "classVectorParameterHeader")
def __init__(self, parameter, **kw): IECoreMaya.UIElement.__init__(self, maya.cmds.columnLayout()) if not isinstance(self.__vectorParent(), ClassVectorParameterUI): raise RuntimeError("Parent must be a ClassVectorParameterUI") self.__kw = kw.copy() self.__kw["hierarchyDepth"] = self.__kw.get("hierarchyDepth", -1) + 1 self.__parameter = parameter headerFormLayout = maya.cmds.formLayout() attachForm = [] attachControl = [] # triangle for expanding to view all parameters self.__parameterVisibilityIcon = maya.cmds.iconTextButton( style="iconOnly", height=20, width=20, image="arrowRight.xpm", command=self._createCallback(self.__toggleParameterVisibility), annotation="Show parameters", visible=self.__parameterIsCollapsible(), ) attachForm += [ (self.__parameterVisibilityIcon, "left", IECoreMaya.CompoundParameterUI._labelIndent( self.__kw["hierarchyDepth"])), (self.__parameterVisibilityIcon, "top", 0), (self.__parameterVisibilityIcon, "bottom", 0), ] lastControl = self.__buildOptionalPreHeaderUI( headerFormLayout, attachForm, attachControl, self.__parameterVisibilityIcon) # layer icon layerIcon = maya.cmds.picture( width=20, image="%s.xpm" % self.__classIconName(), annotation=IECore.StringUtil.wrap( self.__class()[0].description + "\n\n" + "Click to reorder or remove.", 48, )) IECoreMaya.Menu(self.__layerMenu, layerIcon) IECoreMaya.Menu(self.__layerMenu, layerIcon, button=1) attachControl += [ (layerIcon, "left", 0, lastControl), ] attachForm += [ (layerIcon, "top", 0), (layerIcon, "bottom", 0), ] # class specific fields self.__attributeChangedCallbackId = None self.__presetParameters = [] self.__presetUIs = [] self.__buildOptionalHeaderUI(headerFormLayout, attachForm, attachControl, layerIcon) maya.cmds.formLayout( headerFormLayout, edit=True, attachForm=attachForm, attachControl=attachControl, ) # CompoundParameterUI to hold child parameters maya.cmds.setParent(self._topLevelUI()) self.__compoundParameterUI = IECoreMaya.CompoundParameterUI( self.__vectorParent().node(), parameter, labelVisible=False, **kw) self.setCollapsed(self.getCollapsed(), False)