191 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			191 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System.Drawing;
 | |
| using DevComponents.WinForms.Drawing;
 | |
| 
 | |
| namespace DevComponents.AdvTree.Display
 | |
| {
 | |
| 	/// <summary>
 | |
| 	/// Represent class that paints selection around node.
 | |
| 	/// </summary>
 | |
| 	internal class NodeSelectionDisplay
 | |
| 	{
 | |
| 		public void PaintSelection(SelectionRendererEventArgs info)
 | |
| 		{
 | |
|             if (info.SelectionBoxStyle == eSelectionStyle.HighlightCells)
 | |
|                 PaintHighlightCellsSelectionStyle(info);
 | |
|             else if (info.SelectionBoxStyle == eSelectionStyle.FullRowSelect)
 | |
|                 PaintFullRowSelectSelectionStyle(info);
 | |
|             else if (info.SelectionBoxStyle == eSelectionStyle.NodeMarker)
 | |
|                 PaintNodeMarkerSelectionStyle(info);
 | |
| 			
 | |
| 		}
 | |
| 
 | |
|         public void PaintHotTracking(SelectionRendererEventArgs info)
 | |
|         {
 | |
|             // Full row is just a rectangle with the background...
 | |
|             Shape[] fullRowShapes = GetHotTrackingShapes();
 | |
|             Graphics g = info.Graphics;
 | |
|             Rectangle bounds = info.Bounds;
 | |
|             bounds.Width--;
 | |
|             bounds.Height--;
 | |
|             foreach (Shape shape in fullRowShapes)
 | |
|             {
 | |
|                 shape.Paint(g, bounds);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void PaintFullRowSelectSelectionStyle(SelectionRendererEventArgs info)
 | |
|         {
 | |
|             // Full row is just a rectangle with the background...
 | |
|             Shape[] fullRowShapes = GetFullRowShapes(info.TreeActive);
 | |
|             Graphics g = info.Graphics;
 | |
|             Rectangle bounds = info.Bounds;
 | |
|             //bounds.Width--;
 | |
|             //bounds.Height--;
 | |
| 
 | |
|             foreach (Shape shape in fullRowShapes)
 | |
|             {
 | |
|                 shape.Paint(g, bounds);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         Shape[] _FullRowShapes = null;
 | |
|         private Shape[] GetFullRowShapes(bool treeActive)
 | |
|         {
 | |
|             if (_FullRowShapes == null)
 | |
|             {
 | |
|                 _FullRowShapes = new Shape[1];
 | |
|                 _FullRowShapes[0] = new RectangleShape();
 | |
|             }
 | |
|             RectangleShape shape = (RectangleShape)_FullRowShapes[0];
 | |
|             SelectionColorTable colors = treeActive ? _SelectionColors.FullRowSelect : _SelectionColors.FullRowSelectInactive;
 | |
|             shape.Fill = colors.Fill;
 | |
|             shape.Border = colors.Border;
 | |
| 
 | |
|             return _FullRowShapes;
 | |
|         }
 | |
| 
 | |
|         private void PaintHighlightCellsSelectionStyle(SelectionRendererEventArgs info)
 | |
|         {
 | |
|             // Full row is just a rectangle with the background...
 | |
|             Shape[] fullRowShapes = GetHighlightCellsShapes(info.TreeActive);
 | |
|             Graphics g = info.Graphics;
 | |
|             Rectangle bounds = info.Bounds;
 | |
|             bounds.Width--;
 | |
|             bounds.Height--;
 | |
|             foreach (Shape shape in fullRowShapes)
 | |
|             {
 | |
|                 shape.Paint(g, bounds);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         Shape[] _HighlightCellsShapes = null;
 | |
|         private Shape[] GetHighlightCellsShapes(bool treeActive)
 | |
|         {
 | |
|             SelectionColorTable colorTable = treeActive ? _SelectionColors.HighlightCells : _SelectionColors.HighlightCellsInactive;
 | |
| 
 | |
|             if (_HighlightCellsShapes == null || ((RectangleShape)_HighlightCellsShapes[0]).CornerRadius != null && ((RectangleShape)_HighlightCellsShapes[0]).CornerRadius.TopLeft != colorTable.BorderCornerRadius)
 | |
|             {
 | |
|                 _HighlightCellsShapes = new Shape[1];
 | |
|                 RectangleShape rectShape = new RectangleShape();
 | |
|                 if (colorTable.BorderCornerRadius > 0)
 | |
|                 {
 | |
|                     rectShape.CornerRadius = new CornerRadius(colorTable.BorderCornerRadius);
 | |
|                     RectangleShape inner = new RectangleShape();
 | |
|                     rectShape.Content = inner;
 | |
|                 }
 | |
|                 _HighlightCellsShapes[0] = rectShape;
 | |
|             }
 | |
|             
 | |
|             RectangleShape shape = (RectangleShape)_HighlightCellsShapes[0];
 | |
|             shape.Fill = colorTable.Fill;
 | |
|             shape.Border = colorTable.Border;
 | |
|             if (shape.Content != null)
 | |
|             {
 | |
|                 shape = (RectangleShape)shape.Content;
 | |
|                 shape.Border = colorTable.InnerBorder;
 | |
|             }
 | |
| 
 | |
|             return _HighlightCellsShapes;
 | |
|         }
 | |
| 
 | |
|         Shape[] _HotTrackingShapes = null;
 | |
|         private Shape[] GetHotTrackingShapes()
 | |
|         {
 | |
|             if (_HotTrackingShapes == null)
 | |
|             {
 | |
|                 _HotTrackingShapes = new Shape[1];
 | |
|                 RectangleShape rectShape = new RectangleShape();
 | |
|                 rectShape.CornerRadius = new CornerRadius(2);
 | |
|                 RectangleShape inner = new RectangleShape();
 | |
|                 //inner.CornerRadius = new CornerRadius(2);
 | |
|                 rectShape.Content = inner;
 | |
|                 _HotTrackingShapes[0] = rectShape;
 | |
|             }
 | |
| 
 | |
|             SelectionColorTable colorTable = _SelectionColors.NodeHotTracking;
 | |
|             RectangleShape shape = (RectangleShape)_HotTrackingShapes[0];
 | |
|             shape.Fill = colorTable.Fill;
 | |
|             shape.Border = colorTable.Border;
 | |
|             shape = (RectangleShape)shape.Content;
 | |
|             shape.Border = colorTable.InnerBorder;
 | |
| 
 | |
|             return _HotTrackingShapes;
 | |
|         }
 | |
| 
 | |
|         private void PaintNodeMarkerSelectionStyle(SelectionRendererEventArgs info)
 | |
|         {
 | |
|             Rectangle inside = info.Bounds;
 | |
|             int borderWidth = 4;
 | |
|             inside.Inflate(1, 1);
 | |
|             inside.Width--;
 | |
|             inside.Height--;
 | |
|             Rectangle outside = info.Bounds;
 | |
|             outside.Inflate(borderWidth, borderWidth);
 | |
|             outside.Width--;
 | |
|             outside.Height--;
 | |
| 
 | |
|             SelectionColorTable colorTable = info.TreeActive ? _SelectionColors.NodeMarker : _SelectionColors.NodeMarkerInactive;
 | |
| 
 | |
|             if (colorTable.Border != null)
 | |
|             {
 | |
|                 Pen pen = colorTable.Border.CreatePen();
 | |
|                 if (pen != null)
 | |
|                 {
 | |
|                     info.Graphics.DrawRectangle(pen, inside);
 | |
|                     info.Graphics.DrawRectangle(pen, outside);
 | |
|                     pen.Dispose();
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             if (colorTable.Fill != null)
 | |
|             {
 | |
|                 Brush brush = colorTable.Fill.CreateBrush(outside);
 | |
|                 if (brush != null)
 | |
|                 {
 | |
|                     Region region = new Region(outside);
 | |
|                     region.Exclude(inside);
 | |
|                     info.Graphics.FillRegion(brush, region);
 | |
|                     brush.Dispose();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private TreeSelectionColors _SelectionColors = null;
 | |
|         public TreeSelectionColors SelectionColors
 | |
|         {
 | |
|             get { return _SelectionColors; }
 | |
|             set { _SelectionColors = value; }
 | |
|         }
 | |
| 	}
 | |
| 
 | |
| 	internal class NodeSelectionDisplayInfo
 | |
| 	{
 | |
| 		public Node Node=null;
 | |
| 		public Graphics Graphics=null;
 | |
| 		public Rectangle Bounds=Rectangle.Empty;
 | |
| 		public Color BorderColor=Color.Empty;
 | |
| 		public Color FillColor=Color.Empty;
 | |
| 		public int Width=4;
 | |
| 	}
 | |
| }
 |