diff -r 3145aadca3d2 -r 0c551e8818e0 External/Aga.Controls/Tree/NodeControls/NodePlusMinus.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/External/Aga.Controls/Tree/NodeControls/NodePlusMinus.cs Sun May 27 15:16:19 2012 +0000 @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Drawing; +using Aga.Controls.Properties; +using System.Windows.Forms; +using System.Windows.Forms.VisualStyles; + +namespace Aga.Controls.Tree.NodeControls +{ + internal class NodePlusMinus : NodeControl + { + public const int ImageSize = 9; + public const int Width = 16; + private Bitmap _plus; + private Bitmap _minus; + + private VisualStyleRenderer _openedRenderer; + private VisualStyleRenderer OpenedRenderer + { + get + { + if (_openedRenderer == null) + _openedRenderer = new VisualStyleRenderer(VisualStyleElement.TreeView.Glyph.Opened); + return _openedRenderer; + + } + } + + private VisualStyleRenderer _closedRenderer; + private VisualStyleRenderer ClosedRenderer + { + get + { + if (_closedRenderer == null) + _closedRenderer = new VisualStyleRenderer(VisualStyleElement.TreeView.Glyph.Closed); + return _closedRenderer; + } + } + + public NodePlusMinus() + { + _plus = Resources.plus; + _minus = Resources.minus; + } + + public override Size MeasureSize(TreeNodeAdv node, DrawContext context) + { + return new Size(Width, Width); + } + + public override void Draw(TreeNodeAdv node, DrawContext context) + { + if (node.CanExpand) + { + Rectangle r = context.Bounds; + int dy = (int)Math.Round((float)(r.Height - ImageSize) / 2); + if (Application.RenderWithVisualStyles) + { + VisualStyleRenderer renderer; + if (node.IsExpanded) + renderer = OpenedRenderer; + else + renderer = ClosedRenderer; + renderer.DrawBackground(context.Graphics, new Rectangle(r.X, r.Y + dy, ImageSize, ImageSize)); + } + else + { + Image img; + if (node.IsExpanded) + img = _minus; + else + img = _plus; + context.Graphics.DrawImageUnscaled(img, new Point(r.X, r.Y + dy)); + } + } + } + + public override void MouseDown(TreeNodeAdvMouseEventArgs args) + { + if (args.Button == MouseButtons.Left) + { + args.Handled = true; + if (args.Node.CanExpand) + args.Node.IsExpanded = !args.Node.IsExpanded; + } + } + + public override void MouseDoubleClick(TreeNodeAdvMouseEventArgs args) + { + args.Handled = true; // Supress expand/collapse when double click on plus/minus + } + } +}