using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.Windows.Forms; namespace Aga.Controls.Tree { internal class ReorderColumnState : ColumnState { #region Properties private Point _location; public Point Location { get { return _location; } } private Bitmap _ghostImage; public Bitmap GhostImage { get { return _ghostImage; } } private TreeColumn _dropColumn; public TreeColumn DropColumn { get { return _dropColumn; } } private int _dragOffset; public int DragOffset { get { return _dragOffset; } } #endregion public ReorderColumnState(TreeViewAdv tree, TreeColumn column, Point initialMouseLocation) : base(tree, column) { _location = new Point(initialMouseLocation.X + Tree.OffsetX, 0); _dragOffset = tree.GetColumnX(column) - initialMouseLocation.X; _ghostImage = column.CreateGhostImage(new Rectangle(0, 0, column.Width, tree.ColumnHeaderHeight), tree.Font); } public override void KeyDown(KeyEventArgs args) { args.Handled = true; if (args.KeyCode == Keys.Escape) FinishResize(); } public override void MouseDown(TreeNodeAdvMouseEventArgs args) { } public override void MouseUp(TreeNodeAdvMouseEventArgs args) { FinishResize(); } public override bool MouseMove(MouseEventArgs args) { _dropColumn = null; _location = new Point(args.X + Tree.OffsetX, 0); int x = 0; foreach (TreeColumn c in Tree.Columns) { if (c.IsVisible) { if (_location.X < x + c.Width / 2) { _dropColumn = c; break; } x += c.Width; } } Tree.UpdateHeaders(); return true; } private void FinishResize() { Tree.ChangeInput(); if (Column == DropColumn) Tree.UpdateView(); else { Tree.Columns.Remove(Column); if (DropColumn == null) Tree.Columns.Add(Column); else Tree.Columns.Insert(Tree.Columns.IndexOf(DropColumn), Column); Tree.OnColumnReordered(Column); } } } }