// =========================================================================== // Copyright 2018 Autodesk, Inc. All rights reserved. // // Use of this software is subject to the terms of the Autodesk license // agreement provided at the time of installation or download, or which // otherwise accompanies this software in either electronic or hard copy form. // =========================================================================== global proc nucleusSolverMenuChangeCmd(string $optMenu) { int $sel = `optionMenuGrp -q -sl $optMenu`; string $nucleus = ""; if( $sel > 1 ){ string $nucleusNodes[] = `ls -type "nucleus"`; int $i = $sel - 2; if( $i < size( $nucleusNodes ) ){ $nucleus = $nucleusNodes[$i]; } } setActiveNucleusNode( $nucleus ); } // // Procedure Name: // updateNucleusSolverMenu // // Description: // Set the menu items for possible current solvers // global proc updateNucleusSolverMenu(int $setup, string $optMenu) { string $nucleusNodes[] = `ls -type "nucleus"`; // This will typically occur when we have loaded a // scene with nucleus solvers already in it. If this // is the first time the option box is loaded we then // pick the first nucleus solver in the dag to use. // string $activeNucleus = getActiveNucleusNode( $setup, // selectExisting false ); // createNew //string $itemName = ($optMenu +"Item"); string $itemName = ("NucItem"); // delete any entries int $items = `optionMenuGrp -q -ni $optMenu`; if( $items > 0 ){ string $savedParent = `setParent -q`; string $fullName = `setParent $optMenu`; setParent -menu ($fullName + "|OptionMenu"); for( $i=0; $i < $items-1; $i++){ deleteUI ($itemName + $i); } setParent $savedParent; } int $sel = 1; int $numNodes = size( $nucleusNodes ); if( $numNodes > 0 ){ string $savedParent = `setParent -q`; string $fullName = `setParent $optMenu`; setParent -menu ($fullName + "|OptionMenu"); for( $i = 0; $i < $numNodes; $i++ ){ string $nucleus = $nucleusNodes[$i]; string $mi =` menuItem -l $nucleus -c ("setActiveNucleusNode " + $nucleus) ($itemName + $i)`; if($nucleus == $activeNucleus){ $sel = $i+2; } } setParent $savedParent; } // The following is a workaround for missing // optionMenuGrp refreshes. We set the menu to // a different indice before setting it to the // desired one. if( $sel > 1 ){ optionMenuGrp -e -sl 1 $optMenu; } else if( $numNodes > 0 ){ optionMenuGrp -e -sl 2 $optMenu; } optionMenuGrp -e -sl $sel $optMenu; } global proc string nucleusSolverButton(string $name ) { if($name == "" ){ $name = "nSolverOptionMenu"; } string $menuName = `optionMenuGrp -l (uiRes("m_nucleusSolverButton.kSolver")) $name`; menuItem -l (uiRes("m_nucleusSolverButton.kCreateNewSolver")) -c "setActiveNucleusNode \"\""; optionMenuGrp -e -cc ("nucleusSolverMenuChangeCmd "+$menuName) $menuName; updateNucleusSolverMenu(1, $menuName); if( $name == "nSolverOptionMenu" ){ scriptJob -p $menuName -e "SelectionChanged" ("updateNucleusSolverMenu 0 "+$menuName); } return $menuName; }