Index: Core/Common/src/Core.Common.Controls.TreeView/TreeViewControl.cs
===================================================================
diff -u -r032deeba1408fb0841a63623cae9c0ad999a11c7 -ra7344a227d40381dd9f5f2559a3402250e97a5f3
--- Core/Common/src/Core.Common.Controls.TreeView/TreeViewControl.cs (.../TreeViewControl.cs) (revision 032deeba1408fb0841a63623cae9c0ad999a11c7)
+++ Core/Common/src/Core.Common.Controls.TreeView/TreeViewControl.cs (.../TreeViewControl.cs) (revision a7344a227d40381dd9f5f2559a3402250e97a5f3)
@@ -123,11 +123,23 @@
tagTypeTreeNodeInfoLookup[treeNodeInfo.TagType] = treeNodeInfo;
}
- public void DeleteNode(TreeNode node)
+ public bool CanRename(TreeNode node)
{
var treeNodeInfo = GetTreeNodeInfoForData(node.Tag);
- if (treeNodeInfo.CanRemove == null || !treeNodeInfo.CanRemove(node.Tag, node.Parent != null ? node.Parent.Tag : null))
+ return treeNodeInfo.CanRename != null && treeNodeInfo.CanRename(node);
+ }
+
+ public bool CanRemove(TreeNode node)
+ {
+ var treeNodeInfo = GetTreeNodeInfoForData(node.Tag);
+
+ return treeNodeInfo.CanRemove != null && treeNodeInfo.CanRemove(node.Tag, node.Parent != null ? node.Parent.Tag : null);
+ }
+
+ public void DeleteNode(TreeNode node)
+ {
+ if (!CanRemove(node))
{
MessageBox.Show(Resources.TreeView_DeleteNodeData_The_selected_item_cannot_be_removed, BaseResources.Confirm, MessageBoxButtons.OK);
return;
@@ -139,6 +151,8 @@
return;
}
+ var treeNodeInfo = GetTreeNodeInfoForData(node.Tag);
+
if (treeNodeInfo.OnNodeRemoved != null)
{
treeNodeInfo.OnNodeRemoved(node.Tag, node.Parent != null ? node.Parent.Tag : null);
@@ -449,8 +463,7 @@
private void TreeViewBeforeLabelEdit(object sender, NodeLabelEditEventArgs e)
{
- var treeNodeInfo = GetTreeNodeInfoForData(e.Node.Tag);
- if (treeNodeInfo.CanRename == null || !treeNodeInfo.CanRename(e.Node))
+ if (!CanRename(e.Node))
{
e.CancelEdit = true;
}
Index: Core/Common/src/Core.Common.Gui/ContextMenu/ContextMenuBuilder.cs
===================================================================
diff -u -rb3db013105d10992eeefea39f5ecbdacdd57b4d4 -ra7344a227d40381dd9f5f2559a3402250e97a5f3
--- Core/Common/src/Core.Common.Gui/ContextMenu/ContextMenuBuilder.cs (.../ContextMenuBuilder.cs) (revision b3db013105d10992eeefea39f5ecbdacdd57b4d4)
+++ Core/Common/src/Core.Common.Gui/ContextMenu/ContextMenuBuilder.cs (.../ContextMenuBuilder.cs) (revision a7344a227d40381dd9f5f2559a3402250e97a5f3)
@@ -61,7 +61,7 @@
try
{
guiItemsFactory = new GuiContextMenuItemFactory(featureCommandHandler, importExportHandler, viewsCommandsHandler, treeNode);
- treeViewItemsFactory = new TreeViewContextMenuItemFactory(treeNode, treeNodeInfo, treeViewControl);
+ treeViewItemsFactory = new TreeViewContextMenuItemFactory(treeNode, treeViewControl);
}
catch (ArgumentNullException e)
{
Index: Core/Common/src/Core.Common.Gui/ContextMenu/TreeViewContextMenuItemFactory.cs
===================================================================
diff -u -r032deeba1408fb0841a63623cae9c0ad999a11c7 -ra7344a227d40381dd9f5f2559a3402250e97a5f3
--- Core/Common/src/Core.Common.Gui/ContextMenu/TreeViewContextMenuItemFactory.cs (.../TreeViewContextMenuItemFactory.cs) (revision 032deeba1408fb0841a63623cae9c0ad999a11c7)
+++ Core/Common/src/Core.Common.Gui/ContextMenu/TreeViewContextMenuItemFactory.cs (.../TreeViewContextMenuItemFactory.cs) (revision a7344a227d40381dd9f5f2559a3402250e97a5f3)
@@ -33,35 +33,27 @@
internal class TreeViewContextMenuItemFactory
{
private readonly TreeNode treeNode;
- private readonly TreeNodeInfo treeNodeInfo;
private readonly TreeViewControl treeViewControl;
///
/// Creates a new instance of for the given .
///
/// The for which to create the objects.
- /// The to use while creating the objects.
/// The to use while executing the actions.
/// Thrown when is null.
- public TreeViewContextMenuItemFactory(TreeNode treeNode, TreeNodeInfo treeNodeInfo, TreeViewControl treeViewControl)
+ public TreeViewContextMenuItemFactory(TreeNode treeNode, TreeViewControl treeViewControl)
{
if (treeNode == null)
{
throw new ArgumentNullException("treeNode", Resources.ContextMenuItemFactory_Can_not_create_context_menu_items_without_tree_node);
}
- if (treeNodeInfo == null)
- {
- throw new ArgumentNullException("treeNodeInfo", Resources.ContextMenuItemFactory_Can_not_create_context_menu_items_without_tree_node_info);
- }
-
if (treeViewControl == null)
{
throw new ArgumentNullException("treeViewControl", Resources.ContextMenuItemFactory_Can_not_create_context_menu_items_without_tree_view_control);
}
this.treeNode = treeNode;
- this.treeNodeInfo = treeNodeInfo;
this.treeViewControl = treeViewControl;
}
@@ -76,7 +68,7 @@
{
ToolTipText = Resources.Rename_ToolTip,
Image = Resources.RenameIcon,
- Enabled = treeNodeInfo.CanRename != null && treeNodeInfo.CanRename(treeNode)
+ Enabled = treeViewControl.CanRename(treeNode)
};
toolStripMenuItem.Click += (s, e) => treeNode.BeginEdit();
return toolStripMenuItem;
@@ -93,7 +85,7 @@
{
ToolTipText = Resources.Delete_ToolTip,
Image = Resources.DeleteIcon,
- Enabled = treeNodeInfo.CanRemove != null && treeNodeInfo.CanRemove(treeNode.Tag, treeNode.Parent != null ? treeNode.Parent.Tag : null)
+ Enabled = treeViewControl.CanRemove(treeNode)
};
toolStripMenuItem.Click += (s, e) => treeViewControl.DeleteNode(treeNode);
return toolStripMenuItem;
Index: Core/Common/test/Core.Common.Gui.Test/ContextMenu/ContextMenuBuilderTest.cs
===================================================================
diff -u -r5f53f2f23d0c4145d79823c5443966ff4a5a830f -ra7344a227d40381dd9f5f2559a3402250e97a5f3
--- Core/Common/test/Core.Common.Gui.Test/ContextMenu/ContextMenuBuilderTest.cs (.../ContextMenuBuilderTest.cs) (revision 5f53f2f23d0c4145d79823c5443966ff4a5a830f)
+++ Core/Common/test/Core.Common.Gui.Test/ContextMenu/ContextMenuBuilderTest.cs (.../ContextMenuBuilderTest.cs) (revision a7344a227d40381dd9f5f2559a3402250e97a5f3)
@@ -102,24 +102,6 @@
}
[Test]
- public void Constructor_NoTreeNodeInfo_ThrowsContextMenuBuilderException()
- {
- // Setup
- var applicationFeatureCommandsMock = mocks.StrictMock();
- var treeNodeMock = mocks.StrictMock();
- var importExportHandlerMock = mocks.StrictMock();
- var viewCommandsMock = mocks.StrictMock();
- var treeViewControlMock = mocks.StrictMock();
-
- // Call
- TestDelegate test = () => new ContextMenuBuilder(applicationFeatureCommandsMock, importExportHandlerMock, viewCommandsMock, treeNodeMock, null, treeViewControlMock);
-
- // Assert
- var message = Assert.Throws(test).Message;
- Assert.AreEqual(Resources.ContextMenuBuilder_ContextMenuBuilder_Cannot_create_instances_of_factories, message);
- }
-
- [Test]
public void Constructor_NoTreeViewControl_ThrowsContextMenuBuilderException()
{
// Setup
@@ -186,18 +168,21 @@
public void AddRenameItem_WhenBuild_ItemAddedToContextMenu()
{
// Setup
+ var treeViewControl = new TreeViewControl();
var applicationFeatureCommandsMock = mocks.StrictMock();
var exportImportHandlerMock = mocks.StrictMock();
var viewCommandsMock = mocks.StrictMock();
var treeNodeMock = mocks.StrictMock();
- var treeNodeInfoMock = mocks.StrictMock();
- var treeViewControlMock = mocks.StrictMock();
+ var treeNodeInfoMock = mocks.StrictMock>();
+ treeNodeMock.Expect(tn => tn.Tag).Return(new object());
treeNodeInfoMock.CanRename = treeNode => treeNode == treeNodeMock;
+ treeViewControl.RegisterTreeNodeInfo(treeNodeInfoMock);
+
mocks.ReplayAll();
- var builder = new ContextMenuBuilder(applicationFeatureCommandsMock, exportImportHandlerMock, viewCommandsMock, treeNodeMock, treeNodeInfoMock, treeViewControlMock);
+ var builder = new ContextMenuBuilder(applicationFeatureCommandsMock, exportImportHandlerMock, viewCommandsMock, treeNodeMock, treeNodeInfoMock, treeViewControl);
// Call
var result = builder.AddRenameItem().Build();
@@ -215,26 +200,28 @@
public void AddDeleteItem_WhenBuild_ItemAddedToContextMenu()
{
// Setup
+ var treeViewControl = new TreeViewControl();
var applicationFeatureCommandsMock = mocks.StrictMock();
var exportImportHandlerMock = mocks.StrictMock();
var viewCommandsMock = mocks.StrictMock();
- var treeViewControlMock = mocks.StrictMock();
var treeParentNodeMock = mocks.StrictMock();
var treeNodeMock = mocks.StrictMock();
- var treeNodeInfoMock = mocks.StrictMock();
+ var treeNodeInfoMock = mocks.StrictMock>();
treeNodeMock.Stub(tn => tn.Parent).Return(treeParentNodeMock);
var nodeData = new object();
var parentData = new object();
- treeNodeMock.Expect(tn => tn.Tag).Return(nodeData);
+ treeNodeMock.Stub(tn => tn.Tag).Return(nodeData);
treeParentNodeMock.Expect(tn => tn.Tag).Return(parentData);
treeNodeInfoMock.CanRemove = (nd, pnd) => nd == nodeData && pnd == parentData;
+ treeViewControl.RegisterTreeNodeInfo(treeNodeInfoMock);
+
mocks.ReplayAll();
- var builder = new ContextMenuBuilder(applicationFeatureCommandsMock, exportImportHandlerMock, viewCommandsMock, treeNodeMock, treeNodeInfoMock, treeViewControlMock);
+ var builder = new ContextMenuBuilder(applicationFeatureCommandsMock, exportImportHandlerMock, viewCommandsMock, treeNodeMock, treeNodeInfoMock, treeViewControl);
// Call
var result = builder.AddDeleteItem().Build();
Index: Core/Common/test/Core.Common.Gui.Test/ContextMenu/TreeViewContextMenuItemFactoryTest.cs
===================================================================
diff -u -r032deeba1408fb0841a63623cae9c0ad999a11c7 -ra7344a227d40381dd9f5f2559a3402250e97a5f3
--- Core/Common/test/Core.Common.Gui.Test/ContextMenu/TreeViewContextMenuItemFactoryTest.cs (.../TreeViewContextMenuItemFactoryTest.cs) (revision 032deeba1408fb0841a63623cae9c0ad999a11c7)
+++ Core/Common/test/Core.Common.Gui.Test/ContextMenu/TreeViewContextMenuItemFactoryTest.cs (.../TreeViewContextMenuItemFactoryTest.cs) (revision a7344a227d40381dd9f5f2559a3402250e97a5f3)
@@ -25,11 +25,10 @@
public void Constructor_WithoutTreeNode_ThrowsArgumentNullException()
{
// Setup
- var treeNodeInfoMock = mocks.StrictMock();
var treeViewControlMock = mocks.StrictMock();
// Call
- TestDelegate test = () => new TreeViewContextMenuItemFactory(null, treeNodeInfoMock, treeViewControlMock);
+ TestDelegate test = () => new TreeViewContextMenuItemFactory(null, treeViewControlMock);
// Assert
var message = Assert.Throws(test).Message;
@@ -38,34 +37,15 @@
}
[Test]
- public void Constructor_WithoutTreeNodeInfo_ThrowsArgumentNullException()
- {
- // Setup
- var treeNodeMock = mocks.StrictMock();
- var treeViewControlMock = mocks.StrictMock();
-
- mocks.ReplayAll();
-
- // Call
- TestDelegate test = () => new TreeViewContextMenuItemFactory(treeNodeMock, null, treeViewControlMock);
-
- // Assert
- var message = Assert.Throws(test).Message;
- StringAssert.StartsWith(Resources.ContextMenuItemFactory_Can_not_create_context_menu_items_without_tree_node_info, message);
- StringAssert.EndsWith("treeNodeInfo", message);
- }
-
- [Test]
public void Constructor_WithoutTreeViewControl_ThrowsArgumentNullException()
{
// Setup
var treeNodeMock = mocks.StrictMock();
- var treeNodeInfoMock = mocks.StrictMock();
mocks.ReplayAll();
// Call
- TestDelegate test = () => new TreeViewContextMenuItemFactory(treeNodeMock, treeNodeInfoMock, null);
+ TestDelegate test = () => new TreeViewContextMenuItemFactory(treeNodeMock, null);
// Assert
var message = Assert.Throws(test).Message;
@@ -78,13 +58,12 @@
{
// Setup
var treeNodeMock = mocks.StrictMock();
- var treeNodeInfoMock = mocks.StrictMock();
var treeViewControlMock = mocks.StrictMock();
mocks.ReplayAll();
// Call
- TestDelegate test = () => new TreeViewContextMenuItemFactory(treeNodeMock, treeNodeInfoMock, treeViewControlMock);
+ TestDelegate test = () => new TreeViewContextMenuItemFactory(treeNodeMock, treeViewControlMock);
// Assert
Assert.DoesNotThrow(test);
@@ -121,14 +100,16 @@
return !canDelete;
};
+ treeViewControlMock.Expect(tvc => tvc.CanRemove(treeNodeMock)).Return(canDelete);
+
if (canDelete)
{
treeViewControlMock.Expect(tvc => tvc.DeleteNode(treeNodeMock));
}
mocks.ReplayAll();
- var factory = new TreeViewContextMenuItemFactory(treeNodeMock, treeNodeInfoMock, treeViewControlMock);
+ var factory = new TreeViewContextMenuItemFactory(treeNodeMock, treeViewControlMock);
// Call
var item = factory.CreateDeleteItem();
@@ -163,14 +144,16 @@
return !canRename;
};
+ treeViewControlMock.Expect(tvc => tvc.CanRename(treeNodeMock)).Return(canRename);
+
if (canRename)
{
treeNodeMock.Expect(tv => tv.BeginEdit());
}
mocks.ReplayAll();
- var factory = new TreeViewContextMenuItemFactory(treeNodeMock, treeNodeInfoMock, treeViewControlMock);
+ var factory = new TreeViewContextMenuItemFactory(treeNodeMock, treeViewControlMock);
// Call
var item = factory.CreateRenameItem();
@@ -201,7 +184,7 @@
treeNodeInfo.ChildNodeObjects = o => new object[] { new TreeNode() };
}
- var factory = new TreeViewContextMenuItemFactory(treeNode, treeNodeInfo, treeViewControl);
+ var factory = new TreeViewContextMenuItemFactory(treeNode, treeViewControl);
// Precondition
Assert.IsFalse(treeNode.IsExpanded);
@@ -240,7 +223,7 @@
Assert.IsTrue(treeNode.IsExpanded);
}
- var factory = new TreeViewContextMenuItemFactory(treeNode, treeNodeInfo, treeViewControl);
+ var factory = new TreeViewContextMenuItemFactory(treeNode, treeViewControl);
// Call
var item = factory.CreateCollapseAllItem();
Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/TreeNodeInfos/PipingCalculationGroupContextTreeNodeInfoTest.cs
===================================================================
diff -u -r5f53f2f23d0c4145d79823c5443966ff4a5a830f -ra7344a227d40381dd9f5f2559a3402250e97a5f3
--- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/TreeNodeInfos/PipingCalculationGroupContextTreeNodeInfoTest.cs (.../PipingCalculationGroupContextTreeNodeInfoTest.cs) (revision 5f53f2f23d0c4145d79823c5443966ff4a5a830f)
+++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/TreeNodeInfos/PipingCalculationGroupContextTreeNodeInfoTest.cs (.../PipingCalculationGroupContextTreeNodeInfoTest.cs) (revision a7344a227d40381dd9f5f2559a3402250e97a5f3)
@@ -747,6 +747,9 @@
var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, node, info, treeViewControl);
gui.Expect(g => g.Get(node, info, treeViewControl)).Return(menuBuilder);
+ treeViewControl.Expect(tvc => tvc.CanRename(node)).Return(true);
+ treeViewControl.Expect(tvc => tvc.CanRemove(node)).Return(true);
+
mocks.ReplayAll();
plugin.Gui = gui;
@@ -862,6 +865,8 @@
var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, node, info, treeViewControl);
gui.Expect(g => g.Get(node, info, treeViewControl)).Return(menuBuilder);
+ treeViewControl.Expect(tvc => tvc.CanRename(node)).Return(true);
+
mocks.ReplayAll();
plugin.Gui = gui;