216 lines
8.4 KiB
C#
216 lines
8.4 KiB
C#
using System;
|
|
using System.Drawing;
|
|
|
|
namespace DevComponents.Tree.Display
|
|
{
|
|
/// <summary>
|
|
/// Represents default system node and cell renderer.
|
|
/// </summary>
|
|
public class NodeSystemRenderer:NodeRenderer
|
|
{
|
|
#region Private Variables
|
|
private NodeExpandEllipseDisplay m_NodeExpandEllipseDisplay=new NodeExpandEllipseDisplay();
|
|
private NodeExpandRectDisplay m_NodeExpandRectDisplay=new NodeExpandRectDisplay();
|
|
private NodeExpandImageDisplay m_NodeExpandImageDisplay=new NodeExpandImageDisplay();
|
|
private NodeCommandDisplay m_NodeCommandDisplay=new NodeCommandDisplay();
|
|
private ElementStyleDisplayInfo m_ElementStyleDisplayInfo=new ElementStyleDisplayInfo();
|
|
private NodeSelectionDisplay m_SelectionDisplay=new NodeSelectionDisplay();
|
|
private CurveConnectorDisplay m_CurveConnectorDisplay=null;
|
|
private LineConnectorDisplay m_LineConnectorDisplay=null;
|
|
#endregion
|
|
|
|
#region Internal Implementation
|
|
/// <summary>
|
|
/// Returns ElementStyleDisplayInfo class that provides information for ElementStyle rendering.
|
|
/// </summary>
|
|
/// <param name="style">Reference to style.</param>
|
|
/// <param name="g">Reference to graphics object.</param>
|
|
/// <param name="bounds">Style bounds</param>
|
|
/// <returns>New instance of ElementStyleDisplayInfo</returns>
|
|
protected ElementStyleDisplayInfo GetElementStyleDisplayInfo(ElementStyle style, Graphics g, Rectangle bounds)
|
|
{
|
|
m_ElementStyleDisplayInfo.Style=style;
|
|
m_ElementStyleDisplayInfo.Graphics=g;
|
|
m_ElementStyleDisplayInfo.Bounds=bounds;
|
|
return m_ElementStyleDisplayInfo;
|
|
}
|
|
|
|
private NodeConnectorDisplay GetConnectorDisplay(NodeConnector c)
|
|
{
|
|
NodeConnectorDisplay d=null;
|
|
if(c==null)
|
|
return null;
|
|
|
|
switch(c.ConnectorType)
|
|
{
|
|
case eNodeConnectorType.Curve:
|
|
{
|
|
if(m_CurveConnectorDisplay==null)
|
|
m_CurveConnectorDisplay=new CurveConnectorDisplay();
|
|
d=m_CurveConnectorDisplay;
|
|
break;
|
|
}
|
|
case eNodeConnectorType.Line:
|
|
{
|
|
if(m_LineConnectorDisplay==null)
|
|
m_LineConnectorDisplay=new LineConnectorDisplay();
|
|
d=m_LineConnectorDisplay;
|
|
break;
|
|
}
|
|
}
|
|
return d;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Draws node background. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you
|
|
/// do not want default rendering to occur do not call the base implementation. You can call OnRenderNodeBackground method so events can occur.
|
|
/// </summary>
|
|
/// <param name="e">Information provided for rendering.</param>
|
|
public override void DrawNodeBackground(NodeRendererEventArgs e)
|
|
{
|
|
ElementStyleDisplayInfo di=GetElementStyleDisplayInfo(e.Style,e.Graphics,DisplayHelp.GetDrawRectangle(e.NodeBounds));
|
|
ElementStyleDisplay.Paint(di);
|
|
|
|
base.DrawNodeBackground(e);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Draws node expand part. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you
|
|
/// do not want default rendering to occur do not call the base implementation. You can call OnRenderNodeExpandPart method so events can occur.
|
|
/// </summary>
|
|
/// <param name="e">Information provided for rendering.</param>
|
|
public override void DrawNodeExpandPart(NodeExpandPartRendererEventArgs e)
|
|
{
|
|
GetExpandDisplay(e.ExpandButtonType).DrawExpandButton(e);
|
|
base.DrawNodeExpandPart(e);
|
|
}
|
|
|
|
private NodeExpandDisplay GetExpandDisplay(eExpandButtonType e)
|
|
{
|
|
NodeExpandDisplay d=null;
|
|
switch(e)
|
|
{
|
|
case eExpandButtonType.Ellipse:
|
|
d=m_NodeExpandEllipseDisplay;
|
|
break;
|
|
case eExpandButtonType.Rectangle:
|
|
d=m_NodeExpandRectDisplay;
|
|
break;
|
|
case eExpandButtonType.Image:
|
|
d= m_NodeExpandImageDisplay;
|
|
break;
|
|
}
|
|
return d;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Draws node command part. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you
|
|
/// do not want default rendering to occur do not call the base implementation. You can call OnRenderNodeCommandPart method so events can occur.
|
|
/// </summary>
|
|
/// <param name="e">Information provided for rendering.</param>
|
|
public override void DrawNodeCommandPart(NodeCommandPartRendererEventArgs e)
|
|
{
|
|
m_NodeCommandDisplay.DrawCommandButton(e);
|
|
base.DrawNodeCommandPart(e);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Draws cell background. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you
|
|
/// do not want default rendering to occur do not call the base implementation. You can call OnRenderCellBackground method so events can occur.
|
|
/// </summary>
|
|
/// <param name="e">Information provided for rendering.</param>
|
|
public override void DrawCellBackground(NodeCellRendererEventArgs e)
|
|
{
|
|
ElementStyleDisplayInfo di=GetElementStyleDisplayInfo(e.Style,e.Graphics,DisplayHelp.GetDrawRectangle(e.CellBounds));
|
|
ElementStyleDisplay.Paint(di);
|
|
|
|
base.DrawCellBackground(e);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Draws cell check box. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you
|
|
/// do not want default rendering to occur do not call the base implementation. You can call OnRenderCellCheckBox method so events can occur.
|
|
/// </summary>
|
|
/// <param name="e">Information provided for rendering.</param>
|
|
public override void DrawCellCheckBox(NodeCellRendererEventArgs e)
|
|
{
|
|
CellDisplay.PaintCellCheckBox(e);
|
|
base.DrawCellCheckBox(e);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Draws cell image. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you
|
|
/// do not want default rendering to occur do not call the base implementation. You can call OnRenderCellImage method so events can occur.
|
|
/// </summary>
|
|
/// <param name="e">Information provided for rendering.</param>
|
|
public override void DrawCellImage(NodeCellRendererEventArgs e)
|
|
{
|
|
CellDisplay.PaintCellImage(e);
|
|
base.DrawCellImage(e);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Draws cell text. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you
|
|
/// do not want default rendering to occur do not call the base implementation. You can call OnRenderCellText method so events can occur.
|
|
/// </summary>
|
|
/// <param name="e">Information provided for rendering.</param>
|
|
public override void DrawCellText(NodeCellRendererEventArgs e)
|
|
{
|
|
CellDisplay.PaintText(e);
|
|
base.DrawCellText(e);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Draws selection for SelectedNode. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you
|
|
/// do not want default rendering to occur do not call the base implementation. You can call OnRenderSelection method so events can occur.
|
|
/// </summary>
|
|
/// <param name="e">Information provided for rendering.</param>
|
|
public override void DrawSelection(SelectionRendererEventArgs e)
|
|
{
|
|
m_SelectionDisplay.PaintSelection(e);
|
|
base.DrawSelection(e);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Draws connector between nodes. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you
|
|
/// do not want default rendering to occur do not call the base implementation. You can call OnRenderConnector method so events can occur.
|
|
/// </summary>
|
|
/// <param name="e">Information provided for rendering.</param>
|
|
public override void DrawConnector(ConnectorRendererEventArgs e)
|
|
{
|
|
NodeConnectorDisplay display = GetConnectorDisplay(e.NodeConnector);
|
|
if(display!=null)
|
|
display.DrawConnector(e);
|
|
|
|
base.DrawConnector(e);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Draws the tree background. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you
|
|
/// do not want default rendering to occur do not call the base implementation. You can call OnRenderTreeBackground method so events can occur.
|
|
/// </summary>
|
|
/// <param name="e">Information provided for rendering.</param>
|
|
public override void DrawTreeBackground(TreeBackgroundRendererEventArgs e)
|
|
{
|
|
TreeGX tree = e.TreeGX;
|
|
Graphics g = e.Graphics;
|
|
|
|
if(!tree.BackColor.IsEmpty)
|
|
{
|
|
using(SolidBrush brush=new SolidBrush(tree.BackColor))
|
|
g.FillRectangle(brush,tree.DisplayRectangle);
|
|
}
|
|
|
|
ElementStyleDisplayInfo info=new ElementStyleDisplayInfo();
|
|
info.Bounds=tree.DisplayRectangle;
|
|
info.Graphics=g;
|
|
info.Style=tree.BackgroundStyle;
|
|
ElementStyleDisplay.Paint(info);
|
|
|
|
base.DrawTreeBackground (e);
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|