Index: Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/RingtoetsContextMenuBuilder.cs =================================================================== diff -u -r4435a35be229b12da5859395985ad38c9c5d4729 -r09e76611c2a789b6f015368968a18ea5b9b138cc --- Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/RingtoetsContextMenuBuilder.cs (.../RingtoetsContextMenuBuilder.cs) (revision 4435a35be229b12da5859395985ad38c9c5d4729) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/RingtoetsContextMenuBuilder.cs (.../RingtoetsContextMenuBuilder.cs) (revision 09e76611c2a789b6f015368968a18ea5b9b138cc) @@ -165,29 +165,18 @@ } /// - /// Adds an item to the , which enables a disabled failure mechanism. - /// - /// The failure mechanism context belonging to the failure mechanism. - /// The itself. - public RingtoetsContextMenuBuilder AddDisabledChangeRelevancyItem(IFailureMechanismContext failureMechanismContext) - { - contextMenuBuilder.AddCustomItem(RingtoetsContextMenuItemFactory.CreateDisabledChangeRelevancyItem(failureMechanismContext)); - return this; - } - - /// /// Adds an item to the , which sets if the failure mechanism is relevant. /// /// The type of the failure mechanism context. /// The failure mechanism context belonging to the failure mechanism. - /// The action that removes all views. + /// The action to perform when relevance changes. /// The itself. - public RingtoetsContextMenuBuilder AddChangeRelevancyOfFailureMechanismItem( + public RingtoetsContextMenuBuilder AddToggleRelevancyOfFailureMechanismItem( TFailureMechanismContext failureMechanismContext, - Action removeAllViewsForItemAction) + Action onChangeAction) where TFailureMechanismContext : IFailureMechanismContext { - contextMenuBuilder.AddCustomItem(RingtoetsContextMenuItemFactory.CreateChangeRelevancyOfFailureMechanismItem(failureMechanismContext, removeAllViewsForItemAction)); + contextMenuBuilder.AddCustomItem(RingtoetsContextMenuItemFactory.CreateToggleRelevancyOfFailureMechanismItem(failureMechanismContext, onChangeAction)); return this; } Index: Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/RingtoetsContextMenuItemFactory.cs =================================================================== diff -u -r4435a35be229b12da5859395985ad38c9c5d4729 -r09e76611c2a789b6f015368968a18ea5b9b138cc --- Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/RingtoetsContextMenuItemFactory.cs (.../RingtoetsContextMenuItemFactory.cs) (revision 4435a35be229b12da5859395985ad38c9c5d4729) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/RingtoetsContextMenuItemFactory.cs (.../RingtoetsContextMenuItemFactory.cs) (revision 09e76611c2a789b6f015368968a18ea5b9b138cc) @@ -183,24 +183,6 @@ } /// - /// Creates a which is bound to the action of changing the relevancy state of a disabled failure mechanism. - /// - /// The failure mechanism context belonging to the failure mechanism. - /// The created . - public static StrictContextMenuItem CreateDisabledChangeRelevancyItem(IFailureMechanismContext failureMechanismContext) - { - return new StrictContextMenuItem( - Resources.FailureMechanismContextMenuStrip_Is_relevant, - Resources.FailureMechanismContextMenuStrip_Is_relevant_Tooltip, - Resources.Checkbox_empty, - (o, args) => - { - failureMechanismContext.WrappedData.IsRelevant = true; - failureMechanismContext.WrappedData.NotifyObservers(); - }); - } - - /// /// Creates a which is bound to the action of clearing the output of all calculations in a failure mechanism. /// /// The failure mechanism to clear the output for. @@ -263,21 +245,27 @@ /// /// The type of the failure mechanism context. /// The failure mechanism context belonging to the failure mechanism. - /// The action that removes all views. + /// The action to perform when relevance changes. /// The created . - public static StrictContextMenuItem CreateChangeRelevancyOfFailureMechanismItem( + public static StrictContextMenuItem CreateToggleRelevancyOfFailureMechanismItem( TFailureMechanismContext failureMechanismContext, - Action removeAllViewsForItemAction) + Action onChangeAction) where TFailureMechanismContext : IFailureMechanismContext { + var isRelevant = failureMechanismContext.WrappedData.IsRelevant; + var checkboxImage = isRelevant ? Resources.Checkbox_ticked : Resources.Checkbox_empty; return new StrictContextMenuItem( Resources.FailureMechanismContextMenuStrip_Is_relevant, Resources.FailureMechanismContextMenuStrip_Is_relevant_Tooltip, - Resources.Checkbox_ticked, + checkboxImage, (sender, args) => { - removeAllViewsForItemAction(failureMechanismContext); - failureMechanismContext.WrappedData.IsRelevant = false; + if (onChangeAction != null) + { + onChangeAction(failureMechanismContext); + } + + failureMechanismContext.WrappedData.IsRelevant = !isRelevant; failureMechanismContext.WrappedData.NotifyObservers(); }); } Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/TreeNodeInfos/RingtoetsContextMenuBuilderTest.cs =================================================================== diff -u -rbd29bacc20bc58cc67f27dd33fa4fa6b41db873c -r09e76611c2a789b6f015368968a18ea5b9b138cc --- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/TreeNodeInfos/RingtoetsContextMenuBuilderTest.cs (.../RingtoetsContextMenuBuilderTest.cs) (revision bd29bacc20bc58cc67f27dd33fa4fa6b41db873c) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/TreeNodeInfos/RingtoetsContextMenuBuilderTest.cs (.../RingtoetsContextMenuBuilderTest.cs) (revision 09e76611c2a789b6f015368968a18ea5b9b138cc) @@ -386,7 +386,9 @@ } [Test] - public void AddChangeRelevancyOfFailureMechanismItem_WhenBuild_ItemAddedToContextMenuEnabled() + [TestCase(true)] + [TestCase(false)] + public void AddToggleRelevancyOfFailureMechanismItem_WhenBuild_ItemAddedToContextMenuEnabled(bool isRelevant) { // Setup var mocks = new MockRepository(); @@ -395,22 +397,25 @@ var viewCommandsMock = mocks.StrictMock(); var treeViewControlMock = mocks.StrictMock(); var failureMechanismMock = mocks.StrictMock(); + failureMechanismMock.Expect(fm => fm.IsRelevant).Return(isRelevant); var failureMechanismContextMock = mocks.StrictMock>(); + failureMechanismContextMock.Expect(fmc => fmc.WrappedData).Return(failureMechanismMock); mocks.ReplayAll(); var contextMenuBuilder = new ContextMenuBuilder(applicationFeatureCommandsMock, exportImportHandlerMock, viewCommandsMock, failureMechanismMock, treeViewControlMock); var ringtoetsContextMenuBuilder = new RingtoetsContextMenuBuilder(contextMenuBuilder); // Call - var result = ringtoetsContextMenuBuilder.AddChangeRelevancyOfFailureMechanismItem(failureMechanismContextMock, null).Build(); + var result = ringtoetsContextMenuBuilder.AddToggleRelevancyOfFailureMechanismItem(failureMechanismContextMock, null).Build(); // Assert Assert.IsInstanceOf(result); Assert.AreEqual(1, result.Items.Count); + var checkboxIcon = isRelevant ? RingtoetsFormsResources.Checkbox_empty : RingtoetsFormsResources.Checkbox_ticked; TestHelper.AssertContextMenuStripContainsItem(result, 0, RingtoetsFormsResources.FailureMechanismContextMenuStrip_Is_relevant, RingtoetsFormsResources.FailureMechanismContextMenuStrip_Is_relevant_Tooltip, - RingtoetsFormsResources.Checkbox_ticked); + checkboxIcon); mocks.VerifyAll(); } @@ -550,37 +555,6 @@ } [Test] - public void AddDisabledChangeRelevancyItem_WhenBuild_ItemAddedToContextMenu() - { - // Setup - var mocks = new MockRepository(); - var applicationFeatureCommandsMock = mocks.StrictMock(); - var exportImportHandlerMock = mocks.StrictMock(); - var viewCommandsMock = mocks.StrictMock(); - var treeViewControlMock = mocks.StrictMock(); - var failureMechanismContextMock = mocks.StrictMock>(); - - mocks.ReplayAll(); - - var contextMenuBuilder = new ContextMenuBuilder(applicationFeatureCommandsMock, exportImportHandlerMock, viewCommandsMock, failureMechanismContextMock, treeViewControlMock); - var ringtoetsContextMenuBuilder = new RingtoetsContextMenuBuilder(contextMenuBuilder); - - // Call - var result = ringtoetsContextMenuBuilder.AddDisabledChangeRelevancyItem(failureMechanismContextMock).Build(); - - // Assert - Assert.IsInstanceOf(result); - Assert.AreEqual(1, result.Items.Count); - - TestHelper.AssertContextMenuStripContainsItem(result, 0, - RingtoetsFormsResources.FailureMechanismContextMenuStrip_Is_relevant, - RingtoetsFormsResources.FailureMechanismContextMenuStrip_Is_relevant_Tooltip, - RingtoetsFormsResources.Checkbox_empty); - - mocks.VerifyAll(); - } - - [Test] public void AddPerformAllCalculationsInFailureMechanismItem_WhenBuildWithAllValidData_ItemAddedToContextmenuEnabled() { // Setup Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/TreeNodeInfos/RingtoetsContextMenuItemFactoryTest.cs =================================================================== diff -u -r4435a35be229b12da5859395985ad38c9c5d4729 -r09e76611c2a789b6f015368968a18ea5b9b138cc --- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/TreeNodeInfos/RingtoetsContextMenuItemFactoryTest.cs (.../RingtoetsContextMenuItemFactoryTest.cs) (revision 4435a35be229b12da5859395985ad38c9c5d4729) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/TreeNodeInfos/RingtoetsContextMenuItemFactoryTest.cs (.../RingtoetsContextMenuItemFactoryTest.cs) (revision 09e76611c2a789b6f015368968a18ea5b9b138cc) @@ -655,48 +655,56 @@ } [Test] - public void CreateChangeRelevancyOfFailureMechanismItem_Always_CreateDecoratedItem() + [TestCase(true)] + [TestCase(false)] + public void CreateToggleRelevancyOfFailureMechanismItem_IsRelevant_CreateDecoratedItem(bool isRelevant) { // Setup var mocks = new MockRepository(); - var failureMechanismMock = mocks.StrictMock(); var assessmentSectionMock = mocks.StrictMock(); mocks.ReplayAll(); + var failureMechanism = new TestFailureMechanism(Enumerable.Empty()) + { + IsRelevant = isRelevant + }; + var failureMechanismContext = new TestFailureMechanismContext(failureMechanism, assessmentSectionMock); - var failureMechanismContext = new TestFailureMechanismContext(failureMechanismMock, assessmentSectionMock); - // Call - var toolStripItem = RingtoetsContextMenuItemFactory.CreateChangeRelevancyOfFailureMechanismItem(failureMechanismContext, null); + var toolStripItem = RingtoetsContextMenuItemFactory.CreateToggleRelevancyOfFailureMechanismItem(failureMechanismContext, null); // Assert Assert.AreEqual(RingtoetsFormsResources.FailureMechanismContextMenuStrip_Is_relevant, toolStripItem.Text); Assert.AreEqual(RingtoetsFormsResources.FailureMechanismContextMenuStrip_Is_relevant_Tooltip, toolStripItem.ToolTipText); - TestHelper.AssertImagesAreEqual(RingtoetsFormsResources.Checkbox_ticked, toolStripItem.Image); + var checkboxIcon = isRelevant ? RingtoetsFormsResources.Checkbox_empty : RingtoetsFormsResources.Checkbox_ticked; + TestHelper.AssertImagesAreEqual(checkboxIcon, toolStripItem.Image); Assert.IsTrue(toolStripItem.Enabled); mocks.VerifyAll(); } [Test] - public void CreateChangeRelevancyOfFailureMechanismItem_PerformClickOnRelevanceItem_RelevanceFalseAndObserversNotified() + [TestCase(true)] + [TestCase(false)] + public void CreateToggleRelevancyOfFailureMechanismItem_PerformClickOnRelevanceItem_RelevanceChangedAndObserversNotified(bool isRelevant) { // Setup var mocks = new MockRepository(); var failureMechanismMock = mocks.StrictMock(); failureMechanismMock.Expect(fm => fm.NotifyObservers()); - failureMechanismMock.Expect(fm => fm.IsRelevant).SetPropertyWithArgument(false); + failureMechanismMock.Expect(fm => fm.IsRelevant).Return(isRelevant); + failureMechanismMock.Expect(fm => fm.IsRelevant).SetPropertyWithArgument(!isRelevant); var assessmentSectionMock = mocks.StrictMock(); mocks.ReplayAll(); var failureMechanismContext = new TestFailureMechanismContext(failureMechanismMock, assessmentSectionMock); - var counter = 0; - var toolStripItem = RingtoetsContextMenuItemFactory.CreateChangeRelevancyOfFailureMechanismItem(failureMechanismContext, context => counter++); + var actionCounter = 0; + var toolStripItem = RingtoetsContextMenuItemFactory.CreateToggleRelevancyOfFailureMechanismItem(failureMechanismContext, context => actionCounter++); // Call toolStripItem.PerformClick(); // Assert - Assert.AreEqual(1, counter); + Assert.AreEqual(1, actionCounter); mocks.VerifyAll(); } @@ -857,50 +865,6 @@ } [Test] - public void CreateDisabledChangeRelevancyItem_Always_CreatesDecoratedItem() - { - // Setup - var mocks = new MockRepository(); - var failureMechanismContextMock = mocks.StrictMock>(); - - mocks.ReplayAll(); - - // Call - var toolStripItem = RingtoetsContextMenuItemFactory.CreateDisabledChangeRelevancyItem(failureMechanismContextMock); - - // Assert - Assert.AreEqual(RingtoetsFormsResources.FailureMechanismContextMenuStrip_Is_relevant, toolStripItem.Text); - Assert.AreEqual(RingtoetsFormsResources.FailureMechanismContextMenuStrip_Is_relevant_Tooltip, toolStripItem.ToolTipText); - TestHelper.AssertImagesAreEqual(RingtoetsFormsResources.Checkbox_empty, toolStripItem.Image); - Assert.IsTrue(toolStripItem.Enabled); - - mocks.VerifyAll(); - } - - [Test] - public void CreateDisabledChangeRelevancyItem_PerformClickOnCreatedItem_FailureMechanismIsRelevantSetToTrueAndObserversNotified() - { - // Setup - var mocks = new MockRepository(); - var failureMechanismMock = mocks.StrictMock(); - var failureMechanismContextMock = mocks.StrictMock>(); - - failureMechanismContextMock.Stub(c => c.WrappedData).Return(failureMechanismMock); - failureMechanismMock.Expect(c => c.IsRelevant).SetPropertyWithArgument(true); - failureMechanismMock.Expect(c => c.NotifyObservers()); - - mocks.ReplayAll(); - - var toolStripItem = RingtoetsContextMenuItemFactory.CreateDisabledChangeRelevancyItem(failureMechanismContextMock); - - // Call - toolStripItem.PerformClick(); - - // Assert - mocks.VerifyAll(); - } - - [Test] public void CreatePerformAllCalculationsInFailureMechanismItem_IsEnabledFuncTrue_CreatesDecoratedAndEnabledItem() { // Setup Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsGuiPlugin.cs =================================================================== diff -u -r4435a35be229b12da5859395985ad38c9c5d4729 -r09e76611c2a789b6f015368968a18ea5b9b138cc --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsGuiPlugin.cs (.../GrassCoverErosionInwardsGuiPlugin.cs) (revision 4435a35be229b12da5859395985ad38c9c5d4729) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsGuiPlugin.cs (.../GrassCoverErosionInwardsGuiPlugin.cs) (revision 09e76611c2a789b6f015368968a18ea5b9b138cc) @@ -248,7 +248,7 @@ return builder.AddOpenItem() .AddSeparator() - .AddChangeRelevancyOfFailureMechanismItem(grassCoverErosionInwardsFailureMechanismContext, RemoveAllViewsForItem) + .AddToggleRelevancyOfFailureMechanismItem(grassCoverErosionInwardsFailureMechanismContext, RemoveAllViewsForItem) .AddSeparator() .AddPerformAllCalculationsInFailureMechanismItem(grassCoverErosionInwardsFailureMechanismContext, CalculateAll, EnablePerformAllCalculationsInFailureMechanism) .AddClearAllCalculationOutputInFailureMechanismItem(grassCoverErosionInwardsFailureMechanismContext.WrappedData) @@ -277,7 +277,7 @@ { var builder = new RingtoetsContextMenuBuilder(Gui.Get(grassCoverErosionInwardsFailureMechanismContext, treeViewControl)); - return builder.AddDisabledChangeRelevancyItem(grassCoverErosionInwardsFailureMechanismContext) + return builder.AddToggleRelevancyOfFailureMechanismItem(grassCoverErosionInwardsFailureMechanismContext, null) .AddSeparator() .AddExpandAllItem() .AddCollapseAllItem() Index: Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsGuiPlugin.cs =================================================================== diff -u -r4fcfb461202e3486c94b31783da77d5792ab7e92 -r09e76611c2a789b6f015368968a18ea5b9b138cc --- Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsGuiPlugin.cs (.../RingtoetsGuiPlugin.cs) (revision 4fcfb461202e3486c94b31783da77d5792ab7e92) +++ Ringtoets/Integration/src/Ringtoets.Integration.Plugin/RingtoetsGuiPlugin.cs (.../RingtoetsGuiPlugin.cs) (revision 09e76611c2a789b6f015368968a18ea5b9b138cc) @@ -311,7 +311,7 @@ return assessmentSection .GetFailureMechanisms() .OfType>() - .Any(fm => ReferenceEquals(view.Data,fm.SectionResults)); + .Any(fm => ReferenceEquals(view.Data, fm.SectionResults)); } if (failureMechanismContext != null) { @@ -507,7 +507,7 @@ { var builder = new RingtoetsContextMenuBuilder(Gui.Get(nodeData, treeViewControl)); - return builder.AddChangeRelevancyOfFailureMechanismItem(nodeData, RemoveAllViewsForItem) + return builder.AddToggleRelevancyOfFailureMechanismItem(nodeData, RemoveAllViewsForItem) .AddSeparator() .AddImportItem() .AddExportItem() @@ -528,7 +528,7 @@ { var builder = new RingtoetsContextMenuBuilder(Gui.Get(nodeData, treeViewControl)); - return builder.AddDisabledChangeRelevancyItem(nodeData) + return builder.AddToggleRelevancyOfFailureMechanismItem(nodeData, null) .AddSeparator() .AddExpandAllItem() .AddCollapseAllItem() Index: Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingGuiPlugin.cs =================================================================== diff -u -r4435a35be229b12da5859395985ad38c9c5d4729 -r09e76611c2a789b6f015368968a18ea5b9b138cc --- Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingGuiPlugin.cs (.../PipingGuiPlugin.cs) (revision 4435a35be229b12da5859395985ad38c9c5d4729) +++ Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingGuiPlugin.cs (.../PipingGuiPlugin.cs) (revision 09e76611c2a789b6f015368968a18ea5b9b138cc) @@ -283,7 +283,7 @@ { failureMechanism = failureMechanismContext.WrappedData; } - return failureMechanism != null && ReferenceEquals(view.Data, ((FailureMechanismBase)failureMechanism).SectionResults); + return failureMechanism != null && ReferenceEquals(view.Data, ((FailureMechanismBase) failureMechanism).SectionResults); } # endregion @@ -322,7 +322,7 @@ return builder.AddOpenItem() .AddSeparator() - .AddChangeRelevancyOfFailureMechanismItem(pipingFailureMechanismContext, RemoveAllViewsForItem) + .AddToggleRelevancyOfFailureMechanismItem(pipingFailureMechanismContext, RemoveAllViewsForItem) .AddSeparator() .AddCustomItem(validateAllItem) .AddPerformAllCalculationsInFailureMechanismItem(pipingFailureMechanismContext, CalculateAll, context => true) @@ -347,7 +347,7 @@ { var builder = new RingtoetsContextMenuBuilder(Gui.Get(pipingFailureMechanismContext, treeViewControl)); - return builder.AddDisabledChangeRelevancyItem(pipingFailureMechanismContext) + return builder.AddToggleRelevancyOfFailureMechanismItem(pipingFailureMechanismContext, null) .AddSeparator() .AddExpandAllItem() .AddCollapseAllItem()