Index: Riskeer/DuneErosion/src/Riskeer.DuneErosion.Plugin/DuneErosionPlugin.cs =================================================================== diff -u -rf74baad41c48a49df1b49deabdeab6f26b662fd2 -r23b50eecc9b263dbe0edae0f6955895863c48d7c --- Riskeer/DuneErosion/src/Riskeer.DuneErosion.Plugin/DuneErosionPlugin.cs (.../DuneErosionPlugin.cs) (revision f74baad41c48a49df1b49deabdeab6f26b662fd2) +++ Riskeer/DuneErosion/src/Riskeer.DuneErosion.Plugin/DuneErosionPlugin.cs (.../DuneErosionPlugin.cs) (revision 23b50eecc9b263dbe0edae0f6955895863c48d7c) @@ -117,7 +117,10 @@ : Color.FromKnownColor(KnownColor.GrayText), Image = context => RiskeerCommonFormsResources.GeneralFolderIcon, ContextMenuStrip = DuneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContextMenuStrip, - ChildNodeObjects = DuneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContextChildNodeObjects + ChildNodeObjects = DuneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContextChildNodeObjects, + CanInsert = DuneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContext_CanDropOrInsert, + CanDrop = DuneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContext_CanDropOrInsert, + OnDrop = DuneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContext_OnDrop }; yield return new TreeNodeInfo @@ -426,6 +429,25 @@ return hydraulicBoundaryLocationCalculationsForTargetProbability; } + private static bool DuneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContext_CanDropOrInsert(object draggedData, object targetData) + { + var duneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContext = (DuneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContext) targetData; + + return draggedData is DuneLocationCalculationsForUserDefinedTargetProbabilityContext duneLocationCalculationsForUserDefinedTargetProbabilityContext + && duneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContext.WrappedData.Contains(duneLocationCalculationsForUserDefinedTargetProbabilityContext.WrappedData); + } + + private static void DuneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContext_OnDrop(object droppedData, object newParentData, object oldParentData, int position, TreeViewControl treeViewControl) + { + var duneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContext = (DuneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContext) newParentData; + var duneLocationCalculationsForUserDefinedTargetProbabilityContext = (DuneLocationCalculationsForUserDefinedTargetProbabilityContext) droppedData; + + duneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContext.WrappedData.Remove( + duneLocationCalculationsForUserDefinedTargetProbabilityContext.WrappedData); + duneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContext.WrappedData.Insert( + position, duneLocationCalculationsForUserDefinedTargetProbabilityContext.WrappedData); + } + #endregion #region DuneLocationCalculationsForUserDefinedTargetProbabilityContext TreeNodeInfo Index: Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/TreeNodeInfos/DuneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContextTreeNodeInfoTest.cs =================================================================== diff -u -r2b7b2aa2685cda206eddef667f6d5ab37423ecd0 -r23b50eecc9b263dbe0edae0f6955895863c48d7c --- Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/TreeNodeInfos/DuneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContextTreeNodeInfoTest.cs (.../DuneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContextTreeNodeInfoTest.cs) (revision 2b7b2aa2685cda206eddef667f6d5ab37423ecd0) +++ Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/TreeNodeInfos/DuneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContextTreeNodeInfoTest.cs (.../DuneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContextTreeNodeInfoTest.cs) (revision 23b50eecc9b263dbe0edae0f6955895863c48d7c) @@ -82,9 +82,9 @@ Assert.IsNull(info.CheckedState); Assert.IsNull(info.OnNodeChecked); Assert.IsNull(info.CanDrag); - Assert.IsNull(info.CanDrop); - Assert.IsNull(info.CanInsert); - Assert.IsNull(info.OnDrop); + Assert.IsNotNull(info.CanDrop); + Assert.IsNotNull(info.CanInsert); + Assert.IsNotNull(info.OnDrop); } } @@ -603,6 +603,217 @@ mocks.VerifyAll(); } + [Test] + public void CanInsert_DraggedDataOfUnsupportedDataType_ReturnsFalse() + { + // Setup + using (var plugin = new DuneErosionPlugin()) + { + TreeNodeInfo info = GetInfo(plugin); + + var targetData = new DuneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContext( + new ObservableList(), + new DuneErosionFailureMechanism(), + new AssessmentSectionStub()); + + // Call + bool canInsert = info.CanInsert(new object(), targetData); + + // Assert + Assert.IsFalse(canInsert); + } + } + + [Test] + public void CanInsert_DraggedDataNotPartOfGroupContext_ReturnsFalse() + { + // Setup + using (var plugin = new DuneErosionPlugin()) + { + TreeNodeInfo info = GetInfo(plugin); + + var assessmentSectionStub = new AssessmentSectionStub(); + var failureMechanism = new DuneErosionFailureMechanism(); + + var targetData = new DuneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContext( + new ObservableList(), + failureMechanism, + assessmentSectionStub); + + var draggedData = new DuneLocationCalculationsForUserDefinedTargetProbabilityContext( + new DuneLocationCalculationsForTargetProbability(), + failureMechanism, + assessmentSectionStub); + + // Call + bool canInsert = info.CanInsert(draggedData, targetData); + + // Assert + Assert.IsFalse(canInsert); + } + } + + [Test] + public void CanInsert_DraggedDataPartOfGroupContext_ReturnsTrue() + { + // Setup + using (var plugin = new DuneErosionPlugin()) + { + TreeNodeInfo info = GetInfo(plugin); + + var assessmentSectionStub = new AssessmentSectionStub(); + var failureMechanism = new DuneErosionFailureMechanism(); + var calculationsForTargetProbability = new DuneLocationCalculationsForTargetProbability(); + + var targetData = new DuneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContext( + new ObservableList + { + calculationsForTargetProbability + }, + failureMechanism, + assessmentSectionStub); + + var draggedData = new DuneLocationCalculationsForUserDefinedTargetProbabilityContext( + calculationsForTargetProbability, + failureMechanism, + assessmentSectionStub); + + // Call + bool canInsert = info.CanInsert(draggedData, targetData); + + // Assert + Assert.IsTrue(canInsert); + } + } + + [Test] + public void CanDrop_DraggedDataOfUnsupportedDataType_ReturnsFalse() + { + // Setup + using (var plugin = new DuneErosionPlugin()) + { + TreeNodeInfo info = GetInfo(plugin); + + var targetData = new DuneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContext( + new ObservableList(), + new DuneErosionFailureMechanism(), + new AssessmentSectionStub()); + + // Call + bool canDrop = info.CanDrop(new object(), targetData); + + // Assert + Assert.IsFalse(canDrop); + } + } + + [Test] + public void CanDrop_DraggedDataNotPartOfGroupContext_ReturnsFalse() + { + // Setup + using (var plugin = new DuneErosionPlugin()) + { + TreeNodeInfo info = GetInfo(plugin); + + var assessmentSectionStub = new AssessmentSectionStub(); + var failureMechanism = new DuneErosionFailureMechanism(); + + var targetData = new DuneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContext( + new ObservableList(), + failureMechanism, + assessmentSectionStub); + + var draggedData = new DuneLocationCalculationsForUserDefinedTargetProbabilityContext( + new DuneLocationCalculationsForTargetProbability(), + failureMechanism, + assessmentSectionStub); + + // Call + bool canDrop = info.CanDrop(draggedData, targetData); + + // Assert + Assert.IsFalse(canDrop); + } + } + + [Test] + public void CanDrop_DraggedDataPartOfGroupContext_ReturnsTrue() + { + // Setup + using (var plugin = new DuneErosionPlugin()) + { + TreeNodeInfo info = GetInfo(plugin); + + var assessmentSectionStub = new AssessmentSectionStub(); + var failureMechanism = new DuneErosionFailureMechanism(); + var calculationsForTargetProbability = new DuneLocationCalculationsForTargetProbability(); + + var targetData = new DuneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContext( + new ObservableList + { + calculationsForTargetProbability + }, + failureMechanism, + assessmentSectionStub); + + var draggedData = new DuneLocationCalculationsForUserDefinedTargetProbabilityContext( + calculationsForTargetProbability, + failureMechanism, + assessmentSectionStub); + + // Call + bool canDrop = info.CanDrop(draggedData, targetData); + + // Assert + Assert.IsTrue(canDrop); + } + } + + [Test] + public void OnDrop_DataDroppedToDifferentIndex_DroppedDataCorrectlyMoved() + { + // Setup + using (var plugin = new DuneErosionPlugin()) + { + TreeNodeInfo info = GetInfo(plugin); + + var assessmentSectionStub = new AssessmentSectionStub(); + var failureMechanism = new DuneErosionFailureMechanism(); + + var calculationsForTargetProbability1 = new DuneLocationCalculationsForTargetProbability(); + var calculationsForTargetProbability2 = new DuneLocationCalculationsForTargetProbability(); + var calculationsForTargetProbability3 = new DuneLocationCalculationsForTargetProbability(); + + var calculationsForTargetProbabilities = new ObservableList + { + calculationsForTargetProbability1, + calculationsForTargetProbability2, + calculationsForTargetProbability3 + }; + + var parentData = new DuneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContext( + calculationsForTargetProbabilities, + failureMechanism, + assessmentSectionStub); + + var droppedData = new DuneLocationCalculationsForUserDefinedTargetProbabilityContext( + calculationsForTargetProbability3, + failureMechanism, + assessmentSectionStub); + + // Call + info.OnDrop(droppedData, parentData, parentData, 1, null); + + // Assert + CollectionAssert.AreEquivalent(new[] + { + calculationsForTargetProbability1, + calculationsForTargetProbability3, + calculationsForTargetProbability2 + }, calculationsForTargetProbabilities); + } + } + private static TreeNodeInfo GetInfo(DuneErosionPlugin plugin) { return plugin.GetTreeNodeInfos().First(tni => tni.TagType == typeof(DuneLocationCalculationsForUserDefinedTargetProbabilitiesGroupContext));