Example #1
0
 def getEnabledArray(self):
     """returns an array of booleans that correspond to each override method and whether they can be wrapped"""
     array = []
     for i, info in enumerate( self.methodInfoList ):
         argUtil = factories.ApiArgUtil( self.apiClassName, self.apiMethodName, i )
         array.append( argUtil.canBeWrapped() )
     return array
Example #2
0
    def createMethodInstance(self, i ):

        #setUITemplate('attributeEditorTemplate', pushTemplate=1)

        rowSpacing = [30, 20, 400]

        defs = []
        #try:
        argUtil = factories.ApiArgUtil( self.apiClassName, self.apiMethodName, i )
        proto = argUtil.getPrototype( className=False, outputs=True, defaults=False )

        enable = argUtil.canBeWrapped()

        if argUtil.isDeprecated():
            pm.text(l='DEPRECATED')
        # main info row
        row = pm.rowLayout( '%s_rowMain%s' % (self.methodName,i), nc=3, cw3=rowSpacing, enable=enable )
        self.rows.append(row)
        pm.text(label='')

        if self.overloadPrecedenceColl is not None:
            # toggle for overloaded methods
            pm.radioButton(label='', collection=self.overloadPrecedenceColl,
                                enable = enable,
                                onCommand=pm.Callback( MethodRow.overloadPrecedenceCB, self, i ))
        pm.text(   l='', #l=proto,
                annotation = self.methodInfoList[i]['doc'],
                enable = enable)

        pm.setParent('..')

        try:
            argList = factories.apiClassOverrides[self.apiClassName]['methods'][self.apiMethodName][i]['args']
        except (KeyError, IndexError):
            argList = self.methodInfoList[i]['args']

        returnType =  self.methodInfoList[i]['returnType']
        types = self.methodInfoList[i]['types']
        args = []

        for arg , type, direction in argList:
            type = str(types[arg])
            assert arg != 'return'
            self._makeArgRow( i, type, arg, direction, self.methodInfoList[i]['argInfo'][arg]['doc'] )

        if returnType:
            self._makeArgRow( i, returnType, 'return', 'return', self.methodInfoList[i]['returnInfo']['doc'] )

        pm.separator(w=800, h=14)

        return enable
Example #3
0
    def buildUI(self, filter=None):

        if filter:
            match = False
            for i, info in enumerate(self.methodInfoList):
                argUtil = factories.ApiArgUtil(self.apiClassName,
                                               self.apiMethodName, i)
                if filter.intersection(argUtil.getInputTypes() +
                                       argUtil.getOutputTypes()):
                    match = True
                    break
            if match == False:
                return False

        self.layout = {
            'columnAlign': [1, 'right'],
            'columnAttach': [1, 'right', 8]
        }

        #print className, self.methodName, melMethods
        isOverloaded = len(self.methodInfoList) > 1
        self.frame = pm.frameLayout(w=FRAME_WIDTH,
                                    labelVisible=False,
                                    collapsable=False)
        logger.debug("building row for %s - %s" %
                     (self.methodName, self.frame))
        col = pm.columnLayout()

        enabledArray = []
        self.rows = []
        self.overloadPrecedenceColl = None
        self.enabledChBx = pm.checkBox(label=self.methodName,
                                       changeCommand=pm.CallbackWithArgs(
                                           MethodRow.enableCB, self))

        if isOverloaded:

            self.overloadPrecedenceColl = pm.radioCollection()
            for i in range(len(self.methodInfoList)):

                self.createMethodInstance(i)

        else:
            #row = rowLayout( self.methodName + '_rowMain', nc=2, cw2=[200, 400] )
            #self.enabledChBx = checkBox(label=self.methodName, changeCommand=CallbackWithArgs( MethodRow.enableCB, self ) )
            #text(label='')
            self.createMethodInstance(0)
            #setParent('..')

        pm.setParent(col)
        pm.separator(w=800, h=6)

        #self.row = rowLayout( self.methodName + '_rowSettings', nc=4, cw4=[200, 160, 180, 160] )
        #self.rows.append(row)

        self.row = pm.rowLayout(self.methodName + '_rowSettings',
                                nc=2,
                                cw2=[200, 220],
                                **self.layout)
        self.rows.append(self.row)

        # create ui elements
        pm.text(label='Mel Equivalent')

        self.melNameTextField = pm.textField(w=170, editable=False)
        self.melNameOptMenu = pm.popupMenu(parent=self.melNameTextField,
                                           button=1,
                                           postMenuCommand=pm.Callback(
                                               MethodRow.populateMelNameMenu,
                                               self))
        pm.setParent('..')

        self.row2 = pm.rowLayout(self.methodName + '_rowSettings2',
                                 nc=3,
                                 cw3=[200, 180, 240],
                                 **self.layout)
        self.rows.append(self.row2)

        pm.text(label='Use Name')
        self.nameMode = pm.radioButtonGrp(label='',
                                          nrb=3,
                                          cw4=[1, 50, 50, 50],
                                          labelArray3=['api', 'mel', 'other'])
        self.altNameText = pm.textField(w=170, enable=False)
        self.altNameText.changeCommand(
            pm.CallbackWithArgs(MethodRow.alternateNameCB, self))
        self.nameMode.onCommand(pm.Callback(MethodRow.nameTypeCB, self))

        isEnabled = self.data.get('enabled', True)

        # UI SETUP

        melName = self.data.get('melName', '')

        try:
            #self.melNameOptMenu.setValue( melName )
            self.melNameTextField.setText(melName)
            if melName != '':
                self.parent.parent.assignMelMethod(melName)

        except RuntimeError:
            # it is possible for a method name to be listed here that was set from a different view,
            # where this class was a super class and more mel commands were available.  expand the option list,
            # and make this frame read-only
            pm.menuItem(label=melName, parent=self.melNameOptMenu)
            self.melNameOptMenu.setValue(melName)
            logger.debug("making %s frame read-only" % self.methodName)
            self.frame.setEnable(False)

        self.enabledChBx.setValue(isEnabled)
        self.row.setEnable(isEnabled)
        self.row2.setEnable(isEnabled)

        name = self.data['useName']
        if name == 'API':
            self.nameMode.setSelect(1)
            self.altNameText.setEnable(False)
        elif name == 'MEL':
            self.nameMode.setSelect(2)
            self.altNameText.setEnable(False)
        else:
            self.nameMode.setSelect(3)
            self.altNameText.setText(name)
            self.altNameText.setEnable(True)

        if self.overloadPrecedenceColl:
            items = self.overloadPrecedenceColl.getCollectionItemArray()
            try:
                val = self.data.get('overloadIndex', 0)

                if val is None:
                    logger.info("no wrappable options for method %s" %
                                self.methodName)
                    self.frame.setEnable(False)
                else:
                    self.overloadPrecedenceColl.setSelect(items[val])
            except:
                pass

#            # ensure we don't use a value that is not valid
#            for val in range(val, len(enabledArray)+1):
#                try:
#                    if enabledArray[val]:
#                        break
#                except IndexError:
#                    val = None
#            if val is not None:
#                self.overloadPrecedenceColl.setSelect( items[ val ] )

        pm.setParent('..')

        pm.setParent('..')  # frame
        pm.setParent('..')  # column

        return True