Index: Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/RingtoetsContextMenuBuilder.cs =================================================================== diff -u -r578037b5080f7a4820286ea02c6b4c322a8b1b09 -r37fdad457c3ca89b8d5483bf2796b1ccb11ffdd5 --- Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/RingtoetsContextMenuBuilder.cs (.../RingtoetsContextMenuBuilder.cs) (revision 578037b5080f7a4820286ea02c6b4c322a8b1b09) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/RingtoetsContextMenuBuilder.cs (.../RingtoetsContextMenuBuilder.cs) (revision 37fdad457c3ca89b8d5483bf2796b1ccb11ffdd5) @@ -54,7 +54,7 @@ /// The itself. public RingtoetsContextMenuBuilder AddCreateCalculationGroupItem(CalculationGroup calculationGroup) { - contextMenuBuilder.AddCustomItem(ringtoetsContextMenuItemFactory.CreateAddCalculationGroupItem(calculationGroup)); + contextMenuBuilder.AddCustomItem(RingtoetsContextMenuItemFactory.CreateAddCalculationGroupItem(calculationGroup)); return this; } @@ -70,7 +70,7 @@ Action addCalculationAction) where TCalculationContext : ICalculationContext { - contextMenuBuilder.AddCustomItem(ringtoetsContextMenuItemFactory.CreateAddCalculationItem(calculationGroupContext, addCalculationAction)); + contextMenuBuilder.AddCustomItem(RingtoetsContextMenuItemFactory.CreateAddCalculationItem(calculationGroupContext, addCalculationAction)); return this; } @@ -81,7 +81,7 @@ /// The itself. public RingtoetsContextMenuBuilder AddClearAllCalculationOutputInGroupItem(CalculationGroup calculationGroup) { - contextMenuBuilder.AddCustomItem(ringtoetsContextMenuItemFactory.CreateClearAllCalculationOutputInGroupItem(calculationGroup)); + contextMenuBuilder.AddCustomItem(RingtoetsContextMenuItemFactory.CreateClearAllCalculationOutputInGroupItem(calculationGroup)); return this; } @@ -92,14 +92,16 @@ /// The calculation group to perform all calculations for. /// The calculation group context belonging to the calculation group. /// The action that performs all calculations. + /// The func that checks if the item is enabled. /// The itself. public RingtoetsContextMenuBuilder AddPerformAllCalculationsInGroupItem( CalculationGroup calculationGroup, TCalculationContext calculationGroupContext, - Action calculateAllAction) + Action calculateAllAction, + Func isEnabledFunc) where TCalculationContext : ICalculationContext { - contextMenuBuilder.AddCustomItem(ringtoetsContextMenuItemFactory.CreatePerformAllCalculationsInGroupItem(calculationGroup, calculationGroupContext, calculateAllAction)); + contextMenuBuilder.AddCustomItem(RingtoetsContextMenuItemFactory.CreatePerformAllCalculationsInGroupItem(calculationGroup, calculationGroupContext, calculateAllAction, isEnabledFunc)); return this; } @@ -121,7 +123,7 @@ where TCalculationContext : ICalculationContext where TCalculation : ICalculation { - contextMenuBuilder.AddCustomItem(ringtoetsContextMenuItemFactory.CreatePerformCalculationItem(calculation, calculationContext, calculateAction, isEnabledFunc)); + contextMenuBuilder.AddCustomItem(RingtoetsContextMenuItemFactory.CreatePerformCalculationItem(calculation, calculationContext, calculateAction, isEnabledFunc)); return this; } @@ -132,7 +134,7 @@ /// The itself. public RingtoetsContextMenuBuilder AddClearCalculationOutputItem(ICalculation calculation) { - contextMenuBuilder.AddCustomItem(ringtoetsContextMenuItemFactory.CreateClearCalculationOutputItem(calculation)); + contextMenuBuilder.AddCustomItem(RingtoetsContextMenuItemFactory.CreateClearCalculationOutputItem(calculation)); return this; } @@ -143,7 +145,7 @@ /// The itself. public RingtoetsContextMenuBuilder AddDisabledChangeRelevancyItem(IFailureMechanismContext failureMechanismContext) { - contextMenuBuilder.AddCustomItem(ringtoetsContextMenuItemFactory.CreateDisabledChangeRelevancyItem(failureMechanismContext)); + contextMenuBuilder.AddCustomItem(RingtoetsContextMenuItemFactory.CreateDisabledChangeRelevancyItem(failureMechanismContext)); return this; } @@ -170,7 +172,7 @@ Action calculateAllAction) where TFailureMechanismContext : IFailureMechanismContext { - contextMenuBuilder.AddCustomItem(ringtoetsContextMenuItemFactory.CreatePerformAllCalculationsInFailureMechanismItem(failureMechanismContext, calculateAllAction)); + contextMenuBuilder.AddCustomItem(RingtoetsContextMenuItemFactory.CreatePerformAllCalculationsInFailureMechanismItem(failureMechanismContext, calculateAllAction)); return this; } Index: Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/RingtoetsContextMenuItemFactory.cs =================================================================== diff -u -r578037b5080f7a4820286ea02c6b4c322a8b1b09 -r37fdad457c3ca89b8d5483bf2796b1ccb11ffdd5 --- Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/RingtoetsContextMenuItemFactory.cs (.../RingtoetsContextMenuItemFactory.cs) (revision 578037b5080f7a4820286ea02c6b4c322a8b1b09) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/TreeNodeInfos/RingtoetsContextMenuItemFactory.cs (.../RingtoetsContextMenuItemFactory.cs) (revision 37fdad457c3ca89b8d5483bf2796b1ccb11ffdd5) @@ -43,7 +43,7 @@ /// /// The calculation group to add the new calculation groups to. /// The created . - public StrictContextMenuItem CreateAddCalculationGroupItem(CalculationGroup calculationGroup) + public static StrictContextMenuItem CreateAddCalculationGroupItem(CalculationGroup calculationGroup) { return new StrictContextMenuItem( Resources.CalculationGroup_Add_CalculationGroup, @@ -59,7 +59,7 @@ /// The calculation group context belonging to the calculation group. /// The action for adding a calculation to the calculation group. /// The created . - public StrictContextMenuItem CreateAddCalculationItem( + public static StrictContextMenuItem CreateAddCalculationItem( TCalculationContext calculationGroupContext, Action addCalculationAction) where TCalculationContext : ICalculationContext @@ -76,7 +76,7 @@ /// /// The calculation group to clear the output for. /// The created . - public StrictContextMenuItem CreateClearAllCalculationOutputInGroupItem(CalculationGroup calculationGroup) + public static StrictContextMenuItem CreateClearAllCalculationOutputInGroupItem(CalculationGroup calculationGroup) { var clearAllItem = new StrictContextMenuItem( Resources.Clear_all_output, @@ -100,19 +100,29 @@ /// The calculation group to perform all calculations for. /// The calculation group context belonging to the calculation group. /// The action that performs all calculations. + /// The func that checks if the item is enabled. /// The created . - public StrictContextMenuItem CreatePerformAllCalculationsInGroupItem( + public static StrictContextMenuItem CreatePerformAllCalculationsInGroupItem( CalculationGroup calculationGroup, TCalculationContext calculationGroupContext, - Action calculateAllAction) + Action calculateAllAction, + Func isEnabledFunc) where TCalculationContext : ICalculationContext { var performAllItem = new StrictContextMenuItem( Resources.Calculate_all, Resources.CalculationGroup_CalculateAll_ToolTip, Resources.CalculateAllIcon, - (o, args) => calculateAllAction(calculationGroup, calculationGroupContext)); + (o, args) => calculateAllAction(calculationGroup, calculationGroupContext)) + { + Enabled = isEnabledFunc(calculationGroupContext) + }; + if (!performAllItem.Enabled) + { + return performAllItem; + } + if (!calculationGroup.GetCalculations().Any()) { performAllItem.Enabled = false; @@ -132,7 +142,7 @@ /// The action that performs the calculation. /// The func that checks if the item is enabled. /// The created . - public StrictContextMenuItem CreatePerformCalculationItem( + public static StrictContextMenuItem CreatePerformCalculationItem( TCalculation calculation, TCalculationContext calculationContext, Action calculateAction, @@ -155,7 +165,7 @@ /// /// The calculation to clear the output for. /// The created . - public StrictContextMenuItem CreateClearCalculationOutputItem(ICalculation calculation) + public static StrictContextMenuItem CreateClearCalculationOutputItem(ICalculation calculation) { var clearOutputItem = new StrictContextMenuItem( Resources.Clear_output, @@ -177,7 +187,7 @@ /// /// The failure mechanism context belonging to the failure mechanism. /// The created . - public StrictContextMenuItem CreateDisabledChangeRelevancyItem(IFailureMechanismContext failureMechanismContext) + public static StrictContextMenuItem CreateDisabledChangeRelevancyItem(IFailureMechanismContext failureMechanismContext) { return new StrictContextMenuItem( Resources.FailureMechanismContextMenuStrip_Is_relevant, @@ -218,7 +228,7 @@ /// The failure mechanism to perform all calculations for. /// The action that performs all calculations. /// The created . - public StrictContextMenuItem CreatePerformAllCalculationsInFailureMechanismItem( + public static StrictContextMenuItem CreatePerformAllCalculationsInFailureMechanismItem( TFailureMechanismContext failureMechanismContext, Action calculateAllAction) where TFailureMechanismContext : IFailureMechanismContext Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/TreeNodeInfos/RingtoetsContextMenuBuilderTest.cs =================================================================== diff -u -r578037b5080f7a4820286ea02c6b4c322a8b1b09 -r37fdad457c3ca89b8d5483bf2796b1ccb11ffdd5 --- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/TreeNodeInfos/RingtoetsContextMenuBuilderTest.cs (.../RingtoetsContextMenuBuilderTest.cs) (revision 578037b5080f7a4820286ea02c6b4c322a8b1b09) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/TreeNodeInfos/RingtoetsContextMenuBuilderTest.cs (.../RingtoetsContextMenuBuilderTest.cs) (revision 37fdad457c3ca89b8d5483bf2796b1ccb11ffdd5) @@ -201,7 +201,7 @@ var ringtoetsContextMenuBuilder = new RingtoetsContextMenuBuilder(contextMenuBuilder); // Call - var result = ringtoetsContextMenuBuilder.AddPerformAllCalculationsInGroupItem(calculationGroup, calculationGroupContext, null).Build(); + var result = ringtoetsContextMenuBuilder.AddPerformAllCalculationsInGroupItem(calculationGroup, calculationGroupContext, null, context => true).Build(); // Assert Assert.IsInstanceOf(result); @@ -234,7 +234,7 @@ var ringtoetsContextMenuBuilder = new RingtoetsContextMenuBuilder(contextMenuBuilder); // Call - var result = ringtoetsContextMenuBuilder.AddPerformAllCalculationsInGroupItem(calculationGroup, calculationGroupContext, null).Build(); + var result = ringtoetsContextMenuBuilder.AddPerformAllCalculationsInGroupItem(calculationGroup, calculationGroupContext, null, context => true).Build(); // Assert Assert.IsInstanceOf(result); @@ -250,7 +250,7 @@ } [Test] - public void AddPerformAllCalculationsInGroupItem_WhenBuild_ItemAddedToContextMenu() + public void AddPerformCalculationItem_WhenBuildWithAllValidData_ItemAddedToContextMenuEnabled() { // Setup var mocks = new MockRepository(); @@ -283,6 +283,40 @@ } [Test] + public void AddPerformCalculationItem_WhenBuildWithoutAllValidData_ItemAddedToContextMenuDisabled() + { + // Setup + var mocks = new MockRepository(); + var applicationFeatureCommandsMock = mocks.StrictMock(); + var exportImportHandlerMock = mocks.StrictMock(); + var viewCommandsMock = mocks.StrictMock(); + var treeViewControlMock = mocks.StrictMock(); + var failureMechanisMock = mocks.StrictMock(); + + mocks.ReplayAll(); + + var calculation = new TestCalculation(); + var calculationContext = new TestCalculationContext(calculation, failureMechanisMock); + var contextMenuBuilder = new ContextMenuBuilder(applicationFeatureCommandsMock, exportImportHandlerMock, viewCommandsMock, calculation, treeViewControlMock); + var ringtoetsContextMenuBuilder = new RingtoetsContextMenuBuilder(contextMenuBuilder); + + // Call + var result = ringtoetsContextMenuBuilder.AddPerformCalculationItem(calculation, calculationContext, null, context => false).Build(); + + // Assert + Assert.IsInstanceOf(result); + Assert.AreEqual(1, result.Items.Count); + + TestHelper.AssertContextMenuStripContainsItem(result, 0, + RingtoetsFormsResources.Calculate, + RingtoetsFormsResources.Calculate_ToolTip, + RingtoetsFormsResources.CalculateIcon, + false); + + mocks.VerifyAll(); + } + + [Test] public void AddClearCalculationOutputItem_WhenBuildWithCalculationWithOutput_ItemAddedToContextMenuEnabled() { // Setup Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/TreeNodeInfos/RingtoetsContextMenuItemFactoryTest.cs =================================================================== diff -u -r578037b5080f7a4820286ea02c6b4c322a8b1b09 -r37fdad457c3ca89b8d5483bf2796b1ccb11ffdd5 --- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/TreeNodeInfos/RingtoetsContextMenuItemFactoryTest.cs (.../RingtoetsContextMenuItemFactoryTest.cs) (revision 578037b5080f7a4820286ea02c6b4c322a8b1b09) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/TreeNodeInfos/RingtoetsContextMenuItemFactoryTest.cs (.../RingtoetsContextMenuItemFactoryTest.cs) (revision 37fdad457c3ca89b8d5483bf2796b1ccb11ffdd5) @@ -52,7 +52,7 @@ var calculationGroup = new CalculationGroup(); // Call - var toolStripItem = factory.CreateAddCalculationGroupItem(calculationGroup); + var toolStripItem = RingtoetsContextMenuItemFactory.CreateAddCalculationGroupItem(calculationGroup); // Assert Assert.AreEqual(RingtoetsFormsResources.CalculationGroup_Add_CalculationGroup, toolStripItem.Text); @@ -76,7 +76,7 @@ // Precondition Assert.AreEqual(1, calculationGroup.Children.Count); - var toolStripItem = factory.CreateAddCalculationGroupItem(calculationGroup); + var toolStripItem = RingtoetsContextMenuItemFactory.CreateAddCalculationGroupItem(calculationGroup); // Call toolStripItem.PerformClick(); @@ -102,7 +102,7 @@ var calculationGroupContext = new TestCalculationGroupContext(calculationGroup, failureMechanismMock); // Call - var toolStripItem = factory.CreateAddCalculationItem(calculationGroupContext, context => { }); + var toolStripItem = RingtoetsContextMenuItemFactory.CreateAddCalculationItem(calculationGroupContext, context => { }); // Assert Assert.AreEqual(RingtoetsFormsResources.CalculationGroup_Add_Calculation, toolStripItem.Text); @@ -125,7 +125,7 @@ var counter = 0; var calculationGroup = new CalculationGroup(); var calculationGroupContext = new TestCalculationGroupContext(calculationGroup, failureMechanismMock); - var toolStripItem = factory.CreateAddCalculationItem(calculationGroupContext, context => counter++); + var toolStripItem = RingtoetsContextMenuItemFactory.CreateAddCalculationItem(calculationGroupContext, context => counter++); // Call toolStripItem.PerformClick(); @@ -156,7 +156,7 @@ }; // Call - var toolStripItem = factory.CreateClearAllCalculationOutputInGroupItem(calculationGroup); + var toolStripItem = RingtoetsContextMenuItemFactory.CreateClearAllCalculationOutputInGroupItem(calculationGroup); // Assert Assert.AreEqual(RingtoetsFormsResources.Clear_all_output, toolStripItem.Text); @@ -187,7 +187,7 @@ }; // Call - var toolStripItem = factory.CreateClearAllCalculationOutputInGroupItem(calculationGroup); + var toolStripItem = RingtoetsContextMenuItemFactory.CreateClearAllCalculationOutputInGroupItem(calculationGroup); // Assert Assert.AreEqual(RingtoetsFormsResources.Clear_all_output, toolStripItem.Text); @@ -244,7 +244,7 @@ } }; - var toolStripItem = factory.CreateClearAllCalculationOutputInGroupItem(calculationGroup); + var toolStripItem = RingtoetsContextMenuItemFactory.CreateClearAllCalculationOutputInGroupItem(calculationGroup); // Call toolStripItem.PerformClick(); @@ -293,7 +293,7 @@ } }; - var toolStripItem = factory.CreateClearAllCalculationOutputInGroupItem(calculationGroup); + var toolStripItem = RingtoetsContextMenuItemFactory.CreateClearAllCalculationOutputInGroupItem(calculationGroup); // Call toolStripItem.PerformClick(); @@ -322,7 +322,7 @@ var calculationGroupContext = new TestCalculationGroupContext(calculationGroup, failureMechanismMock); // Call - var toolStripItem = factory.CreatePerformAllCalculationsInGroupItem(calculationGroup, calculationGroupContext, null); + var toolStripItem = RingtoetsContextMenuItemFactory.CreatePerformAllCalculationsInGroupItem(calculationGroup, calculationGroupContext, null, context => true); // Assert Assert.AreEqual(RingtoetsFormsResources.Calculate_all, toolStripItem.Text); @@ -346,7 +346,7 @@ var calculationGroupContext = new TestCalculationGroupContext(calculationGroup, failureMechanismMock); // Call - var toolStripItem = factory.CreatePerformAllCalculationsInGroupItem(calculationGroup, calculationGroupContext, null); + var toolStripItem = RingtoetsContextMenuItemFactory.CreatePerformAllCalculationsInGroupItem(calculationGroup, calculationGroupContext, null, context => true); // Assert Assert.AreEqual(RingtoetsFormsResources.Calculate_all, toolStripItem.Text); @@ -358,6 +358,68 @@ } [Test] + public void CreatePerformAllCalculationsInGroupItem_IsEnabledFuncTrue_CreatesDecoratedAndEnabledItem() + { + // Setup + var mocks = new MockRepository(); + var failureMechanismMock = mocks.StrictMock(); + + mocks.ReplayAll(); + + var calculation = new TestCalculation(); + var calculationGroup = new CalculationGroup + { + Children = + { + calculation + } + }; + var calculationGroupContext = new TestCalculationGroupContext(calculationGroup, failureMechanismMock); + + // Call + var toolStripItem = RingtoetsContextMenuItemFactory.CreatePerformAllCalculationsInGroupItem(calculationGroup, calculationGroupContext, null, context => true); + + // Assert + Assert.AreEqual(RingtoetsFormsResources.Calculate_all, toolStripItem.Text); + Assert.AreEqual(RingtoetsFormsResources.CalculationGroup_CalculateAll_ToolTip, toolStripItem.ToolTipText); + TestHelper.AssertImagesAreEqual(RingtoetsFormsResources.CalculateAllIcon, toolStripItem.Image); + Assert.IsTrue(toolStripItem.Enabled); + + mocks.VerifyAll(); + } + + [Test] + public void CreatePerformAllCalculationsInGroupItem_IsEnabledFuncFalse_CreatesDecoratedAndEnabledItem() + { + // Setup + var mocks = new MockRepository(); + var failureMechanismMock = mocks.StrictMock(); + + mocks.ReplayAll(); + + var calculation = new TestCalculation(); + var calculationGroup = new CalculationGroup + { + Children = + { + calculation + } + }; + var calculationGroupContext = new TestCalculationGroupContext(calculationGroup, failureMechanismMock); + + // Call + var toolStripItem = RingtoetsContextMenuItemFactory.CreatePerformAllCalculationsInGroupItem(calculationGroup, calculationGroupContext, null, context => false); + + // Assert + Assert.AreEqual(RingtoetsFormsResources.Calculate_all, toolStripItem.Text); + Assert.AreEqual(RingtoetsFormsResources.CalculationGroup_CalculateAll_ToolTip, toolStripItem.ToolTipText); + TestHelper.AssertImagesAreEqual(RingtoetsFormsResources.CalculateAllIcon, toolStripItem.Image); + Assert.IsFalse(toolStripItem.Enabled); + + mocks.VerifyAll(); + } + + [Test] public void CreatePerformAllCalculationsInGroupItem_PerformClickOnCreatedItem_PerformAllCalculationMethodPerformed() { // Setup @@ -378,7 +440,7 @@ var calculationGroupContext = new TestCalculationGroupContext(calculationGroup, failureMechanisMock); - var toolStripItem = factory.CreatePerformAllCalculationsInGroupItem(calculationGroup, calculationGroupContext, (group, context) => counter++); + var toolStripItem = RingtoetsContextMenuItemFactory.CreatePerformAllCalculationsInGroupItem(calculationGroup, calculationGroupContext, (group, context) => counter++, context => true); // Call toolStripItem.PerformClick(); @@ -402,7 +464,7 @@ var calculationContext = new TestCalculationContext(calculation, failureMechanismMock); // Call - var toolStripItem = factory.CreatePerformCalculationItem(calculation, calculationContext, null, context => true); + var toolStripItem = RingtoetsContextMenuItemFactory.CreatePerformCalculationItem(calculation, calculationContext, null, context => true); // Assert Assert.AreEqual(RingtoetsFormsResources.Calculate, toolStripItem.Text); @@ -426,7 +488,7 @@ var calculationContext = new TestCalculationContext(calculation, failureMechanisMock); // Call - var toolStripItem = factory.CreatePerformCalculationItem(calculation, calculationContext, null, context => false); + var toolStripItem = RingtoetsContextMenuItemFactory.CreatePerformCalculationItem(calculation, calculationContext, null, context => false); // Assert Assert.AreEqual(RingtoetsFormsResources.Calculate, toolStripItem.Text); @@ -450,7 +512,7 @@ var calculationContext = new TestCalculationContext(calculation, failureMechanismMock); var counter = 0; - var toolStripItem = factory.CreatePerformCalculationItem(calculation, calculationContext, (calc, context) => counter++, context => true); + var toolStripItem = RingtoetsContextMenuItemFactory.CreatePerformCalculationItem(calculation, calculationContext, (calc, context) => counter++, context => true); // Call toolStripItem.PerformClick(); @@ -473,7 +535,7 @@ mocks.ReplayAll(); // Call - var toolStripItem = factory.CreateClearCalculationOutputItem(calculationWithOutputMock); + var toolStripItem = RingtoetsContextMenuItemFactory.CreateClearCalculationOutputItem(calculationWithOutputMock); // Assert Assert.AreEqual(RingtoetsFormsResources.Clear_output, toolStripItem.Text); @@ -496,7 +558,7 @@ mocks.ReplayAll(); // Call - var toolStripItem = factory.CreateClearCalculationOutputItem(calculationWithOutputMock); + var toolStripItem = RingtoetsContextMenuItemFactory.CreateClearCalculationOutputItem(calculationWithOutputMock); // Assert Assert.AreEqual(RingtoetsFormsResources.Clear_output, toolStripItem.Text); @@ -530,7 +592,7 @@ messageBox.ClickOk(); }; - var toolStripItem = factory.CreateClearCalculationOutputItem(calculationWithOutputMock); + var toolStripItem = RingtoetsContextMenuItemFactory.CreateClearCalculationOutputItem(calculationWithOutputMock); // Call toolStripItem.PerformClick(); @@ -559,7 +621,7 @@ messageBox.ClickCancel(); }; - var toolStripItem = factory.CreateClearCalculationOutputItem(calculationWithOutputMock); + var toolStripItem = RingtoetsContextMenuItemFactory.CreateClearCalculationOutputItem(calculationWithOutputMock); // Call toolStripItem.PerformClick(); @@ -577,7 +639,7 @@ mocks.ReplayAll(); // Call - var toolStripItem = factory.CreateDisabledChangeRelevancyItem(failureMechanismContextMock); + var toolStripItem = RingtoetsContextMenuItemFactory.CreateDisabledChangeRelevancyItem(failureMechanismContextMock); // Assert Assert.AreEqual(RingtoetsFormsResources.FailureMechanismContextMenuStrip_Is_relevant, toolStripItem.Text); @@ -602,7 +664,7 @@ mocks.ReplayAll(); - var toolStripItem = factory.CreateDisabledChangeRelevancyItem(failureMechanismContextMock); + var toolStripItem = RingtoetsContextMenuItemFactory.CreateDisabledChangeRelevancyItem(failureMechanismContextMock); // Call toolStripItem.PerformClick(); Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsGuiPlugin.cs =================================================================== diff -u -r578037b5080f7a4820286ea02c6b4c322a8b1b09 -r37fdad457c3ca89b8d5483bf2796b1ccb11ffdd5 --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsGuiPlugin.cs (.../GrassCoverErosionInwardsGuiPlugin.cs) (revision 578037b5080f7a4820286ea02c6b4c322a8b1b09) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsGuiPlugin.cs (.../GrassCoverErosionInwardsGuiPlugin.cs) (revision 37fdad457c3ca89b8d5483bf2796b1ccb11ffdd5) @@ -204,6 +204,11 @@ calc)).ToList()); } + private static bool AllDataAvailable(IAssessmentSection assessmentSection, GrassCoverErosionInwardsFailureMechanism failureMechanism) + { + return assessmentSection.HydraulicBoundaryDatabase != null && failureMechanism.Sections.Any(); + } + #region GrassCoverErosionInwards TreeNodeInfo private object[] FailureMechanismEnabledChildNodeObjects(GrassCoverErosionInwardsFailureMechanismContext grassCoverErosionInwardsFailureMechanismContext) @@ -349,7 +354,7 @@ builder.AddCreateCalculationGroupItem(group); builder.AddCreateCalculationItem(nodeData, AddCalculation); builder.AddSeparator(); - builder.AddPerformAllCalculationsInGroupItem(group, nodeData, CalculateAll); + builder.AddPerformAllCalculationsInGroupItem(group, nodeData, CalculateAll, EnablePerformAllCalculationsInGroup); builder.AddClearAllCalculationOutputInGroupItem(group); builder.AddSeparator(); @@ -370,8 +375,13 @@ .Build(); } - private void CalculationGroupContextOnNodeRemoved(GrassCoverErosionInwardsCalculationGroupContext nodeData, object parentNodeData) + private static bool EnablePerformAllCalculationsInGroup(GrassCoverErosionInwardsCalculationGroupContext context) { + return AllDataAvailable(context.AssessmentSection, context.FailureMechanism); + } + + private static void CalculationGroupContextOnNodeRemoved(GrassCoverErosionInwardsCalculationGroupContext nodeData, object parentNodeData) + { var parentGroupContext = (GrassCoverErosionInwardsCalculationGroupContext) parentNodeData; parentGroupContext.WrappedData.Children.Remove(nodeData.WrappedData); @@ -428,9 +438,9 @@ .Build(); } - private bool EnablePerformCalculation(GrassCoverErosionInwardsCalculationContext context) + private static bool EnablePerformCalculation(GrassCoverErosionInwardsCalculationContext context) { - return context.AssessmentSection.HydraulicBoundaryDatabase != null && context.FailureMechanism.Sections.Any(); + return AllDataAvailable(context.AssessmentSection, context.FailureMechanism); } private void PerformCalculation(GrassCoverErosionInwardsCalculation calculation, GrassCoverErosionInwardsCalculationContext context) Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/TreeNodeInfos/GrassCoverErosionInwardsCalculationGroupContextTreeNodeInfoTest.cs =================================================================== diff -u -reaa8b3e276e1a0a6a4d0a2f96016879d8d12d394 -r37fdad457c3ca89b8d5483bf2796b1ccb11ffdd5 --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/TreeNodeInfos/GrassCoverErosionInwardsCalculationGroupContextTreeNodeInfoTest.cs (.../GrassCoverErosionInwardsCalculationGroupContextTreeNodeInfoTest.cs) (revision eaa8b3e276e1a0a6a4d0a2f96016879d8d12d394) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Forms.Test/TreeNodeInfos/GrassCoverErosionInwardsCalculationGroupContextTreeNodeInfoTest.cs (.../GrassCoverErosionInwardsCalculationGroupContextTreeNodeInfoTest.cs) (revision 37fdad457c3ca89b8d5483bf2796b1ccb11ffdd5) @@ -22,6 +22,7 @@ using System.Linq; using System.Windows.Forms; using Core.Common.Base; +using Core.Common.Base.Geometry; using Core.Common.Controls.TreeView; using Core.Common.Gui; using Core.Common.Gui.Commands; @@ -32,9 +33,11 @@ using Rhino.Mocks; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.Calculation; +using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.GrassCoverErosionInwards.Data; using Ringtoets.GrassCoverErosionInwards.Forms.PresentationObjects; using Ringtoets.GrassCoverErosionInwards.Plugin; +using Ringtoets.HydraRing.Data; using CoreCommonGuiResources = Core.Common.Gui.Properties.Resources; using RingtoetsFormsResources = Ringtoets.Common.Forms.Properties.Resources; using GrassCoverErosionInwardsFormResources = Ringtoets.GrassCoverErosionInwards.Forms.Properties.Resources; @@ -78,12 +81,12 @@ { // Setup var group = new CalculationGroup(); - var failureMechanismMock = mocks.StrictMock(); + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); var assessmentSectionMock = mocks.StrictMock(); mocks.ReplayAll(); var groupContext = new GrassCoverErosionInwardsCalculationGroupContext(group, - failureMechanismMock, + failureMechanism, assessmentSectionMock); // Call @@ -137,11 +140,14 @@ // Setup var group = new CalculationGroup(); - var failureMechanismMock = mocks.StrictMock(); + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + failureMechanism.AddSection(new FailureMechanismSection("test", new[] { new Point2D(0, 0) })); + var assessmentSectionMock = mocks.StrictMock(); + assessmentSectionMock.Expect(asm => asm.HydraulicBoundaryDatabase).Return(new HydraulicBoundaryDatabase()); var nodeData = new GrassCoverErosionInwardsCalculationGroupContext(group, - failureMechanismMock, + failureMechanism, assessmentSectionMock); var applicationFeatureCommandHandler = mocks.Stub(); @@ -230,6 +236,86 @@ } [Test] + public void ContextMenuStrip_NoHydraulicDatabaseAndFailureMechanismSections_ReturnContextMenuWithCalculateAllDisabled() + { + // Setup + var group = new CalculationGroup(); + + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + var assessmentSectionMock = mocks.StrictMock(); + assessmentSectionMock.Expect(asm => asm.HydraulicBoundaryDatabase).Return(null); + + var nodeData = new GrassCoverErosionInwardsCalculationGroupContext(group, + failureMechanism, + assessmentSectionMock); + + var applicationFeatureCommandHandler = mocks.Stub(); + var exportImportHandler = mocks.Stub(); + var viewCommandsHandler = mocks.StrictMock(); + var treeViewControl = mocks.StrictMock(); + + var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, nodeData, treeViewControl); + gui.Expect(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); + + treeViewControl.Expect(tvc => tvc.CanExpandOrCollapseForData(nodeData)).Repeat.Twice().Return(false); + viewCommandsHandler.Expect(vc => vc.CanOpenViewFor(nodeData)).Return(false); + + mocks.ReplayAll(); + + // Call + ContextMenuStrip menu = info.ContextMenuStrip(nodeData, null, treeViewControl); + + // Assert + TestHelper.AssertContextMenuStripContainsItem(menu, 5, + RingtoetsFormsResources.Calculate_all, + RingtoetsFormsResources.CalculationGroup_CalculateAll_ToolTip, + RingtoetsFormsResources.CalculateIcon, + false); + mocks.VerifyAll(); + } + + [Test] + public void ContextMenuStrip_HydraulicDatabaseAndFailureMechanismSectionsSet_ReturnContextMenuWithCalculateAllEnabled() + { + // Setup + var group = new CalculationGroup(); + group.Children.Add(new GrassCoverErosionInwardsCalculation(new GeneralGrassCoverErosionInwardsInput())); + + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + failureMechanism.AddSection(new FailureMechanismSection("test", new[] { new Point2D(0, 0) })); + + var assessmentSectionMock = mocks.StrictMock(); + assessmentSectionMock.Expect(asm => asm.HydraulicBoundaryDatabase).Return(new HydraulicBoundaryDatabase()); + + var nodeData = new GrassCoverErosionInwardsCalculationGroupContext(group, + failureMechanism, + assessmentSectionMock); + + var applicationFeatureCommandHandler = mocks.Stub(); + var exportImportHandler = mocks.Stub(); + var viewCommandsHandler = mocks.StrictMock(); + var treeViewControl = mocks.StrictMock(); + + var menuBuilder = new ContextMenuBuilder(applicationFeatureCommandHandler, exportImportHandler, viewCommandsHandler, nodeData, treeViewControl); + gui.Expect(g => g.Get(nodeData, treeViewControl)).Return(menuBuilder); + + treeViewControl.Expect(tvc => tvc.CanExpandOrCollapseForData(nodeData)).Repeat.Twice().Return(false); + viewCommandsHandler.Expect(vc => vc.CanOpenViewFor(nodeData)).Return(false); + + mocks.ReplayAll(); + + // Call + ContextMenuStrip menu = info.ContextMenuStrip(nodeData, null, treeViewControl); + + // Assert + TestHelper.AssertContextMenuStripContainsItem(menu, 5, + RingtoetsFormsResources.Calculate_all, + RingtoetsFormsResources.CalculationGroup_CalculateAll_ToolTip, + RingtoetsFormsResources.CalculateIcon); + mocks.VerifyAll(); + } + + [Test] public void ContextmenuStrip_NestedCalculationGroup_ReturnContextMenuWithAllItems() { // Setup @@ -238,15 +324,18 @@ parentGroup.Children.Add(group); - var failureMechanismMock = mocks.StrictMock(); + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); + failureMechanism.AddSection(new FailureMechanismSection("test", new[] { new Point2D(0, 0) })); + var assessmentSectionMock = mocks.StrictMock(); + assessmentSectionMock.Expect(asm => asm.HydraulicBoundaryDatabase).Return(new HydraulicBoundaryDatabase()); var parentData = new GrassCoverErosionInwardsCalculationGroupContext(parentGroup, - failureMechanismMock, + failureMechanism, assessmentSectionMock); var nodeData = new GrassCoverErosionInwardsCalculationGroupContext(group, - failureMechanismMock, + failureMechanism, assessmentSectionMock); var applicationFeatureCommandHandler = mocks.Stub(); @@ -345,13 +434,14 @@ var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); var group = new CalculationGroup(); var parentGroup = new CalculationGroup(); - var failureMechanismMock = mocks.StrictMock(); + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); var assessmentSectionMock = mocks.StrictMock(); + assessmentSectionMock.Expect(asm => asm.HydraulicBoundaryDatabase).Return(new HydraulicBoundaryDatabase()); var nodeData = new GrassCoverErosionInwardsCalculationGroupContext(group, - failureMechanismMock, + failureMechanism, assessmentSectionMock); var parentNodeData = new GrassCoverErosionInwardsCalculationGroupContext(parentGroup, - failureMechanismMock, + failureMechanism, assessmentSectionMock); var calculationItem = mocks.Stub(); @@ -395,13 +485,14 @@ var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); var group = new CalculationGroup(); var parentGroup = new CalculationGroup(); - var failureMechanismMock = mocks.StrictMock(); + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); var assessmentSectionMock = mocks.StrictMock(); + assessmentSectionMock.Expect(asm => asm.HydraulicBoundaryDatabase).Return(new HydraulicBoundaryDatabase()); var nodeData = new GrassCoverErosionInwardsCalculationGroupContext(group, - failureMechanismMock, + failureMechanism, assessmentSectionMock); var parentNodeData = new GrassCoverErosionInwardsCalculationGroupContext(parentGroup, - failureMechanismMock, + failureMechanism, assessmentSectionMock); var calculationItem = mocks.Stub(); @@ -445,18 +536,18 @@ var observer = mocks.StrictMock(); observer.Expect(o => o.UpdateObserver()); var group = new CalculationGroup(); - var failureMechanismMock = mocks.StrictMock(); + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); var assessmentSectionMock = mocks.StrictMock(); mocks.ReplayAll(); var nodeData = new GrassCoverErosionInwardsCalculationGroupContext(group, - failureMechanismMock, + failureMechanism, assessmentSectionMock); var parentGroup = new CalculationGroup(); parentGroup.Children.Add(group); var parentNodeData = new GrassCoverErosionInwardsCalculationGroupContext(parentGroup, - failureMechanismMock, + failureMechanism, assessmentSectionMock); parentNodeData.Attach(observer); @@ -478,7 +569,7 @@ var observer = mocks.StrictMock(); observer.Expect(o => o.UpdateObserver()); var group = new CalculationGroup(); - var failureMechanismMock = mocks.StrictMock(); + var failureMechanism = new GrassCoverErosionInwardsFailureMechanism(); var calculation = new GrassCoverErosionInwardsCalculation(new GeneralGrassCoverErosionInwardsInput()); @@ -488,13 +579,13 @@ mocks.ReplayAll(); var nodeData = new GrassCoverErosionInwardsCalculationGroupContext(group, - failureMechanismMock, + failureMechanism, assessmentSectionMock); var parentGroup = new CalculationGroup(); parentGroup.Children.Add(group); var parentNodeData = new GrassCoverErosionInwardsCalculationGroupContext(parentGroup, - failureMechanismMock, + failureMechanism, assessmentSectionMock); parentNodeData.Attach(observer); Index: Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingGuiPlugin.cs =================================================================== diff -u -r578037b5080f7a4820286ea02c6b4c322a8b1b09 -r37fdad457c3ca89b8d5483bf2796b1ccb11ffdd5 --- Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingGuiPlugin.cs (.../PipingGuiPlugin.cs) (revision 578037b5080f7a4820286ea02c6b4c322a8b1b09) +++ Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingGuiPlugin.cs (.../PipingGuiPlugin.cs) (revision 37fdad457c3ca89b8d5483bf2796b1ccb11ffdd5) @@ -530,7 +530,7 @@ .AddCreateCalculationItem(nodeData, AddCalculationScenario) .AddSeparator() .AddCustomItem(validateAllItem) - .AddPerformAllCalculationsInGroupItem(group, nodeData, CalculateAll) + .AddPerformAllCalculationsInGroupItem(group, nodeData, CalculateAll, context => true) .AddClearAllCalculationOutputInGroupItem(group) .AddSeparator();