This commit is contained in:
Kathy Ruffing 2008-10-03 11:40:23 +00:00
parent b4ef570ab4
commit c113da491f
2 changed files with 167 additions and 46 deletions

View File

@ -11,7 +11,7 @@ namespace Volian.Controls.Library
/// Clean up any resources being used. /// Clean up any resources being used.
/// </summary> /// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> /// <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)) if (disposing && (components != null))
{ {

View File

@ -19,6 +19,20 @@ namespace Volian.Controls.Library
public delegate bool vlnTreeViewBoolEvent(object sender, vlnTreeEventArgs args); public delegate bool vlnTreeViewBoolEvent(object sender, vlnTreeEventArgs args);
public delegate TreeNode vlnTreeViewTreeNodeEvent(object sender, vlnTreeEventArgs args); public delegate TreeNode vlnTreeViewTreeNodeEvent(object sender, vlnTreeEventArgs args);
public delegate DialogResult vlnTreeViewPropertyEvent(object sender, vlnTreePropertyEventArgs 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 public partial class vlnTreeEventArgs
{ {
#region Business Methods #region Business Methods
@ -157,6 +171,11 @@ namespace Volian.Controls.Library
{ {
if (NodeSelectionChange != null) NodeSelectionChange(sender, args); if (NodeSelectionChange != null) NodeSelectionChange(sender, args);
} }
public event vlnTreeViewSectionInfoEvent SectionShouldClose;
private void OnSectionShouldClose(object sender, vlnTreeSectionInfoEventArgs args)
{
if (SectionShouldClose != null) SectionShouldClose(sender, args);
}
#endregion #endregion
#region Constructors #region Constructors
public vlnTreeView() public vlnTreeView()
@ -211,7 +230,7 @@ namespace Volian.Controls.Library
cm.MenuItems.Add("Insert Folder After", 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.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 else if (tn.VEObject as DocVersionInfo != null) // DocVersions can only contain procs
cm.MenuItems.Add("New Procedure", new EventHandler(mi_Click)); 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)); cm.MenuItems.Add("Open", new EventHandler(mi_Click));
#endregion #endregion
#region Menu_CutCopy #region Menu_CutCopy
// For initial release, cut/copy are not available for folders or docversions // For initial release, no cut operations will be coded.
if (tn.VEObject as FolderInfo != null && tn.VEObject as DocVersionInfo != null) // 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)); cm.MenuItems.Add("Copy", new EventHandler(mi_Click));
} }
#endregion #endregion
#region MenuPaste #region MenuPaste
// Find what's in paste buffer & determine whether the paste can occur for the selected node. // Find what's in paste buffer & determine whether the paste can occur for the selected node.
//ItemInfo iiClipboard = Clipboard.GetData("ItemInfo") as ItemInfo; object tmpClip = Clipboard.GetData("PromsClipboard");
//if (iiClipboard != null) if (tmpClip != null)
//{ {
// // can it be pasted at current node. PromsClipboard tstClip = (PromsClipboard)tmpClip;
// if (tn.VEObject as DocVersionInfo != null) // paste item must be a proc ItemInfo iiClipboard = ItemInfo.Get(tstClip.itemId);
// { // can it be pasted at current node.
// if (iiClipboard.IsProcedure) cm.MenuItems.Add("Paste Procedure", new EventHandler(mi_Click)); if (tn.VEObject as DocVersionInfo != null) // paste item must be a proc
// } {
// else if (iiClipboard.IsProcedure) cm.MenuItems.Add("Paste Procedure", new EventHandler(mi_Click));
// { }
// ItemInfo iiPasteHere = tn.VEObject as ItemInfo; else
// if (iiPasteHere != null) {
// { ItemInfo iiPasteHere = tn.VEObject as ItemInfo;
// if (iiPasteHere.IsProcedure && iiClipboard.IsSection) // procedure must have sections only if (iiPasteHere != null)
// cm.MenuItems.Add("Paste Section", new EventHandler(mi_Click)); {
// else if (iiPasteHere.IsSection && iiClipboard.IsSection) if (iiPasteHere.IsProcedure && iiClipboard.IsProcedure) // procedure can be pasted before/replace/after
// cm.MenuItems.Add("Paste Section", new EventHandler(mi_Click)); {
// else if (iiPasteHere.IsStepSection && iiClipboard.IsStep) cm.MenuItems.Add("Paste Procedure Before", new EventHandler(mi_Click));
// cm.MenuItems.Add("Paste Step", 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 #endregion
#region Menu_Delete #region Menu_Delete
// Add delete to the menu unless at the very 'top' node. // Add delete to the menu unless at the very 'top' node.
@ -318,7 +356,7 @@ namespace Volian.Controls.Library
case "New Folder": case "New Folder":
tv_NodeNew(MenuSelections.Folder); tv_NodeNew(MenuSelections.Folder);
break; break;
case "New Document Version": case "Create Working Draft":
tv_NodeNew(MenuSelections.DocVersion); tv_NodeNew(MenuSelections.DocVersion);
break; break;
case "New Procedure": case "New Procedure":
@ -349,15 +387,23 @@ namespace Volian.Controls.Library
case "New Step": case "New Step":
tv_NodeNew(MenuSelections.Step); tv_NodeNew(MenuSelections.Step);
break; break;
case "Cut"://Cut the selected node
// Cut to Clipboard
break;
case "Copy"://Copy the selected node case "Copy"://Copy the selected node
// Add to Clipboard tv_NodeCopy();
break; break;
case "Paste"://Paste the clipboard node // lots of paste options:
// this is either a copy or a move depending upon where it came from case "Paste Procedure":
// if it is from a cut then when the paste is done it should be set to a copy 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; break;
case "Delete"://Delete the selected node case "Delete"://Delete the selected node
if (tv_NodeDelete()) if (tv_NodeDelete())
@ -377,6 +423,83 @@ namespace Volian.Controls.Library
break; 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 #endregion
#region PropertyPagesInterface #region PropertyPagesInterface
private void SetupNodeProperties() private void SetupNodeProperties()
@ -400,28 +523,27 @@ namespace Volian.Controls.Library
{ {
using (Folder folder = folderInfo.Get()) using (Folder folder = folderInfo.Get())
{ {
if(OnNodeOpenProperty(this, new vlnTreePropertyEventArgs(string.Format("{0} Properties", folder.FolderConfig.Name),folder.FolderConfig))==DialogResult.OK) OnNodeOpenProperty(this, new vlnTreePropertyEventArgs(string.Format("{0} Properties", folder.FolderConfig.Name), folder.FolderConfig));
folder.Save().Dispose();
} }
} }
private void OpenProperties(DocVersionInfo dvInfo) private void OpenProperties(DocVersionInfo dvInfo)
{ {
using (DocVersion dv = dvInfo.Get()) using (DocVersion dv = dvInfo.Get())
{ {
if (OnNodeOpenProperty(this, new vlnTreePropertyEventArgs(string.Format("{0} Properties", dv.DocVersionConfig.Name), dv.DocVersionConfig)) == DialogResult.OK) OnNodeOpenProperty(this, new vlnTreePropertyEventArgs(string.Format("{0} Properties", dv.DocVersionConfig.Name), dv.DocVersionConfig));
dv.Save().Dispose();
} }
} }
private void OpenProperties(ProcedureInfo procInfo) private void OpenProperties(ProcedureInfo procInfo)
{ {
using (Procedure proc = procInfo.Get()) 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) OnNodeOpenProperty(this, new vlnTreePropertyEventArgs(string.Format("{0} {1} Properties", proc.ProcedureConfig.Number, proc.ProcedureConfig.Title), proc.ProcedureConfig));
proc.Save().Dispose();
} }
} }
private void OpenProperties(SectionInfo sectInfo) private void OpenProperties(SectionInfo sectInfo)
{ {
OnSectionShouldClose(this, new vlnTreeSectionInfoEventArgs(sectInfo));
using (Section sect = sectInfo.Get()) using (Section sect = sectInfo.Get())
{ {
string title = null; string title = null;
@ -429,9 +551,8 @@ namespace Volian.Controls.Library
title = string.Format("{0} {1} Properties", sectInfo.SectionConfig.Number, sectInfo.SectionConfig.Title); title = string.Format("{0} {1} Properties", sectInfo.SectionConfig.Number, sectInfo.SectionConfig.Title);
else else
title = string.Format("{0} Properties", sectInfo.SectionConfig.Title); title = string.Format("{0} Properties", sectInfo.SectionConfig.Title);
if (OnNodeOpenProperty(this, new vlnTreePropertyEventArgs(title, sect.SectionConfig)) == DialogResult.OK)
sect.Save().Dispose(); OnNodeOpenProperty(this, new vlnTreePropertyEventArgs(title, sect.SectionConfig));
sect.MyContent.Dispose(); // Force Dispose of related content
} }
} }
#endregion #endregion
@ -477,11 +598,11 @@ namespace Volian.Controls.Library
{ {
if (newtype == MenuSelections.DocVersion) 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); ShowBrokenRules(docversion.BrokenRulesCollection);
SetLastValues(DocVersionInfo.Get(docversion.VersionID)); 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(); docversion.Save().Dispose();
tn = new VETreeNode(_LastDocVersionInfo); tn = new VETreeNode(_LastDocVersionInfo);
SelectedNode.Nodes.Add(tn); // add tree node to end of list. SelectedNode.Nodes.Add(tn); // add tree node to end of list.