Index: Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Plugin/HeightStructuresPlugin.cs =================================================================== diff -u -r98929f84fbf311bd19d8e61cc8499cdb40b22ea0 -r5d503cf8885ced4799e5ad44242038d99e04b162 --- Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Plugin/HeightStructuresPlugin.cs (.../HeightStructuresPlugin.cs) (revision 98929f84fbf311bd19d8e61cc8499cdb40b22ea0) +++ Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Plugin/HeightStructuresPlugin.cs (.../HeightStructuresPlugin.cs) (revision 5d503cf8885ced4799e5ad44242038d99e04b162) @@ -45,6 +45,7 @@ using Ringtoets.HeightStructures.IO; using Ringtoets.HeightStructures.Plugin.Properties; using Ringtoets.HeightStructures.Service; +using Ringtoets.HeightStructures.Utils; using Ringtoets.HydraRing.IO; using RingtoetsCommonFormsResources = Ringtoets.Common.Forms.Properties.Resources; using RingtoetsCommonDataResources = Ringtoets.Common.Data.Properties.Resources; @@ -84,6 +85,18 @@ public override IEnumerable GetViewInfos() { yield return new ViewInfo< + HeightStructuresScenariosContext, + CalculationGroup, + HeightStructuresScenariosView> + { + GetViewData = context => context.WrappedData, + GetViewName = (view, calculationGroup) => RingtoetsCommonFormsResources.Scenarios_DisplayName, + AfterCreate = (view, context) => view.FailureMechanism = context.ParentFailureMechanism, + CloseForData = CloseScenariosViewForData, + Image = RingtoetsCommonFormsResources.ScenariosIcon + }; + + yield return new ViewInfo< FailureMechanismSectionResultContext, IEnumerable, HeightStructuresFailureMechanismResultView> @@ -208,10 +221,35 @@ return null; } - #region TreeNodeInfos + #region ViewInfo #region HeightStructuresFailureMechanismResultView ViewInfo + #region HeightStructuresScenariosView ViewInfo + + private static bool CloseScenariosViewForData(HeightStructuresScenariosView view, object removedData) + { + var failureMechanism = removedData as HeightStructuresFailureMechanism; + + var failureMechanismContext = removedData as HeightStructuresFailureMechanismContext; + if (failureMechanismContext != null) + { + failureMechanism = failureMechanismContext.WrappedData; + } + + var assessmentSection = removedData as IAssessmentSection; + if (assessmentSection != null) + { + failureMechanism = assessmentSection.GetFailureMechanisms() + .OfType() + .FirstOrDefault(); + } + + return failureMechanism != null && ReferenceEquals(view.Data, failureMechanism.CalculationsGroup); + } + + #endregion + private static bool CloseFailureMechanismResultViewForData(HeightStructuresFailureMechanismResultView view, object o) { var assessmentSection = o as IAssessmentSection; @@ -233,6 +271,10 @@ #endregion + #endregion + + #region TreeNodeInfos + #region HeightStructuresFailureMechanismContext TreeNodeInfo private object[] FailureMechanismEnabledChildNodeObjects(HeightStructuresFailureMechanismContext context) @@ -424,14 +466,13 @@ if (dialog.SelectedItems.Any()) { - GenerateHeightStructuresCalculations(dialog.SelectedItems, nodeData.WrappedData.Children); + GenerateHeightStructuresCalculations(nodeData.FailureMechanism.SectionResults, dialog.SelectedItems, nodeData.WrappedData.Children); nodeData.NotifyObservers(); } } } - private static void GenerateHeightStructuresCalculations(IEnumerable structures, - IList calculations) + private static void GenerateHeightStructuresCalculations(IEnumerable sectionResults, IEnumerable structures, IList calculations) { foreach (var structure in structures) { @@ -444,6 +485,7 @@ } }; calculations.Add(calculation); + HeightStructuresHelper.Update(sectionResults, calculation); } } @@ -484,7 +526,7 @@ var childNodes = new List { new CommentContext(context.WrappedData), - new HeightStructuresInputContext(context.WrappedData.InputParameters, + new HeightStructuresInputContext(context.WrappedData, context.FailureMechanism, context.AssessmentSection) }; @@ -543,6 +585,7 @@ if (calculationGroupContext != null) { calculationGroupContext.WrappedData.Children.Remove(context.WrappedData); + HeightStructuresHelper.Delete(context.FailureMechanism.SectionResults, context.WrappedData, context.FailureMechanism.Calculations.OfType()); calculationGroupContext.NotifyObservers(); } }