using System;
using System.ComponentModel.Design;
using System.Drawing;
namespace DevComponents.Tree
{
///
/// Represents class for static tree utilities.
///
public class Utilites
{
///
/// Initializes control with default settings for connectors and nodes.
///
/// Control to initialize.
public static void InitializeTree(TreeGX tree)
{
InitializeTree(tree,new ComponentFactory());
}
///
/// Initializes control with default settings for connectors and nodes.
///
/// Control to initialize.
/// Factory to use to create new instances of objects.
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;
}
///
/// Creates new style and adds it to styles collection
///
/// Tree to assign style to
/// Style factory
///
///
///
///
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;
}
///
/// Returns reference to a node that is hosting given control.
///
/// Reference to the TreeGX control instance
/// Control instance to look for
/// Reference to a node hosting control or null if node could not be found
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
///
/// Represents internal component factory with design-time support.
///
internal class ComponentFactory
{
private IDesignerHost m_Designer=null;
///
/// Creates new instace of the class.
///
/// Reference to DesignerHost to use for creation of new components.
public ComponentFactory(IDesignerHost designer)
{
m_Designer=designer;
}
///
/// Creates new instace of the class.
///
public ComponentFactory() {}
///
/// Creates component and returns reference to the new instace.
///
/// Type that identifies component to create.
/// New instace of the component.
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
}