558 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			558 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System.Drawing;
 | 
						|
using System.Drawing.Drawing2D;
 | 
						|
 | 
						|
namespace DevComponents.Tree.Display
 | 
						|
{
 | 
						|
	/// <summary>
 | 
						|
	/// Summary description for NodeTreeDisplay.
 | 
						|
	/// </summary>
 | 
						|
	public class NodeTreeDisplay:NodeDisplay
 | 
						|
	{
 | 
						|
		#region Private Variables
 | 
						|
		// Cashed objects
 | 
						|
		ElementStyleDisplayInfo m_ElementStyleDisplayInfo=new ElementStyleDisplayInfo();
 | 
						|
		NodeCellRendererEventArgs m_CellDisplayInfo=new NodeCellRendererEventArgs();
 | 
						|
//		CurveConnectorDisplay m_CurveConnectorDisplay=null;
 | 
						|
//		LineConnectorDisplay m_LineConnectorDisplay=null;
 | 
						|
		private NodeSystemRenderer m_SystemRenderer=new NodeSystemRenderer();
 | 
						|
		private NodeProfessionalRenderer m_ProfRenderer=new NodeProfessionalRenderer();
 | 
						|
		#endregion
 | 
						|
		/// <summary>Creates new instance of the class</summary>
 | 
						|
		/// <param name="tree">Object to initialize class with.</param>
 | 
						|
		public NodeTreeDisplay(TreeGX tree):base(tree)
 | 
						|
		{
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Paints the treee on canvas.
 | 
						|
		/// </summary>
 | 
						|
		public override void Paint(Graphics g, Rectangle clipRectangle)
 | 
						|
		{
 | 
						|
			base.Paint(g,clipRectangle);
 | 
						|
 | 
						|
			// Paint header
 | 
						|
 | 
						|
			// Paint Nodes...
 | 
						|
			NodeDisplayContext context=new NodeDisplayContext();
 | 
						|
			context.Graphics=g;
 | 
						|
			context.DefaultFont=this.Tree.Font;
 | 
						|
			context.ClipRectangle=clipRectangle;
 | 
						|
			context.Offset=this.Offset;
 | 
						|
			context.Styles=this.Tree.Styles;
 | 
						|
			
 | 
						|
			// Setup rendering
 | 
						|
			context.NodeRenderer = m_SystemRenderer;
 | 
						|
			if(this.Tree.NodeRenderer!=null && this.Tree.RenderMode==eNodeRenderMode.Custom)
 | 
						|
				context.NodeRenderer=this.Tree.NodeRenderer;
 | 
						|
			else if(this.Tree.RenderMode==eNodeRenderMode.Professional)
 | 
						|
				context.NodeRenderer = m_ProfRenderer;
 | 
						|
				
 | 
						|
			context.NodeRendererEventArgs=new NodeRendererEventArgs();
 | 
						|
				
 | 
						|
			if(this.Tree.NodeStyle!=null)
 | 
						|
				context.DefaultNodeStyle=this.Tree.NodeStyle;
 | 
						|
			else
 | 
						|
				context.DefaultNodeStyle=GetDefaultNodeStyle();
 | 
						|
			if(this.Tree.NodeStyleExpanded!=null)
 | 
						|
				context.ExpandedNodeStyle=this.Tree.NodeStyleExpanded;
 | 
						|
			if(this.Tree.NodeStyleSelected!=null)
 | 
						|
				context.SelectedNodeStyle=this.Tree.NodeStyleSelected;
 | 
						|
			if(this.Tree.NodeStyleMouseOver!=null)
 | 
						|
				context.MouseOverNodeStyle=this.Tree.NodeStyleMouseOver;
 | 
						|
 | 
						|
			if(this.Tree.CellStyleDefault!=null)
 | 
						|
				context.CellStyleDefault=this.Tree.CellStyleDefault;
 | 
						|
//			else
 | 
						|
//				context.CellStyleDefault=ElementStyle.GetDefaultCellStyle(context.DefaultNodeStyle);
 | 
						|
			if(this.Tree.CellStyleDisabled!=null)
 | 
						|
				context.CellStyleDisabled=this.Tree.CellStyleDisabled;
 | 
						|
			else
 | 
						|
				context.CellStyleDisabled=ElementStyle.GetDefaultDisabledCellStyle();
 | 
						|
			if(this.Tree.CellStyleMouseDown!=null)
 | 
						|
				context.CellStyleMouseDown=this.Tree.CellStyleMouseDown;
 | 
						|
			if(this.Tree.CellStyleMouseOver!=null)
 | 
						|
				context.CellStyleMouseOver=this.Tree.CellStyleMouseOver;
 | 
						|
			if(this.Tree.CellStyleSelected!=null)
 | 
						|
				context.CellStyleSelected=this.Tree.CellStyleSelected;
 | 
						|
			else
 | 
						|
				context.CellStyleSelected=ElementStyle.GetDefaultSelectedCellStyle();
 | 
						|
 | 
						|
			// Setup connector
 | 
						|
			//context.RootConnectorDisplay=GetConnectorDisplay(this.Tree.RootConnector);
 | 
						|
			//context.NodesConnectorDisplay=GetConnectorDisplay(this.Tree.NodesConnector);
 | 
						|
			//context.LinkConnectorDisplay=GetConnectorDisplay(this.Tree.LinkConnector);
 | 
						|
			context.ConnectorDisplayInfo=new ConnectorRendererEventArgs();
 | 
						|
			context.ConnectorDisplayInfo.Graphics=context.Graphics;
 | 
						|
			if(this.Tree.SelectedPathConnector!=null)
 | 
						|
			{
 | 
						|
				// Prepare nodes for path display. Downstream nodes are easily recognized when
 | 
						|
				// path upstream nodes need special treatment to improve performance
 | 
						|
				if(this.Tree.SelectedNode!=null)
 | 
						|
				{
 | 
						|
					Node n=this.Tree.SelectedNode;
 | 
						|
					while(n!=null)
 | 
						|
					{
 | 
						|
						// This marker will be reset once node is painted...
 | 
						|
						n.SelectedConnectorMarker = true;
 | 
						|
						n=n.Parent;
 | 
						|
					}
 | 
						|
				}
 | 
						|
				//context.SelectedPathConnectorDisplay=GetConnectorDisplay(this.Tree.SelectedPathConnector);
 | 
						|
			}
 | 
						|
 | 
						|
			// Setup Node Expander Painter
 | 
						|
			context.ExpandDisplayInfo=new NodeExpandPartRendererEventArgs(context.Graphics);
 | 
						|
			context.ExpandDisplayInfo.BackColor=this.Tree.GetColor(this.Tree.ExpandBackColor, this.Tree.ExpandBackColorSchemePart);
 | 
						|
			context.ExpandDisplayInfo.BackColor2=this.Tree.GetColor(this.Tree.ExpandBackColor2, this.Tree.ExpandBackColor2SchemePart);
 | 
						|
			context.ExpandDisplayInfo.BackColorGradientAngle=this.Tree.ExpandBackColorGradientAngle;
 | 
						|
			context.ExpandDisplayInfo.BorderColor=this.Tree.GetColor(this.Tree.ExpandBorderColor, this.Tree.ExpandBorderColorSchemePart);
 | 
						|
			context.ExpandDisplayInfo.ExpandLineColor=this.Tree.GetColor(this.Tree.ExpandLineColor, this.Tree.ExpandLineColorSchemePart);
 | 
						|
			context.ExpandDisplayInfo.Graphics=context.Graphics;
 | 
						|
            context.ExpandDisplayInfo.ExpandButtonType = this.Tree.ExpandButtonType;
 | 
						|
			context.ExpandDisplayInfo.ExpandImage=this.Tree.ExpandImage;
 | 
						|
			context.ExpandDisplayInfo.ExpandImageCollapse=this.Tree.ExpandImageCollapse;
 | 
						|
			//context.ExpandDisplay=this.GetExpandDisplay(this.Tree.ExpandButtonType);
 | 
						|
 | 
						|
 | 
						|
			// Setup Selection Display
 | 
						|
			//context.SelectionDisplay=new NodeSelectionDisplay();
 | 
						|
			context.SelectionDisplayInfo=new SelectionRendererEventArgs();
 | 
						|
			context.SelectionDisplayInfo.Graphics=context.Graphics;
 | 
						|
			context.SelectionDisplayInfo.FillColor=this.Tree.SelectionBoxFillColor;
 | 
						|
			context.SelectionDisplayInfo.BorderColor=this.Tree.SelectionBoxBorderColor;
 | 
						|
			context.SelectionDisplayInfo.Width=this.Tree.SelectionBoxSize;
 | 
						|
 | 
						|
			// Setup Node Command Display
 | 
						|
			//context.CommandDisplay=new NodeCommandDisplay();
 | 
						|
			context.CommandDisplayInfo=new NodeCommandPartRendererEventArgs(context.Graphics);
 | 
						|
			context.CommandDisplayInfo.BackColor=this.Tree.GetColor(this.Tree.CommandBackColor, this.Tree.CommandBackColorSchemePart);
 | 
						|
			context.CommandDisplayInfo.BackColor2=this.Tree.GetColor(this.Tree.CommandBackColor2, this.Tree.CommandBackColor2SchemePart);
 | 
						|
			context.CommandDisplayInfo.BackColorGradientAngle=this.Tree.CommandBackColorGradientAngle;
 | 
						|
			context.CommandDisplayInfo.ForeColor=this.Tree.GetColor(this.Tree.CommandForeColor, this.Tree.CommandForeColorSchemePart);
 | 
						|
			context.CommandDisplayInfo.MouseOverBackColor=this.Tree.GetColor(this.Tree.CommandMouseOverBackColor, this.Tree.CommandMouseOverBackColorSchemePart);
 | 
						|
			context.CommandDisplayInfo.MouseOverBackColor2=this.Tree.GetColor(this.Tree.CommandMouseOverBackColor2, this.Tree.CommandMouseOverBackColor2SchemePart);
 | 
						|
			context.CommandDisplayInfo.MouseOverBackColorGradientAngle=this.Tree.CommandMouseOverBackColorGradientAngle;
 | 
						|
			context.CommandDisplayInfo.MouseOverForeColor=this.Tree.GetColor(this.Tree.CommandMouseOverForeColor, this.Tree.CommandMouseOverForeColorSchemePart);
 | 
						|
				
 | 
						|
			if(this.Tree.DisplayRootNode!=null)
 | 
						|
				this.PaintNode(this.Tree.DisplayRootNode, context);
 | 
						|
			else
 | 
						|
				this.PaintNodes(this.Tree.Nodes, context);
 | 
						|
 | 
						|
			Node dragNode=this.Tree.GetDragNode();
 | 
						|
			if(dragNode!=null && dragNode.Parent==null)
 | 
						|
			{
 | 
						|
				Point p=context.Offset;
 | 
						|
				context.Offset=Point.Empty;
 | 
						|
				PaintNode(dragNode,context);
 | 
						|
				context.Offset=p;
 | 
						|
			}
 | 
						|
 | 
						|
			PaintSelection(context);
 | 
						|
		}
 | 
						|
		
 | 
						|
		private void PaintSelection(NodeDisplayContext context)
 | 
						|
		{
 | 
						|
			if(this.Tree.SelectedNode!=null && this.Tree.SelectedNode.Visible && this.Tree.SelectionBox)
 | 
						|
			{
 | 
						|
				context.SelectionDisplayInfo.Node=this.Tree.SelectedNode;
 | 
						|
				context.SelectionDisplayInfo.Bounds=NodeDisplay.GetNodeRectangle(eNodeRectanglePart.NodeContentBounds, context.SelectionDisplayInfo.Node, context.Offset);
 | 
						|
				//context.SelectionDisplay.PaintSelection(context.SelectionDisplayInfo);
 | 
						|
				context.NodeRenderer.DrawSelection(context.SelectionDisplayInfo);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		private void PaintNodes(NodeCollection nodes,NodeDisplayContext context)
 | 
						|
		{
 | 
						|
			foreach(Node node in nodes)
 | 
						|
			{
 | 
						|
				PaintNode(node, context);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		private void PaintNode(Node node, NodeDisplayContext context)
 | 
						|
		{
 | 
						|
			if(!node.Visible)
 | 
						|
			{
 | 
						|
				node.SelectedConnectorMarker = false;
 | 
						|
				return;
 | 
						|
			}
 | 
						|
 | 
						|
			Rectangle r=NodeDisplay.GetNodeRectangle(eNodeRectanglePart.NodeContentBounds,node,context.Offset);
 | 
						|
			if(r.IsEmpty)
 | 
						|
			{
 | 
						|
				node.SelectedConnectorMarker = false;
 | 
						|
				return;
 | 
						|
			}
 | 
						|
			
 | 
						|
			if(node.Parent!=null && !node.Parent.BoundsRelative.IsEmpty)
 | 
						|
			{
 | 
						|
				this.PaintConnector(node, context);
 | 
						|
			}
 | 
						|
 | 
						|
			if(node.HasLinkedNodes)
 | 
						|
			{
 | 
						|
				foreach(LinkedNode linkedNode in node.LinkedNodes)
 | 
						|
				{
 | 
						|
					if(!linkedNode.Node.IsVisible)
 | 
						|
						continue;
 | 
						|
					this.PaintConnector(node,linkedNode.Node, context,true, linkedNode.ConnectorPoints);	
 | 
						|
				}
 | 
						|
			}
 | 
						|
			
 | 
						|
			node.SelectedConnectorMarker = false;
 | 
						|
 | 
						|
			if(r.IntersectsWith(context.ClipRectangle) || context.ClipRectangle.IsEmpty)
 | 
						|
				PaintSingleNode(node, context);
 | 
						|
//			else if(node.HasHostedControls) // Move controls to proper location
 | 
						|
//				MoveHostedControls(node, context);
 | 
						|
 | 
						|
			if(node.Expanded && node.Nodes.Count>0)
 | 
						|
				PaintNodes(node.Nodes,context);
 | 
						|
		}
 | 
						|
 | 
						|
		private void PaintSingleNode(Node node, NodeDisplayContext context)
 | 
						|
		{
 | 
						|
			Rectangle r=NodeDisplay.GetNodeRectangle(eNodeRectanglePart.NodeContentBounds,node,context.Offset);
 | 
						|
			NodeRenderer renderer=context.NodeRenderer;
 | 
						|
			if(node.NodeRenderer!=null && node.RenderMode==eNodeRenderMode.Custom)
 | 
						|
				renderer = node.NodeRenderer;
 | 
						|
			
 | 
						|
			// Paint node background
 | 
						|
			ElementStyle style=context.DefaultNodeStyle.Copy();
 | 
						|
			if(node.Style!=null)
 | 
						|
				style=node.Style.Copy();
 | 
						|
 | 
						|
			bool bApllyStyles=true;
 | 
						|
 | 
						|
			if(node.MouseOverNodePart==eMouseOverNodePart.Node && style!=null)
 | 
						|
			{
 | 
						|
				ElementStyle mouseOverStyle=context.MouseOverNodeStyle;
 | 
						|
				if(node.StyleMouseOver!=null)
 | 
						|
					mouseOverStyle=node.StyleMouseOver;
 | 
						|
                if (mouseOverStyle != null)
 | 
						|
                {
 | 
						|
                    style.ApplyStyle(mouseOverStyle);
 | 
						|
                    bApllyStyles = false;
 | 
						|
                }
 | 
						|
			}
 | 
						|
 | 
						|
			// On default style apply expanded style
 | 
						|
			if(bApllyStyles && node.Expanded && style!=null)
 | 
						|
			{
 | 
						|
				ElementStyle expandedStyle=context.ExpandedNodeStyle;
 | 
						|
				if(node.StyleExpanded!=null)
 | 
						|
					expandedStyle=node.StyleExpanded;
 | 
						|
				if(expandedStyle!=null)
 | 
						|
					style.ApplyStyle(expandedStyle);
 | 
						|
			}
 | 
						|
 | 
						|
			// Apply selected style if needed too
 | 
						|
			if(bApllyStyles && node.IsSelected && style!=null)
 | 
						|
			{
 | 
						|
				ElementStyle selectedStyle=context.SelectedNodeStyle;
 | 
						|
				if(node.StyleSelected!=null)
 | 
						|
					selectedStyle=node.StyleSelected;
 | 
						|
				if(selectedStyle!=null)
 | 
						|
					style.ApplyStyle(selectedStyle);
 | 
						|
			}
 | 
						|
 | 
						|
			Region backRegion=null;
 | 
						|
			if(style!=null)
 | 
						|
			{
 | 
						|
				if(style.Font==null)
 | 
						|
					style.Font=context.DefaultFont;
 | 
						|
				context.NodeRendererEventArgs.Graphics=context.Graphics;
 | 
						|
				context.NodeRendererEventArgs.Node = node;
 | 
						|
				context.NodeRendererEventArgs.NodeBounds = r;
 | 
						|
				context.NodeRendererEventArgs.Style = style;
 | 
						|
				renderer.DrawNodeBackground(context.NodeRendererEventArgs);
 | 
						|
				ElementStyleDisplayInfo di=new ElementStyleDisplayInfo(style,context.Graphics,DisplayHelp.GetDrawRectangle(r));
 | 
						|
				//ElementStyleDisplay.Paint(di);
 | 
						|
				backRegion=ElementStyleDisplay.GetStyleRegion(di);
 | 
						|
			}
 | 
						|
						
 | 
						|
			if(NodeDisplay.DrawExpandPart(node))
 | 
						|
			{
 | 
						|
				r=NodeDisplay.GetNodeRectangle(eNodeRectanglePart.ExpandBounds,node,context.Offset);
 | 
						|
				context.ExpandDisplayInfo.Node=node;
 | 
						|
				context.ExpandDisplayInfo.ExpandPartBounds=r;
 | 
						|
				//context.ExpandDisplayInfo.MouseOver=(node.MouseOverNodePart==eMouseOverNodePart.Expand);
 | 
						|
				//context.ExpandDisplay.DrawExpandButton(context.ExpandDisplayInfo);
 | 
						|
				
 | 
						|
				renderer.DrawNodeExpandPart(context.ExpandDisplayInfo);
 | 
						|
			}
 | 
						|
 | 
						|
			// TODO: Support for display of columns should go here
 | 
						|
//			if(node.NodesColumnHeaderVisible)
 | 
						|
//			{
 | 
						|
//				foreach(ColumnHeader col in node.NodesColumns)
 | 
						|
//				{
 | 
						|
//					r=col.Bounds;
 | 
						|
//					r.Offset(context.Offset);
 | 
						|
//					r.Offset(node.Bounds.Location);
 | 
						|
//					using(Pen pen=new Pen(Color.Yellow))
 | 
						|
//						context.Graphics.DrawRectangle(pen,Display.GetDrawRectangle(r));
 | 
						|
//				}
 | 
						|
//			}
 | 
						|
 | 
						|
			Region oldRegion=null;
 | 
						|
			if(backRegion!=null)
 | 
						|
			{
 | 
						|
				oldRegion=context.Graphics.Clip;
 | 
						|
				context.Graphics.SetClip(backRegion,CombineMode.Replace);
 | 
						|
			}
 | 
						|
 | 
						|
			if(!node.CommandBoundsRelative.IsEmpty)
 | 
						|
			{
 | 
						|
				r=NodeDisplay.GetNodeRectangle(eNodeRectanglePart.CommandBounds,node,context.Offset);
 | 
						|
                context.CommandDisplayInfo.Node=node;
 | 
						|
				context.CommandDisplayInfo.CommandPartBounds=r;
 | 
						|
				context.CommandDisplayInfo.Graphics = context.Graphics;
 | 
						|
				//context.CommandDisplay.DrawCommandButton(context.CommandDisplayInfo);
 | 
						|
				renderer.DrawNodeCommandPart(context.CommandDisplayInfo);
 | 
						|
				context.CommandDisplayInfo.Graphics = null;
 | 
						|
			}
 | 
						|
			
 | 
						|
			ElementStyle cellStyle = null;
 | 
						|
			if(context.CellStyleDefault==null)
 | 
						|
			{
 | 
						|
				cellStyle=new ElementStyle();
 | 
						|
				cellStyle.TextColor = style.TextColor;
 | 
						|
				cellStyle.TextShadowColor = style.TextShadowColor;
 | 
						|
				cellStyle.TextShadowOffset = style.TextShadowOffset;
 | 
						|
				cellStyle.TextAlignment = style.TextAlignment;
 | 
						|
				cellStyle.TextLineAlignment = style.TextLineAlignment;
 | 
						|
				cellStyle.WordWrap = style.WordWrap;
 | 
						|
				cellStyle.Font = style.Font;
 | 
						|
			}
 | 
						|
 | 
						|
			foreach(Cell cell in node.Cells)
 | 
						|
			{
 | 
						|
				if(cell.StyleNormal!=null)
 | 
						|
					style=cell.StyleNormal;
 | 
						|
				else if(context.CellStyleDefault!=null)
 | 
						|
					style=context.CellStyleDefault.Copy();
 | 
						|
				else
 | 
						|
					style = cellStyle;
 | 
						|
 | 
						|
				if(!cell.Enabled && cell.StyleDisabled!=null)
 | 
						|
					style.ApplyStyle(cell.StyleDisabled);
 | 
						|
				else if(!cell.Enabled && context.CellStyleDisabled!=null)
 | 
						|
					style.ApplyStyle(context.CellStyleDisabled);
 | 
						|
				else if(cell.IsMouseDown && cell.StyleMouseDown!=null)
 | 
						|
					style.ApplyStyle(cell.StyleMouseDown);
 | 
						|
				else if(cell.IsMouseDown && context.CellStyleMouseDown!=null)
 | 
						|
					style.ApplyStyle(context.CellStyleMouseDown);
 | 
						|
				else 
 | 
						|
				{
 | 
						|
					if(cell.IsSelected && cell.StyleSelected!=null)
 | 
						|
						style.ApplyStyle(cell.StyleSelected);
 | 
						|
					else if(cell.IsSelected && context.CellStyleSelected!=null)
 | 
						|
						style.ApplyStyle(context.CellStyleSelected);
 | 
						|
 | 
						|
					if(cell.IsMouseOver && cell.StyleMouseOver!=null)
 | 
						|
						style.ApplyStyle(cell.StyleMouseOver);
 | 
						|
					else if(cell.IsMouseOver && context.CellStyleMouseOver!=null)
 | 
						|
						style.ApplyStyle(context.CellStyleMouseOver);
 | 
						|
				}
 | 
						|
 | 
						|
				r=NodeDisplay.GetNodeRectangle(eNodeRectanglePart.NodeBounds,node,context.Offset);
 | 
						|
				
 | 
						|
				if(style!=null)
 | 
						|
				{
 | 
						|
					if(style.Font==null)
 | 
						|
						style.Font=context.DefaultFont;
 | 
						|
					Rectangle rCell=cell.BoundsRelative;
 | 
						|
					Rectangle rText=cell.TextContentBounds;
 | 
						|
					rCell.Offset(r.Location);
 | 
						|
					rText.Offset(r.Location);
 | 
						|
					ElementStyleDisplayInfo di=GetElementStyleDisplayInfo(style,context.Graphics,DisplayHelp.GetDrawRectangle(rCell));
 | 
						|
					ElementStyleDisplay.Paint(di);
 | 
						|
					NodeCellRendererEventArgs ci=GetCellDisplayInfo(style,context.Graphics,cell,r.Location, rCell, rText);
 | 
						|
					
 | 
						|
					if(ci.Cell.CheckBoxVisible)
 | 
						|
						renderer.DrawCellCheckBox(ci); //CellDisplay.PaintCellCheckBox(ci);
 | 
						|
					if(!ci.Cell.Images.LargestImageSize.IsEmpty)
 | 
						|
						renderer.DrawCellImage(ci); //CellDisplay.PaintCellImage(ci);
 | 
						|
					renderer.DrawCellText(ci) ; //CellDisplay.PaintText(ci);
 | 
						|
					
 | 
						|
					//CellDisplay.PaintCell(ci);
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			if(backRegion!=null)
 | 
						|
				context.Graphics.SetClip(oldRegion,CombineMode.Replace);
 | 
						|
		}
 | 
						|
 | 
						|
		private void PaintConnector(Node fromNode, Node toNode, NodeDisplayContext context,bool linkConnector)
 | 
						|
		{
 | 
						|
			PaintConnector(fromNode, toNode, context, linkConnector, null);
 | 
						|
		}
 | 
						|
		
 | 
						|
		private void PaintConnector(Node fromNode, Node toNode, NodeDisplayContext context,bool linkConnector, ConnectorPointsCollection connectorPoints)
 | 
						|
		{
 | 
						|
			bool isRootNode=IsRootNode(fromNode);
 | 
						|
//			if(context.RootConnectorDisplay==null && isRootNode || context.NodesConnectorDisplay==null && !isRootNode || linkConnector && context.LinkConnectorDisplay==null)
 | 
						|
//				return;
 | 
						|
 | 
						|
			context.ConnectorDisplayInfo.FromNode=fromNode;
 | 
						|
			context.ConnectorDisplayInfo.ToNode=toNode;
 | 
						|
			context.ConnectorDisplayInfo.IsRootNode=isRootNode;
 | 
						|
			context.ConnectorDisplayInfo.LinkConnector=linkConnector;
 | 
						|
			if(fromNode.Style!=null)
 | 
						|
				context.ConnectorDisplayInfo.StyleFromNode=fromNode.Style;
 | 
						|
			else
 | 
						|
				context.ConnectorDisplayInfo.StyleFromNode=context.DefaultNodeStyle;
 | 
						|
			if(toNode.Style!=null)
 | 
						|
				context.ConnectorDisplayInfo.StyleToNode=toNode.Style;
 | 
						|
			else
 | 
						|
				context.ConnectorDisplayInfo.StyleToNode=context.DefaultNodeStyle;
 | 
						|
			context.ConnectorDisplayInfo.Offset=context.Offset;
 | 
						|
			
 | 
						|
			//NodeConnectorDisplay display=null;
 | 
						|
			if(linkConnector)
 | 
						|
			{
 | 
						|
				context.ConnectorDisplayInfo.NodeConnector=this.Tree.LinkConnector;
 | 
						|
			}
 | 
						|
			else if(toNode.SelectedConnectorMarker)
 | 
						|
			{
 | 
						|
				//display = context.SelectedPathConnectorDisplay;
 | 
						|
				context.ConnectorDisplayInfo.NodeConnector=this.Tree.SelectedPathConnector;
 | 
						|
			}
 | 
						|
			else if(toNode.ParentConnector!=null)
 | 
						|
			{
 | 
						|
				//display=this.GetConnectorDisplay(toNode.ParentConnector);
 | 
						|
				context.ConnectorDisplayInfo.NodeConnector=toNode.ParentConnector;
 | 
						|
			}
 | 
						|
			else if(isRootNode)
 | 
						|
			{
 | 
						|
				//display=context.RootConnectorDisplay;
 | 
						|
				context.ConnectorDisplayInfo.NodeConnector=this.Tree.RootConnector;
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				//display=context.NodesConnectorDisplay;
 | 
						|
				context.ConnectorDisplayInfo.NodeConnector=this.Tree.NodesConnector;
 | 
						|
			}
 | 
						|
 | 
						|
			if(linkConnector)
 | 
						|
			{
 | 
						|
                if (connectorPoints != null && connectorPoints.Count > 0)
 | 
						|
				    context.ConnectorDisplayInfo.ConnectorPoints=connectorPoints;
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				if(connectorPoints!=null)
 | 
						|
					context.ConnectorDisplayInfo.ConnectorPoints=connectorPoints;
 | 
						|
				else if(toNode.ParentConnectorPoints.Count>0)
 | 
						|
					context.ConnectorDisplayInfo.ConnectorPoints=toNode.ParentConnectorPoints;
 | 
						|
				else
 | 
						|
					context.ConnectorDisplayInfo.ConnectorPoints=null;
 | 
						|
			}
 | 
						|
 | 
						|
			context.NodeRenderer.DrawConnector(context.ConnectorDisplayInfo);
 | 
						|
			//if(display!=null)
 | 
						|
			//	display.DrawConnector(context.ConnectorDisplayInfo);
 | 
						|
		}
 | 
						|
 | 
						|
		private void PaintConnector(Node toNode, NodeDisplayContext context)
 | 
						|
		{
 | 
						|
			PaintConnector(toNode.Parent, toNode, context,false);
 | 
						|
		}
 | 
						|
		
 | 
						|
//		private void MoveHostedControls(Node node, NodeDisplayContext context)
 | 
						|
//		{
 | 
						|
//			foreach(Cell cell in node.Cells)
 | 
						|
//			{
 | 
						|
//				if(cell.HostedControl!=null && cell.HostedControl.Visible)
 | 
						|
//				{
 | 
						|
//					Rectangle bounds = NodeDisplay.GetCellRectangle(eCellRectanglePart.TextBounds, cell, context.Offset);
 | 
						|
//					if(cell.HostedControl.Bounds!=bounds)
 | 
						|
//						cell.HostedControl.Bounds=bounds;
 | 
						|
//					return;
 | 
						|
//				}
 | 
						|
//			}
 | 
						|
//		}
 | 
						|
 | 
						|
		private ElementStyleDisplayInfo GetElementStyleDisplayInfo(ElementStyle style, Graphics g, Rectangle bounds)
 | 
						|
		{
 | 
						|
			m_ElementStyleDisplayInfo.Style=style;
 | 
						|
			m_ElementStyleDisplayInfo.Graphics=g;
 | 
						|
			m_ElementStyleDisplayInfo.Bounds=bounds;
 | 
						|
			return m_ElementStyleDisplayInfo;
 | 
						|
		}
 | 
						|
 | 
						|
		private NodeCellRendererEventArgs GetCellDisplayInfo(ElementStyle style, Graphics g, Cell cell, Point cellOffset, Rectangle cellBounds, Rectangle cellTextBounds)
 | 
						|
		{
 | 
						|
			m_CellDisplayInfo.Cell=cell;
 | 
						|
			m_CellDisplayInfo.Graphics=g;
 | 
						|
			m_CellDisplayInfo.Style=style;
 | 
						|
			m_CellDisplayInfo.CellOffset=cellOffset;
 | 
						|
            m_CellDisplayInfo.CellBounds = cellBounds;
 | 
						|
            m_CellDisplayInfo.CellTextBounds = cellTextBounds;
 | 
						|
			return m_CellDisplayInfo;
 | 
						|
		}
 | 
						|
 | 
						|
//		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;
 | 
						|
//		}
 | 
						|
 | 
						|
		private class NodeDisplayContext
 | 
						|
		{
 | 
						|
			public Graphics Graphics=null;
 | 
						|
			public Font DefaultFont=null;
 | 
						|
			public Rectangle ClipRectangle=Rectangle.Empty;
 | 
						|
			public Point Offset=Point.Empty;
 | 
						|
			public ElementStyle DefaultNodeStyle=null;
 | 
						|
			public ElementStyle ExpandedNodeStyle=null;
 | 
						|
			public ElementStyle SelectedNodeStyle=null;
 | 
						|
			public ElementStyle MouseOverNodeStyle=null;
 | 
						|
			public ElementStyle CellStyleDefault=null;
 | 
						|
			public ElementStyle CellStyleMouseDown=null;
 | 
						|
			public ElementStyle CellStyleMouseOver=null;
 | 
						|
			public ElementStyle CellStyleSelected=null;
 | 
						|
			public ElementStyle CellStyleDisabled=null;
 | 
						|
			public ElementStyleCollection Styles=null;
 | 
						|
			//public NodeConnectorDisplay RootConnectorDisplay=null;
 | 
						|
			//public NodeConnectorDisplay NodesConnectorDisplay=null;
 | 
						|
			//public NodeConnectorDisplay LinkConnectorDisplay=null;
 | 
						|
			//public NodeConnectorDisplay SelectedPathConnectorDisplay=null;
 | 
						|
			public ConnectorRendererEventArgs ConnectorDisplayInfo=null;
 | 
						|
			public NodeExpandPartRendererEventArgs ExpandDisplayInfo=null;
 | 
						|
			//public NodeExpandDisplay ExpandDisplay=null;
 | 
						|
			//public NodeSelectionDisplay SelectionDisplay=null;
 | 
						|
			public SelectionRendererEventArgs SelectionDisplayInfo=null;
 | 
						|
			//public NodeCommandDisplay CommandDisplay=null;
 | 
						|
			public NodeCommandPartRendererEventArgs CommandDisplayInfo=null;
 | 
						|
			public bool SelectedNodePath=false;
 | 
						|
			public NodeRenderer NodeRenderer=null;
 | 
						|
			public NodeRendererEventArgs NodeRendererEventArgs=null;
 | 
						|
		}
 | 
						|
 | 
						|
		
 | 
						|
	}
 | 
						|
}
 |