diff -r 3145aadca3d2 -r 0c551e8818e0 External/Aga.Controls/Tree/TreeColumnCollection.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/External/Aga.Controls/Tree/TreeColumnCollection.cs Sun May 27 15:16:19 2012 +0000 @@ -0,0 +1,98 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Windows.Forms; + +namespace Aga.Controls.Tree +{ + internal class TreeColumnCollection : Collection + { + private TreeViewAdv _treeView; + + public TreeColumnCollection(TreeViewAdv treeView) + { + _treeView = treeView; + } + + protected override void InsertItem(int index, TreeColumn item) + { + base.InsertItem(index, item); + BindEvents(item); + _treeView.UpdateColumns(); + } + + protected override void RemoveItem(int index) + { + UnbindEvents(this[index]); + base.RemoveItem(index); + _treeView.UpdateColumns(); + } + + protected override void SetItem(int index, TreeColumn item) + { + UnbindEvents(this[index]); + base.SetItem(index, item); + item.Owner = this; + BindEvents(item); + _treeView.UpdateColumns(); + } + + protected override void ClearItems() + { + foreach (TreeColumn c in Items) + UnbindEvents(c); + Items.Clear(); + _treeView.UpdateColumns(); + } + + private void BindEvents(TreeColumn item) + { + item.Owner = this; + item.HeaderChanged += HeaderChanged; + item.IsVisibleChanged += IsVisibleChanged; + item.WidthChanged += WidthChanged; + item.SortOrderChanged += SortOrderChanged; + } + + private void UnbindEvents(TreeColumn item) + { + item.Owner = null; + item.HeaderChanged -= HeaderChanged; + item.IsVisibleChanged -= IsVisibleChanged; + item.WidthChanged -= WidthChanged; + item.SortOrderChanged -= SortOrderChanged; + } + + void SortOrderChanged(object sender, EventArgs e) + { + TreeColumn changed = sender as TreeColumn; + //Only one column at a time can have a sort property set + if (changed.SortOrder != SortOrder.None) + { + foreach (TreeColumn col in this) + { + if (col != changed) + col.SortOrder = SortOrder.None; + } + } + _treeView.UpdateHeaders(); + } + + void WidthChanged(object sender, EventArgs e) + { + _treeView.ChangeColumnWidth(sender as TreeColumn); + } + + void IsVisibleChanged(object sender, EventArgs e) + { + _treeView.FullUpdate(); + } + + void HeaderChanged(object sender, EventArgs e) + { + _treeView.UpdateView(); + } + } +}