Index: Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingPlugin.cs =================================================================== diff -u -reeb0707a591ba44c8c42839d13e525605a8b5176 -r3868754a222a1f468e36751312139ece6499c20f --- Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingPlugin.cs (.../PipingPlugin.cs) (revision eeb0707a591ba44c8c42839d13e525605a8b5176) +++ Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingPlugin.cs (.../PipingPlugin.cs) (revision 3868754a222a1f468e36751312139ece6499c20f) @@ -235,6 +235,8 @@ Color.FromKnownColor(KnownColor.ControlText) : Color.FromKnownColor(KnownColor.GrayText), ChildNodeObjects = stochasticSoilModelContext => stochasticSoilModelContext.WrappedData.Cast().ToArray(), ContextMenuStrip = (nodeData, parentData, treeViewControl) => Gui.Get(nodeData, treeViewControl) + .AddDeleteChildrenItem() + .AddSeparator() .AddImportItem() .AddSeparator() .AddExpandAllItem() @@ -248,11 +250,15 @@ Image = stochasticSoilModel => PipingFormsResources.StochasticSoilModelIcon, ChildNodeObjects = stochasticSoilModel => stochasticSoilModel.StochasticSoilProfiles.Cast().ToArray(), ContextMenuStrip = (nodeData, parentData, treeViewControl) => Gui.Get(nodeData, treeViewControl) + .AddDeleteItem() + .AddSeparator() .AddExpandAllItem() .AddCollapseAllItem() .AddSeparator() .AddPropertiesItem() - .Build() + .Build(), + CanRemove = (model, o) => true, + OnNodeRemoved = OnStochasticSoilModelRemoved }; yield return new TreeNodeInfo @@ -494,6 +500,34 @@ #endregion + #region + + private void OnStochasticSoilModelRemoved(StochasticSoilModel nodeData, object parentData) + { + var context = (StochasticSoilModelsContext) parentData; + var changedObservables = new List(); + PipingFailureMechanism failureMechanism = context.FailureMechanism; + foreach (PipingCalculationScenario pipingCalculationScenario in failureMechanism.Calculations) + { + if (ReferenceEquals(pipingCalculationScenario.InputParameters.StochasticSoilModel, nodeData)) + { + pipingCalculationScenario.InputParameters.StochasticSoilModel = null; + pipingCalculationScenario.InputParameters.StochasticSoilProfile = null; + changedObservables.Add(pipingCalculationScenario.InputParameters); + } + } + + context.WrappedData.Remove(nodeData); + changedObservables.Add(context.WrappedData); + + foreach (IObservable observable in changedObservables) + { + observable.NotifyObservers(); + } + } + + #endregion + # region Piping TreeNodeInfo private ContextMenuStrip FailureMechanismEnabledContextMenuStrip(PipingFailureMechanismContext pipingFailureMechanismContext, object parentData, TreeViewControl treeViewControl)