165 lines
5.0 KiB
C#
165 lines
5.0 KiB
C#
using System;
|
|
using System.ComponentModel.Design;
|
|
using System.Drawing;
|
|
|
|
namespace DevComponents.Tree
|
|
{
|
|
/// <summary>
|
|
/// Represents class for static tree utilities.
|
|
/// </summary>
|
|
public class Utilites
|
|
{
|
|
/// <summary>
|
|
/// Initializes control with default settings for connectors and nodes.
|
|
/// </summary>
|
|
/// <param name="tree">Control to initialize.</param>
|
|
public static void InitializeTree(TreeGX tree)
|
|
{
|
|
InitializeTree(tree,new ComponentFactory());
|
|
}
|
|
|
|
/// <summary>
|
|
/// Initializes control with default settings for connectors and nodes.
|
|
/// </summary>
|
|
/// <param name="tree">Control to initialize.</param>
|
|
/// <param name="factory">Factory to use to create new instances of objects.</param>
|
|
internal static void InitializeTree(TreeGX tree, ComponentFactory factory)
|
|
{
|
|
tree.RootConnector=factory.CreateComponent(typeof(NodeConnector)) as NodeConnector;
|
|
tree.RootConnector.LineWidth=5;
|
|
tree.RootConnector.LineColor=SystemColors.Highlight;
|
|
tree.NodesConnector=factory.CreateComponent(typeof(NodeConnector)) as NodeConnector;
|
|
tree.NodesConnector.LineWidth=5;
|
|
tree.NodesConnector.LineColor=SystemColors.Highlight;
|
|
|
|
eStyleBorderType border=eStyleBorderType.Solid;
|
|
ElementStyle style=factory.CreateComponent(typeof(ElementStyle)) as ElementStyle;
|
|
|
|
style.BackColorSchemePart=eColorSchemePart.BarBackground;
|
|
style.BackColor2SchemePart=eColorSchemePart.BarBackground2;
|
|
style.BackColorGradientAngle=90;
|
|
style.CornerDiameter=4;
|
|
style.CornerType=eCornerType.Rounded;
|
|
style.BorderLeft=border;
|
|
style.BorderLeftWidth=1;
|
|
style.BorderTop=border;
|
|
style.BorderTopWidth=1;
|
|
style.BorderBottom=border;
|
|
style.BorderBottomWidth=1;
|
|
style.BorderRight=border;
|
|
style.BorderRightWidth=1;
|
|
style.BorderColorSchemePart=eColorSchemePart.BarDockedBorder;
|
|
style.PaddingBottom=3;
|
|
style.PaddingLeft=3;
|
|
style.PaddingRight=3;
|
|
style.PaddingTop=3;
|
|
style.TextColor=Color.FromArgb(0,0,128);
|
|
style.Font=tree.Font;
|
|
tree.Styles.Add(style);
|
|
|
|
tree.NodeStyle=style;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Creates new style and adds it to styles collection
|
|
/// </summary>
|
|
/// <param name="tree">Tree to assign style to</param>
|
|
/// <param name="factory">Style factory</param>
|
|
/// <param name="backColor"></param>
|
|
/// <param name="backColor2"></param>
|
|
/// <param name="gradientAngle"></param>
|
|
/// <param name="textColor"></param>
|
|
internal static ElementStyle CreateStyle(ComponentFactory factory, string description, Color borderColor, Color backColor, Color backColor2, int gradientAngle, Color textColor)
|
|
{
|
|
eStyleBorderType border=eStyleBorderType.Solid;
|
|
ElementStyle style=factory.CreateComponent(typeof(ElementStyle)) as ElementStyle;
|
|
|
|
style.Description = description;
|
|
style.BackColor = backColor;
|
|
style.BackColor2=backColor2;
|
|
style.BackColorGradientAngle=gradientAngle;
|
|
style.CornerDiameter=4;
|
|
style.CornerType=eCornerType.Rounded;
|
|
style.BorderLeft=border;
|
|
style.BorderLeftWidth=1;
|
|
style.BorderTop=border;
|
|
style.BorderTopWidth=1;
|
|
style.BorderBottom=border;
|
|
style.BorderBottomWidth=1;
|
|
style.BorderRight=border;
|
|
style.BorderRightWidth=1;
|
|
style.BorderColor=borderColor;
|
|
style.PaddingBottom=3;
|
|
style.PaddingLeft=3;
|
|
style.PaddingRight=3;
|
|
style.PaddingTop=3;
|
|
style.TextColor=textColor;
|
|
|
|
return style;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns reference to a node that is hosting given control.
|
|
/// </summary>
|
|
/// <param name="tree">Reference to the TreeGX control instance</param>
|
|
/// <param name="c">Control instance to look for</param>
|
|
/// <returns>Reference to a node hosting control or null if node could not be found</returns>
|
|
public static Node FindNodeForControl(TreeGX tree, System.Windows.Forms.Control c)
|
|
{
|
|
if(tree==null || c==null || tree.Nodes.Count==0)
|
|
return null;
|
|
|
|
Node node = tree.Nodes[0];
|
|
while(node!=null)
|
|
{
|
|
foreach(Cell cell in node.Cells)
|
|
{
|
|
if(cell.HostedControl==c)
|
|
return node;
|
|
}
|
|
node = node.NextVisibleNode;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
|
|
#region ComponentFactory
|
|
/// <summary>
|
|
/// Represents internal component factory with design-time support.
|
|
/// </summary>
|
|
internal class ComponentFactory
|
|
{
|
|
private IDesignerHost m_Designer=null;
|
|
/// <summary>
|
|
/// Creates new instace of the class.
|
|
/// </summary>
|
|
/// <param name="designer">Reference to DesignerHost to use for creation of new components.</param>
|
|
public ComponentFactory(IDesignerHost designer)
|
|
{
|
|
m_Designer=designer;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Creates new instace of the class.
|
|
/// </summary>
|
|
public ComponentFactory() {}
|
|
|
|
/// <summary>
|
|
/// Creates component and returns reference to the new instace.
|
|
/// </summary>
|
|
/// <param name="type">Type that identifies component to create.</param>
|
|
/// <returns>New instace of the component.</returns>
|
|
public object CreateComponent(Type type)
|
|
{
|
|
object o=null;
|
|
if(m_Designer!=null)
|
|
o=m_Designer.CreateComponent(type);
|
|
else
|
|
o=type.Assembly.CreateInstance(type.FullName);
|
|
return o;
|
|
}
|
|
}
|
|
#endregion
|
|
}
|