Index: Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Plugin/HeightStructuresGuiPlugin.cs =================================================================== diff -u -r3236dac70585752246e26cc0ce0d74df1ee74295 -r55e027f1f3573d97603297411504f2714e9819b1 --- Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Plugin/HeightStructuresGuiPlugin.cs (.../HeightStructuresGuiPlugin.cs) (revision 3236dac70585752246e26cc0ce0d74df1ee74295) +++ Ringtoets/HeightStructures/src/Ringtoets.HeightStructures.Plugin/HeightStructuresGuiPlugin.cs (.../HeightStructuresGuiPlugin.cs) (revision 55e027f1f3573d97603297411504f2714e9819b1) @@ -26,6 +26,7 @@ using Core.Common.Gui.Plugin; using Ringtoets.Common.Data; using Ringtoets.Common.Data.AssessmentSection; +using Ringtoets.Common.Data.Calculation; using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Common.Forms.PresentationObjects; using Ringtoets.Common.Forms.TreeNodeInfos; @@ -49,9 +50,9 @@ FailureMechanismDisabledContextMenuStrip); yield return RingtoetsTreeNodeInfoFactory.CreateCalculationGroupContextTreeNodeInfo( - context => new object[0], - (context, o, treeViewControl) => new ContextMenuStrip(), - (context, parentNodeData) => { }); + CalculationGroupContextChildNodeObjects, + CalculationGroupContextContextMenuStrip, + CalculationGroupContextOnNodeRemoved); } #region HeightStructuresFailureMechanismContext TreeNodeInfo @@ -130,5 +131,83 @@ } #endregion + + #region HeightStructuresCalculationGroupContext TreeNodeInfo + + private static object[] CalculationGroupContextChildNodeObjects(HeightStructuresCalculationGroupContext context) + { + var childNodeObjects = new List(); + + foreach (ICalculationBase calculationItem in context.WrappedData.Children) + { + var calculation = calculationItem as HeightStructuresCalculation; + var group = calculationItem as CalculationGroup; + + if (calculation != null) + { + childNodeObjects.Add(new HeightStructuresCalculationContext(calculation, + context.FailureMechanism, + context.AssessmentSection)); + } + else if (group != null) + { + childNodeObjects.Add(new HeightStructuresCalculationGroupContext(group, + context.FailureMechanism, + context.AssessmentSection)); + } + else + { + childNodeObjects.Add(calculationItem); + } + } + + return childNodeObjects.ToArray(); + } + + private ContextMenuStrip CalculationGroupContextContextMenuStrip(HeightStructuresCalculationGroupContext context, object parentData, TreeViewControl treeViewControl) + { + var group = context.WrappedData; + var builder = new RingtoetsContextMenuBuilder(Gui.Get(context, treeViewControl)); + var isNestedGroup = parentData is HeightStructuresCalculationGroupContext; + + if (!isNestedGroup) + { + builder.AddOpenItem() + .AddSeparator(); + } + + builder.AddCreateCalculationGroupItem(group) + .AddCreateCalculationItem(context, groupContext => { }) + .AddSeparator() + .AddPerformAllCalculationsInGroupItem(group, context, (calculationGroup, groupContext) => { }, groupContext => "") + .AddClearAllCalculationOutputInGroupItem(group) + .AddSeparator(); + + if (isNestedGroup) + { + builder.AddRenameItem() + .AddDeleteItem() + .AddSeparator(); + } + + return builder.AddImportItem() + .AddExportItem() + .AddSeparator() + .AddExpandAllItem() + .AddCollapseAllItem() + .AddSeparator() + .AddPropertiesItem() + .Build(); + } + + private static void CalculationGroupContextOnNodeRemoved(HeightStructuresCalculationGroupContext context, object parentNodeData) + { + var parentGroupContext = (HeightStructuresCalculationGroupContext) parentNodeData; + + parentGroupContext.WrappedData.Children.Remove(context.WrappedData); + parentGroupContext.NotifyObservers(); + } + + #endregion } } \ No newline at end of file