99 lines
2.1 KiB
C#
99 lines
2.1 KiB
C#
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<TreeColumn>
|
|
{
|
|
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();
|
|
}
|
|
}
|
|
}
|