Index: Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/RingtoetsContextMenuItemFactory.cs =================================================================== diff -u -r3445838bcdcf9aa30bbc4b51f66be82812bd9b92 -ra71d7ff366aba9e2090ba8b8c0dbc32f5c815ad0 --- Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/RingtoetsContextMenuItemFactory.cs (.../RingtoetsContextMenuItemFactory.cs) (revision 3445838bcdcf9aa30bbc4b51f66be82812bd9b92) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/RingtoetsContextMenuItemFactory.cs (.../RingtoetsContextMenuItemFactory.cs) (revision a71d7ff366aba9e2090ba8b8c0dbc32f5c815ad0) @@ -223,7 +223,8 @@ Resources.CopyHS, (o, args) => { - IList currentChildren = calculationContext.Parent.Children; + CalculationGroup parent = calculationContext.Parent; + IList currentChildren = parent.Children; int calculationIndex = currentChildren.IndexOf(calculation); var copy = (TCalculation) calculation.Clone(); @@ -232,6 +233,7 @@ c => c.Name); currentChildren.Insert(calculationIndex + 1, copy); + parent.NotifyObservers(); }); } Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsPlugin.cs =================================================================== diff -u -r8b60c9e846480f3ffeeb263bfea5d3367bf6bee3 -ra71d7ff366aba9e2090ba8b8c0dbc32f5c815ad0 --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsPlugin.cs (.../GrassCoverErosionInwardsPlugin.cs) (revision 8b60c9e846480f3ffeeb263bfea5d3367bf6bee3) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsPlugin.cs (.../GrassCoverErosionInwardsPlugin.cs) (revision a71d7ff366aba9e2090ba8b8c0dbc32f5c815ad0) @@ -875,6 +875,8 @@ return builder.AddExportItem() .AddSeparator() + .AddDuplicateCalculationItem(calculation, context) + .AddSeparator() .AddRenameItem() .AddCustomItem(updateDikeProfile) .AddSeparator() Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Plugin.Test/TreeNodeInfos/GrassCoverErosionInwardsCalculationContextTreeNodeInfoTest.cs =================================================================== diff -u -r8b60c9e846480f3ffeeb263bfea5d3367bf6bee3 -ra71d7ff366aba9e2090ba8b8c0dbc32f5c815ad0 --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Plugin.Test/TreeNodeInfos/GrassCoverErosionInwardsCalculationContextTreeNodeInfoTest.cs (.../GrassCoverErosionInwardsCalculationContextTreeNodeInfoTest.cs) (revision 8b60c9e846480f3ffeeb263bfea5d3367bf6bee3) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Plugin.Test/TreeNodeInfos/GrassCoverErosionInwardsCalculationContextTreeNodeInfoTest.cs (.../GrassCoverErosionInwardsCalculationContextTreeNodeInfoTest.cs) (revision a71d7ff366aba9e2090ba8b8c0dbc32f5c815ad0) @@ -56,10 +56,11 @@ [TestFixture] public class GrassCoverErosionInwardsCalculationContextTreeNodeInfoTest : NUnitFormTest { - private const int contextMenuUpdateDikeProfileIndex = 3; - private const int contextMenuValidateIndex = 5; - private const int contextMenuCalculateIndex = 6; - private const int contextMenuClearIndex = 8; + private const int contextMenuDuplicateIndex = 2; + private const int contextMenuUpdateDikeProfileIndex = 5; + private const int contextMenuValidateIndex = 7; + private const int contextMenuCalculateIndex = 8; + private const int contextMenuClearIndex = 10; private readonly string testDataPath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, "HydraulicBoundaryDatabaseImporter"); private MockRepository mocks; @@ -172,6 +173,8 @@ { menuBuilder.Expect(mb => mb.AddExportItem()).Return(menuBuilder); menuBuilder.Expect(mb => mb.AddSeparator()).Return(menuBuilder); + menuBuilder.Expect(mb => mb.AddCustomItem(null)).IgnoreArguments().Return(menuBuilder); + menuBuilder.Expect(mb => mb.AddSeparator()).Return(menuBuilder); menuBuilder.Expect(mb => mb.AddRenameItem()).Return(menuBuilder); menuBuilder.Expect(mb => mb.AddCustomItem(null)).IgnoreArguments().Return(menuBuilder); menuBuilder.Expect(mb => mb.AddSeparator()).Return(menuBuilder); @@ -234,8 +237,13 @@ using (ContextMenuStrip menu = info.ContextMenuStrip(nodeData, assessmentSection, treeViewControl)) { // Assert - Assert.AreEqual(15, menu.Items.Count); + Assert.AreEqual(17, menu.Items.Count); + TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuDuplicateIndex, + "D&upliceren", + "Dupliceer deze berekening.", + RingtoetsCommonFormsResources.CopyHS); + TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuUpdateDikeProfileIndex, "&Bijwerken dijkprofiel...", "Er moet een dijkprofiel geselecteerd zijn.",