def scriptTable(*args, **kwargs): """ Maya Bug Fix: - fixed getCellCmd to work with python functions, previously only worked with mel callbacks IMPORTANT: you cannot use the print statement within the getCellCmd callback function or your values will not be returned to the table """ import uitypes cb = kwargs.pop('getCellCmd', kwargs.pop('gcc', None)) cc = kwargs.pop('cellChangedCmd', kwargs.pop('ccc', None)) uiName = cmds.scriptTable(*args, **kwargs) if "q" in kwargs or "query" in kwargs: return uiName kwargs.clear() if cb: if hasattr(cb, '__call__'): procName = 'getCellMel%d' % len(scriptTableCmds.keys()) key = '%s_%s' % (uiName, procName) procCmd = """global proc string %s( int $row, int $column ) { return python(%s.scriptTableCmds['%s'](" + $row + "," + $column + ")");} """ % (procName, thisModuleCmd, key) mel.eval(procCmd) scriptTableCmds[key] = cb # create a scriptJob to clean up the dictionary of functions cmds.scriptJob( uiDeleted=(uiName, lambda *x: scriptTableCmds.pop(key, None))) cb = procName kwargs['getCellCmd'] = cb if cc: if hasattr(cc, '__call__'): procName = 'cellChangedCmd%d' % len(scriptTableCmds.keys()) key = '%s_%s' % (uiName, procName) # Note - don't do # __import__('pymel.core.windows').XXX # ...as this will get the 'original' module, not the dynamic one! # Do: # import pymel.core.windows; import sys; sys.modules[pymel.core.windows].XXX # instead! procCmd = """global proc int %s( int $row, int $column, string $val) { return python("%s.scriptTableCmds['%s'](" + $row + "," + $column + ",'" + $val + "')");} """ % (procName, thisModuleCmd, key) mel.eval(procCmd) scriptTableCmds[key] = cc # create a scriptJob to clean up the dictionary of functions cmds.scriptJob( uiDeleted=(uiName, lambda *x: scriptTableCmds.pop(key, None))) cc = procName kwargs['cellChangedCmd'] = cc if kwargs: cmds.scriptTable(uiName, e=1, **kwargs) return uitypes.ScriptTable(uiName)
def scriptTable(*args, **kwargs): """ Maya Bug Fix: - fixed getCellCmd to work with python functions, previously only worked with mel callbacks IMPORTANT: you cannot use the print statement within the getCellCmd callback function or your values will not be returned to the table """ import uitypes cb = kwargs.pop('getCellCmd', kwargs.pop('gcc',None) ) cc = kwargs.pop('cellChangedCmd', kwargs.pop('ccc',None) ) uiName = cmds.scriptTable( *args, **kwargs ) if "q" in kwargs or "query" in kwargs: return uiName kwargs.clear() if cb: if hasattr(cb, '__call__'): procName = 'getCellMel%d' % len(scriptTableCmds.keys()) key = '%s_%s' % (uiName,procName) procCmd = """global proc string %s( int $row, int $column ) { return python(%s.scriptTableCmds['%s'](" + $row + "," + $column + ")");} """ % (procName, thisModuleCmd, key) mel.eval( procCmd ) scriptTableCmds[key] = cb # create a scriptJob to clean up the dictionary of functions cmds.scriptJob(uiDeleted=(uiName, lambda *x: scriptTableCmds.pop(key,None))) cb = procName kwargs['getCellCmd'] = cb if cc: if hasattr(cc, '__call__'): procName = 'cellChangedCmd%d' % len(scriptTableCmds.keys()) key = '%s_%s' % (uiName,procName) # Note - don't do # __import__('pymel.core.windows').XXX # ...as this will get the 'original' module, not the dynamic one! # Do: # import pymel.core.windows; import sys; sys.modules[pymel.core.windows].XXX # instead! procCmd = """global proc int %s( int $row, int $column, string $val) { return python("%s.scriptTableCmds['%s'](" + $row + "," + $column + ",'" + $val + "')");} """ % (procName, thisModuleCmd, key) mel.eval( procCmd ) scriptTableCmds[key] = cc # create a scriptJob to clean up the dictionary of functions cmds.scriptJob(uiDeleted=(uiName, lambda *x: scriptTableCmds.pop(key,None))) cc = procName kwargs['cellChangedCmd'] = cc if kwargs: cmds.scriptTable( uiName, e=1, **kwargs) return uitypes.ScriptTable(uiName)
def conditionExists(conditionName): """ Returns True if the named condition exists, False otherwise. Note that 'condition' here refers to the type used by 'isTrue' and 'scriptJob', NOT to the condition NODE. """ return conditionName in cmds.scriptJob(listConditions=True)
def conditionExists(conditionName): """ Returns True if the named condition exists, False otherwise. Parameters ---------- conditionName : str A type used by `isTrue` and `scriptJob` (*Not* a type used by the condition *node*). """ return conditionName in cmds.scriptJob(listConditions=True)
def scriptJob(*args, **kwargs): if len(args): doPassSelf = kwargs.pop('passSelf', False) else: doPassSelf = False for key in ['idleEvent', 'ie', 'tc', 'timeChange']: try: cb = kwargs[key] if callable(cb): kwargs[key] = _factories.makeUICallback(cb, args, doPassSelf) except KeyError: pass res = cmds.scriptJob(*args, **kwargs) return res