Index: Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingGuiPlugin.cs =================================================================== diff -u -rcd052cca186ce05075f7ccb256ea63610736aa8a -r6821ff075261a98f42221ccc796d007ca11a93fe --- Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingGuiPlugin.cs (.../PipingGuiPlugin.cs) (revision cd052cca186ce05075f7ccb256ea63610736aa8a) +++ Ringtoets/Piping/src/Ringtoets.Piping.Plugin/PipingGuiPlugin.cs (.../PipingGuiPlugin.cs) (revision 6821ff075261a98f42221ccc796d007ca11a93fe) @@ -239,10 +239,6 @@ treeNodeInfo.ContextMenuStrip = PipingCalculationGroupContextContextMenuStrip; treeNodeInfo.OnNodeRemoved = PipingCalculationGroupContextOnNodeRemoved; - treeNodeInfo.CanDrag = PipingCalculationGroupContextCanDrag; - treeNodeInfo.CanDrop = PipingCalculationGroupContextCanDropOrCanInsert; - treeNodeInfo.CanInsert = PipingCalculationGroupContextCanDropOrCanInsert; - treeNodeInfo.OnDrop = PipingCalculationGroupContextOnDrop; return treeNodeInfo; } @@ -836,182 +832,6 @@ PipingCalculationScenarioService.RemoveCalculationScenarioFromSectionResult(calculation, pipingFailureMechanism); } - private bool PipingCalculationGroupContextCanDrag(PipingCalculationGroupContext nodeData, object parentData) - { - return !(parentData is PipingFailureMechanismContext); - } - - private bool PipingCalculationGroupContextCanDropOrCanInsert(object draggedData, object targetData) - { - return GetAsICalculationItem(draggedData) != null && NodesHaveSameParentFailureMechanism(draggedData, targetData); - } - - private static ICalculationBase GetAsICalculationItem(object item) - { - var calculationContext = item as PipingCalculationScenarioContext; - if (calculationContext != null) - { - return calculationContext.WrappedData; - } - - var groupContext = item as PipingCalculationGroupContext; - return groupContext != null ? groupContext.WrappedData : null; - } - - private bool NodesHaveSameParentFailureMechanism(object draggedData, object targetData) - { - var sourceFailureMechanism = GetParentFailureMechanism(draggedData); - var targetFailureMechanism = GetParentFailureMechanism(targetData); - - return ReferenceEquals(sourceFailureMechanism, targetFailureMechanism); - } - - private static PipingFailureMechanism GetParentFailureMechanism(object data) - { - var calculationContext = data as PipingCalculationScenarioContext; - if (calculationContext != null) - { - return calculationContext.FailureMechanism; - } - - var groupContext = data as PipingCalculationGroupContext; - return groupContext != null ? groupContext.FailureMechanism : null; - } - - private void PipingCalculationGroupContextOnDrop(object droppedData, object newParentData, object oldParentData, int position, TreeViewControl treeViewControl) - { - ICalculationBase calculationItem = GetAsICalculationItem(droppedData); - var originalOwnerContext = oldParentData as PipingCalculationGroupContext; - var target = newParentData as PipingCalculationGroupContext; - - if (calculationItem != null && originalOwnerContext != null && target != null) - { - var isMoveWithinSameContainer = ReferenceEquals(originalOwnerContext, target); - - DroppingPipingCalculationInContainerStrategy dropHandler = GetDragDropStrategy(isMoveWithinSameContainer, originalOwnerContext, target); - dropHandler.Execute(droppedData, calculationItem, position, treeViewControl); - } - } - - private DroppingPipingCalculationInContainerStrategy GetDragDropStrategy(bool isMoveWithinSameContainer, PipingCalculationGroupContext originalOwnerContext, PipingCalculationGroupContext target) - { - if (isMoveWithinSameContainer) - { - return new DroppingPipingCalculationWithinSameContainer(originalOwnerContext, target); - } - return new DroppingPipingCalculationToNewContainer(originalOwnerContext, target); - } - - #region Nested Types: DroppingPipingCalculationInContainerStrategy and implementations - - /// - /// Strategy pattern implementation for dealing with drag & dropping a - /// onto data. - /// - private abstract class DroppingPipingCalculationInContainerStrategy - { - protected readonly PipingCalculationGroupContext target; - private readonly PipingCalculationGroupContext originalOwnerContext; - - protected DroppingPipingCalculationInContainerStrategy(PipingCalculationGroupContext originalOwnerContext, PipingCalculationGroupContext target) - { - this.originalOwnerContext = originalOwnerContext; - this.target = target; - } - - /// - /// Perform the drag & drop operation. - /// - /// The dragged data. - /// The calculation item wrapped by . - /// The index of the new position within the new owner's collection. - /// The tree view control which is at stake. - public virtual void Execute(object draggedData, ICalculationBase calculationBase, int newPosition, TreeViewControl treeViewControl) - { - MoveCalculationItemToNewOwner(calculationBase, newPosition); - - NotifyObservers(); - } - - /// - /// Moves the instance to its new location. - /// - /// The instance to be relocated. - /// The index in the new - /// owner within its . - protected void MoveCalculationItemToNewOwner(ICalculationBase calculationBase, int position) - { - originalOwnerContext.WrappedData.Children.Remove(calculationBase); - target.WrappedData.Children.Insert(position, calculationBase); - } - - /// - /// Notifies observers of the change in state. - /// - protected virtual void NotifyObservers() - { - originalOwnerContext.NotifyObservers(); - } - } - - /// - /// Strategy implementation for rearranging the order of an - /// within a through a drag & drop action. - /// - private class DroppingPipingCalculationWithinSameContainer : DroppingPipingCalculationInContainerStrategy - { - /// - /// Initializes a new instance of the class. - /// - /// The calculation group context that is - /// the original owner of the dragged item. - /// The calculation group context that is the target - /// of the drag & drop operation. - public DroppingPipingCalculationWithinSameContainer(PipingCalculationGroupContext originalOwnerContext, PipingCalculationGroupContext target) : - base(originalOwnerContext, target) {} - } - - /// - /// Strategy implementation for moving an from - /// one to another using a drag & drop action. - /// - private class DroppingPipingCalculationToNewContainer : DroppingPipingCalculationInContainerStrategy - { - /// - /// Initializes a new instance of the class. - /// - /// The calculation group context that is - /// the original owner of the dragged item. - /// The calculation group context that is the target - /// of the drag & drop operation. - public DroppingPipingCalculationToNewContainer(PipingCalculationGroupContext originalOwnerContext, PipingCalculationGroupContext target) : - base(originalOwnerContext, target) {} - - public override void Execute(object draggedData, ICalculationBase calculationBase, int newPosition, TreeViewControl treeViewControl) - { - MoveCalculationItemToNewOwner(calculationBase, newPosition); - - NotifyObservers(); - - // Try to start a name edit action when an item with the same name was already present - if (target.WrappedData.Children.Except(new[] - { - calculationBase - }).Any(c => c.Name.Equals(calculationBase.Name))) - { - treeViewControl.TryRenameNodeForData(draggedData); - } - } - - protected override void NotifyObservers() - { - base.NotifyObservers(); - target.NotifyObservers(); - } - } - #endregion - - #endregion } } \ No newline at end of file