From 6026fd7b54cfd1c83d684e2319603fc720667130 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Srbeck=C3=BD?= Date: Wed, 9 Jan 2008 18:01:58 +0000 Subject: [PATCH] Custom modifications of the TreeView git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2802 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../TreeViewAdv/Aga.Controls/GifDecoder.cs | 2 + .../Aga.Controls/Tree/TreeNodeAdv.cs | 61 ++++++++++++++++--- .../Aga.Controls/Tree/TreeViewAdv.cs | 16 +++-- .../SampleApp/FolderBrowserModel.cs | 2 + .../TreeViewAdv/SampleApp/SlowModel.cs | 2 + 5 files changed, 70 insertions(+), 13 deletions(-) diff --git a/src/Libraries/TreeViewAdv/Aga.Controls/GifDecoder.cs b/src/Libraries/TreeViewAdv/Aga.Controls/GifDecoder.cs index 89bd00379c..e611155cac 100644 --- a/src/Libraries/TreeViewAdv/Aga.Controls/GifDecoder.cs +++ b/src/Libraries/TreeViewAdv/Aga.Controls/GifDecoder.cs @@ -1,3 +1,5 @@ +#pragma warning disable 675 // Bitwise-or operator used on a sign-extended operand + #region Java Info /** * Class GifDecoder - Decodes a GIF file into one or more frames. diff --git a/src/Libraries/TreeViewAdv/Aga.Controls/Tree/TreeNodeAdv.cs b/src/Libraries/TreeViewAdv/Aga.Controls/Tree/TreeNodeAdv.cs index 52b344f7e6..56701272d6 100644 --- a/src/Libraries/TreeViewAdv/Aga.Controls/Tree/TreeNodeAdv.cs +++ b/src/Libraries/TreeViewAdv/Aga.Controls/Tree/TreeNodeAdv.cs @@ -10,7 +10,7 @@ using System.Security.Permissions; namespace Aga.Controls.Tree { [Serializable] - public sealed class TreeNodeAdv : ISerializable + public class TreeNodeAdv : ISerializable { #region NodeCollection private class NodeCollection : Collection @@ -43,6 +43,10 @@ namespace Aga.Controls.Tree this[i]._index++; base.InsertItem(index, item); } + + if (_owner.Tree != null && _owner.Tree.Model == null) { + _owner.Tree.SmartFullUpdate(); + } } protected override void RemoveItem(int index) @@ -53,6 +57,11 @@ namespace Aga.Controls.Tree for (int i = index + 1; i < Count; i++) this[i]._index--; base.RemoveItem(index); + + if (_owner.Tree != null && _owner.Tree.Model == null) { + _owner.Tree.UpdateSelection(); + _owner.Tree.SmartFullUpdate(); + } } protected override void SetItem(int index, TreeNodeAdv item) @@ -65,10 +74,42 @@ namespace Aga.Controls.Tree } #endregion + #region Events + + public event EventHandler Collapsing; + internal protected virtual void OnCollapsing() + { + if (Collapsing != null) + Collapsing(this, new TreeViewAdvEventArgs(this)); + } + + public event EventHandler Collapsed; + internal protected virtual void OnCollapsed() + { + if (Collapsed != null) + Collapsed(this, new TreeViewAdvEventArgs(this)); + } + + public event EventHandler Expanding; + internal protected virtual void OnExpanding() + { + if (Expanding != null) + Expanding(this, new TreeViewAdvEventArgs(this)); + } + + public event EventHandler Expanded; + internal protected virtual void OnExpanded() + { + if (Expanded != null) + Expanded(this, new TreeViewAdvEventArgs(this)); + } + + #endregion + #region Properties private TreeViewAdv _tree; - internal TreeViewAdv Tree + public TreeViewAdv Tree { get { return _tree; } } @@ -140,14 +181,14 @@ namespace Aga.Controls.Tree public bool IsLeaf { get { return _isLeaf; } - internal set { _isLeaf = value; } + internal protected set { _isLeaf = value; } } private bool _isExpandedOnce; public bool IsExpandedOnce { get { return _isExpandedOnce; } - internal set { _isExpandedOnce = value; } + internal protected set { _isExpandedOnce = value; } } private bool _isExpanded; @@ -252,8 +293,8 @@ namespace Aga.Controls.Tree get { return _nodes; } } - private ReadOnlyCollection _children; - public ReadOnlyCollection Children + private IList _children; + public IList Children { get { @@ -288,12 +329,16 @@ namespace Aga.Controls.Tree { } - internal TreeNodeAdv(TreeViewAdv tree, object tag) + internal protected TreeNodeAdv(TreeViewAdv tree, object tag) { _row = -1; _tree = tree; _nodes = new NodeCollection(this); - _children = new ReadOnlyCollection(_nodes); + if (tree.Model != null) { + _children = new ReadOnlyCollection(_nodes); + } else { + _children = _nodes; + } _tag = tag; } diff --git a/src/Libraries/TreeViewAdv/Aga.Controls/Tree/TreeViewAdv.cs b/src/Libraries/TreeViewAdv/Aga.Controls/Tree/TreeViewAdv.cs index 299ad42f2e..e559e9baa9 100644 --- a/src/Libraries/TreeViewAdv/Aga.Controls/Tree/TreeViewAdv.cs +++ b/src/Libraries/TreeViewAdv/Aga.Controls/Tree/TreeViewAdv.cs @@ -779,10 +779,13 @@ namespace Aga.Controls.Tree if (Root == node && !value) return; //Can't collapse root node - if (value) + if (value) { OnExpanding(node); - else + node.OnExpanding(); + } else { OnCollapsing(node); + node.OnCollapsing(); + } if (value && !node.IsExpandedOnce) { @@ -798,10 +801,13 @@ namespace Aga.Controls.Tree node.AssignIsExpanded(value); SmartFullUpdate(); - if (value) + if (value) { OnExpanded(node); - else + node.OnExpanded(); + } else { OnCollapsed(node); + node.OnCollapsed(); + } } private void RemoveExpandingNode(TreeNodeAdv node) @@ -923,7 +929,7 @@ namespace Aga.Controls.Tree return node == _root; } - private void UpdateSelection() + internal void UpdateSelection() { bool flag = false; diff --git a/src/Libraries/TreeViewAdv/SampleApp/FolderBrowserModel.cs b/src/Libraries/TreeViewAdv/SampleApp/FolderBrowserModel.cs index 39ac65e8b8..9bce53f166 100644 --- a/src/Libraries/TreeViewAdv/SampleApp/FolderBrowserModel.cs +++ b/src/Libraries/TreeViewAdv/SampleApp/FolderBrowserModel.cs @@ -1,3 +1,5 @@ +#pragma warning disable 67 // Event never used + using System; using System.Collections.Generic; using System.Text; diff --git a/src/Libraries/TreeViewAdv/SampleApp/SlowModel.cs b/src/Libraries/TreeViewAdv/SampleApp/SlowModel.cs index 421cd07ee4..c9b5dc5e72 100644 --- a/src/Libraries/TreeViewAdv/SampleApp/SlowModel.cs +++ b/src/Libraries/TreeViewAdv/SampleApp/SlowModel.cs @@ -1,3 +1,5 @@ +#pragma warning disable 67 // Event never used + using System; using System.Collections.Generic; using System.Text;