Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Properties/Resources.Designer.cs =================================================================== diff -u -rd99f9c6b8fcf5bf289607f71958bcff47ebf9475 -rbf926725b3c2994fb1f2d7c8b4294ab66691b3d2 --- Ringtoets/Common/src/Ringtoets.Common.Forms/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision d99f9c6b8fcf5bf289607f71958bcff47ebf9475) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision bf926725b3c2994fb1f2d7c8b4294ab66691b3d2) @@ -2430,6 +2430,35 @@ } /// + /// Looks up a localized string similar to Er moet een kunstwerk geselecteerd zijn.. + /// + public static string StructuresPlugin_CreateUpdateStructureItem_Update_calculation_no_Structure_ToolTip { + get { + return ResourceManager.GetString("StructuresPlugin_CreateUpdateStructureItem_Update_calculation_no_Structure_ToolTi" + + "p", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Berekening bijwerken met het kunstwerk.. + /// + public static string StructuresPlugin_CreateUpdateStructureItem_Update_calculation_with_Structure_data_ToolTip { + get { + return ResourceManager.GetString("StructuresPlugin_CreateUpdateStructureItem_Update_calculation_with_Structure_data" + + "_ToolTip", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to &Bijwerken kunstwerk. + /// + public static string StructuresPlugin_CreateUpdateStructureItem_Update_Structure_data { + get { + return ResourceManager.GetString("StructuresPlugin_CreateUpdateStructureItem_Update_Structure_data", resourceCulture); + } + } + + /// /// Looks up a localized string similar to Genereer berekeningen op basis van geselecteerde kunstwerken.. /// public static string StructuresPlugin_Generate_calculations_for_selected_structures { Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Properties/Resources.resx =================================================================== diff -u -rd99f9c6b8fcf5bf289607f71958bcff47ebf9475 -rbf926725b3c2994fb1f2d7c8b4294ab66691b3d2 --- Ringtoets/Common/src/Ringtoets.Common.Forms/Properties/Resources.resx (.../Resources.resx) (revision d99f9c6b8fcf5bf289607f71958bcff47ebf9475) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/Properties/Resources.resx (.../Resources.resx) (revision bf926725b3c2994fb1f2d7c8b4294ab66691b3d2) @@ -950,4 +950,13 @@ ID van het kunstwerk. + + Er moet een kunstwerk geselecteerd zijn. + + + Berekening bijwerken met het kunstwerk. + + + &Bijwerken kunstwerk + \ No newline at end of file Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Plugin.Test/TreeNodeInfos/GrassCoverErosionInwardsCalculationContextTreeNodeInfoTest.cs =================================================================== diff -u -raeb6e1a439617630e7613b9ed5af152c345fa2c6 -rbf926725b3c2994fb1f2d7c8b4294ab66691b3d2 --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Plugin.Test/TreeNodeInfos/GrassCoverErosionInwardsCalculationContextTreeNodeInfoTest.cs (.../GrassCoverErosionInwardsCalculationContextTreeNodeInfoTest.cs) (revision aeb6e1a439617630e7613b9ed5af152c345fa2c6) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Plugin.Test/TreeNodeInfos/GrassCoverErosionInwardsCalculationContextTreeNodeInfoTest.cs (.../GrassCoverErosionInwardsCalculationContextTreeNodeInfoTest.cs) (revision bf926725b3c2994fb1f2d7c8b4294ab66691b3d2) @@ -57,7 +57,6 @@ public class GrassCoverErosionInwardsCalculationContextTreeNodeInfoTest : NUnitFormTest { private const int contextMenuUpdateDikeProfileIndex = 3; - private const int contextMenuValidateIndex = 5; private const int contextMenuCalculateIndex = 6; private const int contextMenuClearIndex = 8; Index: Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Plugin/HeightStructuresPlugin.cs =================================================================== diff -u -ra7f920661887773056c051edc7872d27f724c840 -rbf926725b3c2994fb1f2d7c8b4294ab66691b3d2 --- Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Plugin/HeightStructuresPlugin.cs (.../HeightStructuresPlugin.cs) (revision a7f920661887773056c051edc7872d27f724c840) +++ Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Plugin/HeightStructuresPlugin.cs (.../HeightStructuresPlugin.cs) (revision bf926725b3c2994fb1f2d7c8b4294ab66691b3d2) @@ -706,6 +706,7 @@ return builder.AddExportItem() .AddSeparator() .AddRenameItem() + .AddCustomItem(CreateUpdateStructureItem(context)) .AddSeparator() .AddValidateCalculationItem( context, @@ -758,6 +759,30 @@ } } + private StrictContextMenuItem CreateUpdateStructureItem(HeightStructuresCalculationContext context) + { + HeightStructuresInput inputParameters = context.WrappedData.InputParameters; + bool hasStructure = inputParameters.Structure != null; + + string toolTipMessage = hasStructure + ? RingtoetsCommonFormsResources.StructuresPlugin_CreateUpdateStructureItem_Update_calculation_with_Structure_data_ToolTip + : RingtoetsCommonFormsResources.StructuresPlugin_CreateUpdateStructureItem_Update_calculation_no_Structure_ToolTip; + + return new StrictContextMenuItem( + RingtoetsCommonFormsResources.StructuresPlugin_CreateUpdateStructureItem_Update_Structure_data, + toolTipMessage, + RingtoetsCommonFormsResources.UpdateItemIcon, + (o, args) => UpdateStructureDependentDataOfCalculation(context.WrappedData)) + { + Enabled = hasStructure + }; + } + + private void UpdateStructureDependentDataOfCalculation(StructuresCalculation calculation) + { + // TODO: Implement + } + #endregion #endregion Index: Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Plugin.Test/TreeNodeInfos/HeightStructuresCalculationContextTreeNodeInfoTest.cs =================================================================== diff -u -r4bf59bb3506b840b284efe0c0f4431b7876e0e5b -rbf926725b3c2994fb1f2d7c8b4294ab66691b3d2 --- Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Plugin.Test/TreeNodeInfos/HeightStructuresCalculationContextTreeNodeInfoTest.cs (.../HeightStructuresCalculationContextTreeNodeInfoTest.cs) (revision 4bf59bb3506b840b284efe0c0f4431b7876e0e5b) +++ Ringtoets/HeightStructures/test/Ringtoets.HeightStructures.Plugin.Test/TreeNodeInfos/HeightStructuresCalculationContextTreeNodeInfoTest.cs (.../HeightStructuresCalculationContextTreeNodeInfoTest.cs) (revision bf926725b3c2994fb1f2d7c8b4294ab66691b3d2) @@ -55,9 +55,10 @@ [TestFixture] public class HeightStructuresCalculationContextTreeNodeInfoTest : NUnitFormTest { - private const int contextMenuValidateIndex = 4; - private const int contextMenuCalculateIndex = 5; - private const int contextMenuClearIndex = 7; + private const int contextMenuUpdateStructureIndex = 3; + private const int contextMenuValidateIndex = 5; + private const int contextMenuCalculateIndex = 6; + private const int contextMenuClearIndex = 8; private readonly string testDataPath = TestHelper.GetTestDataPath(TestDataPath.Ringtoets.Common.IO, "HydraulicBoundaryDatabaseImporter"); private MockRepository mocks; @@ -185,6 +186,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); @@ -244,7 +246,7 @@ using (ContextMenuStrip menu = info.ContextMenuStrip(nodeData, assessmentSection, treeViewControl)) { // Assert - Assert.AreEqual(14, menu.Items.Count); + Assert.AreEqual(15, menu.Items.Count); TestHelper.AssertContextMenuStripContainsItem(menu, contextMenuValidateIndex, "&Valideren", @@ -266,6 +268,77 @@ } [Test] + public void ContextMenu_CalculationWithoutStructure_ContextMenuItemUpdateStructureDisabled() + { + // Setup + var assessmentSection = mocks.Stub(); + + var calculation = new StructuresCalculation(); + var failureMechanism = new TestHeightStructuresFailureMechanism(); + var nodeData = new HeightStructuresCalculationContext(calculation, failureMechanism, assessmentSection); + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + using (var treeViewControl = new TreeViewControl()) + { + var gui = mocks.Stub(); + gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(menuBuilder); + mocks.ReplayAll(); + + plugin.Gui = gui; + + // Call + using (ContextMenuStrip menu = info.ContextMenuStrip(nodeData, assessmentSection, treeViewControl)) + { + // Assert + TestHelper.AssertContextMenuStripContainsItem(menu, + contextMenuUpdateStructureIndex, + "&Bijwerken kunstwerk", + "Er moet een kunstwerk geselecteerd zijn.", + RingtoetsCommonFormsResources.UpdateItemIcon, + false); + } + } + } + + [Test] + public void ContextMenu_CalculationWithStructure_ContextMenuItemUpdateStructureEnabled() + { + // Setup + var assessmentSection = mocks.Stub(); + + var calculation = new StructuresCalculation + { + InputParameters = + { + Structure = new TestHeightStructure() + } + }; + var failureMechanism = new TestHeightStructuresFailureMechanism(); + var nodeData = new HeightStructuresCalculationContext(calculation, failureMechanism, assessmentSection); + var menuBuilder = new CustomItemsOnlyContextMenuBuilder(); + + using (var treeViewControl = new TreeViewControl()) + { + var gui = mocks.Stub(); + gui.Stub(cmp => cmp.Get(nodeData, treeViewControl)).Return(menuBuilder); + mocks.ReplayAll(); + + plugin.Gui = gui; + + // Call + using (ContextMenuStrip menu = info.ContextMenuStrip(nodeData, assessmentSection, treeViewControl)) + { + // Assert + TestHelper.AssertContextMenuStripContainsItem(menu, + contextMenuUpdateStructureIndex, + "&Bijwerken kunstwerk", + "Berekening bijwerken met het kunstwerk.", + RingtoetsCommonFormsResources.UpdateItemIcon); + } + } + } + + [Test] public void ContextMenuStrip_NoHydraulicBoundaryDatabase_ContextMenuItemPerformCalculationDisabledAndTooltipSet() { // Setup