Index: Riskeer/WaveImpactAsphaltCover/src/Riskeer.WaveImpactAsphaltCover.Plugin/WaveImpactAsphaltCoverPlugin.cs =================================================================== diff -u -r38a9b56559b8a9ffaf50c8050dfbd524f24c8755 -r280a47e5d71eee95b1c8d0a247a79cc7be2629fb --- Riskeer/WaveImpactAsphaltCover/src/Riskeer.WaveImpactAsphaltCover.Plugin/WaveImpactAsphaltCoverPlugin.cs (.../WaveImpactAsphaltCoverPlugin.cs) (revision 38a9b56559b8a9ffaf50c8050dfbd524f24c8755) +++ Riskeer/WaveImpactAsphaltCover/src/Riskeer.WaveImpactAsphaltCover.Plugin/WaveImpactAsphaltCoverPlugin.cs (.../WaveImpactAsphaltCoverPlugin.cs) (revision 280a47e5d71eee95b1c8d0a247a79cc7be2629fb) @@ -149,9 +149,11 @@ HydraulicLoadsChildNodeObjects, HydraulicLoadsContextMenuStrip); - yield return RiskeerTreeNodeInfoFactory.CreateFailureMechanismStateContextTreeNodeInfo( - FailurePathChildNodeObjects, - FailurePathContextMenuStrip); + yield return RiskeerTreeNodeInfoFactory.CreateFailureMechanismContextTreeNodeInfo( + FailurePathEnabledChildNodeObjects, + FailurePathDisabledChildNodeObjects, + FailurePathEnabledContextMenuStrip, + FailurePathDisabledContextMenuStrip); yield return new TreeNodeInfo> { @@ -351,7 +353,7 @@ #region WaveImpactAsphaltCoverFailurePathContext TreeNodeInfo - private static object[] FailurePathChildNodeObjects(WaveImpactAsphaltCoverFailurePathContext context) + private static object[] FailurePathEnabledChildNodeObjects(WaveImpactAsphaltCoverFailurePathContext context) { WaveImpactAsphaltCoverFailureMechanism failureMechanism = context.WrappedData; IAssessmentSection assessmentSection = context.Parent; @@ -365,6 +367,14 @@ }; } + private static object[] FailurePathDisabledChildNodeObjects(WaveImpactAsphaltCoverFailurePathContext context) + { + return new object[] + { + context.WrappedData.NotRelevantComments + }; + } + private static IEnumerable GetFailurePathInputs(WaveImpactAsphaltCoverFailureMechanism failureMechanism, IAssessmentSection assessmentSection) { return new object[] @@ -387,21 +397,43 @@ }; } - private ContextMenuStrip FailurePathContextMenuStrip(WaveImpactAsphaltCoverFailurePathContext context, - object parentData, - TreeViewControl treeViewControl) + private ContextMenuStrip FailurePathEnabledContextMenuStrip(WaveImpactAsphaltCoverFailurePathContext context, + object parentData, + TreeViewControl treeViewControl) { var builder = new RiskeerContextMenuBuilder(Gui.Get(context, treeViewControl)); return builder.AddOpenItem() .AddSeparator() + .AddToggleRelevancyOfFailureMechanismItem(context, RemoveAllViewsForItem) + .AddSeparator() .AddCollapseAllItem() .AddExpandAllItem() .AddSeparator() .AddPropertiesItem() .Build(); } + private ContextMenuStrip FailurePathDisabledContextMenuStrip(WaveImpactAsphaltCoverFailurePathContext context, + object parentData, + TreeViewControl treeViewControl) + { + var builder = new RiskeerContextMenuBuilder(Gui.Get(context, treeViewControl)); + + return builder.AddToggleRelevancyOfFailureMechanismItem(context, RemoveAllViewsForItem) + .AddSeparator() + .AddCollapseAllItem() + .AddExpandAllItem() + .AddSeparator() + .AddPropertiesItem() + .Build(); + } + + private void RemoveAllViewsForItem(WaveImpactAsphaltCoverFailurePathContext context) + { + Gui.ViewCommands.RemoveAllViewsForItem(context); + } + #endregion #region WaveImpactAsphaltCoverWaveConditionsCalculationGroupContext TreeNodeInfo Index: Riskeer/WaveImpactAsphaltCover/test/Riskeer.WaveImpactAsphaltCover.Plugin.Test/TreeNodeInfos/WaveImpactAsphaltCoverFailurePathContextTreeNodeInfoTest.cs =================================================================== diff -u -r886b86a66f072735567285a3489923186c236c32 -r280a47e5d71eee95b1c8d0a247a79cc7be2629fb --- Riskeer/WaveImpactAsphaltCover/test/Riskeer.WaveImpactAsphaltCover.Plugin.Test/TreeNodeInfos/WaveImpactAsphaltCoverFailurePathContextTreeNodeInfoTest.cs (.../WaveImpactAsphaltCoverFailurePathContextTreeNodeInfoTest.cs) (revision 886b86a66f072735567285a3489923186c236c32) +++ Riskeer/WaveImpactAsphaltCover/test/Riskeer.WaveImpactAsphaltCover.Plugin.Test/TreeNodeInfos/WaveImpactAsphaltCoverFailurePathContextTreeNodeInfoTest.cs (.../WaveImpactAsphaltCoverFailurePathContextTreeNodeInfoTest.cs) (revision 280a47e5d71eee95b1c8d0a247a79cc7be2629fb) @@ -35,6 +35,7 @@ using Riskeer.Common.Data.AssessmentSection; using Riskeer.Common.Data.TestUtil; using Riskeer.Common.Forms.PresentationObjects; +using Riskeer.Common.Plugin.TestUtil; using Riskeer.WaveImpactAsphaltCover.Data; using Riskeer.WaveImpactAsphaltCover.Forms.PresentationObjects; using RiskeerCommonFormsResources = Riskeer.Common.Forms.Properties.Resources; @@ -113,7 +114,7 @@ } [Test] - public void ChildNodeObjects_WithContext_ReturnChildDataNodes() + public void ChildNodeObjects_FailureMechanismIsRelevant_ReturnChildDataNodes() { // Setup var assessmentSection = new AssessmentSectionStub(); @@ -164,12 +165,38 @@ } [Test] - public void ContextMenuStrip_WithContext_CallsContextMenuBuilderMethods() + public void ChildNodeObjects_FailureMechanismIsNotRelevant_ReturnChildDataNodes() { // Setup var mocks = new MockRepository(); var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + var failureMechanism = new WaveImpactAsphaltCoverFailureMechanism + { + IsRelevant = false + }; + var context = new WaveImpactAsphaltCoverFailurePathContext(failureMechanism, assessmentSection); + + // Call + object[] children = info.ChildNodeObjects(context).ToArray(); + + // Assert + Assert.AreEqual(1, children.Length); + + var comment = (Comment) children[0]; + Assert.AreSame(failureMechanism.NotRelevantComments, comment); + + mocks.VerifyAll(); + } + + [Test] + public void ContextMenuStrip_FailureMechanismIsRelevant_CallsContextMenuBuilderMethods() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + using (var treeViewControl = new TreeViewControl()) { var failureMechanism = new WaveImpactAsphaltCoverFailureMechanism(); @@ -180,6 +207,8 @@ { menuBuilder.Expect(mb => mb.AddOpenItem()).Return(menuBuilder); menuBuilder.Expect(mb => mb.AddSeparator()).Return(menuBuilder); + menuBuilder.Expect(mb => mb.AddCustomItem(null)).IgnoreArguments().Return(menuBuilder); + menuBuilder.Expect(mb => mb.AddSeparator()).Return(menuBuilder); menuBuilder.Expect(mb => mb.AddCollapseAllItem()).Return(menuBuilder); menuBuilder.Expect(mb => mb.AddExpandAllItem()).Return(menuBuilder); menuBuilder.Expect(mb => mb.AddSeparator()).Return(menuBuilder); @@ -201,5 +230,60 @@ // Assert mocks.VerifyAll(); } + + [Test] + public void ContextMenuStrip_FailureMechanismIsNotRelevant_CallsContextMenuBuilderMethods() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + + using (var treeViewControl = new TreeViewControl()) + { + var failureMechanism = new WaveImpactAsphaltCoverFailureMechanism + { + IsRelevant = false + }; + var context = new WaveImpactAsphaltCoverFailurePathContext(failureMechanism, assessmentSection); + + var menuBuilder = mocks.StrictMock(); + using (mocks.Ordered()) + { + menuBuilder.Expect(mb => mb.AddCustomItem(null)).IgnoreArguments().Return(menuBuilder); + menuBuilder.Expect(mb => mb.AddSeparator()).Return(menuBuilder); + menuBuilder.Expect(mb => mb.AddCollapseAllItem()).Return(menuBuilder); + menuBuilder.Expect(mb => mb.AddExpandAllItem()).Return(menuBuilder); + menuBuilder.Expect(mb => mb.AddSeparator()).Return(menuBuilder); + menuBuilder.Expect(mb => mb.AddPropertiesItem()).Return(menuBuilder); + menuBuilder.Expect(mb => mb.Build()).Return(null); + } + + var gui = mocks.Stub(); + gui.Stub(cmp => cmp.Get(context, treeViewControl)).Return(menuBuilder); + gui.Stub(cmp => cmp.MainWindow).Return(mocks.Stub()); + mocks.ReplayAll(); + + plugin.Gui = gui; + + // Call + info.ContextMenuStrip(context, null, treeViewControl); + } + + // Assert + mocks.VerifyAll(); + } + + [TestFixture] + public class WaveImpactAsphaltCoverFailurePathContextIsRelevantTreeNodeInfoTest : + FailureMechanismIsRelevantTreeNodeInfoTestFixtureBase + { + public WaveImpactAsphaltCoverFailurePathContextIsRelevantTreeNodeInfoTest() : base(2, 0) {} + + protected override WaveImpactAsphaltCoverFailurePathContext CreateFailureMechanismContext(WaveImpactAsphaltCoverFailureMechanism failureMechanism, + IAssessmentSection assessmentSection) + { + return new WaveImpactAsphaltCoverFailurePathContext(failureMechanism, assessmentSection); + } + } } } \ No newline at end of file