using System.Drawing;
using System.Drawing.Drawing2D;
using DevComponents.DotNetBar;
namespace DevComponents.AdvTree
{
namespace Display
{
///
/// Base class for node expand button display.
///
public abstract class NodeExpandDisplay
{
/// Creates new instance of the class
public NodeExpandDisplay()
{
}
/// Draws expand button.
/// Context parameters for drawing expand button.
public abstract void DrawExpandButton(NodeExpandPartRendererEventArgs e);
protected Pen GetBorderPen(NodeExpandPartRendererEventArgs e)
{
if(!e.BorderColor.IsEmpty)
return new Pen(e.BorderColor,1);
if (_ColorTable != null)
{
bool expanded = e.Node.Expanded;
TreeExpandColorTable ct = GetExpandColorTable(e);
if (ct == null) return null;
if (expanded)
{
// Collapse node colors
if (!e.IsMouseOver && ct.CollapseBorder != null)
return ct.CollapseBorder.CreatePen();
else if (e.IsMouseOver && ct.CollapseMouseOverBorder != null)
return ct.CollapseMouseOverBorder.CreatePen();
}
else
{
// Expand node colors
if (!e.IsMouseOver && ct.ExpandBorder != null)
return ct.ExpandBorder.CreatePen();
else if (e.IsMouseOver && ct.ExpandMouseOverBorder != null)
return ct.ExpandMouseOverBorder.CreatePen();
}
}
return null;
}
private TreeExpandColorTable GetExpandColorTable(NodeExpandPartRendererEventArgs e)
{
TreeExpandColorTable ct = null;
if (e.ExpandButtonType == eExpandButtonType.Rectangle)
ct = _ColorTable.ExpandRectangle;
else if (e.ExpandButtonType == eExpandButtonType.Triangle)
ct = _ColorTable.ExpandTriangle;
else if (e.ExpandButtonType == eExpandButtonType.Ellipse)
ct = _ColorTable.ExpandEllipse;
return ct;
}
protected Pen GetExpandPen(NodeExpandPartRendererEventArgs e)
{
if (e.ExpandLineColor.IsEmpty)
{
TreeExpandColorTable ct = GetExpandColorTable(e);
if (ct != null)
{
bool expanded = e.Node.Expanded;
if (expanded)
{
// Collapse node colors
if (!e.IsMouseOver && ct.CollapseForeground != null)
return ct.CollapseForeground.CreatePen(Dpi.Width1);
else if (e.IsMouseOver && ct.CollapseMouseOverForeground != null)
return ct.CollapseMouseOverForeground.CreatePen(Dpi.Width1);
}
else
{
// Collapse node colors
if (!e.IsMouseOver && ct.ExpandForeground != null)
return ct.ExpandForeground.CreatePen(Dpi.Width1);
else if (e.IsMouseOver && ct.ExpandMouseOverForeground != null)
return ct.ExpandMouseOverForeground.CreatePen(Dpi.Width1);
}
}
return GetBorderPen(e);
}
return new Pen(e.ExpandLineColor,1);
}
protected Brush GetBackgroundBrush(NodeExpandPartRendererEventArgs e)
{
if (e.BackColor.IsEmpty && e.BackColor2.IsEmpty)
{
bool expanded = e.Node.Expanded;
TreeExpandColorTable ct = GetExpandColorTable(e);
if (ct == null) return null;
if (expanded)
{
// Collapse node colors
if (!e.IsMouseOver && ct.CollapseFill != null)
return ct.CollapseFill.CreateBrush(e.ExpandPartBounds);
else if (e.IsMouseOver && ct.CollapseMouseOverFill != null)
return ct.CollapseMouseOverFill.CreateBrush(e.ExpandPartBounds);
}
else
{
// Expand node colors
if (!e.IsMouseOver && ct.ExpandFill != null)
return ct.ExpandFill.CreateBrush(e.ExpandPartBounds);
else if (e.IsMouseOver && ct.ExpandMouseOverFill != null)
return ct.ExpandMouseOverFill.CreateBrush(e.ExpandPartBounds);
}
return null;
}
if(e.BackColor2.IsEmpty)
return new SolidBrush(e.BackColor);
System.Drawing.Drawing2D.LinearGradientBrush brush=DisplayHelp.CreateLinearGradientBrush(e.ExpandPartBounds,e.BackColor,e.BackColor2,e.BackColorGradientAngle);
//brush.SetSigmaBellShape(0.8f);
return brush;
}
private TreeColorTable _ColorTable;
public TreeColorTable ColorTable
{
get { return _ColorTable; }
set { _ColorTable = value; }
}
}
}
}