Index: Riskeer/Integration/src/Riskeer.Integration.Plugin/RiskeerPlugin.cs =================================================================== diff -u -r619c8da05c7b74130ee6a652dfec3918d91b44f9 -r398097d64d8506280fdf1a198300ccf8fad3773e --- Riskeer/Integration/src/Riskeer.Integration.Plugin/RiskeerPlugin.cs (.../RiskeerPlugin.cs) (revision 619c8da05c7b74130ee6a652dfec3918d91b44f9) +++ Riskeer/Integration/src/Riskeer.Integration.Plugin/RiskeerPlugin.cs (.../RiskeerPlugin.cs) (revision 398097d64d8506280fdf1a198300ccf8fad3773e) @@ -29,13 +29,15 @@ using Core.Common.Base; using Core.Common.Base.Data; using Core.Common.Controls.TreeView; +using Core.Common.Controls.Views; using Core.Common.Util; using Core.Common.Util.Extensions; using Core.Components.Gis.Data; using Core.Gui; using Core.Gui.ContextMenu; using Core.Gui.Forms.Main; using Core.Gui.Forms.ProgressDialog; +using Core.Gui.Forms.ViewHost; using Core.Gui.Helpers; using Core.Gui.Plugin; using log4net; @@ -123,6 +125,8 @@ private static readonly NoProbabilityValueDoubleConverter noProbabilityValueDoubleConverter = new NoProbabilityValueDoubleConverter(); + private static readonly IDictionary observersForViewTitles = new Dictionary(); + private IHydraulicBoundaryLocationCalculationGuiService hydraulicBoundaryLocationCalculationGuiService; private AssessmentSectionMerger assessmentSectionMerger; @@ -131,9 +135,21 @@ get => base.Gui; set { - RemoveOnOpenProjectListener(base.Gui); + if (base.Gui != null) + { + base.Gui.ProjectOpened -= VerifyHydraulicBoundaryDatabasePath; + base.Gui.ViewHost.ViewOpened -= OnViewOpened; + base.Gui.ViewHost.ViewClosed -= OnViewClosed; + } + base.Gui = value; - AddOnOpenProjectListener(value); + + if (value != null) + { + value.ProjectOpened += VerifyHydraulicBoundaryDatabasePath; + base.Gui.ViewHost.ViewOpened += OnViewOpened; + base.Gui.ViewHost.ViewClosed += OnViewClosed; + } } } @@ -345,8 +361,7 @@ yield return new ViewInfo, DesignWaterLevelCalculationsView> { - GetViewName = (view, context) => $"{RiskeerCommonFormsResources.WaterLevelCalculationsForUserDefinedTargetProbabilities_DisplayName} - " + - $"{noProbabilityValueDoubleConverter.ConvertToString(context.WrappedData.TargetProbability)}", + GetViewName = (view, context) => GetWaterLevelCalculationsForUserDefinedTargetProbabilitiesViewName(context.WrappedData), GetViewData = context => context.WrappedData.HydraulicBoundaryLocationCalculations, Image = RiskeerCommonFormsResources.GenericInputOutputIcon, CloseForData = CloseForWaterLevelCalculationsForUserDefinedTargetProbabilityContextData, @@ -359,8 +374,7 @@ yield return new ViewInfo, WaveHeightCalculationsView> { - GetViewName = (view, context) => $"{RiskeerCommonFormsResources.WaveHeightCalculationsForUserDefinedTargetProbabilities_DisplayName} - " + - $"{noProbabilityValueDoubleConverter.ConvertToString(context.WrappedData.TargetProbability)}", + GetViewName = (view, context) => GetWaveHeightCalculationsForUserDefinedTargetProbabilitiesViewName(context.WrappedData), GetViewData = context => context.WrappedData.HydraulicBoundaryLocationCalculations, Image = RiskeerCommonFormsResources.GenericInputOutputIcon, CloseForData = CloseForWaveHeightCalculationsForUserDefinedTargetProbabilityContextData, @@ -1182,22 +1196,6 @@ }; } - private static void RemoveOnOpenProjectListener(IProjectOwner projectOwner) - { - if (projectOwner != null) - { - projectOwner.ProjectOpened -= VerifyHydraulicBoundaryDatabasePath; - } - } - - private static void AddOnOpenProjectListener(IProjectOwner projectOwner) - { - if (projectOwner != null) - { - projectOwner.ProjectOpened += VerifyHydraulicBoundaryDatabasePath; - } - } - private static void VerifyHydraulicBoundaryDatabasePath(IProject project) { var riskeerProject = project as RiskeerProject; @@ -1224,6 +1222,63 @@ } } + private void OnViewOpened(object sender, ViewChangeEventArgs e) + { + Func getTitleFunc = null; + HydraulicBoundaryLocationCalculationsForTargetProbability calculationsForUserSpecifiedTargetProbabilities = null; + + if (e.View is DesignWaterLevelCalculationsView designWaterLevelCalculationsView) + { + calculationsForUserSpecifiedTargetProbabilities = + designWaterLevelCalculationsView.AssessmentSection.WaterLevelCalculationsForUserDefinedTargetProbabilities + .FirstOrDefault(calculations => ReferenceEquals(calculations.HydraulicBoundaryLocationCalculations, designWaterLevelCalculationsView.Data)); + + getTitleFunc = () => GetWaterLevelCalculationsForUserDefinedTargetProbabilitiesViewName(calculationsForUserSpecifiedTargetProbabilities); + } + + if (e.View is WaveHeightCalculationsView waveHeightCalculationsView) + { + calculationsForUserSpecifiedTargetProbabilities = + waveHeightCalculationsView.AssessmentSection.WaveHeightCalculationsForUserDefinedTargetProbabilities + .FirstOrDefault(calculations => ReferenceEquals(calculations.HydraulicBoundaryLocationCalculations, waveHeightCalculationsView.Data)); + + getTitleFunc = () => GetWaveHeightCalculationsForUserDefinedTargetProbabilitiesViewName(calculationsForUserSpecifiedTargetProbabilities); + } + + if (calculationsForUserSpecifiedTargetProbabilities == null) + { + return; + } + + observersForViewTitles[e.View] = new Observer(() => Gui.ViewHost.SetTitle(e.View, getTitleFunc())) + { + Observable = calculationsForUserSpecifiedTargetProbabilities + }; + } + + private static void OnViewClosed(object sender, ViewChangeEventArgs e) + { + if (observersForViewTitles.TryGetValue(e.View, out Observer observerForViewTitle)) + { + observerForViewTitle.Dispose(); + observersForViewTitles.Remove(e.View); + } + } + + private static string GetWaterLevelCalculationsForUserDefinedTargetProbabilitiesViewName( + HydraulicBoundaryLocationCalculationsForTargetProbability calculationsForUserSpecifiedTargetProbabilities) + { + return $"{RiskeerCommonFormsResources.WaterLevelCalculationsForUserDefinedTargetProbabilities_DisplayName} - " + + $"{noProbabilityValueDoubleConverter.ConvertToString(calculationsForUserSpecifiedTargetProbabilities.TargetProbability)}"; + } + + private static string GetWaveHeightCalculationsForUserDefinedTargetProbabilitiesViewName( + HydraulicBoundaryLocationCalculationsForTargetProbability calculationsForUserSpecifiedTargetProbabilities) + { + return $"{RiskeerCommonFormsResources.WaveHeightCalculationsForUserDefinedTargetProbabilities_DisplayName} - " + + $"{noProbabilityValueDoubleConverter.ConvertToString(calculationsForUserSpecifiedTargetProbabilities.TargetProbability)}"; + } + private static bool HasGeometry(ReferenceLine referenceLine) { return referenceLine.Points.Any();