示例#1
0
    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 )
示例#3
0
	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 )
示例#4
0
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 )
示例#5
0
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()
示例#6
0
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)