using System; using System.Collections; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Windows.Forms; using Core.Common.Base.Data; using Core.Common.Controls.TreeView; using Core.Common.Gui; using Core.Common.Gui.ContextMenu; using Core.Common.Gui.Forms; using Core.Common.Gui.Plugin; using Ringtoets.Common.Forms.NodePresenters; using Ringtoets.Common.Forms.PresentationObjects; using Ringtoets.Common.Placeholder; using Ringtoets.Integration.Data; using Ringtoets.Integration.Data.Contribution; using Ringtoets.Integration.Data.Placeholders; using Ringtoets.Integration.Data.Properties; using Ringtoets.Integration.Forms.NodePresenters; using Ringtoets.Integration.Forms.PropertyClasses; using Ringtoets.Integration.Forms.Views; using RingtoetsDataResources = Ringtoets.Integration.Data.Properties.Resources; using RingtoetsFormsResources = Ringtoets.Integration.Forms.Properties.Resources; using RingtoetsCommonFormsResources = Ringtoets.Common.Forms.Properties.Resources; using TreeNode = Core.Common.Controls.TreeView.TreeNode; namespace Ringtoets.Integration.Plugin { /// /// The GUI plugin for the Ringtoets application. /// public class RingtoetsGuiPlugin : GuiPlugin { public override IRibbonCommandHandler RibbonCommandHandler { get { return new RingtoetsRibbon(); } } public override IEnumerable GetPropertyInfos() { yield return new PropertyInfo(); } public override IEnumerable GetViewInfoObjects() { yield return new ViewInfo { GetViewName = (v,o) => Resources.FailureMechanismContribution_DisplayName, Image = Forms.Properties.Resources.GenericInputOutputIcon, CloseForData = (v, o) => { var assessmentSection = o as AssessmentSectionBase; return assessmentSection != null && assessmentSection.FailureMechanismContribution == v.Data; } }; } public override IEnumerable GetChildDataWithViewDefinitions(object dataObject) { var assessmentSection = dataObject as AssessmentSectionBase; if (assessmentSection != null) { yield return assessmentSection.FailureMechanismContribution; } } /// /// Get the defined for the . /// /// An of . /// Thrown when is null. public override IEnumerable GetProjectTreeViewNodePresenters() { yield return new AssessmentSectionBaseNodePresenter(Gui.ContextMenuProvider); yield return new FailureMechanismNodePresenter(Gui.ContextMenuProvider); yield return new PlaceholderWithReadonlyNameNodePresenter(Gui.ContextMenuProvider); yield return new CategoryTreeFolderNodePresenter(Gui.ContextMenuProvider); yield return new FailureMechanismContributionNodePresenter(Gui.ContextMenuProvider); } public override IEnumerable GetTreeNodeInfos() { yield return new TreeNodeInfo { Text = assessmentSectionBase => assessmentSectionBase.Name, Image = assessmentSectionBase => RingtoetsFormsResources.AssessmentSectionFolderIcon, ChildNodeObjects = AssessmentSectionBaseChildNodeObjects, ContextMenu = AssessmentSectionBaseContextMenu, CanRename = assessmentSectionBase => true, OnNodeRenamed = AssessmentSectionBaseOnNodeRenamed, CanRemove = (assessmentSectionBase, parentNodeData) => true, OnNodeRemoved = AssessmentSectionBaseOnNodeRemoved }; yield return new TreeNodeInfo { Text = failureMechanismPlaceholder => failureMechanismPlaceholder.Name, Image = failureMechanismPlaceholder => RingtoetsFormsResources.FailureMechanismIcon, ForegroundColor = failureMechanismPlaceholder => Color.FromKnownColor(KnownColor.GrayText), ChildNodeObjects = FailureMechanismPlaceholderChildNodeObjects, ContextMenu = FailureMechanismPlaceholderContextMenu }; yield return new TreeNodeInfo { Text = placeholderWithReadonlyName => placeholderWithReadonlyName.Name, Image = placeholderWithReadonlyName => GetIconForPlaceholder(placeholderWithReadonlyName), ForegroundColor = placeholderWithReadonlyName => Color.FromKnownColor(KnownColor.GrayText), ContextMenu = PlaceholderWithReadonlyNameContextMenu }; yield return new TreeNodeInfo { Text = categoryTreeFolder => categoryTreeFolder.Name, Image = categoryTreeFolder => GetFolderIcon(categoryTreeFolder.Category), ChildNodeObjects = categoryTreeFolder => categoryTreeFolder.Contents.Cast().ToArray(), ContextMenu = CategoryTreeFolderContextMenu }; yield return new TreeNodeInfo { Text = failureMechanismContribution => RingtoetsDataResources.FailureMechanismContribution_DisplayName, Image = failureMechanismContribution => RingtoetsFormsResources.GenericInputOutputIcon, ContextMenu = (failureMechanismContribution, sourceNode) => Gui.ContextMenuProvider .Get(sourceNode) .AddOpenItem() .AddSeparator() .AddExportItem() .Build() }; } # region AssessmentSectionBase private object[] AssessmentSectionBaseChildNodeObjects(AssessmentSectionBase nodeData) { var childNodes = new List { nodeData.ReferenceLine, nodeData.FailureMechanismContribution, nodeData.HydraulicBoundaryDatabase }; childNodes.AddRange(nodeData.GetFailureMechanisms()); return childNodes.ToArray(); } private void AssessmentSectionBaseOnNodeRenamed(AssessmentSectionBase nodeData, string newName) { nodeData.Name = newName; nodeData.NotifyObservers(); } private void AssessmentSectionBaseOnNodeRemoved(AssessmentSectionBase nodeData, object parentNodeData) { var parentProject = (Project) parentNodeData; parentProject.Items.Remove(nodeData); parentProject.NotifyObservers(); } private ContextMenuStrip AssessmentSectionBaseContextMenu(AssessmentSectionBase nodeData, TreeNode node) { return Gui.ContextMenuProvider.Get(node) .AddRenameItem() .AddDeleteItem() .AddSeparator() .AddImportItem() .AddExportItem() .AddSeparator() .AddExpandAllItem() .AddCollapseAllItem() .AddSeparator() .AddPropertiesItem() .Build(); } # endregion # region FailureMechanismPlaceholder private object[] FailureMechanismPlaceholderChildNodeObjects(FailureMechanismPlaceholder nodeData) { return new object[] { new CategoryTreeFolder(RingtoetsCommonFormsResources.FailureMechanism_Inputs_DisplayName, GetInputs(nodeData), TreeFolderCategory.Input), new CategoryTreeFolder(RingtoetsCommonFormsResources.FailureMechanism_Outputs_DisplayName, GetOutputs(nodeData), TreeFolderCategory.Output) }; } private IEnumerable GetInputs(FailureMechanismPlaceholder nodeData) { yield return nodeData.SectionDivisions; yield return nodeData.Locations; yield return nodeData.BoundaryConditions; } private IEnumerable GetOutputs(FailureMechanismPlaceholder nodeData) { yield return nodeData.AssessmentResult; } private ContextMenuStrip FailureMechanismPlaceholderContextMenu(FailureMechanismPlaceholder nodeData, TreeNode node) { var calculateItem = new StrictContextMenuItem( RingtoetsCommonFormsResources.Calculate_all, RingtoetsCommonFormsResources.Calculate_all_ToolTip, RingtoetsCommonFormsResources.CalculateAllIcon, null) { Enabled = false }; var clearOutputItem = new StrictContextMenuItem( RingtoetsCommonFormsResources.Clear_all_output, RingtoetsCommonFormsResources.Clear_all_output_ToolTip, RingtoetsCommonFormsResources.ClearIcon, null ) { Enabled = false }; return Gui.ContextMenuProvider.Get(node) .AddCustomItem(calculateItem) .AddCustomItem(clearOutputItem) .AddSeparator() .AddImportItem() .AddExportItem() .AddSeparator() .AddExpandAllItem() .AddCollapseAllItem() .AddSeparator() .AddPropertiesItem() .Build(); } # endregion # region PlaceholderWithReadonlyName private static Bitmap GetIconForPlaceholder(PlaceholderWithReadonlyName nodeData) { if (nodeData is InputPlaceholder || nodeData is OutputPlaceholder) { return RingtoetsFormsResources.GenericInputOutputIcon; } return RingtoetsFormsResources.PlaceholderIcon; } private ContextMenuStrip PlaceholderWithReadonlyNameContextMenu(PlaceholderWithReadonlyName nodeData, TreeNode node) { IContextMenuBuilder menuBuilder = Gui.ContextMenuProvider.Get(node); if (nodeData is InputPlaceholder || nodeData is OutputPlaceholder) { menuBuilder.AddOpenItem(); } if (nodeData is OutputPlaceholder) { var clearItem = new StrictContextMenuItem( RingtoetsCommonFormsResources.FailureMechanism_InputsOutputs_Erase, RingtoetsCommonFormsResources.FailureMechanism_InputsOutputs_Erase_ToolTip, RingtoetsCommonFormsResources.ClearIcon, null) { Enabled = false }; menuBuilder.AddCustomItem(clearItem); } if (nodeData is InputPlaceholder || nodeData is OutputPlaceholder) { menuBuilder.AddSeparator(); } return menuBuilder.AddImportItem() .AddExportItem() .AddSeparator() .AddPropertiesItem() .Build(); } # endregion # region CategoryTreeFolder private Image GetFolderIcon(TreeFolderCategory category) { switch (category) { case TreeFolderCategory.General: return RingtoetsCommonFormsResources.GeneralFolderIcon; case TreeFolderCategory.Input: return RingtoetsCommonFormsResources.InputFolderIcon; case TreeFolderCategory.Output: return RingtoetsCommonFormsResources.OutputFolderIcon; default: throw new NotImplementedException(); } } private ContextMenuStrip CategoryTreeFolderContextMenu(CategoryTreeFolder nodeData, TreeNode node) { return Gui.ContextMenuProvider.Get(node) .AddExpandAllItem() .AddCollapseAllItem() .Build(); } # endregion } }