Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsPlugin.cs =================================================================== diff -u -rc501312550814e7572bacbd72dea1ac6e5138689 -rdc6e0a7d9a3e5807540c85d37386d35addc617dc --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsPlugin.cs (.../GrassCoverErosionInwardsPlugin.cs) (revision c501312550814e7572bacbd72dea1ac6e5138689) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Plugin/GrassCoverErosionInwardsPlugin.cs (.../GrassCoverErosionInwardsPlugin.cs) (revision dc6e0a7d9a3e5807540c85d37386d35addc617dc) @@ -26,6 +26,7 @@ using System.Windows.Forms; using Core.Common.Base; using Core.Common.Controls.TreeView; +using Core.Common.Controls.Views; using Core.Common.Gui; using Core.Common.Gui.ContextMenu; using Core.Common.Gui.Forms.ProgressDialog; @@ -41,6 +42,7 @@ using Ringtoets.Common.Forms.ImportInfos; using Ringtoets.Common.Forms.PresentationObjects; using Ringtoets.Common.Forms.TreeNodeInfos; +using Ringtoets.Common.Forms.Views; using Ringtoets.Common.IO.FileImporters; using Ringtoets.Common.IO.FileImporters.MessageProviders; using Ringtoets.Common.Service; @@ -204,6 +206,33 @@ GetViewData = context => context.Calculation, CloseForData = CloseInputViewForData }; + + yield return new ViewInfo + { + Image = RingtoetsCommonFormsResources.GeneralOutputIcon, + GetViewName = (view, context) => Resources.OvertoppingOutput_DisplayName, + GetViewData = context => context.WrappedData, + CloseForData = CloseCalculationViewForData, + CreateInstance = context => new GeneralResultFaultTreeIllustrationPointView(() => context.WrappedData.Output?.OvertoppingOutput.GeneralResult) + }; + + yield return new ViewInfo + { + Image = RingtoetsCommonFormsResources.GeneralOutputIcon, + GetViewName = (view, context) => GrassCoverErosionInwardsFormsResources.DikeHeight_DisplayName, + GetViewData = context => context.WrappedData, + CloseForData = CloseCalculationViewForData, + CreateInstance = context => new GeneralResultFaultTreeIllustrationPointView(() => context.WrappedData.Output?.DikeHeightOutput?.GeneralResult) + }; + + yield return new ViewInfo + { + Image = RingtoetsCommonFormsResources.GeneralOutputIcon, + GetViewName = (view, context) => GrassCoverErosionInwardsFormsResources.OvertoppingRate_DisplayName, + GetViewData = context => context.WrappedData, + CloseForData = CloseCalculationViewForData, + CreateInstance = context => new GeneralResultFaultTreeIllustrationPointView(() => context.WrappedData.Output?.OvertoppingRateOutput?.GeneralResult) + }; } public override IEnumerable GetTreeNodeInfos() @@ -291,6 +320,9 @@ { Text = output => Resources.OvertoppingOutput_DisplayName, Image = output => RingtoetsCommonFormsResources.GeneralOutputIcon, + ForeColor = context => context.WrappedData.Output?.OvertoppingOutput != null + ? Color.FromKnownColor(KnownColor.ControlText) + : Color.FromKnownColor(KnownColor.GrayText), ContextMenuStrip = (nodeData, parentData, treeViewControl) => Gui.Get(nodeData, treeViewControl) .AddOpenItem() .AddSeparator() @@ -302,7 +334,7 @@ { Text = output => GrassCoverErosionInwardsFormsResources.DikeHeight_DisplayName, Image = output => RingtoetsCommonFormsResources.GeneralOutputIcon, - ForeColor = context => context.WrappedData.Output.DikeHeightOutput != null + ForeColor = context => context.WrappedData.Output?.DikeHeightOutput != null ? Color.FromKnownColor(KnownColor.ControlText) : Color.FromKnownColor(KnownColor.GrayText), ContextMenuStrip = (nodeData, parentData, treeViewControl) => Gui.Get(nodeData, treeViewControl) @@ -316,7 +348,7 @@ { Text = output => GrassCoverErosionInwardsFormsResources.OvertoppingRate_DisplayName, Image = output => RingtoetsCommonFormsResources.GeneralOutputIcon, - ForeColor = context => context.WrappedData.Output.OvertoppingRateOutput != null + ForeColor = context => context.WrappedData.Output?.OvertoppingRateOutput != null ? Color.FromKnownColor(KnownColor.ControlText) : Color.FromKnownColor(KnownColor.GrayText), ContextMenuStrip = (nodeData, parentData, treeViewControl) => Gui.Get(nodeData, treeViewControl) @@ -460,6 +492,57 @@ #endregion + private static bool CloseCalculationViewForData(IView view, object o) where T : ICalculation + { + var context = o as ICalculationContext; + if (context != null) + { + return ReferenceEquals(view.Data, context.WrappedData); + } + + IEnumerable calculations; + + var calculationGroupContext = o as ICalculationContext; + if (calculationGroupContext != null) + { + calculations = calculationGroupContext.WrappedData + .GetCalculations() + .OfType(); + } + else + { + calculations = GetCalculationsFromFailureMechanisms(o); + } + + return calculations.Any(c => ReferenceEquals(view.Data, c)); + } + + private static IEnumerable GetCalculationsFromFailureMechanisms(object o) + { + var failureMechanism = o as IFailureMechanism; + + var context = o as IFailureMechanismContext; + if (context != null) + { + failureMechanism = context.WrappedData; + } + + if (failureMechanism != null) + { + return failureMechanism.Calculations.OfType(); + } + + var assessmentSection = o as IAssessmentSection; + if (assessmentSection != null) + { + return assessmentSection.GetFailureMechanisms() + .SelectMany(fm => fm.Calculations) + .OfType(); + } + + return Enumerable.Empty(); + } + private static void ValidateAll(IEnumerable grassCoverErosionInwardsCalculations, IAssessmentSection assessmentSection) { foreach (GrassCoverErosionInwardsCalculation calculation in grassCoverErosionInwardsCalculations) Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Plugin.Test/GrassCoverErosionInwardsPluginTest.cs =================================================================== diff -u -ra2ee5918454ce223de0692add24a3cba72a90498 -rdc6e0a7d9a3e5807540c85d37386d35addc617dc --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Plugin.Test/GrassCoverErosionInwardsPluginTest.cs (.../GrassCoverErosionInwardsPluginTest.cs) (revision a2ee5918454ce223de0692add24a3cba72a90498) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Plugin.Test/GrassCoverErosionInwardsPluginTest.cs (.../GrassCoverErosionInwardsPluginTest.cs) (revision dc6e0a7d9a3e5807540c85d37386d35addc617dc) @@ -26,6 +26,7 @@ using NUnit.Framework; using Ringtoets.Common.Data.DikeProfiles; using Ringtoets.Common.Forms.PresentationObjects; +using Ringtoets.Common.Forms.Views; using Ringtoets.GrassCoverErosionInwards.Data; using Ringtoets.GrassCoverErosionInwards.Forms.PresentationObjects; using Ringtoets.GrassCoverErosionInwards.Forms.PropertyClasses; @@ -136,12 +137,15 @@ ViewInfo[] viewInfos = plugin.GetViewInfos().ToArray(); // Assert - Assert.AreEqual(4, viewInfos.Length); + Assert.AreEqual(7, viewInfos.Length); Assert.IsTrue(viewInfos.Any(vi => vi.ViewType == typeof(GrassCoverErosionInwardsFailureMechanismView))); Assert.IsTrue(viewInfos.Any(vi => vi.ViewType == typeof(GrassCoverErosionInwardsFailureMechanismResultView))); Assert.IsTrue(viewInfos.Any(vi => vi.ViewType == typeof(GrassCoverErosionInwardsInputView))); Assert.IsTrue(viewInfos.Any(vi => vi.ViewType == typeof(GrassCoverErosionInwardsScenariosView))); + Assert.IsTrue(viewInfos.Any(vi => vi.DataType == typeof(OvertoppingOutputContext) && vi.ViewType == typeof(GeneralResultFaultTreeIllustrationPointView))); + Assert.IsTrue(viewInfos.Any(vi => vi.DataType == typeof(DikeHeightOutputContext) && vi.ViewType == typeof(GeneralResultFaultTreeIllustrationPointView))); + Assert.IsTrue(viewInfos.Any(vi => vi.DataType == typeof(OvertoppingRateOutputContext) && vi.ViewType == typeof(GeneralResultFaultTreeIllustrationPointView))); } } Index: Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Plugin.Test/TreeNodeInfos/OvertoppingOutputContextTreeNodeInfoTest.cs =================================================================== diff -u -rf6e0d831deebbd4dea67b34697b64a68d620974d -rdc6e0a7d9a3e5807540c85d37386d35addc617dc --- Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Plugin.Test/TreeNodeInfos/OvertoppingOutputContextTreeNodeInfoTest.cs (.../OvertoppingOutputContextTreeNodeInfoTest.cs) (revision f6e0d831deebbd4dea67b34697b64a68d620974d) +++ Ringtoets/GrassCoverErosionInwards/test/Ringtoets.GrassCoverErosionInwards.Plugin.Test/TreeNodeInfos/OvertoppingOutputContextTreeNodeInfoTest.cs (.../OvertoppingOutputContextTreeNodeInfoTest.cs) (revision dc6e0a7d9a3e5807540c85d37386d35addc617dc) @@ -27,6 +27,8 @@ using Core.Common.TestUtil; using NUnit.Framework; using Rhino.Mocks; +using Ringtoets.GrassCoverErosionInwards.Data; +using Ringtoets.GrassCoverErosionInwards.Data.TestUtil; using Ringtoets.GrassCoverErosionInwards.Forms.PresentationObjects; using RingtoetsCommonFormsResources = Ringtoets.Common.Forms.Properties.Resources; @@ -62,7 +64,7 @@ // Assert Assert.IsNotNull(info.Text); - Assert.IsNull(info.ForeColor); + Assert.IsNotNull(info.ForeColor); Assert.IsNotNull(info.Image); Assert.IsNotNull(info.ContextMenuStrip); Assert.IsNull(info.EnsureVisibleOnCreate); @@ -95,6 +97,38 @@ } [Test] + public void ForeColor_HasNoOutput_ReturnGrayText() + { + // Setup + var calculation = new GrassCoverErosionInwardsCalculation(); + + // Call + Color color = info.ForeColor(new OvertoppingOutputContext(calculation)); + + // Assert + Assert.AreEqual(Color.FromKnownColor(KnownColor.GrayText), color); + } + + [Test] + public void ForeColor_HasOutput_ReturnControlText() + { + // Setup + var calculation = new GrassCoverErosionInwardsCalculation + { + Output = new GrassCoverErosionInwardsOutput( + new TestOvertoppingOutput(0.5), + null, + null) + }; + + // Call + Color color = info.ForeColor(new OvertoppingOutputContext(calculation)); + + // Assert + Assert.AreEqual(Color.FromKnownColor(KnownColor.ControlText), color); + } + + [Test] public void Image_Always_ReturnsGeneralOutputIcon() { // Setup