Index: Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Plugin/ClosingStructuresPlugin.cs =================================================================== diff -u -r5a6d329435609e061bf207fc4c7e29cbd5a732e2 -r961c0bdb44b8058e95d8339b1a3bdc826e4ceb9b --- Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Plugin/ClosingStructuresPlugin.cs (.../ClosingStructuresPlugin.cs) (revision 5a6d329435609e061bf207fc4c7e29cbd5a732e2) +++ Ringtoets/ClosingStructures/src/Ringtoets.ClosingStructures.Plugin/ClosingStructuresPlugin.cs (.../ClosingStructuresPlugin.cs) (revision 961c0bdb44b8058e95d8339b1a3bdc826e4ceb9b) @@ -575,7 +575,7 @@ return new StrictContextMenuItem(RingtoetsCommonFormsResources.StructuresPlugin_CreateUpdateStructureItem_Update_all_Structures, toolTipText, RingtoetsCommonFormsResources.UpdateItemIcon, - (o, args) => UpdateStructureDependentDataOfCalculation(calculations) ) + (o, args) => UpdateStructureDependentDataOfCalculation(calculations)) { Enabled = contextMenuEnabled }; @@ -724,7 +724,7 @@ return builder.AddExportItem() .AddSeparator() .AddRenameItem() - .AddUpdateForeshoreProfileOfCalculationItem(context.WrappedData, + .AddUpdateForeshoreProfileOfCalculationItem(calculation, inquiryHelper, UpdateForeshoreProfileDerivedCalculationInput) .AddCustomItem(CreateUpdateStructureItem(context)) Index: Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Plugin/GrassCoverErosionOutwardsPlugin.cs =================================================================== diff -u -rec15ff35b39f333c422b8ca6988c34bd8573f134 -r961c0bdb44b8058e95d8339b1a3bdc826e4ceb9b --- Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Plugin/GrassCoverErosionOutwardsPlugin.cs (.../GrassCoverErosionOutwardsPlugin.cs) (revision ec15ff35b39f333c422b8ca6988c34bd8573f134) +++ Ringtoets/GrassCoverErosionOutwards/src/Ringtoets.GrassCoverErosionOutwards.Plugin/GrassCoverErosionOutwardsPlugin.cs (.../GrassCoverErosionOutwardsPlugin.cs) (revision 961c0bdb44b8058e95d8339b1a3bdc826e4ceb9b) @@ -27,6 +27,7 @@ using System.Windows.Forms; using Core.Common.Base; using Core.Common.Controls.TreeView; +using Core.Common.Gui; using Core.Common.Gui.ContextMenu; using Core.Common.Gui.Forms.ProgressDialog; using Core.Common.Gui.Plugin; @@ -54,6 +55,7 @@ using Ringtoets.GrassCoverErosionOutwards.Plugin.Properties; using Ringtoets.GrassCoverErosionOutwards.Service; using Ringtoets.GrassCoverErosionOutwards.Service.MessageProviders; +using Ringtoets.Revetment.Data; using Ringtoets.Revetment.IO.Importers; using RingtoetsGrassCoverErosionOutwardsFormsResources = Ringtoets.GrassCoverErosionOutwards.Forms.Properties.Resources; using RingtoetsCommonDataResources = Ringtoets.Common.Data.Properties.Resources; @@ -206,9 +208,9 @@ .AddCollapseAllItem() .AddExpandAllItem() .Build(), - ForeColor = context => context.AssessmentSection.HydraulicBoundaryDatabase == null ? - Color.FromKnownColor(KnownColor.GrayText) : - Color.FromKnownColor(KnownColor.ControlText) + ForeColor = context => context.AssessmentSection.HydraulicBoundaryDatabase == null + ? Color.FromKnownColor(KnownColor.GrayText) + : Color.FromKnownColor(KnownColor.ControlText) }; yield return new TreeNodeInfo @@ -511,9 +513,9 @@ { var designWaterLevelItem = new StrictContextMenuItem( RingtoetsGrassCoverErosionOutwardsFormsResources.GrassCoverErosionOutwardsWaterLevelLocation_Calculate_All, - nodeData.AssessmentSection.HydraulicBoundaryDatabase != null ? - RingtoetsGrassCoverErosionOutwardsFormsResources.GrassCoverErosionOutwardsWaterLevelLocation_Calculate_All_ToolTip : - RingtoetsGrassCoverErosionOutwardsFormsResources.GrassCoverErosionOutwardsWaterLevelLocation_No_HRD_To_Calculate, + nodeData.AssessmentSection.HydraulicBoundaryDatabase != null + ? RingtoetsGrassCoverErosionOutwardsFormsResources.GrassCoverErosionOutwardsWaterLevelLocation_Calculate_All_ToolTip + : RingtoetsGrassCoverErosionOutwardsFormsResources.GrassCoverErosionOutwardsWaterLevelLocation_No_HRD_To_Calculate, RingtoetsCommonFormsResources.CalculateAllIcon, (sender, args) => { @@ -852,13 +854,17 @@ TreeViewControl treeViewControl) { var builder = new RingtoetsContextMenuBuilder(Gui.Get(nodeData, treeViewControl)); + var inquiryHelper = new DialogBasedInquiryHelper(Gui.MainWindow); GrassCoverErosionOutwardsWaveConditionsCalculation calculation = nodeData.WrappedData; return builder .AddExportItem() .AddSeparator() .AddRenameItem() + .AddUpdateForeshoreProfileOfCalculationItem(calculation, + inquiryHelper, + UpdateForeshoreProfileDerivedCalculationInput) .AddSeparator() .AddValidateCalculationItem( nodeData, @@ -880,6 +886,8 @@ .Build(); } + private static void UpdateForeshoreProfileDerivedCalculationInput(ICalculation calculation) {} + private static string ValidateAllDataAvailableAndGetErrorMessage(GrassCoverErosionOutwardsWaveConditionsCalculationContext context) { return ValidateAllDataAvailableAndGetErrorMessage(context.AssessmentSection, context.FailureMechanism); Index: Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Plugin.Test/TreeNodeInfos/GrassCoverErosionOutwardsWaveConditionsCalculationContextTreeNodeInfoTest.cs =================================================================== diff -u -red4b032b9903f394deb9691c2c39a9f2122ab0f5 -r961c0bdb44b8058e95d8339b1a3bdc826e4ceb9b --- Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Plugin.Test/TreeNodeInfos/GrassCoverErosionOutwardsWaveConditionsCalculationContextTreeNodeInfoTest.cs (.../GrassCoverErosionOutwardsWaveConditionsCalculationContextTreeNodeInfoTest.cs) (revision ed4b032b9903f394deb9691c2c39a9f2122ab0f5) +++ Ringtoets/GrassCoverErosionOutwards/test/Ringtoets.GrassCoverErosionOutwards.Plugin.Test/TreeNodeInfos/GrassCoverErosionOutwardsWaveConditionsCalculationContextTreeNodeInfoTest.cs (.../GrassCoverErosionOutwardsWaveConditionsCalculationContextTreeNodeInfoTest.cs) (revision 961c0bdb44b8058e95d8339b1a3bdc826e4ceb9b) @@ -31,6 +31,7 @@ using Core.Common.Gui.Commands; using Core.Common.Gui.ContextMenu; using Core.Common.Gui.Forms.MainWindow; +using Core.Common.Gui.TestUtil.ContextMenu; using Core.Common.TestUtil; using NUnit.Extensions.Forms; using NUnit.Framework; @@ -51,9 +52,11 @@ [TestFixture] public class GrassCoverErosionOutwardsWaveConditionsCalculationContextTreeNodeInfoTest : NUnitFormTest { - private const int validateMenuItemIndex = 4; - private const int calculateMenuItemIndex = 5; - private const int clearOutputMenuItemIndex = 7; + private const int contextMenuUpdateForeshoreProfileIndex = 3; + private const int validateMenuItemIndex = 5; + private const int calculateMenuItemIndex = 6; + private const int clearOutputMenuItemIndex = 8; + private readonly string testDataPath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, "HydraulicBoundaryDatabaseImporter"); private MockRepository mocks; private GrassCoverErosionOutwardsPlugin plugin; @@ -439,6 +442,7 @@ menuBuilderMock.Expect(mb => mb.AddExportItem()).Return(menuBuilderMock); menuBuilderMock.Expect(mb => mb.AddSeparator()).Return(menuBuilderMock); menuBuilderMock.Expect(mb => mb.AddRenameItem()).Return(menuBuilderMock); + menuBuilderMock.Expect(mb => mb.AddCustomItem(null)).IgnoreArguments().Return(menuBuilderMock); menuBuilderMock.Expect(mb => mb.AddSeparator()).Return(menuBuilderMock); menuBuilderMock.Expect(mb => mb.AddCustomItem(null)).IgnoreArguments().Return(menuBuilderMock); menuBuilderMock.Expect(mb => mb.AddCustomItem(null)).IgnoreArguments().Return(menuBuilderMock); @@ -457,7 +461,7 @@ { var gui = mocks.Stub(); gui.Stub(g => g.Get(context, treeViewControl)).Return(menuBuilderMock); - + gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -470,6 +474,69 @@ } [Test] + public void ContextMenuStrip_Always_AddCustomItems() + { + // Setup + string validFilePath = Path.Combine(testDataPath, "complete.sqlite"); + + var assessmentSection = mocks.Stub(); + assessmentSection.HydraulicBoundaryDatabase = new HydraulicBoundaryDatabase + { + FilePath = validFilePath, + Version = "random" + }; + + var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism + { + Contribution = 5 + }; + var calculation = new GrassCoverErosionOutwardsWaveConditionsCalculation(); + var context = new GrassCoverErosionOutwardsWaveConditionsCalculationContext(calculation, + failureMechanism, + assessmentSection); + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + using (var treeViewControl = new TreeViewControl()) + { + var gui = mocks.Stub(); + gui.Stub(cmp => cmp.Get(context, treeViewControl)).Return(menuBuilder); + gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); + mocks.ReplayAll(); + + plugin.Gui = gui; + + // Call + using (ContextMenuStrip menu = info.ContextMenuStrip(context, assessmentSection, treeViewControl)) + { + // Assert + Assert.AreEqual(15, menu.Items.Count); + + TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuUpdateForeshoreProfileIndex, + "&Bijwerken voorlandprofiel...", + "Er moet een voorlandprofiel geselecteerd zijn.", + RingtoetsCommonFormsResources.UpdateItemIcon, + false); + + TestHelper.AssertContextMenuStripContainsItem(menu, validateMenuItemIndex, + "&Valideren", + "Valideer de invoer voor deze berekening.", + RingtoetsCommonFormsResources.ValidateIcon); + + TestHelper.AssertContextMenuStripContainsItem(menu, calculateMenuItemIndex, + "Be&rekenen", + "Voer deze berekening uit.", + RingtoetsCommonFormsResources.CalculateIcon); + + TestHelper.AssertContextMenuStripContainsItem(menu, clearOutputMenuItemIndex, + "&Wis uitvoer...", + "Deze berekening heeft geen uitvoer om te wissen.", + RingtoetsCommonFormsResources.ClearIcon, + false); + } + } + } + + [Test] public void GivenAssessmentSectionWithoutHydraulicBoundaryDatabase_ThenValidationItemDisabled() { // Given @@ -504,7 +571,7 @@ var gui = mocks.Stub(); gui.Stub(g => g.Get(context, treeViewControl)).Return(menuBuilderMock); - + gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -558,7 +625,7 @@ var gui = mocks.Stub(); gui.Stub(g => g.Get(context, treeViewControl)).Return(menuBuilderMock); - + gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -580,8 +647,7 @@ public void GivenFailureMechanismContributionZero_ThenValidationItemDisabled() { // Given - string validHydroDatabasePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, - Path.Combine("HydraulicBoundaryDatabaseImporter", "complete.sqlite")); + string validHydroDatabasePath = Path.Combine(testDataPath, "complete.sqlite"); var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism { @@ -618,7 +684,7 @@ var gui = mocks.Stub(); gui.Stub(g => g.Get(context, treeViewControl)).Return(menuBuilderMock); - + gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -640,8 +706,7 @@ public void GivenValidInput_ThenValidationItemEnabled() { // Given - string validHydroDatabasePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, - Path.Combine("HydraulicBoundaryDatabaseImporter", "complete.sqlite")); + string validHydroDatabasePath = Path.Combine(testDataPath, "complete.sqlite"); var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism { @@ -678,7 +743,7 @@ var gui = mocks.Stub(); gui.Stub(g => g.Get(context, treeViewControl)).Return(menuBuilderMock); - + gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -701,8 +766,7 @@ public void GivenCalculation_WhenValidating_ThenCalculationValidated(bool validCalculation) { // Given - string validHydroDatabasePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, - Path.Combine("HydraulicBoundaryDatabaseImporter", "complete.sqlite")); + string validHydroDatabasePath = Path.Combine(testDataPath, "complete.sqlite"); var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism { @@ -748,7 +812,7 @@ var gui = mocks.Stub(); gui.Stub(g => g.Get(context, treeViewControl)).Return(menuBuilderMock); - + gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -820,7 +884,7 @@ var gui = mocks.Stub(); gui.Stub(g => g.Get(context, treeViewControl)).Return(menuBuilderMock); - + gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -874,7 +938,7 @@ var gui = mocks.Stub(); gui.Stub(g => g.Get(context, treeViewControl)).Return(menuBuilderMock); - + gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -896,8 +960,7 @@ public void GivenFailureMechanismContributionZero_ThenCalculationItemDisabled() { // Given - string validHydroDatabasePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, - Path.Combine("HydraulicBoundaryDatabaseImporter", "complete.sqlite")); + string validHydroDatabasePath = Path.Combine(testDataPath, "complete.sqlite"); var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism { @@ -934,7 +997,7 @@ var gui = mocks.Stub(); gui.Stub(g => g.Get(context, treeViewControl)).Return(menuBuilderMock); - + gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -956,8 +1019,7 @@ public void GivenValidInput_ThenCalculationItemEnabled() { // Given - string validHydroDatabasePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, - Path.Combine("HydraulicBoundaryDatabaseImporter", "complete.sqlite")); + string validHydroDatabasePath = Path.Combine(testDataPath, "complete.sqlite"); var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism { @@ -994,7 +1056,7 @@ var gui = mocks.Stub(); gui.Stub(g => g.Get(context, treeViewControl)).Return(menuBuilderMock); - + gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -1015,8 +1077,7 @@ public void GivenValidCalculation_WhenCalculating_ThenCalculationReturnsResult() { // Given - string validHydroDatabasePath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, - Path.Combine("HydraulicBoundaryDatabaseImporter", "complete.sqlite")); + string validHydroDatabasePath = Path.Combine(testDataPath, "complete.sqlite"); var failureMechanism = new GrassCoverErosionOutwardsFailureMechanism { @@ -1122,7 +1183,7 @@ var gui = mocks.Stub(); gui.Stub(g => g.Get(context, treeViewControl)).Return(menuBuilderMock); - + gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -1173,7 +1234,7 @@ var gui = mocks.Stub(); gui.Stub(g => g.Get(context, treeViewControl)).Return(menuBuilderMock); - + gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; @@ -1227,7 +1288,7 @@ var gui = mocks.Stub(); gui.Stub(g => g.Get(context, treeViewControl)).Return(menuBuilderMock); - + gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); mocks.ReplayAll(); plugin.Gui = gui; Index: Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Plugin/HeightStructuresPlugin.cs =================================================================== diff -u -r11c6d40de442b2548ca1134ee5bd5cf754549de4 -r961c0bdb44b8058e95d8339b1a3bdc826e4ceb9b --- Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Plugin/HeightStructuresPlugin.cs (.../HeightStructuresPlugin.cs) (revision 11c6d40de442b2548ca1134ee5bd5cf754549de4) +++ Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Plugin/HeightStructuresPlugin.cs (.../HeightStructuresPlugin.cs) (revision 961c0bdb44b8058e95d8339b1a3bdc826e4ceb9b) @@ -735,7 +735,7 @@ return builder.AddExportItem() .AddSeparator() .AddRenameItem() - .AddUpdateForeshoreProfileOfCalculationItem(context.WrappedData, + .AddUpdateForeshoreProfileOfCalculationItem(calculation, inquiryHelper, UpdateForeshoreProfileDerivedCalculationInput) .AddCustomItem(CreateUpdateStructureItem(context))