External/Aga.Controls/Tree/SortedTreeModel.cs
author sl
Thu, 01 Jan 2015 23:35:49 +0100
changeset 405 5715aefd2bcc
permissions -rw-r--r--
SharpDisplay: Migrating to new robust client scheme.
moel@345
     1
using System;
moel@345
     2
using System.Collections.Generic;
moel@345
     3
using System.Text;
moel@345
     4
using System.Collections;
moel@345
     5
moel@345
     6
namespace Aga.Controls.Tree
moel@345
     7
{
moel@345
     8
	public class SortedTreeModel: TreeModelBase
moel@345
     9
	{
moel@345
    10
		private ITreeModel _innerModel;
moel@345
    11
		public ITreeModel InnerModel
moel@345
    12
		{
moel@345
    13
			get { return _innerModel; }
moel@345
    14
		}
moel@345
    15
moel@345
    16
		private IComparer _comparer;
moel@345
    17
		public IComparer Comparer
moel@345
    18
		{
moel@345
    19
			get { return _comparer; }
moel@345
    20
			set 
moel@345
    21
			{ 
moel@345
    22
				_comparer = value;
moel@345
    23
				OnStructureChanged(new TreePathEventArgs(TreePath.Empty));
moel@345
    24
			}
moel@345
    25
		}
moel@345
    26
moel@345
    27
		public SortedTreeModel(ITreeModel innerModel)
moel@345
    28
		{
moel@345
    29
			_innerModel = innerModel;
moel@345
    30
			_innerModel.NodesChanged += new EventHandler<TreeModelEventArgs>(_innerModel_NodesChanged);
moel@345
    31
			_innerModel.NodesInserted += new EventHandler<TreeModelEventArgs>(_innerModel_NodesInserted);
moel@345
    32
			_innerModel.NodesRemoved += new EventHandler<TreeModelEventArgs>(_innerModel_NodesRemoved);
moel@345
    33
			_innerModel.StructureChanged += new EventHandler<TreePathEventArgs>(_innerModel_StructureChanged);
moel@345
    34
		}
moel@345
    35
moel@345
    36
		void _innerModel_StructureChanged(object sender, TreePathEventArgs e)
moel@345
    37
		{
moel@345
    38
			OnStructureChanged(e);
moel@345
    39
		}
moel@345
    40
moel@345
    41
		void _innerModel_NodesRemoved(object sender, TreeModelEventArgs e)
moel@345
    42
		{
moel@345
    43
			OnStructureChanged(new TreePathEventArgs(e.Path));
moel@345
    44
		}
moel@345
    45
moel@345
    46
		void _innerModel_NodesInserted(object sender, TreeModelEventArgs e)
moel@345
    47
		{
moel@345
    48
			OnStructureChanged(new TreePathEventArgs(e.Path));
moel@345
    49
		}
moel@345
    50
moel@345
    51
		void _innerModel_NodesChanged(object sender, TreeModelEventArgs e)
moel@345
    52
		{
moel@345
    53
			OnStructureChanged(new TreePathEventArgs(e.Path));
moel@345
    54
		}
moel@345
    55
moel@345
    56
		public override IEnumerable GetChildren(TreePath treePath)
moel@345
    57
		{
moel@345
    58
			if (Comparer != null)
moel@345
    59
			{
moel@345
    60
				ArrayList list = new ArrayList();
moel@345
    61
				IEnumerable res = InnerModel.GetChildren(treePath);
moel@345
    62
				if (res != null)
moel@345
    63
				{
moel@345
    64
					foreach (object obj in res)
moel@345
    65
						list.Add(obj);
moel@345
    66
					list.Sort(Comparer);
moel@345
    67
					return list;
moel@345
    68
				}
moel@345
    69
				else
moel@345
    70
					return null;
moel@345
    71
			}
moel@345
    72
			else
moel@345
    73
				return InnerModel.GetChildren(treePath);
moel@345
    74
		}
moel@345
    75
moel@345
    76
		public override bool IsLeaf(TreePath treePath)
moel@345
    77
		{
moel@345
    78
			return InnerModel.IsLeaf(treePath);
moel@345
    79
		}
moel@345
    80
	}
moel@345
    81
}