/////////////////////////////////////////////////////////// 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 void AddDirectory(string folderName, TreeNode treeNodeToAddTo) { if (treeNodeToAddTo.IsGlobalContentContainerNode()) { string rootDirectory = FileManager.RelativeDirectory; if (ProjectManager.ContentProject != null) { rootDirectory = ProjectManager.ContentProject.Directory; } string directory = rootDirectory + "GlobalContent/" + folderName; Directory.CreateDirectory(directory); } else if (treeNodeToAddTo.IsRootEntityNode()) { string directory = FileManager.RelativeDirectory + "Entities/" + folderName; Directory.CreateDirectory(directory); } else if (treeNodeToAddTo.IsDirectoryNode()) { // This used to use RelativeDirectory, but // I think we want this to be content, so not // sure why it uses RelativeDirectory... //string directory = FileManager.RelativeDirectory + // currentTreeNode.GetRelativePath() + // tiw.Result; // Update October 16, 2011 // An Enity has both folders // in the code folder (represented // by RelativeDirectory) as well as // in the Content project. An Entity // may not have files in the Content folder, // but it must have code files. Therefore, we // create folders in the code directory tree and // we worry about content when NamedObjectSaves are // added to a given Entity later. //string directory = currentTreeNode.GetRelativePath() + // tiw.Result; // Update February 17, 2012 // But...when we add a new folder // to an Entity, we want that folder // to show up in the tree view in Glue. // Glue only scans the content folder, so // we want to make sure this folder exists // so it shows up okay. string directory = FileManager.RelativeDirectory + treeNodeToAddTo.GetRelativePath() + folderName; directory = ProjectManager.MakeAbsolute(directory, true); Directory.CreateDirectory(directory); directory = ProjectManager.ContentDirectory + treeNodeToAddTo.GetRelativePath() + folderName; directory = ProjectManager.MakeAbsolute(directory, true); Directory.CreateDirectory(directory); } else if (treeNodeToAddTo.IsFilesContainerNode() || treeNodeToAddTo.IsFolderInFilesContainerNode()) { string directory = treeNodeToAddTo.GetRelativePath() + folderName; Directory.CreateDirectory(ProjectManager.MakeAbsolute(directory, true)); if (EditorLogic.CurrentEntityTreeNode != null) { EditorLogic.CurrentEntityTreeNode.UpdateReferencedTreeNodes(); } else if (EditorLogic.CurrentScreenTreeNode != null) { EditorLogic.CurrentScreenTreeNode.UpdateReferencedTreeNodes(); } } else if (treeNodeToAddTo.IsFolderInFilesContainerNode()) { throw new NotImplementedException(); } var containingElementNode = treeNodeToAddTo.GetContainingElementTreeNode(); IElement element = null; if (containingElementNode != null) { element = containingElementNode.Tag as IElement; } if (containingElementNode == null) { GlueCommands.Self.RefreshCommands.RefreshGlobalContent(); } else { GlueCommands.Self.RefreshCommands.RefreshUi(element); } GlueCommands.Self.RefreshCommands.RefreshDirectoryTreeNodes(); }
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; }