Index: Core/Common/src/Core.Common.Base/Service/FileImportActivity.cs =================================================================== diff -u -r81982c798fc50dab94c8f1eb8799c04242515564 -ref35125104cc8b0201f9c961049cc6c8a30fb74d --- Core/Common/src/Core.Common.Base/Service/FileImportActivity.cs (.../FileImportActivity.cs) (revision 81982c798fc50dab94c8f1eb8799c04242515564) +++ Core/Common/src/Core.Common.Base/Service/FileImportActivity.cs (.../FileImportActivity.cs) (revision ef35125104cc8b0201f9c961049cc6c8a30fb74d) @@ -53,9 +53,7 @@ /// /// This method performs the actual import logic. /// - /// - /// This method can throw exceptions of any kind. - /// + /// This method can throw exceptions of any kind. protected override void OnRun() { fileImporter.ProgressChanged = (currentStepName, currentStep, totalSteps) => { ProgressText = string.Format(Resources.FileImportActivity_ImportFromFile_Step_CurrentProgress_0_of_TotalProgress_1_ProgressText_2, currentStep, totalSteps, currentStepName); }; Index: Core/Common/src/Core.Common.Controls.Swf/TreeViewControls/ITreeView.cs =================================================================== diff -u -r83aacc6578d82137751a7d28f691e8b3d02312f1 -ref35125104cc8b0201f9c961049cc6c8a30fb74d --- Core/Common/src/Core.Common.Controls.Swf/TreeViewControls/ITreeView.cs (.../ITreeView.cs) (revision 83aacc6578d82137751a7d28f691e8b3d02312f1) +++ Core/Common/src/Core.Common.Controls.Swf/TreeViewControls/ITreeView.cs (.../ITreeView.cs) (revision ef35125104cc8b0201f9c961049cc6c8a30fb74d) @@ -39,13 +39,19 @@ /// /// Node presenters, sitting between specific data objects and the tree view /// - ICollection NodePresenters { get; } + IEnumerable NodePresenters { get; } IComparer TreeViewNodeSorter { get; set; } IEnumerable AllLoadedNodes { get; } /// + /// Registers a node presenter. + /// + /// The presenter to be added. + void RegisterNodePresenter(ITreeNodePresenter presenter); + + /// /// Returns a specific node presenter for the given data object. /// /// Index: Core/Common/src/Core.Common.Controls.Swf/TreeViewControls/TreeView.cs =================================================================== diff -u -r83aacc6578d82137751a7d28f691e8b3d02312f1 -ref35125104cc8b0201f9c961049cc6c8a30fb74d --- Core/Common/src/Core.Common.Controls.Swf/TreeViewControls/TreeView.cs (.../TreeView.cs) (revision 83aacc6578d82137751a7d28f691e8b3d02312f1) +++ Core/Common/src/Core.Common.Controls.Swf/TreeViewControls/TreeView.cs (.../TreeView.cs) (revision ef35125104cc8b0201f9c961049cc6c8a30fb74d) @@ -133,14 +133,14 @@ { get { - return Enumerable.SelectMany(Nodes, GetAllLoadedNodes); + return Nodes.SelectMany(GetAllLoadedNodes); } } /// /// The nodepresenters handle building logic for dataobjects added to the tree. /// - public ICollection NodePresenters + public IEnumerable NodePresenters { get { @@ -243,6 +243,11 @@ public void EnsureVisible(object item) {} + public void RegisterNodePresenter(ITreeNodePresenter presenter) + { + controller.RegisterNodePresenter(presenter); + } + public ITreeNodePresenter GetTreeViewNodePresenter(object nodeData, ITreeNode node) { if (nodeData == null) Index: Core/Common/src/Core.Common.Controls.Swf/TreeViewControls/TreeViewController.cs =================================================================== diff -u -r10b304d4b5cb2283801cdb16204baf2a42ab5967 -ref35125104cc8b0201f9c961049cc6c8a30fb74d --- Core/Common/src/Core.Common.Controls.Swf/TreeViewControls/TreeViewController.cs (.../TreeViewController.cs) (revision 10b304d4b5cb2283801cdb16204baf2a42ab5967) +++ Core/Common/src/Core.Common.Controls.Swf/TreeViewControls/TreeViewController.cs (.../TreeViewController.cs) (revision ef35125104cc8b0201f9c961049cc6c8a30fb74d) @@ -14,7 +14,7 @@ private static readonly ILog Log = LogManager.GetLogger(typeof(TreeViewController)); private readonly ITreeView treeView; - private readonly IEventedList nodePresenters = new EventedList(); + private readonly ICollection nodePresenters = new HashSet(); private readonly Dictionary nodeTagTypePresenters = new Dictionary(); private object data; @@ -32,14 +32,12 @@ } this.treeView = treeView; - - nodePresenters.CollectionChanged += NodePresentersCollectionChanged; } /// /// List of registered node presenters /// - public IEventedList NodePresenters + public IEnumerable NodePresenters { get { @@ -73,6 +71,16 @@ } /// + /// Registers the node presenter. + /// + /// The presenter. + public void RegisterNodePresenter(ITreeNodePresenter presenter) + { + nodePresenters.Add(presenter); + presenter.TreeView = treeView; + } + + /// /// Gets the most specific node presenter for a piece of data. Does so by walking up the class hierarchy and trying to find an exact match /// It is in the helper to allow heavy testing since this is complex logic. /// @@ -106,7 +114,7 @@ if (presenter == null) { presenter = GetNodePresenterForType(type, parentNode) ?? - NodePresenters.FirstOrDefault(np => np.NodeTagType.IsInstanceOfType(item)); + nodePresenters.FirstOrDefault(np => np.NodeTagType.IsInstanceOfType(item)); nodeTagTypePresenters[type] = presenter; } @@ -400,7 +408,7 @@ private ITreeNodePresenter GetNodePresenterForType(Type type, ITreeNode parentNode) { - var nodePresentersForType = NodePresenters.Where(p => p.NodeTagType == type).ToList(); + var nodePresentersForType = nodePresenters.Where(p => p.NodeTagType == type).ToList(); if (!nodePresentersForType.Any() && type.BaseType != null) { @@ -417,16 +425,6 @@ : null; } - private void NodePresentersCollectionChanged(object sender, NotifyCollectionChangingEventArgs e) - { - if (e.Action != NotifyCollectionChangeAction.Add) - { - return; - } - - ((ITreeNodePresenter) e.Item).TreeView = treeView; - } - private void UpdateNode(ITreeNode parentNode, ITreeNode node, object nodeData) { var presenter = node.Presenter; Index: Core/Common/src/Core.Common.Controls.Swf/WizardDialog.cs =================================================================== diff -u -r5d3ef5d4a5042e908c036a1565793c1141b60a09 -ref35125104cc8b0201f9c961049cc6c8a30fb74d --- Core/Common/src/Core.Common.Controls.Swf/WizardDialog.cs (.../WizardDialog.cs) (revision 5d3ef5d4a5042e908c036a1565793c1141b60a09) +++ Core/Common/src/Core.Common.Controls.Swf/WizardDialog.cs (.../WizardDialog.cs) (revision ef35125104cc8b0201f9c961049cc6c8a30fb74d) @@ -5,18 +5,18 @@ using System.Linq; using System.Windows.Forms; using Core.Common.Controls.Swf.Properties; -using Core.Common.Utils.Collections.Generic; using DevExpress.XtraWizard; namespace Core.Common.Controls.Swf { public partial class WizardDialog : Form, IView { + private readonly IList pages; private readonly IDictionary wizardPages = new Dictionary(); public WizardDialog() { - Pages = new EventedList(); + pages = new List(); InitializeComponent(); wizardControl1.SelectedPageChanged += WizardControl1SelectedPageChanged; wizardControl1.SelectedPageChanging += WizardControl1SelectedPageChanging; @@ -36,8 +36,15 @@ public Image Image { get; set; } public ViewInfo ViewInfo { get; set; } - public IList Pages { get; private set; } + public IEnumerable Pages + { + get + { + return pages; + } + } + public IList PageTitles { get @@ -63,11 +70,11 @@ { return wizardControl1.Pages[wizardControl1.SelectedPageIndex]; } - return Pages[wizardControl1.SelectedPageIndex - 1]; + return pages[wizardControl1.SelectedPageIndex - 1]; } set { - wizardControl1.SelectedPageIndex = Pages.IndexOf(value) + 1; + wizardControl1.SelectedPageIndex = pages.IndexOf(value) + 1; } } @@ -143,7 +150,7 @@ wizardControl1.Pages.Insert(wizardControl1.Pages.Count - 1, wizardPage); wizardPages[page] = wizardPage; - Pages.Add(page); + pages.Add(page); } public void RemovePage(IComponent page) @@ -158,7 +165,7 @@ wizardControl1.Pages.Remove(wizardPage); wizardPages.Remove(page); - Pages.Remove(page); + pages.Remove(page); } public DialogResult ShowModal() Index: Core/Common/src/Core.Common.Gui/Forms/ViewManager/ViewList.cs =================================================================== diff -u -r622c20f6fc0b693b67a3e57b2ece939823002c62 -ref35125104cc8b0201f9c961049cc6c8a30fb74d --- Core/Common/src/Core.Common.Gui/Forms/ViewManager/ViewList.cs (.../ViewList.cs) (revision 622c20f6fc0b693b67a3e57b2ece939823002c62) +++ Core/Common/src/Core.Common.Gui/Forms/ViewManager/ViewList.cs (.../ViewList.cs) (revision ef35125104cc8b0201f9c961049cc6c8a30fb74d) @@ -21,8 +21,6 @@ public event NotifyCollectionChangedEventHandler CollectionChanged; - public event NotifyCollectionChangingEventHandler CollectionChanging; - public event NotifyCollectionChangedEventHandler ChildViewChanged; private static readonly ILog Log = LogManager.GetLogger(typeof(ViewList)); private readonly ViewLocation? defaultLocation; @@ -32,7 +30,6 @@ private readonly IDictionary childViewSubscribtionLookup = new Dictionary(); - private ViewSelectionMouseController viewSelectionMouseController; private IView activeView; private bool clearing; // used to skip view activation when it is not necessary @@ -116,7 +113,7 @@ public void EnableTabContextMenus() { - viewSelectionMouseController = new ViewSelectionMouseController(dockingManager, this); + new ViewSelectionMouseController(dockingManager, this); } // bug in Fluent ribbon (views removed during load layout are not cleared - no events), synchronize them manually @@ -383,8 +380,6 @@ int oldIndex = views.IndexOf(view); - FireCollectionChangingEvent(NotifyCollectionChangeAction.Remove, oldIndex, view); - views.Remove(view); FireCollectionChangedEvent(NotifyCollectionChangeAction.Remove, oldIndex, view); @@ -476,14 +471,6 @@ } } - private void FireCollectionChangingEvent(NotifyCollectionChangeAction action, int index, IView view) - { - if (CollectionChanging != null) - { - CollectionChanging(this, new NotifyCollectionChangingEventArgs(action, view, index, -1)); - } - } - private void FireChildViewChangedEvent(NotifyCollectionChangingEventArgs args, IView view) { if (ChildViewChanged != null) @@ -506,8 +493,6 @@ UpdateViewNameAction(view); } - FireCollectionChangingEvent(NotifyCollectionChangeAction.Add, index, view); - views.Insert(index, view); dockingManager.Add(view, viewLocation); Fisheye: Tag ef35125104cc8b0201f9c961049cc6c8a30fb74d refers to a dead (removed) revision in file `Core/Common/src/Core.Common.Utils/Collections/Generic/EnumerableList.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Core/Common/src/Core.Common.Utils/Collections/Generic/EventedList.cs =================================================================== diff -u -r9b3ad522b72ddb7f06ce04cab7a0acb508c268bb -ref35125104cc8b0201f9c961049cc6c8a30fb74d --- Core/Common/src/Core.Common.Utils/Collections/Generic/EventedList.cs (.../EventedList.cs) (revision 9b3ad522b72ddb7f06ce04cab7a0acb508c268bb) +++ Core/Common/src/Core.Common.Utils/Collections/Generic/EventedList.cs (.../EventedList.cs) (revision ef35125104cc8b0201f9c961049cc6c8a30fb74d) @@ -30,7 +30,6 @@ // re-use event delegates, for performance reasons (10x speedup at add/remove) private PropertyChangingEventHandler Item_PropertyChangingDelegate; private PropertyChangedEventHandler Item_PropertyChangedDelegate; - private NotifyCollectionChangingEventHandler Item_CollectionChangingDelegate; private NotifyCollectionChangedEventHandler Item_CollectionChangedDelegate; public bool HasParent { get; set; } @@ -60,7 +59,6 @@ { Item_PropertyChangedDelegate = Item_PropertyChanged; Item_PropertyChangingDelegate = Item_PropertyChanging; - Item_CollectionChangingDelegate = Item_CollectionChanging; Item_CollectionChangedDelegate = Item_CollectionChanged; } @@ -412,15 +410,6 @@ } } - private void Item_CollectionChanging(object sender, NotifyCollectionChangingEventArgs e) - { - // forwards event to subscribers of the list - if (CollectionChanging != null) - { - CollectionChanging(sender, e); - } - } - private void Item_CollectionChanged(object sender, NotifyCollectionChangingEventArgs e) { // forwards event to subscribers of the list @@ -465,7 +454,6 @@ if (notifyCollectionChange != null) { notifyCollectionChange.CollectionChanged -= Item_CollectionChangedDelegate; - notifyCollectionChange.CollectionChanging -= Item_CollectionChangingDelegate; } } @@ -494,7 +482,6 @@ InitializeDelegates(); } notifyCollectionChanged.CollectionChanged += Item_CollectionChangedDelegate; - notifyCollectionChanged.CollectionChanging += Item_CollectionChangingDelegate; } } Fisheye: Tag ef35125104cc8b0201f9c961049cc6c8a30fb74d refers to a dead (removed) revision in file `Core/Common/src/Core.Common.Utils/Collections/Generic/IEnumerableList.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Core/Common/src/Core.Common.Utils/Collections/INotifyCollectionChange.cs =================================================================== diff -u -r9b3ad522b72ddb7f06ce04cab7a0acb508c268bb -ref35125104cc8b0201f9c961049cc6c8a30fb74d --- Core/Common/src/Core.Common.Utils/Collections/INotifyCollectionChange.cs (.../INotifyCollectionChange.cs) (revision 9b3ad522b72ddb7f06ce04cab7a0acb508c268bb) +++ Core/Common/src/Core.Common.Utils/Collections/INotifyCollectionChange.cs (.../INotifyCollectionChange.cs) (revision ef35125104cc8b0201f9c961049cc6c8a30fb74d) @@ -1,6 +1,6 @@ namespace Core.Common.Utils.Collections { - public interface INotifyCollectionChange : INotifyCollectionChanging, INotifyCollectionChanged + public interface INotifyCollectionChange : INotifyCollectionChanged { } Fisheye: Tag ef35125104cc8b0201f9c961049cc6c8a30fb74d refers to a dead (removed) revision in file `Core/Common/src/Core.Common.Utils/Collections/INotifyCollectionChanging.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Core/Common/src/Core.Common.Utils/Core.Common.Utils.csproj =================================================================== diff -u -rf42e31958888a2a09de2686d2805cb48595ba6e0 -ref35125104cc8b0201f9c961049cc6c8a30fb74d --- Core/Common/src/Core.Common.Utils/Core.Common.Utils.csproj (.../Core.Common.Utils.csproj) (revision f42e31958888a2a09de2686d2805cb48595ba6e0) +++ Core/Common/src/Core.Common.Utils/Core.Common.Utils.csproj (.../Core.Common.Utils.csproj) (revision ef35125104cc8b0201f9c961049cc6c8a30fb74d) @@ -105,15 +105,12 @@ - - - Index: Core/Common/test/Core.Common.Controls.Swf.Test/TreeViewControls/TreeViewControllerTest.cs =================================================================== diff -u -rad6f88d1d7b21f950588f6109b79fe007aab0c9e -ref35125104cc8b0201f9c961049cc6c8a30fb74d --- Core/Common/test/Core.Common.Controls.Swf.Test/TreeViewControls/TreeViewControllerTest.cs (.../TreeViewControllerTest.cs) (revision ad6f88d1d7b21f950588f6109b79fe007aab0c9e) +++ Core/Common/test/Core.Common.Controls.Swf.Test/TreeViewControls/TreeViewControllerTest.cs (.../TreeViewControllerTest.cs) (revision ef35125104cc8b0201f9c961049cc6c8a30fb74d) @@ -31,17 +31,14 @@ mocks.ReplayAll(); - var presenter = new TreeViewController(treeview); + var controller = new TreeViewController(treeview); var baseClassNodePresenter = new BaseClassNodePresenter(); var subClassNodePresenter = new SubClassNodePresenter(); - presenter.NodePresenters.AddRange(new ITreeNodePresenter[] - { - baseClassNodePresenter, - subClassNodePresenter - }); + controller.RegisterNodePresenter(baseClassNodePresenter); + controller.RegisterNodePresenter(subClassNodePresenter); - Assert.AreEqual(subClassNodePresenter, presenter.ResolveNodePresenterForData(new SubClass())); + Assert.AreEqual(subClassNodePresenter, controller.ResolveNodePresenterForData(new SubClass())); mocks.VerifyAll(); } @@ -92,10 +89,7 @@ var interfaceNodePresenter = new SomeInterfaceNodePresenter(); var interfaceImplementor = new SubClass(); - presenter.NodePresenters.AddRange(new[] - { - interfaceNodePresenter - }); + presenter.RegisterNodePresenter(interfaceNodePresenter); Assert.AreEqual(interfaceNodePresenter, presenter.ResolveNodePresenterForData(interfaceImplementor)); @@ -125,7 +119,7 @@ mocks.ReplayAll(); var controller = new TreeViewController(treeview); - controller.NodePresenters.Add(nodePresenter); + controller.RegisterNodePresenter(nodePresenter); controller.OnNodeChecked(treeNode); @@ -182,7 +176,7 @@ mocks.ReplayAll(); var presenter = new TreeViewController(treeview); - presenter.NodePresenters.Add(nodePresenter); + presenter.RegisterNodePresenter(nodePresenter); presenter.Data = new object(); @@ -242,7 +236,7 @@ mocks.ReplayAll(); var controller = new TreeViewController(treeview); - controller.NodePresenters.Add(nodePresenter); + controller.RegisterNodePresenter(nodePresenter); controller.OnTreeViewHandleCreated(); @@ -311,11 +305,8 @@ controller.OnTreeViewHandleCreated(); - controller.NodePresenters.AddRange(new[] - { - parentNodePresenter, - childNodePresenter - }); + controller.RegisterNodePresenter(parentNodePresenter); + controller.RegisterNodePresenter(childNodePresenter); controller.Data = parent; // generate collection changed with listeners enabled @@ -339,10 +330,7 @@ var treeViewController = new TreeViewController(treeView); var parentNodePresenter = mocks.Stub(); - treeViewController.NodePresenters.AddRange(new[] - { - parentNodePresenter - }); + treeViewController.RegisterNodePresenter(parentNodePresenter); var nodes = new List(); Expect.Call(treeView.Nodes).Return(nodes).Repeat.Any(); @@ -396,11 +384,8 @@ mocks.ReplayAll(); var controller = TypeUtils.GetField(treeview, "controller"); - controller.NodePresenters.AddRange(new[] - { - parentNodePresenter, - childNodePresenter - }); + controller.RegisterNodePresenter(parentNodePresenter); + controller.RegisterNodePresenter(childNodePresenter); controller.Data = parent; @@ -456,11 +441,8 @@ mocks.ReplayAll(); var controller = TypeUtils.GetField(treeview, "controller"); - controller.NodePresenters.AddRange(new[] - { - parentNodePresenter, - childNodePresenter - }); + controller.RegisterNodePresenter(parentNodePresenter); + controller.RegisterNodePresenter(childNodePresenter); controller.Data = parent; @@ -506,7 +488,7 @@ mocks.ReplayAll(); var presenter = new TreeViewController(treeview); - presenter.NodePresenters.Add(nodePresenter); + presenter.RegisterNodePresenter(nodePresenter); presenter.UpdateNode(treeNode); @@ -567,8 +549,8 @@ mocks.ReplayAll(); var controller = new TreeViewController(treeview); - controller.NodePresenters.Add(parentNodePresenter); - controller.NodePresenters.Add(childNodePresenter); + controller.RegisterNodePresenter(parentNodePresenter); + controller.RegisterNodePresenter(childNodePresenter); controller.UpdateNode(parentTreeNode); @@ -606,7 +588,7 @@ // no node presenter Assert.IsFalse(presenter.CanRenameNode(treeNode)); - presenter.NodePresenters.Add(nodePresenter); + presenter.RegisterNodePresenter(nodePresenter); // node presenter decides Assert.IsTrue(presenter.CanRenameNode(treeNode)); @@ -646,14 +628,55 @@ // no node presenter Assert.IsFalse(controller.CanDeleteNode(treeNode)); - controller.NodePresenters.Add(nodePresenter); + controller.RegisterNodePresenter(nodePresenter); // node presenter decides Assert.IsTrue(controller.CanDeleteNode(treeNode)); mocks.VerifyAll(); } + [Test] + public void RegisterNodePresenter_ItemNotRegisteredYet_AddItemToAvailableNodePresenters() + { + // Setup + var mocks = new MockRepository(); + var treeView = mocks.Stub(); + var nodePresenter = mocks.Stub(); + mocks.ReplayAll(); + + var controller = new TreeViewController(treeView); + + // Call + controller.RegisterNodePresenter(nodePresenter); + + // Assert + CollectionAssert.Contains(controller.NodePresenters, nodePresenter); + Assert.AreEqual(1, controller.NodePresenters.Count()); + mocks.VerifyAll(); + } + + [Test] + public void RegisterNodePresenter_ItemAlreadyRegistered_DoNothing() + { + // Setup + var mocks = new MockRepository(); + var treeView = mocks.Stub(); + var nodePresenter = mocks.Stub(); + mocks.ReplayAll(); + + var controller = new TreeViewController(treeView); + + // Call + controller.RegisterNodePresenter(nodePresenter); + controller.RegisterNodePresenter(nodePresenter); + + // Assert + CollectionAssert.Contains(controller.NodePresenters, nodePresenter); + Assert.AreEqual(1, controller.NodePresenters.Count()); + mocks.VerifyAll(); + } + private class Parent { public Parent() Index: Core/Common/test/Core.Common.Controls.Swf.Test/TreeViewControls/TreeViewNodePresenterBaseTest.cs =================================================================== diff -u -r529c5b708080eb65abba0502d79869fe549e035a -ref35125104cc8b0201f9c961049cc6c8a30fb74d --- Core/Common/test/Core.Common.Controls.Swf.Test/TreeViewControls/TreeViewNodePresenterBaseTest.cs (.../TreeViewNodePresenterBaseTest.cs) (revision 529c5b708080eb65abba0502d79869fe549e035a) +++ Core/Common/test/Core.Common.Controls.Swf.Test/TreeViewControls/TreeViewNodePresenterBaseTest.cs (.../TreeViewNodePresenterBaseTest.cs) (revision ef35125104cc8b0201f9c961049cc6c8a30fb74d) @@ -48,8 +48,8 @@ using (var treeView = new TreeView()) { - treeView.NodePresenters.Add(new GroupNodePresenterUsingCollection()); - treeView.NodePresenters.Add(new PersonNodePresenter()); + treeView.RegisterNodePresenter(new GroupNodePresenterUsingCollection()); + treeView.RegisterNodePresenter(new PersonNodePresenter()); treeView.Data = group; WindowsFormsTestHelper.Show(treeView); @@ -77,8 +77,8 @@ using (var treeView = new TreeView()) { - treeView.NodePresenters.Add(new GroupNodePresenterUsingCollection()); - treeView.NodePresenters.Add(new PersonNodePresenter()); + treeView.RegisterNodePresenter(new GroupNodePresenterUsingCollection()); + treeView.RegisterNodePresenter(new PersonNodePresenter()); treeView.Data = group; var groupNode = (TreeNode) treeView.Nodes[0]; @@ -117,8 +117,8 @@ using (var treeView = new TreeView()) { - treeView.NodePresenters.Add(new GroupNodePresenterUsingProperty()); - treeView.NodePresenters.Add(new PersonNodePresenter()); + treeView.RegisterNodePresenter(new GroupNodePresenterUsingProperty()); + treeView.RegisterNodePresenter(new PersonNodePresenter()); treeView.Data = group; WindowsFormsTestHelper.Show(treeView); @@ -147,8 +147,8 @@ using (var treeView = new TreeView()) { - treeView.NodePresenters.Add(new GroupNodePresenterUsingCollection()); - treeView.NodePresenters.Add(new PersonNodePresenter()); + treeView.RegisterNodePresenter(new GroupNodePresenterUsingCollection()); + treeView.RegisterNodePresenter(new PersonNodePresenter()); treeView.Data = group; Assert.AreEqual(2, GetAllNodes(treeView.Nodes).Count()); @@ -178,8 +178,8 @@ using (var treeView = new TreeView()) { - treeView.NodePresenters.Add(new GroupNodePresenterUsingCollection()); - treeView.NodePresenters.Add(new PersonNodePresenter()); + treeView.RegisterNodePresenter(new GroupNodePresenterUsingCollection()); + treeView.RegisterNodePresenter(new PersonNodePresenter()); treeView.Data = group; WindowsFormsTestHelper.Show(treeView); @@ -213,8 +213,8 @@ using (var treeView = new TreeView()) { - treeView.NodePresenters.Add(new GroupNodePresenterUsingProperty()); - treeView.NodePresenters.Add(new PersonNodePresenter()); + treeView.RegisterNodePresenter(new GroupNodePresenterUsingProperty()); + treeView.RegisterNodePresenter(new PersonNodePresenter()); treeView.Data = group; WindowsFormsTestHelper.Show(treeView); Index: Core/Common/test/Core.Common.Controls.Swf.Test/TreeViewControls/TreeViewTest.cs =================================================================== diff -u -rd6e6eadf4a2521df75b6d371bacbb181a43058a3 -ref35125104cc8b0201f9c961049cc6c8a30fb74d --- Core/Common/test/Core.Common.Controls.Swf.Test/TreeViewControls/TreeViewTest.cs (.../TreeViewTest.cs) (revision d6e6eadf4a2521df75b6d371bacbb181a43058a3) +++ Core/Common/test/Core.Common.Controls.Swf.Test/TreeViewControls/TreeViewTest.cs (.../TreeViewTest.cs) (revision ef35125104cc8b0201f9c961049cc6c8a30fb74d) @@ -49,7 +49,7 @@ var treeView = new TreeView(); //treeview is assigned to presenter when it's added to the list of nodepresenters - treeView.NodePresenters.Add(presenter); + treeView.RegisterNodePresenter(presenter); Assert.AreEqual(treeView, presenter.TreeView); mockRepository.ReplayAll(); @@ -78,8 +78,8 @@ var parentNodePresenter = new ParentNodePresenter(); var childNodePresenter = new ChildNodePresenter(); - treeView.NodePresenters.Add(parentNodePresenter); - treeView.NodePresenters.Add(childNodePresenter); + treeView.RegisterNodePresenter(parentNodePresenter); + treeView.RegisterNodePresenter(childNodePresenter); childNodePresenter.AfterUpdate += delegate { Assert.Fail("Child nodes which are not loaded should not be updated"); }; @@ -208,14 +208,9 @@ } }; - var treeView = new TreeView - { - NodePresenters = - { - new ChildNodePresenter() - }, - Data = parent - }; + var treeView = new TreeView(); + treeView.RegisterNodePresenter(new ChildNodePresenter()); + treeView.Data = parent; // expand / collapse / expand treeView.ExpandAll(); @@ -264,13 +259,8 @@ [Test] public void SelectedNodeSetToRootNodeAfterDataSet() { - var treeView = new TreeView - { - NodePresenters = - { - new ParentNodePresenter() - } - }; + var treeView = new TreeView(); + treeView.RegisterNodePresenter(new ParentNodePresenter()); var rootObject = new Parent(); @@ -289,14 +279,9 @@ [Test] public void TreeNodesRemainExpandedForDynamicNodes() { - var treeView = new TreeView - { - NodePresenters = - { - new DynamicParentNodePresenter(), - new ChildNodePresenter() - } - }; + var treeView = new TreeView(); + treeView.RegisterNodePresenter(new DynamicParentNodePresenter()); + treeView.RegisterNodePresenter(new ChildNodePresenter()); var parent = new Parent(); treeView.Data = parent; @@ -333,8 +318,8 @@ using (var treeView = new TreeView()) { - treeView.NodePresenters.Add(new ParentNodePresenter()); - treeView.NodePresenters.Add(new ChildNodePresenter()); + treeView.RegisterNodePresenter(new ParentNodePresenter()); + treeView.RegisterNodePresenter(new ChildNodePresenter()); var parent = new Parent() { @@ -407,14 +392,8 @@ Console.WriteLine(@"Elapsed time to perform action without tree view: " + processingAction()); - var treeView = new TreeView - { - NodePresenters = - { - new ChildNodePresenter() - }, - Data = parent - }; + var treeView = new TreeView(); + treeView.RegisterNodePresenter(new ChildNodePresenter()); // expand / collapse / expand treeView.ExpandAll(); @@ -439,6 +418,45 @@ TestHelper.AssertIsFasterThan(10, () => Thread.Sleep((int) elapsedMillisecondsWithTreeView)); } + [Test] + public void RegisterNodePresenter_NodePresenterNotRegisteredYet_NodePresenterAddedToAvailablePresenters() + { + // Setup + var mocks = new MockRepository(); + var nodePresenter = mocks.Stub(); + mocks.ReplayAll(); + + var treeView = new TreeView(); + + // Call + treeView.RegisterNodePresenter(nodePresenter); + + // Assert + CollectionAssert.Contains(treeView.NodePresenters, nodePresenter); + Assert.AreEqual(1, treeView.NodePresenters.Count()); + mocks.VerifyAll(); + } + + [Test] + public void RegisterNodePresenter_NodePresenterAlreadyRegistered_DoNothing() + { + // Setup + var mocks = new MockRepository(); + var nodePresenter = mocks.Stub(); + mocks.ReplayAll(); + + var treeView = new TreeView(); + + // Call + treeView.RegisterNodePresenter(nodePresenter); + treeView.RegisterNodePresenter(nodePresenter); + + // Assert + CollectionAssert.Contains(treeView.NodePresenters, nodePresenter); + Assert.AreEqual(1, treeView.NodePresenters.Count()); + mocks.VerifyAll(); + } + private class DynamicParentNodePresenter : TreeViewNodePresenterBase { public override void UpdateNode(ITreeNode parentNode, ITreeNode node, Parent nodeData) Fisheye: Tag ef35125104cc8b0201f9c961049cc6c8a30fb74d refers to a dead (removed) revision in file `Core/Common/test/Core.Common.Utils.Test/Collections/Generic/EnumerableListTest.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Core/Common/test/Core.Common.Utils.Test/Core.Common.Utils.Test.csproj =================================================================== diff -u -rf42e31958888a2a09de2686d2805cb48595ba6e0 -ref35125104cc8b0201f9c961049cc6c8a30fb74d --- Core/Common/test/Core.Common.Utils.Test/Core.Common.Utils.Test.csproj (.../Core.Common.Utils.Test.csproj) (revision f42e31958888a2a09de2686d2805cb48595ba6e0) +++ Core/Common/test/Core.Common.Utils.Test/Core.Common.Utils.Test.csproj (.../Core.Common.Utils.Test.csproj) (revision ef35125104cc8b0201f9c961049cc6c8a30fb74d) @@ -88,7 +88,6 @@ - Index: Core/GIS/src/Core.GIS.SharpMap/Map/Map.cs =================================================================== diff -u -rbd8291af14687d29a602b64864c37f2e254459f8 -ref35125104cc8b0201f9c961049cc6c8a30fb74d --- Core/GIS/src/Core.GIS.SharpMap/Map/Map.cs (.../Map.cs) (revision bd8291af14687d29a602b64864c37f2e254459f8) +++ Core/GIS/src/Core.GIS.SharpMap/Map/Map.cs (.../Map.cs) (revision ef35125104cc8b0201f9c961049cc6c8a30fb74d) @@ -1229,7 +1229,6 @@ { layers.PropertyChanging -= OnPropertyChanging; layers.PropertyChanged -= OnPropertyChanged; - layers.CollectionChanging -= LayersCollectionChanging; layers.CollectionChanged -= LayersCollectionChanged; } @@ -1239,22 +1238,13 @@ { layers.PropertyChanging += OnPropertyChanging; layers.PropertyChanged += OnPropertyChanged; - layers.CollectionChanging += LayersCollectionChanging; layers.CollectionChanged += LayersCollectionChanged; } layersInitialized = false; } } - private void LayersCollectionChanging(object sender, NotifyCollectionChangingEventArgs e) - { - if (CollectionChanging != null) - { - CollectionChanging(sender, e); - } - } - private void LayersCollectionChanged(object sender, NotifyCollectionChangingEventArgs e) { OnLayersCollectionChanged(e); @@ -1735,7 +1725,6 @@ #region INotifyCollectionChange Members public virtual event NotifyCollectionChangedEventHandler CollectionChanged; - public virtual event NotifyCollectionChangingEventHandler CollectionChanging; public virtual bool HasDefaultEnvelopeSet { Index: Core/Plugins/src/Core.Plugins.CommonTools.Gui/Forms/Charting/ChartLegendView.cs =================================================================== diff -u -ra950714ad9510756331d862aa35695fa0b2ed03b -ref35125104cc8b0201f9c961049cc6c8a30fb74d --- Core/Plugins/src/Core.Plugins.CommonTools.Gui/Forms/Charting/ChartLegendView.cs (.../ChartLegendView.cs) (revision a950714ad9510756331d862aa35695fa0b2ed03b) +++ Core/Plugins/src/Core.Plugins.CommonTools.Gui/Forms/Charting/ChartLegendView.cs (.../ChartLegendView.cs) (revision ef35125104cc8b0201f9c961049cc6c8a30fb74d) @@ -29,8 +29,8 @@ }; treeView.SelectedNodeChanged += TreeViewSelectedNodeChanged; - treeView.NodePresenters.Add(new ChartTreeNodePresenter(guiPlugin)); - treeView.NodePresenters.Add(new ChartSeriesTreeNodePresenter(guiPlugin)); + treeView.RegisterNodePresenter(new ChartTreeNodePresenter(guiPlugin)); + treeView.RegisterNodePresenter(new ChartSeriesTreeNodePresenter(guiPlugin)); UpdateButtons(); } Index: Core/Plugins/src/Core.Plugins.ProjectExplorer/ProjectExplorerGuiPlugin.cs =================================================================== diff -u -r10b304d4b5cb2283801cdb16204baf2a42ab5967 -ref35125104cc8b0201f9c961049cc6c8a30fb74d --- Core/Plugins/src/Core.Plugins.ProjectExplorer/ProjectExplorerGuiPlugin.cs (.../ProjectExplorerGuiPlugin.cs) (revision 10b304d4b5cb2283801cdb16204baf2a42ab5967) +++ Core/Plugins/src/Core.Plugins.ProjectExplorer/ProjectExplorerGuiPlugin.cs (.../ProjectExplorerGuiPlugin.cs) (revision ef35125104cc8b0201f9c961049cc6c8a30fb74d) @@ -137,10 +137,7 @@ { foreach (var np in projectTreeViewNodePresenters) { - if (!ProjectExplorer.ProjectTreeView.TreeView.NodePresenters.Contains(np)) - { - ProjectExplorer.ProjectTreeView.TreeView.NodePresenters.Add(np); - } + ProjectExplorer.ProjectTreeView.TreeView.RegisterNodePresenter(np); } } } Index: Core/Plugins/src/Core.Plugins.ProjectExplorer/ProjectTreeView.cs =================================================================== diff -u -r5dc6b11ada2c7d2e4ca14413b1ddca577ba34d08 -ref35125104cc8b0201f9c961049cc6c8a30fb74d --- Core/Plugins/src/Core.Plugins.ProjectExplorer/ProjectTreeView.cs (.../ProjectTreeView.cs) (revision 5dc6b11ada2c7d2e4ca14413b1ddca577ba34d08) +++ Core/Plugins/src/Core.Plugins.ProjectExplorer/ProjectTreeView.cs (.../ProjectTreeView.cs) (revision ef35125104cc8b0201f9c961049cc6c8a30fb74d) @@ -60,7 +60,7 @@ var treeFolderNodePresenter = new TreeFolderNodePresenter(guiPlugin); - treeView.NodePresenters.Add(treeFolderNodePresenter); + treeView.RegisterNodePresenter(treeFolderNodePresenter); } } Index: Core/Plugins/src/Core.Plugins.SharpMapGis.Gui/Forms/MapLegendView/MapLegendView.cs =================================================================== diff -u -re1eca7dab59f9465ca9d0bd6d705490528a5e5a8 -ref35125104cc8b0201f9c961049cc6c8a30fb74d --- Core/Plugins/src/Core.Plugins.SharpMapGis.Gui/Forms/MapLegendView/MapLegendView.cs (.../MapLegendView.cs) (revision e1eca7dab59f9465ca9d0bd6d705490528a5e5a8) +++ Core/Plugins/src/Core.Plugins.SharpMapGis.Gui/Forms/MapLegendView/MapLegendView.cs (.../MapLegendView.cs) (revision ef35125104cc8b0201f9c961049cc6c8a30fb74d) @@ -45,10 +45,10 @@ var mapLayerLegendStyleTreeViewNodePresenter = new VectorStyleTreeViewNodePresenter(); var themeItemTreeViewNodePresenter = new ThemeItemTreeViewNodePresenter(guiPlugin); - TreeView.NodePresenters.Add(mapTreeViewNodePresenter); - TreeView.NodePresenters.Add(mapLayerTreeViewNodePresenter); - TreeView.NodePresenters.Add(mapLayerLegendStyleTreeViewNodePresenter); - TreeView.NodePresenters.Add(themeItemTreeViewNodePresenter); + TreeView.RegisterNodePresenter(mapTreeViewNodePresenter); + TreeView.RegisterNodePresenter(mapLayerTreeViewNodePresenter); + TreeView.RegisterNodePresenter(mapLayerLegendStyleTreeViewNodePresenter); + TreeView.RegisterNodePresenter(themeItemTreeViewNodePresenter); TreeView.SelectedNodeChanged += TreeViewSelectedNodeChanged; TreeView.NodeMouseClick += TreeViewNodeMouseClick; Index: Core/Plugins/test/Core.Plugins.CommonTools.Test/TestViewList.cs =================================================================== diff -u -rd37e350b3c62d61768313c57c2d8d8d05d22458a -ref35125104cc8b0201f9c961049cc6c8a30fb74d --- Core/Plugins/test/Core.Plugins.CommonTools.Test/TestViewList.cs (.../TestViewList.cs) (revision d37e350b3c62d61768313c57c2d8d8d05d22458a) +++ Core/Plugins/test/Core.Plugins.CommonTools.Test/TestViewList.cs (.../TestViewList.cs) (revision ef35125104cc8b0201f9c961049cc6c8a30fb74d) @@ -12,7 +12,6 @@ { // Required by interface, but not used (yet) #pragma warning disable 67 - public event NotifyCollectionChangingEventHandler CollectionChanging; public event NotifyCollectionChangedEventHandler CollectionChanged; public event EventHandler ActiveViewChanging; Index: Core/Plugins/test/Core.Plugins.ProjectExplorer.Test/ProjectExplorerPluginGuiTest.cs =================================================================== diff -u -r074232b001ecb5ae110c0b95c05264d4372cbfb5 -ref35125104cc8b0201f9c961049cc6c8a30fb74d --- Core/Plugins/test/Core.Plugins.ProjectExplorer.Test/ProjectExplorerPluginGuiTest.cs (.../ProjectExplorerPluginGuiTest.cs) (revision 074232b001ecb5ae110c0b95c05264d4372cbfb5) +++ Core/Plugins/test/Core.Plugins.ProjectExplorer.Test/ProjectExplorerPluginGuiTest.cs (.../ProjectExplorerPluginGuiTest.cs) (revision ef35125104cc8b0201f9c961049cc6c8a30fb74d) @@ -1,9 +1,9 @@ using System; using System.Collections.Generic; -using Core.Common.Base; +using System.Linq; + using Core.Common.Base.Data; using Core.Common.Base.Plugin; -using Core.Common.Controls; using Core.Common.Controls.Swf.TreeViewControls; using Core.Common.Gui; using NUnit.Framework;