This commit is contained in:
parent
b4ef570ab4
commit
c113da491f
@ -11,7 +11,7 @@ namespace Volian.Controls.Library
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
protected void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
|
@ -19,6 +19,20 @@ namespace Volian.Controls.Library
|
||||
public delegate bool vlnTreeViewBoolEvent(object sender, vlnTreeEventArgs args);
|
||||
public delegate TreeNode vlnTreeViewTreeNodeEvent(object sender, vlnTreeEventArgs args);
|
||||
public delegate DialogResult vlnTreeViewPropertyEvent(object sender, vlnTreePropertyEventArgs args);
|
||||
public delegate void vlnTreeViewSectionInfoEvent(object sender, vlnTreeSectionInfoEventArgs args);
|
||||
public partial class vlnTreeSectionInfoEventArgs
|
||||
{
|
||||
private SectionInfo _MySectionInfo;
|
||||
public SectionInfo MySectionInfo
|
||||
{
|
||||
get { return _MySectionInfo; }
|
||||
set { _MySectionInfo = value; }
|
||||
}
|
||||
public vlnTreeSectionInfoEventArgs(SectionInfo mySectionInfo)
|
||||
{
|
||||
_MySectionInfo = mySectionInfo;
|
||||
}
|
||||
}
|
||||
public partial class vlnTreeEventArgs
|
||||
{
|
||||
#region Business Methods
|
||||
@ -157,6 +171,11 @@ namespace Volian.Controls.Library
|
||||
{
|
||||
if (NodeSelectionChange != null) NodeSelectionChange(sender, args);
|
||||
}
|
||||
public event vlnTreeViewSectionInfoEvent SectionShouldClose;
|
||||
private void OnSectionShouldClose(object sender, vlnTreeSectionInfoEventArgs args)
|
||||
{
|
||||
if (SectionShouldClose != null) SectionShouldClose(sender, args);
|
||||
}
|
||||
#endregion
|
||||
#region Constructors
|
||||
public vlnTreeView()
|
||||
@ -211,7 +230,7 @@ namespace Volian.Controls.Library
|
||||
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));
|
||||
if (fi.ChildFolderCount == 0) cm.MenuItems.Add("Create Working Draft", new EventHandler(mi_Click));
|
||||
}
|
||||
else if (tn.VEObject as DocVersionInfo != null) // DocVersions can only contain procs
|
||||
cm.MenuItems.Add("New Procedure", new EventHandler(mi_Click));
|
||||
@ -256,37 +275,56 @@ namespace Volian.Controls.Library
|
||||
cm.MenuItems.Add("Open", new EventHandler(mi_Click));
|
||||
#endregion
|
||||
#region Menu_CutCopy
|
||||
// For initial release, cut/copy are not available for folders or docversions
|
||||
if (tn.VEObject as FolderInfo != null && tn.VEObject as DocVersionInfo != null)
|
||||
// For initial release, no cut operations will be coded.
|
||||
// For initial release, copy is not available for folders or docversions
|
||||
if (tn.VEObject as ItemInfo != null)
|
||||
{
|
||||
cm.MenuItems.Add("Cut", new EventHandler(mi_Click));
|
||||
//cm.MenuItems.Add("Cut", new EventHandler(mi_Click));
|
||||
cm.MenuItems.Add("Copy", new EventHandler(mi_Click));
|
||||
}
|
||||
#endregion
|
||||
#region MenuPaste
|
||||
// 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));
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
object tmpClip = Clipboard.GetData("PromsClipboard");
|
||||
if (tmpClip != null)
|
||||
{
|
||||
PromsClipboard tstClip = (PromsClipboard)tmpClip;
|
||||
ItemInfo iiClipboard = ItemInfo.Get(tstClip.itemId);
|
||||
// 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.IsProcedure) // procedure can be pasted before/replace/after
|
||||
{
|
||||
cm.MenuItems.Add("Paste Procedure Before", new EventHandler(mi_Click));
|
||||
cm.MenuItems.Add("Replace Existing Procedure", new EventHandler(mi_Click));
|
||||
cm.MenuItems.Add("Paste Procedure After", new EventHandler(mi_Click));
|
||||
}
|
||||
else 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 Before", new EventHandler(mi_Click));
|
||||
cm.MenuItems.Add("Replace Existing Section", new EventHandler(mi_Click));
|
||||
cm.MenuItems.Add("Paste Section After", new EventHandler(mi_Click));
|
||||
}
|
||||
else if (iiPasteHere.IsStepSection && iiClipboard.IsStep)
|
||||
cm.MenuItems.Add("Paste Step", new EventHandler(mi_Click));
|
||||
else if (iiPasteHere.IsStep && iiClipboard.IsStep)
|
||||
{
|
||||
cm.MenuItems.Add("Paste Step Before", new EventHandler(mi_Click));
|
||||
cm.MenuItems.Add("Replace Existing Step", new EventHandler(mi_Click));
|
||||
cm.MenuItems.Add("Paste Section Step", new EventHandler(mi_Click));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
#region Menu_Delete
|
||||
// Add delete to the menu unless at the very 'top' node.
|
||||
@ -318,7 +356,7 @@ namespace Volian.Controls.Library
|
||||
case "New Folder":
|
||||
tv_NodeNew(MenuSelections.Folder);
|
||||
break;
|
||||
case "New Document Version":
|
||||
case "Create Working Draft":
|
||||
tv_NodeNew(MenuSelections.DocVersion);
|
||||
break;
|
||||
case "New Procedure":
|
||||
@ -349,15 +387,23 @@ namespace Volian.Controls.Library
|
||||
case "New Step":
|
||||
tv_NodeNew(MenuSelections.Step);
|
||||
break;
|
||||
case "Cut"://Cut the selected node
|
||||
// Cut to Clipboard
|
||||
break;
|
||||
case "Copy"://Copy the selected node
|
||||
// Add to Clipboard
|
||||
tv_NodeCopy();
|
||||
break;
|
||||
case "Paste"://Paste the clipboard node
|
||||
// this is either a copy or a move depending upon where it came from
|
||||
// if it is from a cut then when the paste is done it should be set to a copy
|
||||
// lots of paste options:
|
||||
case "Paste Procedure":
|
||||
case "Paste Procedure Before":
|
||||
case "Replace Existing Procedure":
|
||||
case "Paste Procedure After":
|
||||
case "Paste Section":
|
||||
case "Paste Section Before":
|
||||
case "Replace Existing Section":
|
||||
case "Paste Section After":
|
||||
case "Paste Step":
|
||||
case "Paste Step Before":
|
||||
case "Replace Existing Step":
|
||||
case "Paste Step After":
|
||||
tv_NodePaste(mi.Text);
|
||||
break;
|
||||
case "Delete"://Delete the selected node
|
||||
if (tv_NodeDelete())
|
||||
@ -377,6 +423,83 @@ namespace Volian.Controls.Library
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public struct PromsClipboard
|
||||
{
|
||||
public int cType;
|
||||
public int itemId;
|
||||
}
|
||||
public enum PromsClipboardType : int
|
||||
{
|
||||
Copy = 1, Cut = 2
|
||||
}
|
||||
private void tv_NodePaste(string p)
|
||||
{
|
||||
object oClip = Clipboard.GetData("PromsClipboard");
|
||||
if (oClip == null) return;
|
||||
|
||||
PromsClipboard iClip = (PromsClipboard) oClip;
|
||||
ItemInfo iiClipboard = ItemInfo.Get(iClip.itemId);
|
||||
VETreeNode tn = SelectedNode as VETreeNode;
|
||||
DocVersionInfo dvi = tn.VEObject as DocVersionInfo;
|
||||
if (dvi != null)
|
||||
{
|
||||
// TODO: KBR Adjust database.
|
||||
VETreeNode tnnew = new VETreeNode(iiClipboard);
|
||||
SelectedNode.Nodes.Add(tnnew);
|
||||
return;
|
||||
}
|
||||
|
||||
ItemInfo iiPaste = tn.VEObject as ItemInfo;
|
||||
if (iiPaste == null) return;
|
||||
if (p.IndexOf("Before") > -1)
|
||||
{
|
||||
// TODO: KBR Adjust database.
|
||||
VETreeNode tnnew = new VETreeNode(iiClipboard);
|
||||
int indx = SelectedNode.Index;
|
||||
SelectedNode.Parent.Nodes.Insert(indx, tnnew);
|
||||
return;
|
||||
}
|
||||
if (p.IndexOf("After") > -1)
|
||||
{
|
||||
// TODO: KBR Adjust database.
|
||||
VETreeNode tnnew = new VETreeNode(iiClipboard);
|
||||
int indx = SelectedNode.Index;
|
||||
SelectedNode.Parent.Nodes.Insert(indx+1, tnnew);
|
||||
return;
|
||||
}
|
||||
if (p.IndexOf("Replace") > -1)
|
||||
{
|
||||
// TODO: KBR Adjust database.
|
||||
VETreeNode tnnew = new VETreeNode(iiClipboard);
|
||||
int indx = SelectedNode.Index;
|
||||
TreeNode tmptn = SelectedNode;
|
||||
SelectedNode = SelectedNode.Parent.Nodes[indx];
|
||||
SelectedNode.Remove();
|
||||
SelectedNode.Parent.Nodes.Insert(indx, tnnew);
|
||||
return;
|
||||
}
|
||||
// if it got to here, just add as a child.
|
||||
// TODO: KBR Adjust database.
|
||||
VETreeNode tnnewc = new VETreeNode(iiClipboard);
|
||||
SelectedNode.Nodes.Add(tnnewc);
|
||||
}
|
||||
|
||||
private void tv_NodeCopy()
|
||||
{
|
||||
if (SelectedNode==null)return;
|
||||
VETreeNode tn = SelectedNode as VETreeNode;
|
||||
ItemInfo ii = tn.VEObject as ItemInfo;
|
||||
if (ii != null)
|
||||
{
|
||||
Clipboard.Clear();
|
||||
PromsClipboard iClip;
|
||||
iClip.itemId = ii.ItemID;
|
||||
iClip.cType = (int)PromsClipboardType.Copy;
|
||||
Clipboard.SetData("PromsClipboard", iClip);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
#region PropertyPagesInterface
|
||||
private void SetupNodeProperties()
|
||||
@ -400,28 +523,27 @@ namespace Volian.Controls.Library
|
||||
{
|
||||
using (Folder folder = folderInfo.Get())
|
||||
{
|
||||
if(OnNodeOpenProperty(this, new vlnTreePropertyEventArgs(string.Format("{0} Properties", folder.FolderConfig.Name),folder.FolderConfig))==DialogResult.OK)
|
||||
folder.Save().Dispose();
|
||||
OnNodeOpenProperty(this, new vlnTreePropertyEventArgs(string.Format("{0} Properties", folder.FolderConfig.Name), folder.FolderConfig));
|
||||
}
|
||||
}
|
||||
private void OpenProperties(DocVersionInfo dvInfo)
|
||||
{
|
||||
using (DocVersion dv = dvInfo.Get())
|
||||
{
|
||||
if (OnNodeOpenProperty(this, new vlnTreePropertyEventArgs(string.Format("{0} Properties", dv.DocVersionConfig.Name), dv.DocVersionConfig)) == DialogResult.OK)
|
||||
dv.Save().Dispose();
|
||||
OnNodeOpenProperty(this, new vlnTreePropertyEventArgs(string.Format("{0} Properties", dv.DocVersionConfig.Name), dv.DocVersionConfig));
|
||||
}
|
||||
}
|
||||
private void OpenProperties(ProcedureInfo procInfo)
|
||||
{
|
||||
using (Procedure proc = procInfo.Get())
|
||||
{
|
||||
if (OnNodeOpenProperty(this, new vlnTreePropertyEventArgs(string.Format("{0} {1} Properties", proc.ProcedureConfig.Number, proc.ProcedureConfig.Title), proc.ProcedureConfig)) == DialogResult.OK)
|
||||
proc.Save().Dispose();
|
||||
OnNodeOpenProperty(this, new vlnTreePropertyEventArgs(string.Format("{0} {1} Properties", proc.ProcedureConfig.Number, proc.ProcedureConfig.Title), proc.ProcedureConfig));
|
||||
}
|
||||
}
|
||||
private void OpenProperties(SectionInfo sectInfo)
|
||||
{
|
||||
OnSectionShouldClose(this, new vlnTreeSectionInfoEventArgs(sectInfo));
|
||||
|
||||
using (Section sect = sectInfo.Get())
|
||||
{
|
||||
string title = null;
|
||||
@ -429,9 +551,8 @@ namespace Volian.Controls.Library
|
||||
title = string.Format("{0} {1} Properties", sectInfo.SectionConfig.Number, sectInfo.SectionConfig.Title);
|
||||
else
|
||||
title = string.Format("{0} Properties", sectInfo.SectionConfig.Title);
|
||||
if (OnNodeOpenProperty(this, new vlnTreePropertyEventArgs(title, sect.SectionConfig)) == DialogResult.OK)
|
||||
sect.Save().Dispose();
|
||||
sect.MyContent.Dispose(); // Force Dispose of related content
|
||||
|
||||
OnNodeOpenProperty(this, new vlnTreePropertyEventArgs(title, sect.SectionConfig));
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
@ -477,11 +598,11 @@ namespace Volian.Controls.Library
|
||||
{
|
||||
if (newtype == MenuSelections.DocVersion)
|
||||
{
|
||||
using (DocVersion docversion = DocVersion.MakeDocVersion(parentfolder, "New Document Version", "Title", null, null, null))
|
||||
using (DocVersion docversion = DocVersion.MakeDocVersion(parentfolder, "Working Draft", "Title", null, null, null))
|
||||
{
|
||||
ShowBrokenRules(docversion.BrokenRulesCollection);
|
||||
SetLastValues(DocVersionInfo.Get(docversion.VersionID));
|
||||
if (OnNodeOpenProperty(this, new vlnTreePropertyEventArgs("New Document Version", docversion.DocVersionConfig)) == DialogResult.OK)
|
||||
if (OnNodeOpenProperty(this, new vlnTreePropertyEventArgs("Working Draft", docversion.DocVersionConfig)) == DialogResult.OK)
|
||||
docversion.Save().Dispose();
|
||||
tn = new VETreeNode(_LastDocVersionInfo);
|
||||
SelectedNode.Nodes.Add(tn); // add tree node to end of list.
|
||||
|
Loading…
x
Reference in New Issue
Block a user