diff --git a/PROMS/Volian.Controls.Library/vlnTreeView.cs b/PROMS/Volian.Controls.Library/vlnTreeView.cs index b7e22a77..ee146086 100644 --- a/PROMS/Volian.Controls.Library/vlnTreeView.cs +++ b/PROMS/Volian.Controls.Library/vlnTreeView.cs @@ -129,7 +129,6 @@ namespace Volian.Controls.Library VETreeNode _LastTreeNode = null; StepInfo _LastStepInfo = null; ItemInfo _LastItemInfo = null; - bool CanPaste = false; #endregion #region Events public event vlnTreeViewEvent NodeMove; @@ -184,7 +183,7 @@ namespace Volian.Controls.Library // that allow more than one type of operation associated with their selection. public enum MenuSelections : int { - None = 0, Folder = 1, DocVersion = 2, Procedure = 3, ProcedureBefore = 4, ProcedureAfter = 5, Section = 6, SectionBefore = 7, SectionAfter = 8, Step = 9, StepBefore = 10, StepAfter = 11 + Folder = 1, FolderBefore = 2, FolderAfter = 3, DocVersion = 4, Procedure = 5, ProcedureBefore = 6, ProcedureAfter = 7, Section = 8, SectionBefore = 9, SectionAfter = 10, Step = 11, StepBefore = 12, StepAfter = 13 } void tv_MouseDown(object sender, MouseEventArgs e) { @@ -206,6 +205,11 @@ namespace Volian.Controls.Library // folders then can only add another folder, and if children are docversions can only // add docversion. FolderInfo fi = tn.VEObject as FolderInfo; + if (fi.MyParent != null) // don't allow insert before/after if at top node + { + cm.MenuItems.Add("Insert Folder Before", new EventHandler(mi_Click)); + cm.MenuItems.Add("Insert Folder After", new EventHandler(mi_Click)); + } if (fi.FolderDocVersionCount == 0) cm.MenuItems.Add("New Folder", new EventHandler(mi_Click)); if (fi.ChildFolderCount == 0) cm.MenuItems.Add("New Document Version", new EventHandler(mi_Click)); } @@ -213,8 +217,8 @@ namespace Volian.Controls.Library cm.MenuItems.Add("New Procedure", new EventHandler(mi_Click)); else if (tn.VEObject as ProcedureInfo != null) // Procs can only contain sections { - cm.MenuItems.Add("New Procedure Before", new EventHandler(mi_Click)); - cm.MenuItems.Add("New Procedure After", new EventHandler(mi_Click)); + cm.MenuItems.Add("Insert Procedure Before", new EventHandler(mi_Click)); + cm.MenuItems.Add("Insert Procedure After", new EventHandler(mi_Click)); cm.MenuItems.Add("New Section", new EventHandler(mi_Click)); } else if (tn.VEObject as SectionInfo != null) @@ -226,15 +230,15 @@ namespace Volian.Controls.Library SectionInfo si = tn.VEObject as SectionInfo; // Do not need step versus Word doc options, user enters this in property page during // insert process. - cm.MenuItems.Add("New Section Before", new EventHandler(mi_Click)); - cm.MenuItems.Add("New Section After", new EventHandler(mi_Click)); + cm.MenuItems.Add("Insert Section Before", new EventHandler(mi_Click)); + cm.MenuItems.Add("Insert Section After", new EventHandler(mi_Click)); cm.MenuItems.Add("New Subsection", new EventHandler(mi_Click)); if (si.IsStepSection) cm.MenuItems.Add("New Step", new EventHandler(mi_Click)); } else if (tn.VEObject as StepInfo != null) { - cm.MenuItems.Add("New Step Before", new EventHandler(mi_Click)); - cm.MenuItems.Add("New Step After", new EventHandler(mi_Click)); + cm.MenuItems.Add("Insert Step Before", new EventHandler(mi_Click)); + cm.MenuItems.Add("Insert Step After", new EventHandler(mi_Click)); } #endregion #region Menu_Open @@ -255,12 +259,34 @@ namespace Volian.Controls.Library // For initial release, cut/copy are not available for folders or docversions if (tn.VEObject as FolderInfo != null && tn.VEObject as DocVersionInfo != null) { - cm.MenuItems.Add("Cut (not supported yet)", new EventHandler(mi_Click)); - cm.MenuItems.Add("Copy (not supported yet)", new EventHandler(mi_Click)); + cm.MenuItems.Add("Cut", new EventHandler(mi_Click)); + cm.MenuItems.Add("Copy", new EventHandler(mi_Click)); } #endregion #region MenuPaste - if (CanPaste)cm.MenuItems.Add("Paste (not supported yet)", new EventHandler(mi_Click)); + // Find what's in paste buffer & determine whether the paste can occur for the selected node. + //ItemInfo iiClipboard = Clipboard.GetData("ItemInfo") as ItemInfo; + //if (iiClipboard != null) + //{ + // // can it be pasted at current node. + // if (tn.VEObject as DocVersionInfo != null) // paste item must be a proc + // { + // if (iiClipboard.IsProcedure) cm.MenuItems.Add("Paste Procedure", new EventHandler(mi_Click)); + // } + // else + // { + // ItemInfo iiPasteHere = tn.VEObject as ItemInfo; + // if (iiPasteHere != null) + // { + // if (iiPasteHere.IsProcedure && iiClipboard.IsSection) // procedure must have sections only + // cm.MenuItems.Add("Paste Section", new EventHandler(mi_Click)); + // else if (iiPasteHere.IsSection && iiClipboard.IsSection) + // cm.MenuItems.Add("Paste Section", new EventHandler(mi_Click)); + // else if (iiPasteHere.IsStepSection && iiClipboard.IsStep) + // cm.MenuItems.Add("Paste Step", new EventHandler(mi_Click)); + // } + // } + //} #endregion #region Menu_Delete // Add delete to the menu unless at the very 'top' node. @@ -283,7 +309,13 @@ namespace Volian.Controls.Library case "Open": OpenNode(); break; - case "New Folder"://Add a new child node at the current location + case "Insert Folder Before": + tv_NodeNew(MenuSelections.FolderBefore); + break; + case "Insert Folder After": + tv_NodeNew(MenuSelections.FolderAfter); + break; + case "New Folder": tv_NodeNew(MenuSelections.Folder); break; case "New Document Version": @@ -292,26 +324,26 @@ namespace Volian.Controls.Library case "New Procedure": tv_NodeNew(MenuSelections.Procedure); break; - case "New Procedure Before": + case "Insert Procedure Before": tv_NodeNew(MenuSelections.ProcedureBefore); break; - case "New Procedure After": + case "Insert Procedure After": tv_NodeNew(MenuSelections.ProcedureAfter); break; case "New Section": case "New Subsection": tv_NodeNew(MenuSelections.Section); break; - case "New Section Before": + case "Insert Section Before": tv_NodeNew(MenuSelections.SectionBefore); break; - case "New Section After": + case "Insert Section After": tv_NodeNew(MenuSelections.SectionAfter); break; - case "New Step Before": + case "Insert Step Before": tv_NodeNew(MenuSelections.StepBefore); break; - case "New Step After": + case "Insert Step After": tv_NodeNew(MenuSelections.StepAfter); break; case "New Step": @@ -435,6 +467,7 @@ namespace Volian.Controls.Library public void tv_NodeNew(MenuSelections newtype) { VETreeNode tn = null; + if (SelectedNode == null) return; SetLastValues((VETreeNode)SelectedNode); #region InsertFolderOrDocVersion @@ -451,7 +484,7 @@ namespace Volian.Controls.Library if (OnNodeOpenProperty(this, new vlnTreePropertyEventArgs("New Document Version", docversion.DocVersionConfig)) == DialogResult.OK) docversion.Save().Dispose(); tn = new VETreeNode(_LastDocVersionInfo); - + SelectedNode.Nodes.Add(tn); // add tree node to end of list. } } else if (newtype == MenuSelections.Folder) @@ -464,9 +497,27 @@ namespace Volian.Controls.Library if (OnNodeOpenProperty(this, new vlnTreePropertyEventArgs(uniquename, folder.FolderConfig)) == DialogResult.OK) folder.Save().Dispose(); tn = new VETreeNode((IVEDrillDownReadOnly)_LastFolderInfo); + SelectedNode.Nodes.Add(tn); // add new tree node to end of childlist. + + } + } + else if (newtype == MenuSelections.FolderAfter||newtype == MenuSelections.FolderBefore) + { + string uniquename = _LastFolderInfo.MyParent.UniqueChildName("New Folder"); + int myindex = SelectedNode.Index + ((newtype == MenuSelections.FolderAfter) ? 1 : 0); + FolderInfo parfolderinfo = FolderInfo.Get(parentfolder.FolderID); + double? myorder = parfolderinfo.NewManualOrder(myindex); + using (Folder folder = Folder.MakeFolder(parentfolder.MyParent, parentfolder.MyConnection, uniquename, string.Empty, "Short Name", null, myorder, string.Empty, DateTime.Now, "Test")) + { + ShowBrokenRules(folder.BrokenRulesCollection); + SetLastValues(FolderInfo.Get(folder.FolderID)); + if (OnNodeOpenProperty(this, new vlnTreePropertyEventArgs(uniquename, folder.FolderConfig)) == DialogResult.OK) + folder.Save().Dispose(); + tn = new VETreeNode((IVEDrillDownReadOnly)_LastFolderInfo); + if (newtype == MenuSelections.FolderBefore) SelectedNode.Parent.Nodes.Insert(SelectedNode.Index, tn); + if (newtype == MenuSelections.FolderAfter) SelectedNode.Parent.Nodes.Insert(SelectedNode.Index + 1, tn); } } - SelectedNode.Nodes.Add(tn); // add tree node to end of list. } } #endregion @@ -565,7 +616,7 @@ namespace Volian.Controls.Library } } #endregion - + SelectedNode = tn; OnNodeSelect(this, new vlnTreeEventArgs(SelectedNode)); Refresh();