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)