DotNet 4.8.1 build of DotNetBar
This commit is contained in:
@@ -0,0 +1,190 @@
|
||||
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;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user