170 lines
3.9 KiB
C#
170 lines
3.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using System.Drawing;
|
|
using System.ComponentModel;
|
|
|
|
namespace Aga.Controls.Tree.NodeControls
|
|
{
|
|
[DesignTimeVisible(false), ToolboxItem(false)]
|
|
public abstract class NodeControl : Component
|
|
{
|
|
#region Properties
|
|
|
|
private TreeViewAdv _parent;
|
|
[Browsable(false)]
|
|
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
|
public TreeViewAdv Parent
|
|
{
|
|
get { return _parent; }
|
|
set
|
|
{
|
|
if (value != _parent)
|
|
{
|
|
if (_parent != null)
|
|
_parent.NodeControls.Remove(this);
|
|
|
|
if (value != null)
|
|
value.NodeControls.Add(this);
|
|
}
|
|
}
|
|
}
|
|
|
|
private IToolTipProvider _toolTipProvider;
|
|
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
|
public IToolTipProvider ToolTipProvider
|
|
{
|
|
get { return _toolTipProvider; }
|
|
set { _toolTipProvider = value; }
|
|
}
|
|
|
|
private TreeColumn _parentColumn;
|
|
public TreeColumn ParentColumn
|
|
{
|
|
get { return _parentColumn; }
|
|
set
|
|
{
|
|
_parentColumn = value;
|
|
if (_parent != null)
|
|
_parent.FullUpdate();
|
|
}
|
|
}
|
|
|
|
private VerticalAlignment _verticalAlign = VerticalAlignment.Center;
|
|
[DefaultValue(VerticalAlignment.Center)]
|
|
public VerticalAlignment VerticalAlign
|
|
{
|
|
get { return _verticalAlign; }
|
|
set
|
|
{
|
|
_verticalAlign = value;
|
|
if (_parent != null)
|
|
_parent.FullUpdate();
|
|
}
|
|
}
|
|
|
|
private int _leftMargin = 0;
|
|
public int LeftMargin
|
|
{
|
|
get { return _leftMargin; }
|
|
set
|
|
{
|
|
if (value < 0)
|
|
throw new ArgumentOutOfRangeException();
|
|
|
|
_leftMargin = value;
|
|
if (_parent != null)
|
|
_parent.FullUpdate();
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
internal virtual void AssignParent(TreeViewAdv parent)
|
|
{
|
|
_parent = parent;
|
|
}
|
|
|
|
protected virtual Rectangle GetBounds(TreeNodeAdv node, DrawContext context)
|
|
{
|
|
Rectangle r = context.Bounds;
|
|
Size s = GetActualSize(node, context);
|
|
Size bs = new Size(r.Width - LeftMargin, Math.Min(r.Height, s.Height));
|
|
switch (VerticalAlign)
|
|
{
|
|
case VerticalAlignment.Top:
|
|
return new Rectangle(new Point(r.X + LeftMargin, r.Y), bs);
|
|
case VerticalAlignment.Bottom:
|
|
return new Rectangle(new Point(r.X + LeftMargin, r.Bottom - s.Height), bs);
|
|
default:
|
|
return new Rectangle(new Point(r.X + LeftMargin, r.Y + (r.Height - s.Height) / 2), bs);
|
|
}
|
|
}
|
|
|
|
protected void CheckThread()
|
|
{
|
|
if (Parent != null && Control.CheckForIllegalCrossThreadCalls)
|
|
if (Parent.InvokeRequired)
|
|
throw new InvalidOperationException("Cross-thread calls are not allowed");
|
|
}
|
|
|
|
public bool IsVisible(TreeNodeAdv node)
|
|
{
|
|
NodeControlValueEventArgs args = new NodeControlValueEventArgs(node);
|
|
args.Value = true;
|
|
OnIsVisibleValueNeeded(args);
|
|
return Convert.ToBoolean(args.Value);
|
|
}
|
|
|
|
internal Size GetActualSize(TreeNodeAdv node, DrawContext context)
|
|
{
|
|
if (IsVisible(node))
|
|
{
|
|
Size s = MeasureSize(node, context);
|
|
return new Size(s.Width + LeftMargin, s.Height);
|
|
}
|
|
else
|
|
return Size.Empty;
|
|
}
|
|
|
|
public abstract Size MeasureSize(TreeNodeAdv node, DrawContext context);
|
|
|
|
public abstract void Draw(TreeNodeAdv node, DrawContext context);
|
|
|
|
public virtual string GetToolTip(TreeNodeAdv node)
|
|
{
|
|
if (ToolTipProvider != null)
|
|
return ToolTipProvider.GetToolTip(node, this);
|
|
else
|
|
return string.Empty;
|
|
}
|
|
|
|
public virtual void MouseDown(TreeNodeAdvMouseEventArgs args)
|
|
{
|
|
}
|
|
|
|
public virtual void MouseUp(TreeNodeAdvMouseEventArgs args)
|
|
{
|
|
}
|
|
|
|
public virtual void MouseDoubleClick(TreeNodeAdvMouseEventArgs args)
|
|
{
|
|
}
|
|
|
|
public virtual void KeyDown(KeyEventArgs args)
|
|
{
|
|
}
|
|
|
|
public virtual void KeyUp(KeyEventArgs args)
|
|
{
|
|
}
|
|
|
|
public event EventHandler<NodeControlValueEventArgs> IsVisibleValueNeeded;
|
|
protected virtual void OnIsVisibleValueNeeded(NodeControlValueEventArgs args)
|
|
{
|
|
if (IsVisibleValueNeeded != null)
|
|
IsVisibleValueNeeded(this, args);
|
|
}
|
|
}
|
|
}
|