200 lines
4.5 KiB
C#
200 lines
4.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using Volian.CSLA.Library;
|
|
using System.Windows.Forms;
|
|
using Csla;
|
|
using System.Collections;
|
|
|
|
namespace Volian.CSLA.Library
|
|
{
|
|
public abstract class VETreeNode : TreeNode
|
|
{
|
|
#region Business Methods
|
|
protected IVEReadOnlyItem _VEObject;
|
|
public IVEReadOnlyItem VEObject
|
|
{
|
|
get { return _VEObject; }
|
|
set
|
|
{
|
|
_VEObject = value;
|
|
base.Text = _VEObject.ToString();
|
|
ResetNode();
|
|
}
|
|
}
|
|
public void Refresh()
|
|
{
|
|
if (_VEObject != null)
|
|
Text = _VEObject.ToString();
|
|
}
|
|
// Only load the Children Once
|
|
protected bool _ChildrenLoaded = false;
|
|
public bool ChildrenLoaded
|
|
{
|
|
get { return _ChildrenLoaded; }
|
|
}
|
|
// Reset Node
|
|
public void CloseNode()
|
|
{
|
|
ResetNode();
|
|
}
|
|
private void ResetNode()
|
|
{
|
|
if (_VEObject!=null && _VEObject.HasChildren())
|
|
{
|
|
_ChildrenLoaded = false;// Reset the children loaded flag
|
|
this.Nodes.Add("Dummy");// Add a Dummy Node so that the item will appear to be expanable.
|
|
}
|
|
else
|
|
{
|
|
_ChildrenLoaded = true;// Reset the children loaded flag
|
|
}
|
|
// ToDo: Need to reset object as well
|
|
}
|
|
public void RefreshNode()
|
|
{
|
|
ResetNode();// Drop Children
|
|
LoadChildren();// Load Children
|
|
}
|
|
public abstract void LoadChildren();
|
|
//public IVEReadOnlyItem GetCsla()
|
|
//{
|
|
// return _VEObject;
|
|
//}
|
|
#endregion
|
|
#region Factory Methods
|
|
// Constructors
|
|
public VETreeNode() : base("NoText") { ; }
|
|
public VETreeNode(IVEReadOnlyItem o)
|
|
: base(o.ToString())
|
|
{
|
|
_VEObject = o;// Save the BusinessObject
|
|
ResetNode();
|
|
}
|
|
public VETreeNode(string s)
|
|
: base(s)
|
|
{
|
|
_VEObject = null;// Save the BusinessObject
|
|
ResetNode();
|
|
}
|
|
#endregion
|
|
}
|
|
public class VETreeNodeBase<T> : VETreeNode
|
|
where T : VETreeNode, new()
|
|
{
|
|
#region Factory Methods
|
|
public VETreeNodeBase(string s) : base(s) { ;}
|
|
public VETreeNodeBase(IVEReadOnlyItem o) : base(o) { ;}
|
|
protected VETreeNodeBase() : base() { ;}
|
|
public override void LoadChildren()
|
|
{
|
|
if (!_ChildrenLoaded)
|
|
{
|
|
this.Nodes.Clear();
|
|
IList ol = _VEObject.GetChildren();
|
|
if (ol != null)
|
|
{
|
|
foreach (IVEReadOnlyItem o in ol)
|
|
{
|
|
try
|
|
{
|
|
T tmp = new T();
|
|
tmp.VEObject = o;
|
|
this.Nodes.Add(tmp);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine("{0}\r\n{1}", ex.Message, ex.InnerException);
|
|
}
|
|
}
|
|
}
|
|
_ChildrenLoaded = true;
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
public class VEFolder : VETreeNodeBase<VEVersion>
|
|
{
|
|
public static VEFolder LoadTree()
|
|
{
|
|
VEFolder root = null;
|
|
FolderInfoList fil = FolderInfoList.Get();
|
|
Dictionary<int, VEFolder> dicMissing = new Dictionary<int, VEFolder>();
|
|
Dictionary<int, VEFolder> dicExists = new Dictionary<int, VEFolder>();
|
|
foreach (FolderInfo fi in fil)
|
|
{
|
|
VEFolder ftp = null;
|
|
if (dicExists.ContainsKey(fi.ParentID))
|
|
{
|
|
ftp = dicExists[fi.ParentID];
|
|
}
|
|
else
|
|
{
|
|
if (fi.ParentID != 0)
|
|
{
|
|
ftp = new VEFolder(fi.ParentID.ToString());
|
|
dicMissing.Add(fi.ParentID, ftp);
|
|
dicExists.Add(fi.ParentID, ftp);
|
|
}
|
|
}
|
|
VEFolder ft = null;
|
|
if (dicMissing.ContainsKey(fi.FolderID))
|
|
{
|
|
ft = dicMissing[fi.FolderID];
|
|
ft.VEObject = fi;
|
|
dicMissing.Remove(fi.FolderID);
|
|
}
|
|
else
|
|
{
|
|
ft = new VEFolder(fi);
|
|
dicExists.Add(fi.FolderID, ft);
|
|
}
|
|
if (fi.ParentID == 0)
|
|
root = ft;
|
|
else
|
|
ftp.Nodes.Add(ft);
|
|
}
|
|
//root.FindTree = dicExists;
|
|
return root;
|
|
}
|
|
private VEFolder(string s) : base(s) { ;}
|
|
public VEFolder(IVEReadOnlyItem o) : base(o) { ;}
|
|
}
|
|
public class VEVersion : VETreeNodeBase<VEProcedure> { }
|
|
public class VEProcedure : VETreeNodeBase<VESection>
|
|
{
|
|
public override void LoadChildren()
|
|
{
|
|
if (!_ChildrenLoaded)
|
|
{
|
|
this.Nodes.Clear();
|
|
Dictionary<string, VESection> dicSect = new Dictionary<string, VESection>();
|
|
SectionInfoList ol = (SectionInfoList)_VEObject.GetChildren();
|
|
if (ol != null)
|
|
{
|
|
foreach (SectionInfo o in ol)
|
|
{
|
|
try
|
|
{
|
|
VESection tmp = new VESection();
|
|
tmp.VEObject = o;
|
|
if (dicSect.ContainsKey(o.PPath))
|
|
dicSect[o.PPath].Nodes.Add(tmp);
|
|
else
|
|
this.Nodes.Add(tmp);
|
|
dicSect[o.Path] = tmp;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine("{0}\r\n{1}", ex.Message, ex.InnerException);
|
|
}
|
|
}
|
|
}
|
|
_ChildrenLoaded = true;
|
|
}
|
|
}
|
|
}
|
|
public class VESection : VETreeNodeBase<VEStep> { }
|
|
public class VEStep : VETreeNodeBase<VEStep> { }
|
|
}
|