/////////////////////////////////////////////////////////// public static void PopulateRightClickItems(TreeNode node, MenuShowingAction menuShowingAction = MenuShowingAction.RegularRightClick) { MainGlueWindow.Self.ElementTreeView.SelectedNode = node; MainGlueWindow form = MainGlueWindow.Self; ContextMenuStrip menu = MainGlueWindow.Self.mElementContextMenu; menu.Items.Clear(); #region IsScreenNode if (node.IsScreenNode()) { if (menuShowingAction == MenuShowingAction.RightButtonDrag) { menu.Items.Add(mAddEntityInstance); menu.Items.Add(mAddEntityList); } else { menu.Items.Add(form.setAsStartUpScreenToolStripMenuItem); menu.Items.Add(mMakeRequiredAtStartup); mExportElement.Text = "Export Screen"; menu.Items.Add(mExportElement); AddRemoveFromProjectItems(form, menu); if (EditorLogic.CurrentScreenSave.IsRequiredAtStartup) { mMakeRequiredAtStartup.Text = "Remove StartUp Requirement"; } else { mMakeRequiredAtStartup.Text = "Make Required at StartUp"; } menu.Items.Add("-"); menu.Items.Add(mFindAllReferences); menu.Items.Add(mRefreshTreeNodesMenuItem); } } #endregion #region IsEntityNode else if (node.IsEntityNode()) { if (menuShowingAction == MenuShowingAction.RightButtonDrag) { menu.Items.Add(mAddEntityInstance); menu.Items.Add(mAddEntityList); } else { AddRemoveFromProjectItems(form, menu); menu.Items.Add("-"); mExportElement.Text = "Export Entity"; menu.Items.Add(mExportElement); menu.Items.Add(mFindAllReferences); EntitySave entitySave = ((EntityTreeNode)node).EntitySave; if (entitySave.PooledByFactory) { menu.Items.Add(mAddResetVariablesForPooling); } menu.Items.Add(mRefreshTreeNodesMenuItem); } } #endregion #region IsFileContainerNode OR IsFolderInFilesContainerNode else if (node.IsFilesContainerNode() || node.IsFolderInFilesContainerNode()) { menu.Items.Add(form.addFileToolStripMenuItem); menu.Items.Add(form.addFolderToolStripMenuItem); menu.Items.Add("-"); menu.Items.Add(form.viewInExplorerToolStripMenuItem); if (node.IsFolderInFilesContainerNode()) { menu.Items.Add(mDeleteFolder); } } #endregion #region IsScreenObjectContainerNode else if (node.IsRootObjectNode()) { if (menuShowingAction == MenuShowingAction.RightButtonDrag) { menu.Items.Add(mAddEntityInstance); menu.Items.Add(mAddEntityList); } else { menu.Items.Add(form.addObjectToolStripMenuItem); } } #endregion #region IsGlobalContentContainerNode else if (node.IsGlobalContentContainerNode()) { menu.Items.Add(form.addFileToolStripMenuItem); menu.Items.Add(form.addFolderToolStripMenuItem); menu.Items.Add(form.reGenerateCodeToolStripMenuItem); menu.Items.Add(form.viewInExplorerToolStripMenuItem); menu.Items.Add(mViewFileLoadOrder); } #endregion #region IsRootEntityNode else if (node.IsRootEntityNode()) { menu.Items.Add(form.addEntityToolStripMenuItem); mImportElement.Text = "Import Entity"; menu.Items.Add(mImportElement); menu.Items.Add(form.addFolderToolStripMenuItem); } #endregion #region IsRootScreenNode else if (node.IsRootScreenNode()) { menu.Items.Add(form.addScreenToolStripMenuItem); mImportElement.Text = "Import Screen"; menu.Items.Add(mImportElement); } #endregion #region IsRootBehaviorsNode else if (node.IsRootBehaviorsNode()) { menu.Items.Add(form.addBehaviorToolStripMenuItem); menu.Items.Add(form.openBehaviorFolderToolStripMenuItem); menu.Items.Add(form.importBehaviorToolStripMenuItem); } #endregion #region IsRootCustomVariables else if (node.IsRootCustomVariablesNode()) { menu.Items.Add(form.addVariableToolStripMenuItem); } #endregion #region IsRootEventNode else if (node.IsRootEventsNode()) { menu.Items.Add(mAddEventMenuItem); } #endregion #region IsNamedObjectNode else if (node.IsNamedObjectNode()) { AddRemoveFromProjectItems(form, menu); menu.Items.Add(form.editResetVariablesToolStripMenuItem); menu.Items.Add(mFindAllReferences); menu.Items.Add("-"); menu.Items.Add(mDuplicate); menu.Items.Add("-"); menu.Items.Add(mMoveToTop); menu.Items.Add(mMoveUp); menu.Items.Add(mMoveDown); menu.Items.Add(mMoveToBottom); menu.Items.Add("-"); NamedObjectSave currentNamedObject = EditorLogic.CurrentNamedObject; if (currentNamedObject.SourceType == SourceType.FlatRedBallType && currentNamedObject.SourceClassType == "PositionedObjectList<T>" && !string.IsNullOrEmpty(currentNamedObject.SourceClassGenericType) && !currentNamedObject.SetByDerived) { menu.Items.Add(form.addObjectToolStripMenuItem); } } #endregion #region IsReferencedFileNode else if (node.IsReferencedFile()) { menu.Items.Add(form.viewInExplorerToolStripMenuItem); menu.Items.Add(mFindAllReferences); menu.Items.Add("Copy path to clipboard", null, HandleCopyToClipboardClick); menu.Items.Add("-"); menu.Items.Add(mCreateZipPackage); menu.Items.Add(mRecreateCompanionFiles); menu.Items.Add("-"); AddRemoveFromProjectItems(form, menu); menu.Items.Add(mUseContentPipeline); //menu.Items.Add(form.openWithDEFAULTToolStripMenuItem); ReferencedFileSave rfs = (ReferencedFileSave)node.Tag; if (FileManager.GetExtension(rfs.Name) == "csv" || rfs.TreatAsCsv) { menu.Items.Add("-"); menu.Items.Add(form.setCreatedClassToolStripMenuItem); menu.Items.Add(form.reGenerateCodeToolStripMenuItem); } if (!string.IsNullOrEmpty(rfs.SourceFile) || rfs.SourceFileCache.Count != 0) { menu.Items.Add("-"); menu.Items.Add(mViewSourceInExplorer); menu.Items.Add(mRebuildFile); } menu.Items.Add(mCopyToBuildFolder); if (!File.Exists(ProjectManager.MakeAbsolute(rfs.Name, true))) { menu.Items.Add(mCreateNewFileForMissingFile); } } #endregion #region IsCustomVariable else if (node.IsCustomVariable()) { AddRemoveFromProjectItems(form, menu); menu.Items.Add("-"); menu.Items.Add(mFindAllReferences); menu.Items.Add("-"); menu.Items.Add(mMoveToTop); menu.Items.Add(mMoveUp); menu.Items.Add(mMoveDown); menu.Items.Add(mMoveToBottom); } #endregion #region IsBehaviorNode else if (node.IsBehaviorNode()) { AddRemoveFromProjectItems(form, menu); } #endregion #region IsCodeNode else if (node.IsCodeNode()) { menu.Items.Add(form.viewInExplorerToolStripMenuItem); menu.Items.Add(form.reGenerateCodeToolStripMenuItem); } #endregion #region IsRootCodeNode else if (node.IsRootCodeNode()) { menu.Items.Add(form.reGenerateCodeToolStripMenuItem); } #endregion #region IsDirectoryNode else if (node.IsDirectoryNode()) { //menu.Items.Add(form.viewInExplorerToolStripMenuItem); menu.Items.Add(mViewContentFilesInExplorer); menu.Items.Add(mViewCodeFolderInExplorer); menu.Items.Add("-"); menu.Items.Add(form.addFolderToolStripMenuItem); if (node.Root().IsRootEntityNode()) { menu.Items.Add(form.addEntityToolStripMenuItem); mImportElement.Text = "Import Entity"; menu.Items.Add(mImportElement); } else { // If not in the Entities tree structure, assume global content menu.Items.Add(form.addFileToolStripMenuItem); } menu.Items.Add("-"); menu.Items.Add(mDeleteFolder); } #endregion #region IsStateListNode else if (node.IsStateListNode()) { menu.Items.Add(mAddState); menu.Items.Add(mAddStateCategory); } #endregion #region IsStateCategoryNode else if (node.IsStateCategoryNode()) { menu.Items.Add(mAddState); AddRemoveFromProjectItems(form, menu); } #endregion #region IsStateNode else if (node.IsStateNode()) { AddRemoveFromProjectItems(form, menu); menu.Items.Add("-"); menu.Items.Add(mDuplicate); menu.Items.Add("-"); menu.Items.Add(mFillValuesFromDefault); } #endregion #region IsEventTreeNode else if (node.IsEventResponseTreeNode()) { AddRemoveFromProjectItems(form, menu); } #endregion PluginManager.ReactToTreeViewRightClick(node, menu); }
public static TreeNode MoveEntityOn(EntityTreeNode treeNodeMoving, TreeNode targetNode) { TreeNode newTreeNode = null; #region Moving the Entity into (or out of) a directory if (targetNode.IsDirectoryNode() || targetNode.IsRootEntityNode()) { MoveEntityToDirectory(treeNodeMoving, targetNode); } #endregion #region Moving an Entity onto another element to create an instance else if (targetNode.IsEntityNode() || targetNode.IsScreenNode() || targetNode.IsRootNamedObjectNode()) { bool isValidDrop = true; // Make sure that we don't drop an Entity into its own Objects if (targetNode.IsRootNamedObjectNode()) { if(treeNodeMoving == targetNode.GetContainingElementTreeNode()) { isValidDrop = false; } } if (isValidDrop) { newTreeNode = MoveEntityOntoElement(treeNodeMoving, targetNode, newTreeNode); } } #endregion #region Moving an Entity onto a NamedObject (currently supports only Lists) else if (targetNode.IsNamedObjectNode()) { // Allow drop only if it's a list or Layer NamedObjectSave targetNamedObjectSave = targetNode.Tag as NamedObjectSave; if (!targetNamedObjectSave.IsList && !targetNamedObjectSave.IsLayer) { MessageBox.Show("The target is not a List or Layer so we can't add an Object to it.", "Target not valid"); } if (targetNamedObjectSave.IsLayer) { TreeNode parent = targetNode.Parent; newTreeNode = MoveEntityOn(treeNodeMoving, parent); // this created a new NamedObjectSave. Let's put that on the Layer MoveNamedObject(newTreeNode, targetNode); } else { // Make sure that the two types match string listType = targetNamedObjectSave.SourceClassGenericType; if (listType != treeNodeMoving.EntitySave.Name) { MessageBox.Show("The target list type is of type\n\n" + listType + "\n\nBut the Entity is of type\n\n" + treeNodeMoving.EntitySave.Name + "\n\nCould not add an instance to the list", "Could not add instance"); } else { NamedObjectSave namedObject = new NamedObjectSave(); namedObject.InstanceName = FileManager.RemovePath(listType) + "1"; StringFunctions.MakeNameUnique<NamedObjectSave>( namedObject, targetNamedObjectSave.ContainedObjects); // Not sure if we need to set this or not, but I think // any instance added to a list will not be defined by base namedObject.DefinedByBase = false; NamedObjectSaveExtensionMethodsGlue.AddNamedObjectToCurrentNamedObjectList(namedObject); ElementViewWindow.GenerateSelectedElementCode(); // Don't save the Glux, the caller of this method will take care of it // GluxCommands.Self.SaveGlux(); } } } #endregion else if (targetNode.IsGlobalContentContainerNode()) { AskAndAddAllContainedRfsToGlobalContent(treeNodeMoving.SaveObjectAsElement); } return newTreeNode; }