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