// Copyright (C) 1997-2006 Autodesk, Inc., and/or its licensors.
// All rights reserved.
//
// The coded instructions, statements, computer programs, and/or related
// material (collectively the "Data") in these files contain unpublished
// information proprietary to Autodesk, Inc. ("Autodesk") and/or its licensors,
// which is protected by U.S. and Canadian federal copyright law and by
// international treaties.
//
// The Data is provided for use exclusively by You. You have the right to use,
// modify, and incorporate this Data into other products for purposes authorized 
// by the Autodesk software license agreement, without fee.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. AUTODESK
// DOES NOT MAKE AND HEREBY DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTIES
// INCLUDING, BUT NOT LIMITED TO, THE WARRANTIES OF NON-INFRINGEMENT,
// MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, OR ARISING FROM A COURSE 
// OF DEALING, USAGE, OR TRADE PRACTICE. IN NO EVENT WILL AUTODESK AND/OR ITS
// LICENSORS BE LIABLE FOR ANY LOST REVENUES, DATA, OR PROFITS, OR SPECIAL,
// DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES, EVEN IF AUTODESK AND/OR ITS
// LICENSORS HAS BEEN ADVISED OF THE POSSIBILITY OR PROBABILITY OF SUCH DAMAGES.

//
// Alias Script File
// MODIFY THIS AT YOUR OWN RISK
//
// Creation Date:  14 July 1996
//
//  Procedure Name:
//      EditMenu
//
//  Description:
//		This procedure creates the main menubar Edit menu.
//
//  Input Arguments:
//      Parent window that menu will be a part of.
//
//  Return Value:
//      None.
//

global proc deleteSelectRigidBodies() 
//
//	Deletes all the rigid bodies associated
//  with the selected items.
//
{
   	string $selectedItems[] = `ls -sl`; 

	for ($i = 0; $i < size( $selectedItems ); $i++)
	{
	     string	$leaves[] = `ls -dag -leaf -showType $selectedItems[$i]`;

		// Delete all the selected rigid bodies.
		//
	    for ($j = 0; $j < size( $leaves ); $j += 2)
	    {
		    if ($leaves[$j+1] == "rigidBody")
		    {
			    delete $leaves[$j];
		    }
		}
	}
}

global proc defineCharacter( )
//
//  Procedure Name:
//      defineCharacter
//
//  Description:
//		Creates a set using the selected items,
//		so that users can define all the nodes
//		in the DAG that make up their "characters".
//
//  Input Arguments:
//      None.
//
//  Return Value:
//      None.
{
	string $OK = (uiRes("m_buildEditMenu.kOk"));
	string $cancel = (uiRes("m_buildEditMenu.kCancel"));
	string $toShelf = (uiRes("m_buildEditMenu.kAddToShelf"));

	// Prompt the user for a new character name
	//
	string $result = `promptDialog
		-title (uiRes("m_buildEditMenu.kCreateQuickSelectSet"))
		-message (uiRes("m_buildEditMenu.kEnterQuickSelectSetname"))
		-text (uiRes("m_buildEditMenu.kSet"))
		-button $OK
		-button $cancel
		-button $toShelf
		-defaultButton $OK
		-cancelButton $cancel
		-dismissString $cancel`;

	// If the result was "OK", then proceed
	//
	if ( $result == $OK ) {
		// Also, notice that the `type` is being set
		// to "gCharacterSet" - just trying to pick
		// a name that users probably won't type
		//
		string $characterName = `promptDialog -q`;
		sets -text "gCharacterSet" -name $characterName;
	}

	// If the result was "Add toShelf", then proceed
	//
	if ( $result == $toShelf ) {

		// Also, notice that the `type` is being set
		// to "gCharacterSet" - just trying to pick
		// a name that users probably won't type
		//
		string $characterName = `promptDialog -q`;
		sets -text "gCharacterSet" -name $characterName;
		string $cmd = "textToShelf ";
		$cmd += $characterName;
		$cmd += " \"select -replace ";
		$cmd += $characterName;
		$cmd += "\"";
		//textToShelf $characterName ("select -replace " + $characterName);
		evalEcho($cmd);

	}
}

global proc createCharacterMenu( string $parent )
//
//	Creates entries in the "Select Character" subMenu
//	in the Edit Menu.
{
	setParent -m $parent;
	menu -e -dai $parent;

	// Get a list of all character sets in the
	// system, then generate an entry per set
	//
	string $charSets[] = `ls -sets`;

	for( $character in $charSets )
	{
		if( `sets -q -t $character` == "gCharacterSet" )
		{
			menuItem -label $character -c ( "select -r " + $character );
		}
	}

	if( `menu -q -ni $parent` == 0 ) 
	//
	//	No characters defined - create a default menu item
	//	to inform the user
	{
		menuItem -label (uiRes("m_buildEditMenu.kNoQuickSelect")) -enable false;
	}
}


