Index: Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingPlugin.cs =================================================================== diff -u -r5cac0be5a13b25f4e34680f9c3da63ec537a4ef3 -r03fae882dff9db344c9380368a85ecdf3ab46f2a --- Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingPlugin.cs (.../PipingPlugin.cs) (revision 5cac0be5a13b25f4e34680f9c3da63ec537a4ef3) +++ Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingPlugin.cs (.../PipingPlugin.cs) (revision 03fae882dff9db344c9380368a85ecdf3ab46f2a) @@ -47,6 +47,7 @@ using Ringtoets.Piping.Forms.Views; using Ringtoets.Piping.IO.Exporters; using Ringtoets.Piping.IO.Importers; +using Ringtoets.Piping.Plugin.ChangeHandlers; using Ringtoets.Piping.Plugin.FileImporter; using Ringtoets.Piping.Plugin.Properties; using Ringtoets.Piping.Primitives; @@ -1029,24 +1030,57 @@ parentGroupContext.NotifyObservers(); } - private static StrictContextMenuItem CreateUpdateEntryAndExitPointItem(PipingCalculationGroupContext nodeData) + private StrictContextMenuItem CreateUpdateEntryAndExitPointItem(PipingCalculationGroupContext nodeData) { + IEnumerable calculations = nodeData.WrappedData.GetCalculations().OfType(); + + var isItemEnabled = true; + string toolTipText = Resources.PipingPlugin_CreateUpdateEntryAndExitPointItem_Update_all_calculations_with_characteristic_points_ToolTip; + if (!calculations.Any()) + { + isItemEnabled = false; + toolTipText = Resources.PipingPlugin_CreateUpdateEntryAndExitPointItem_No_calculations_to_update_ToolTip; + } + else + { + if (calculations.All(calc => calc.InputParameters.SurfaceLine == null)) + { + isItemEnabled = false; + toolTipText = Resources.PipingPlugin_CreateUpdateEntryAndExitPointItem_No_calculations_with_surfaceline_Tooltip; + } + } + return new StrictContextMenuItem( Resources.PipingPlugin_CreateUpdateEntryAndExitPointItem_Update_all_entry_and_exit_points, - Resources.PipingPlugin_CreateUpdateEntryAndExitPointItem_Update_all_calculations_with_characteristic_points_ToolTip, + toolTipText, RingtoetsCommonFormsResources.UpdateItemIcon, - (sender, args) => UpdateAllEntryAndExitPointsOfAllCalculations(nodeData)); + (sender, args) => UpdateAllEntryAndExitPointsOfAllCalculations(nodeData)) + { + Enabled = isItemEnabled + }; } - private static void UpdateAllEntryAndExitPointsOfAllCalculations(PipingCalculationGroupContext nodeData) + private void UpdateAllEntryAndExitPointsOfAllCalculations(PipingCalculationGroupContext nodeData) { - IEnumerable calculations = nodeData.WrappedData.GetCalculations().OfType(); - foreach (PipingCalculationScenario calculation in calculations) + PipingCalculationScenario[] calculations = nodeData.WrappedData.GetCalculations().OfType().ToArray(); + + if (VerifyEntryAndExitPointUpdates(calculations)) { - UpdateSurfaceLineDependentData(calculation); + foreach (PipingCalculationScenario calculation in calculations) + { + UpdateSurfaceLineDependentData(calculation); + } } } + private bool VerifyEntryAndExitPointUpdates(IEnumerable calculations) + { + var changeHandler = new UpdateEntryAndExitPointsCalculationGroupChangeHandler(calculations, + new DialogBasedInquiryHelper(Gui.MainWindow)); + + return !changeHandler.RequireConfirmation() || changeHandler.InquireConfirmation(); + } + #endregion #region Ringtoets piping surface line importer