Index: Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Plugin/StabilityPointStructuresPlugin.cs =================================================================== diff -u -rb5accd775c390fa85f815ef13c3c3e54a6d10ada -r01aa3a0cf07a91607a5d4b5e37f2e98c1fc00430 --- Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Plugin/StabilityPointStructuresPlugin.cs (.../StabilityPointStructuresPlugin.cs) (revision b5accd775c390fa85f815ef13c3c3e54a6d10ada) +++ Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Plugin/StabilityPointStructuresPlugin.cs (.../StabilityPointStructuresPlugin.cs) (revision 01aa3a0cf07a91607a5d4b5e37f2e98c1fc00430) @@ -118,6 +118,8 @@ ForeColor = context => context.WrappedData.Any() ? Color.FromKnownColor(KnownColor.ControlText) : Color.FromKnownColor(KnownColor.GrayText), ChildNodeObjects = context => context.WrappedData.Cast().ToArray(), ContextMenuStrip = (nodeData, parentData, treeViewControl) => Gui.Get(nodeData, treeViewControl) + .AddDeleteChildrenItem() + .AddSeparator() .AddImportItem() .AddSeparator() .AddExpandAllItem() @@ -130,8 +132,12 @@ Text = structure => structure.Name, Image = structure => RingtoetsCommonFormsResources.StructuresIcon, ContextMenuStrip = (structure, parentData, treeViewControl) => Gui.Get(structure, treeViewControl) + .AddDeleteItem() + .AddSeparator() .AddPropertiesItem() - .Build() + .Build(), + CanRemove = CanRemoveStabilityPointStructure, + OnNodeRemoved = OnStabilityPointStructureRemoved }; yield return new TreeNodeInfo @@ -280,6 +286,41 @@ #region TreeNodeInfo + #region StabilityPointStructure TreeNodeInfo + + private bool CanRemoveStabilityPointStructure(StabilityPointStructure nodeData, object parentData) + { + return parentData is StabilityPointStructuresContext; + } + + private void OnStabilityPointStructureRemoved(StabilityPointStructure nodeData, object parentData) + { + var parentContext = (StabilityPointStructuresContext) parentData; + var changedObservables = new List(); + StructuresCalculation[] heightStructureCalculations = parentContext.FailureMechanism.Calculations + .Cast>() + .ToArray(); + StructuresCalculation[] calculationWithRemovedStabilityPointStructure = heightStructureCalculations + .Where(c => ReferenceEquals(c.InputParameters.Structure, nodeData)) + .ToArray(); + foreach (StructuresCalculation calculation in calculationWithRemovedStabilityPointStructure) + { + calculation.InputParameters.Structure = null; + StructuresHelper.Delete(parentContext.FailureMechanism.SectionResults, calculation, heightStructureCalculations); + changedObservables.Add(calculation.InputParameters); + } + + parentContext.WrappedData.Remove(nodeData); + changedObservables.Add(parentContext.WrappedData); + + foreach (IObservable observable in changedObservables) + { + observable.NotifyObservers(); + } + } + + #endregion + #region StabilityPointStructuresFailureMechanismContext TreeNodeInfo private static object[] FailureMechanismEnabledChildNodeObjects(StabilityPointStructuresFailureMechanismContext stabilityPointStructuresFailureMechanismContext) @@ -313,7 +354,7 @@ { new FailureMechanismSectionsContext(failureMechanism, assessmentSection), new ForeshoreProfilesContext(failureMechanism.ForeshoreProfiles, failureMechanism, assessmentSection), - new StabilityPointStructuresContext(failureMechanism.StabilityPointStructures, assessmentSection), + new StabilityPointStructuresContext(failureMechanism.StabilityPointStructures, failureMechanism, assessmentSection), new CommentContext(failureMechanism) }; }