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
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
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