global proc editMenuUpdate( string $parent ) {

	string $lastName;
	string $repeat = (uiRes("m_buildEditMenu.kEditRepeat"));

	// Get the name of the  recent command
	string $label[] = `repeatLast -cnl 1`;
	if (size($label) <= 0) {
		menuItem -e -label $repeat -enable false 
			( $parent + "|lastAgainItem" );
	} else {
		$label[0] = makeStringSingleLine( $label[0] );
		$lastName = $repeat + " \"" + $label[0] + "\"";
		menuItem -e -label $lastName -enable true ( $parent + "|lastAgainItem" );
	}
}

global proc buildEditMenu ( string $parent ) {
    int $dimWhenNoSelect = 0;
	int $completeLicense = `licenseCheck -m "edit" -typ "complete"`;		

	setParent -menu $parent;

	if( `menu -q -ni $parent` != 0 ) {
		//
		//  Menu is built already - just return
		//
		return;
	}

	menuItem -label (uiRes("m_buildEditMenu.kUndo"))
		-ecr false
		-annotation (uiRes("m_buildEditMenu.kUndoAnnot"))
		-command ("Undo") undoItem;
	if( $dimWhenNoSelect )
		dimWhen -f "UndoAvailable" ($parent+"|undoItem");

	menuItem -label (uiRes("m_buildEditMenu.kRedo"))
		-ecr false
		-annotation (uiRes("m_buildEditMenu.kRedoAnnot"))
		-command ("Redo") redoItem;
	if( $dimWhenNoSelect )
		dimWhen -f "RedoAvailable" ($parent+"|redoItem");

	menuItem -label (uiRes("m_buildEditMenu.kRepeat"))
		-ecr false -enable false -command ("RepeatLast")
		-annotation (uiRes("m_buildEditMenu.kRepeatAnnot"))
		lastAgainItem;
	scriptJob -permanent -parent $parent 
		-event "RecentCommandChanged" ( "editMenuUpdate " + $parent );

	menuItem -label (uiRes("m_buildEditMenu.kRecentCommands"))
		-ecr false 
		-annotation (uiRes("m_buildEditMenu.kRecentCommandsAnnot"))
		-command ("RecentCommandsWindow");

	menuItem -divider true;

	menuItem -label (uiRes("m_buildEditMenu.kCut"))
		-annotation (uiRes("m_buildEditMenu.kCutAnnot"))
		-command ("CutSelected") cutItem;
	
	menuItem -label (uiRes("m_buildEditMenu.kCopy"))
		-annotation (uiRes("m_buildEditMenu.kCopyAnnot"))
		-command ("CopySelected") copyItem;
	
	menuItem -label (uiRes("m_buildEditMenu.kPaste"))
		-annotation (uiRes("m_buildEditMenu.kPasteAnnot"))
		-command ("PasteSelected") pasteItem;

	menuItem -divider true;

	//	Keys sub-menu.
	//
	menuItem -label (uiRes("m_buildEditMenu.kKeys")) -subMenu true -aob true -to true cutKeyHierItem;

	menuItem -label (uiRes("m_buildEditMenu.kCutKeys"))
		-annotation (uiRes("m_buildEditMenu.kCutKeysAnnot"))
		-command ("CutKeys")
		-dragMenuCommand "performCutKeyArgList 1 {\"2\", \"animationList\", \"0\"}" cutKeyItem;
		menuItem -optionBox true 
			-annotation (uiRes("m_buildEditMenu.kCutKeysOptionsAnnot"))
			-command ("CutKeysOptions")
			cutKeyDialogItem;

	menuItem -label (uiRes("m_buildEditMenu.kCopyKeys"))
		-annotation (uiRes("m_buildEditMenu.kCopyKeysAnnot"))
		-command ("CopyKeys")
		-dragMenuCommand "performCopyKeyArgList 1 {\"2\", \"animationList\", \"0\"}" copyKeyItem;
		menuItem -optionBox true 
			-annotation (uiRes("m_buildEditMenu.kCopyKeysOptionsAnnot"))
			-command ("CopyKeysOptions")
			copyKeyDialogItem;

	menuItem -label (uiRes("m_buildEditMenu.kPasteKeys"))
		-annotation (uiRes("m_buildEditMenu.kPasteKeysAnnot"))
		-command ("PasteKeys")
		-dragMenuCommand "performPasteKeyArgList 1 {\"2\", \"animationList\", \"0\"}" pasteKeyItem;
		menuItem -optionBox true 
			-annotation (uiRes("m_buildEditMenu.kPasteKeysOptionsAnnot"))
			-command ("PasteKeysOptions")
			pasteKeyDialogItem;

	menuItem -label (uiRes("m_buildEditMenu.kDeleteKeys"))
		-annotation (uiRes("m_buildEditMenu.kDeleteKeysAnnot"))
		-command ("DeleteKeys")
		-dragMenuCommand "performClearKeyArgList 1 {\"2\", \"animationList\", \"0\", \"0\"}" clearKeyItem;
		menuItem -optionBox true 
			-annotation (uiRes("m_buildEditMenu.kDeleteKeysOptionsAnnot"))
			-command ("DeleteKeysOptions")
			clearKeyDialogItem;

	menuItem -label (uiRes("m_buildEditMenu.kDeleteFBIKKeys"))
		-subMenu true -aob true -to true deleteFBIKKeysItem;
    
    menuItem -label (uiRes("m_buildEditMenu.kDeleteAllKeys"))
		-annotation (uiRes("m_buildEditMenu.kDeleteAllKeysAnnot"))
		-command ("DeleteFBIKAllKeys")
		-dragMenuCommand "doClearFBIKKeysArgList \"0\" {\"all\"}" deleteAllFBIKKeyItem;		
		
	menuItem -label (uiRes("m_buildEditMenu.kDeleteBodyPartKeys"))
		-annotation (uiRes("m_buildEditMenu.kDeleteBodyPartKeysAnnot"))
		-command ("DeleteFBIKBodyPartKeys")
		-dragMenuCommand "doClearFBIKKeysArgList \"0\" {\"bodypart\"}" deleteBodyPartFBIKKeyItem;			
    
    menuItem -label (uiRes("m_buildEditMenu.kDeleteSelectedKeys"))
		-annotation (uiRes("m_buildEditMenu.kDeleteSelectedKeysAnnot"))
		-command ("DeleteFBIKSelectedKeys")
		-dragMenuCommand "doClearFBIKKeysArgList \"0\" {\"selected\"}" deleteSelectedFBIKKeyItem;			
		
	setParent -menu ..;		
	menuItem -label (uiRes("m_buildEditMenu.kScaleKeys"))
		-annotation (uiRes("m_buildEditMenu.kScaleKeysAnnot"))
		-command ("ScaleKeys")
		-dragMenuCommand "performScaleKeyArgList 1 {\"2\", \"animationList\", \"0\"}" scaleKeyItem;
		menuItem -optionBox true 
			-annotation (uiRes("m_buildEditMenu.kScaleKeysOptionsAnnot"))
			-command ("ScaleKeysOptions")
			scaleKeyDialogItem;

	menuItem -label (uiRes("m_buildEditMenu.kSnapKeys"))
		-annotation (uiRes("m_buildEditMenu.kSnapKeysAnnot"))
		-command ("SnapKeys")
		-dragMenuCommand "performSnapKeyArgList 1 { \"2\", \"animationList\", \"0\" }" 
		snapKeyItem;
		menuItem -optionBox true 
			-annotation (uiRes("m_buildEditMenu.kSnapKeysOptionsAnnot"))
			-command ("SnapKeysOptions")
			snapKeyDialogItem;

	menuItem -divider true;

	menuItem -label (uiRes("m_buildEditMenu.kBakeSimulation"))
		-command ("BakeSimulation")
		-annotation (uiRes("m_buildEditMenu.kBakeSimulationAnnot"))
		-dragMenuCommand "performBakeSimulationArgList 1 {\"2\", \"animationList\"}"
		bakeSimulationItem;
		menuItem -optionBox true 
			-annotation (uiRes("m_buildEditMenu.kBakeSimulationOptionsAnnot"))
			-command ("BakeSimulationOptions")
			bakeSimulationDialogItem;
			
	setParent -menu ..;

	menuItem -divider true;

	menuItem -label (uiRes("m_buildEditMenu.kDelete"))
		-annotation (uiRes("m_buildEditMenu.kDeleteAnnot"))
		-command ("Delete") clearItem;
	if( $dimWhenNoSelect )
		dimWhen -f "SomethingSelected" ($parent+"|clearItem");

	//	Delete by Type sub-menu.
	//
	menuItem -label (uiRes("m_buildEditMenu.kDeleteByType"))
		-subMenu true -allowOptionBoxes true -to true 
		clearActiveItem;

	menuItem -label (uiRes("m_buildEditMenu.kDeleteHistory"))
		-annotation (uiRes("m_buildEditMenu.kDeleteHistoryAnnot"))
		-command ("DeleteHistory")
		clearConstHistoryTypesItem;

	menuItem -label (uiRes("m_buildEditMenu.kDeleteNonDeformerHistory"))
		-annotation (uiRes("m_buildEditMenu.kDeleteNonDeformerHistoryAnnot"))
		-c "BakeNonDefHistory" deleteNonDefHistoryItem;
    menuItem -optionBox true
		-annotation (uiRes("m_buildEditMenu.kDeleteNonDeformerHistoryOptionsAnnot"))
		-c "BakeNonDefHistoryOptions" delNonDefHistoryOptions;
	
	menuItem -divider true;

	menuItem -label (uiRes("m_buildEditMenu.kDeleteChannels")) -allowOptionBoxes true 
		-annotation (uiRes("m_buildEditMenu.kDeleteChannelsAnnot"))
		-command ("DeleteChannels")
		clearChannelsTypesItem;
		menuItem -optionBox true 
			-annotation (uiRes("m_buildEditMenu.kDeleteChannelsOptionsAnnot"))
			-command ("DeleteChannelsOptions")
			clearAllChannelsDialogItem;

	menuItem -label (uiRes("m_buildEditMenu.kDeleteStaticChannels")) 
		-allowOptionBoxes true
		-annotation (uiRes("m_buildEditMenu.kDeleteStaticChannelsAnnot"))
		-command ("DeleteStaticChannels")
		clearStaticTypesItem;
		menuItem -optionBox true 
			-annotation (uiRes("m_buildEditMenu.kDeleteStaticChannelsOptionsAnnot")) 
			-command ("DeleteStaticChannelsOptions")
			clearAllStaticChannelsDialogItem;

	menuItem -label (uiRes("m_buildEditMenu.kDeleteMotionPaths"))
		-annotation (uiRes("m_buildEditMenu.kDeleteMotionPathsAnnot"))
		-command ("DeleteMotionPaths")
		clearMotionPathTypesItem;

	menuItem -label (uiRes("m_buildEditMenu.kDeleteNonParticleExpressions"))
		-allowOptionBoxes true 
		-annotation (uiRes("m_buildEditMenu.kDeleteNonParticleExpressionsAnnot"))
		-command ("DeleteExpressions")
		clearExpressionTypesItem;
		menuItem -optionBox true 
			-annotation (uiRes("m_buildEditMenu.kDeleteNonParticleExpressionsOptionsAnnot"))
			-command ("DeleteExpressionsOptions")
			clearAllExpressionsDialogItem;

	menuItem -label (uiRes("m_buildEditMenu.kDeleteConstraints"))
		-annotation (uiRes("m_buildEditMenu.kDeleteConstraintsAnnot"))
		-command ("DeleteConstraints")
		clearConstraintTypesItem;

	//	Sounds sub-menu.
	//
	string $soundMenu = `menuItem -label (uiRes("m_buildEditMenu.kDeleteSounds"))
		-subMenu true -allowOptionBoxes false deleteSoundSubMenuItem`;
	
	menuItem -e -pmc (
		"updateSoundMenu { " +
			"\"" + $soundMenu + "\", " +
			"\"0\", " +
			"\"delete %s\", " +
			"\"1\" " + 
		"};" 
		)						
		$soundMenu;
	
	setParent -menu ..;

	menuItem -divider true;

	if(`licenseCheck -m edit -type complete` == 1)
	{
		menuItem -label (uiRes("m_buildEditMenu.kDeleteRigidBodies"))
			-annotation (uiRes("m_buildEditMenu.kDeleteRigidBodiesAnnot"))
			-command ("DeleteRigidBodies")
			clearRigidBodyTypesItem;
	}
	setParent -menu ..;

	//	Delete all by Type sub-menu.
	//
	if( $dimWhenNoSelect )
		dimWhen -f "SomethingSelected" ($parent+"|clearActiveItem");

	global string $gEditDeleteAllByTypeSubMenu;
    $gEditDeleteAllByTypeSubMenu = `menuItem 
		-label (uiRes("m_buildEditMenu.kDeleteAllByType"))
											-subMenu true -allowOptionBoxes false 
											-to true clearAllTypesItem`;
	
	menuItem -label (uiRes("m_buildEditMenu.kDeleteAllHistory"))
		-annotation (uiRes("m_buildEditMenu.kDeleteAllHistoryAnnot"))
		-command ("DeleteAllHistory")
		clearAllHistoryTypesItem;

	menuItem -label (uiRes("m_buildEditMenu.kDeleteAllNonDeformerHistory"))
		-annotation (uiRes("m_buildEditMenu.kDeleteAllNonDeformerHistoryAnnot"))
		-c "BakeAllNonDefHistory" deleteAllNonDefHistoryItem;
	
	menuItem -divider true;

	menuItem -label (uiRes("m_buildEditMenu.kDeleteAllChannels"))
		-annotation (uiRes("m_buildEditMenu.kDeleteAllChannelsAnnot"))
		-command ("DeleteAllChannels")
		clearAllChannelsItem;

	menuItem -label (uiRes("m_buildEditMenu.kDeleteAllStaticChannels"))
		-annotation (uiRes("m_buildEditMenu.kDeleteAllStaticChannelsAnnot"))
		-command ("DeleteAllStaticChannels")
		clearAllStaticTypesItem;

	menuItem -label (uiRes("m_buildEditMenu.kDeleteAllClips"))
		-annotation (uiRes("m_buildEditMenu.kDeleteAllClipsAnnot"))
		-command ("DeleteAllClips")
		clearAllClipsItem;

	menuItem -label (uiRes("m_buildEditMenu.kDeleteAllMotionPaths"))
		-annotation (uiRes("m_buildEditMenu.kDeleteAllMotionPathsAnnot"))
		-command ("DeleteAllMotionPaths")
		clearAllMotionPathsItem;

	menuItem -label (uiRes("m_buildEditMenu.kDeleteAllNonParticleExpressions"))
		-annotation (uiRes("m_buildEditMenu.kDeleteAllNonParticleExpressionsAnnot"))
		-command ("DeleteAllExpressions")
		clearAllExprTypesItem;

	menuItem -label (uiRes("m_buildEditMenu.kDeleteAllConstraints"))
		-annotation (uiRes("m_buildEditMenu.kDeleteAllConstraintsAnnot"))
		-command ("DeleteAllConstraints")
		clearAllConstraintTypesItem;

	menuItem -label (uiRes("m_buildEditMenu.kDeleteAllSounds"))
		-annotation (uiRes("m_buildEditMenu.kDeleteAllSoundsAnnot"))
		-command ("DeleteAllSounds")
		clearAllSoundsItem;

	menuItem -divider true;

	menuItem -label (uiRes("m_buildEditMenu.kDeleteAllJoints"))
		-annotation (uiRes("m_buildEditMenu.kDeleteAllJointsAnnot"))
		-command ("DeleteAllJoints")
		clearAllJointTypeItem;

	menuItem -label (uiRes("m_buildEditMenu.kDeleteAllIKHandles"))
		-annotation (uiRes("m_buildEditMenu.kDeleteAllIKHandlesAnnot"))
		-command ("DeleteAllIKHandles")
		clearAllIKHandleTypeItem;

	menuItem -divider true;

	menuItem -label (uiRes("m_buildEditMenu.kDeleteAllLattices"))
		-annotation (uiRes("m_buildEditMenu.kDeleteAllLatticesAnnot"))
		-command ("DeleteAllLattices");

	if ($completeLicense) {
		menuItem -label (uiRes("m_buildEditMenu.kDeleteAllClusters"))
			-annotation (uiRes("m_buildEditMenu.kDeleteAllClustersAnnot"))
			-command ("DeleteAllClusters");
		menuItem -label (uiRes("m_buildEditMenu.kDeleteAllSculptObjects"))
			-annotation (uiRes("m_buildEditMenu.kDeleteAllSculptObjectsAnnot"))
			-command ("DeleteAllSculptObjects");
	}

	menuItem -label (uiRes("m_buildEditMenu.kDeleteAllNonLinearDeformers"))
		-annotation (uiRes("m_buildEditMenu.kDeleteAllNonLinearDeformersAnnot"))
		-command ("DeleteAllNonLinearDeformers");

	if ($completeLicense) {
		menuItem -label (uiRes("m_buildEditMenu.kDeleteAllWires"))
			-annotation (uiRes("m_buildEditMenu.kDeleteAllWiresAnnot"))
			-command ("DeleteAllWires");
	}

	menuItem -divider true;

	menuItem -label (uiRes("m_buildEditMenu.kDeleteAllLights"))
		-enable true 
		-annotation (uiRes("m_buildEditMenu.kDeleteAllLightsAnnot"))
		-command ("DeleteAllLights")
		clearAllLightsTypesItem;

	menuItem -label (uiRes("m_buildEditMenu.kDeleteAllCameras"))
		-enable true 
		-annotation (uiRes("m_buildEditMenu.kDeleteAllCamerasAnnot"))
		-command ("DeleteAllCameras")
		clearAllCamerasTypesItem;

	menuItem -label (uiRes("m_buildEditMenu.kDeleteAllImagePlanes"))
		-annotation (uiRes("m_buildEditMenu.kDeleteAllImagePlanesAnnot"))
		-command ("DeleteAllImagePlanes")
		clearAllImagePlanesTypesItem;

	menuItem -label (uiRes("m_buildEditMenu.kDeleteAllShadingGroups"))
		-enable true 
		-annotation (uiRes("m_buildEditMenu.kDeleteAllShadingGroupsAnnot"))
		-command ("DeleteAllShadingGroupsAndMaterials")
		clearAllMaterialTypesItem;

	menuItem -divider true;

	if( `licenseCheck -m edit -type complete` == 1 )
	{
		menuItem -label (uiRes("m_buildEditMenu.kDeleteAllParticles"))
			-annotation (uiRes("m_buildEditMenu.kDeleteAllParticlesAnnot"))
			-command ("DeleteAllParticles")
			selParticlesItem;

		menuItem -label (uiRes("m_buildEditMenu.kDeleteAllRigidBodies"))
			-annotation (uiRes("m_buildEditMenu.kDeleteAllRigidBodiesAnnot"))
			-command ("DeleteAllRigidBodies")
			selRigidBodiesItem;

		menuItem -label (uiRes("m_buildEditMenu.kDeleteAllRigidConstraints"))
			-annotation (uiRes("m_buildEditMenu.kDeleteAllRigidConstraintsAnnot"))
			-command ("DeleteAllRigidConstraints")
			selRigidConstraintsItem;
	}
	if( fluidEditLicenseFound() ) {
		menuItem -label (uiRes("m_buildEditMenu.kDeleteAllFluids"))
			-annotation (uiRes("m_buildEditMenu.kDeleteAllFluidsAnnot"))
			-command ("DeleteAllFluids")
			clearFluidsItem;
	}

	if(`isTrue "MayaCreatorExists"` && (`licenseCheck -m "edit" -typ "particlePaint"`)) {
		menuItem -d 1;
		menuItem -label (uiRes("m_buildEditMenu.kDeleteAllStrokes"))
			-annotation (uiRes("m_buildEditMenu.kDeleteAllStrokesAnnot"))
			-command ("DeleteAllStrokes")
			clearAllStrokesItem;
	}
	if( nClothEditLicenseFound() ) {
		menuItem -label (uiRes("m_buildEditMenu.kDeleteAllNCloths"))
			-annotation (uiRes("m_buildEditMenu.kDeleteAllNClothsAnnot"))
			-command ("DeleteAllNCloths")
			clearNClothsItem;
		menuItem -label (uiRes("m_buildEditMenu.kDeleteAllNRigids"))
			-annotation (uiRes("m_buildEditMenu.kDeleteAllNRigidsAnnot"))
			-command ("DeleteAllNRigids")
			clearNRigidsItem;
		menuItem -label (uiRes("m_buildEditMenu.kDeleteAllDynamicConstraints"))
			-annotation (uiRes("m_buildEditMenu.kDeleteAllDynamicConstraintsAnnot"))
			-command ("DeleteAllDynamicConstraints")
			clearDynamicConstraintsItem;
	}

	setParent -menu ..;

	menuItem -divider true;

	menuItem -label (uiRes("m_buildEditMenu.kSelectTool"))
		-annotation (uiRes("m_buildEditMenu.kSelectToolAnnot"))
		-command SelectTool
		selectItem;

	menuItem -label (uiRes("m_buildEditMenu.kLassoTool"))
		-annotation (uiRes("m_buildEditMenu.kLassoToolAnnot"))
		-command LassoTool
		lassoItem;

	menuItem -label (uiRes("m_buildEditMenu.kArtPaintSelectTool"))
		-annotation (uiRes("m_buildEditMenu.kArtPaintSelectToolAnnot"))
		-command ArtPaintSelectTool
		artPaintSelectItem;
		
	menuItem -divider true;

	menuItem -label (uiRes("m_buildEditMenu.kSelectAll"))
		-annotation (uiRes("m_buildEditMenu.kSelectAllAnnot"))
		-command ("SelectAll") selectAllItem;

	menuItem -label (uiRes("m_buildEditMenu.kDeselect"))
		-annotation (uiRes("m_buildEditMenu.kDeselectAnnot"))
		-command ("select -cl; autoUpdateAttrEd; statusLineUpdateInputField;")
		deselectItem;

	//	Select Hierarchy.
	//
	menuItem -label (uiRes("m_buildEditMenu.kSelectHierarchy"))
		-annotation (uiRes("m_buildEditMenu.kSelectHierarchyAnnot"))
		-command ("SelectHierarchy");

	menuItem -label (uiRes("m_buildEditMenu.kInvertSelection"))
		-annotation (uiRes("m_buildEditMenu.kInvertSelectionAnnot"))
		-command ("InvertSelection") invertSelectionItem;

	//	Select all by type sub-menu.
	//
	global string $gEditSelectAllByTypeSubMenu;
	$gEditSelectAllByTypeSubMenu = `menuItem
		-label (uiRes("m_buildEditMenu.kSelectAllByType"))
											-subMenu true -to true selAllHierItem`;

	menuItem -label (uiRes("m_buildEditMenu.kSelectAllJoints"))
		-annotation (uiRes("m_buildEditMenu.kSelectAllJointsAnnot"))
		-command ("SelectAllJoints")
		selJointsItem;

	menuItem -label (uiRes("m_buildEditMenu.kSelectAllIKHandles"))
		-annotation (uiRes("m_buildEditMenu.kSelectAllIKHandlesAnnot"))
		-command ("SelectAllIKHandles")
		selIKHanItem;

	menuItem -divider true;

	menuItem -label (uiRes("m_buildEditMenu.kSelectAllLattices"))
		-annotation (uiRes("m_buildEditMenu.kSelectAllLatticesAnnot"))
		-command ("SelectAllLattices");

	if ($completeLicense) {
		menuItem -label (uiRes("m_buildEditMenu.kSelectAllClusters"))
			-annotation (uiRes("m_buildEditMenu.kSelectAllClustersAnnot"))
			-command ("SelectAllClusters");

		menuItem -label (uiRes("m_buildEditMenu.kSelectAllSculptObjects"))
			-annotation (uiRes("m_buildEditMenu.kSelectAllSculptObjectsAnnot"))
			-command ("SelectAllSculptObjects");

		menuItem -label (uiRes("m_buildEditMenu.kSelectAllWires"))
			-annotation (uiRes("m_buildEditMenu.kSelectAllWiresAnnot"))
			-command ("SelectAllWires");
	}

	menuItem -divider true;

	menuItem -label (uiRes("m_buildEditMenu.kSelectAllTransforms"))
		-annotation (uiRes("m_buildEditMenu.kSelectAllTransformsAnnot"))
		-command ("SelectAllTransforms") 
		selDAGItem;

	menuItem -label (uiRes("m_buildEditMenu.kSelectAllGeometry"))
		-annotation (uiRes("m_buildEditMenu.kSelectAllGeometryAnnot"))
		-command ("SelectAllGeometry") 
		selGeomItem;

	menuItem -label (uiRes("m_buildEditMenu.kSelectAllNurbsCurves"))
		-annotation (uiRes("m_buildEditMenu.kSelectAllNurbsCurvesAnnot"))
		-command ("SelectAllNURBSCurves")
		selNurbsCurveItem;

	menuItem -label (uiRes("m_buildEditMenu.kSelectAllNurbsSurfaces"))
		-annotation (uiRes("m_buildEditMenu.kSelectAllNurbsSurfacesAnnot"))
		-command ("SelectAllNURBSSurfaces")
		selNurbsSurfaceItem;

	menuItem -label (uiRes("m_buildEditMenu.kSelectAllPolygons"))
		-annotation (uiRes("m_buildEditMenu.kSelectAllPolygonsAnnot"))
		-command ("SelectAllPolygonGeometry")
		selPolysItem;

	if (`isTrue "SubdivUIExists"`){
		menuItem -label (uiRes("m_buildEditMenu.kSelectAllSubdivs"))
			-annotation (uiRes("m_buildEditMenu.kSelectAllSubdivsAnnot"))
			-command ("SelectAllSubdivGeometry") 
			selSubdivGeomItem;
	}

	menuItem -divider true;

	menuItem -label (uiRes("m_buildEditMenu.kSelectAllLights"))
		-annotation (uiRes("m_buildEditMenu.kSelectAllLightsAnnot"))
		-command ("SelectAllLights")
		selLightsItem;

	menuItem -label (uiRes("m_buildEditMenu.kSelectAllCameras"))
		-annotation (uiRes("m_buildEditMenu.kSelectAllCamerasAnnot"))
		-command ("SelectAllCameras")
		selCamerasItem;

	menuItem -label (uiRes("m_buildEditMenu.kSelectAllImagePlanes"))
		-annotation (uiRes("m_buildEditMenu.kSelectAllImagePlanesAnnot"))
		-command ("SelectAllImagePlanes");

	menuItem -divider true;

	if( `licenseCheck -m edit -type complete` == 1 )
	{
		menuItem -label (uiRes("m_buildEditMenu.kSelectAllParticles"))
			-annotation (uiRes("m_buildEditMenu.kSelectAllParticlesAnnot"))
			-command ("SelectAllParticles")
			selParticlesItem;

		menuItem -label (uiRes("m_buildEditMenu.kSelectAllRigidBodies"))
			-annotation (uiRes("m_buildEditMenu.kSelectAllRigidBodiesAnnot"))
			-command ("SelectAllRigidBodies")
			selRigidBodiesItem;

		menuItem -label (uiRes("m_buildEditMenu.kSelectAllRigidConstraints"))
			-annotation (uiRes("m_buildEditMenu.kSelectAllRigidConstraintsAnnot"))
			-command ("SelectAllRigidConstraints")
			selRigidConstraintsItem;
	}
	if( fluidEditLicenseFound() ) {
		menuItem -label (uiRes("m_buildEditMenu.kSelectAllFluids"))
			-annotation (uiRes("m_buildEditMenu.kSelectAllFluidsAnnot"))
			-command ("SelectAllFluids")
			selFluidsItem;
	}

	if(`isTrue "MayaCreatorExists"` && (`licenseCheck -m "edit" -typ "particlePaint"`)) {
		menuItem -d 1;
		menuItem -label (uiRes("m_buildEditMenu.kSelectAllStrokes"))
			-annotation (uiRes("m_buildEditMenu.kSelectAllStrokesAnnot"))
			-command ("SelectAllStrokes")
			selAllStrokesItem;

		menuItem -label (uiRes("m_buildEditMenu.kSelectAllBrushes"))
			-annotation (uiRes("m_buildEditMenu.kSelectAllBrushesAnnot"))
			-command ("SelectAllBrushes")
			selAllBrushesItem;
	}
	if( nClothEditLicenseFound() ) {
		menuItem -label (uiRes("m_buildEditMenu.kSelectAllNCloths"))
			-annotation (uiRes("m_buildEditMenu.kSelectAllNClothsAnnot"))
			-command ("SelectAllNCloths")
			selNClothsItem;
		menuItem -label (uiRes("m_buildEditMenu.kSelectAllNRigids"))
			-annotation (uiRes("m_buildEditMenu.kSelectAllNRigidsAnnot"))
			-command ("SelectAllNRigids")
			selNRigidsItem;
		menuItem -label (uiRes("m_buildEditMenu.kSelectAllDynamicConstraints"))
			-annotation (uiRes("m_buildEditMenu.kSelectAllDynamicConstraintsAnnot"))
			-command ("SelectAllDynamicConstraints")
			selDynamicConstraintsItem;
	}
	
	setParent -menu ..;

	//	Quick Select Sets sub-menu.
	//
	string $menu = `menuItem 
		-label (uiRes("m_buildEditMenu.kQuickSelectSets"))
		-sm true selectCharItem`;
		menuItem -e -pmc ( "createCharacterMenu " + $menu ) $menu;
	setParent -menu ..;
			
	menuItem -divider true;
	
	//	Duplicate.
	//
	menuItem -label (uiRes("m_buildEditMenu.kDuplicate"))
		-annotation (uiRes("m_buildEditMenu.kDuplicateAnnot"))
		-dmc "performDuplicate 2"
		-command ("Duplicate") dupItem;
	if( $dimWhenNoSelect )
		dimWhen -f "SomethingSelected" ($parent+"|dupItem");

	//	Duplicate special.
	//
	menuItem -label (uiRes("m_buildEditMenu.kDuplicateSpecial"))
		-annotation (uiRes("m_buildEditMenu.kDuplicateSpecialAnnot"))
		-dmc "performDuplicateSpecial 2"
		-command ("DuplicateSpecial") dupSpecItem;
		menuItem -optionBox true 
			-annotation (uiRes("m_buildEditMenu.kDuplicateSpecialOptionsAnnot"))
			-command ("DuplicateSpecialOptions")
			dupSpecOptItem;
	if( $dimWhenNoSelect )
		dimWhen -f "SomethingSelected" ($parent+"|dupSpecItem");


	//	Duplicate with transforms.
	//
	menuItem -label (uiRes("m_buildEditMenu.kDuplicateWithTransform"))
		-annotation (uiRes("m_buildEditMenu.kDuplicateWithTransformAnnot"))
		-command ("DuplicateWithTransform") smartDupItem;
	if( $dimWhenNoSelect )
		dimWhen -f "SomethingSelected" ($parent+"|smartDupItem");

	menuItem -divider true;

	//	Group.
	//
	menuItem -label (uiRes("m_buildEditMenu.kGroup")) -allowOptionBoxes true
		-annotation (uiRes("m_buildEditMenu.kGroupAnnot"))
		-dmc "performGroup 2"
		-command ("Group") groupItem;
	if( $dimWhenNoSelect )
		dimWhen -f "SomethingSelected" ($parent+"|groupItem");
		menuItem -optionBox true 
			-annotation (uiRes("m_buildEditMenu.kGroupOptionsAnnot"))
			-command ("GroupOptions") groupOptItem;

	//	Ungroup.
	//
	menuItem -label (uiRes("m_buildEditMenu.kUngroup")) -allowOptionBoxes true 
		-annotation (uiRes("m_buildEditMenu.kUngroupAnnot"))
		-dmc "performUngroup 2"
		-command ("Ungroup") ungroupItem;
	if( $dimWhenNoSelect )
		dimWhen -f "SomethingSelected" ($parent+"|ungroupItem");
		menuItem -optionBox true 
			-annotation (uiRes("m_buildEditMenu.kUngroupOptionsAnnot"))
			-command ("UngroupOptions")
			ungrpOptItem;

	//	Level of Detail sub-menu.
	//
	menuItem -label (uiRes("m_buildEditMenu.kLevelOfDetail")) 
			-subMenu true -to true levelOfDetailItem;

	menuItem -label (uiRes("m_buildEditMenu.kLevelOfDetailGroup"))
		-image "levelOfDetail.xpm"
		-annotation (uiRes("m_buildEditMenu.kLevelOfDetailGroupAnnot"))
		-command ("LevelOfDetailGroup") -ec true lodGroupItem;

	menuItem -label (uiRes("m_buildEditMenu.kLevelOfDetailUngroup"))
		-image "levelOfDetailDelete.xpm"
		-annotation (uiRes("m_buildEditMenu.kLevelOfDetailUngroupAnnot"))
		-command ("LevelOfDetailUngroup") -ec true lodRemoveItem;

	setParent -menu ..;

	menuItem -divider true;

	//	Parent
	//
	menuItem -label (uiRes("m_buildEditMenu.kParent")) -allowOptionBoxes true 
		-annotation (uiRes("m_buildEditMenu.kParentAnnot"))
		-dmc "performParent 2"
		-command ("Parent") parentItem;
	if( $dimWhenNoSelect )
		dimWhen -f "SomethingSelected" ($parent+"|parentItem");
		menuItem -optionBox true 
			-annotation (uiRes("m_buildEditMenu.kParentOptionsAnnot"))
			-command ("ParentOptions")
			parentOptItem;

	//	Unparent
	//
	menuItem -label (uiRes("m_buildEditMenu.kUnparent")) -allowOptionBoxes true
		-annotation (uiRes("m_buildEditMenu.kUnparentAnnot"))
		-dmc "performUnparent 2"
		-command ("Unparent") unparentItem;
	if( $dimWhenNoSelect )
		dimWhen -f "SomethingSelected" ($parent+"|unparentItem");
		menuItem -optionBox true 
			-annotation (uiRes("m_buildEditMenu.kUnparentOptionsAnnot"))
			-command ("UnparentOptions")
			unparOptItem;

	setParent -menu ..;
}
