Index: src/Deltares.DSoilModel.Forms/DSoilModelPlugin.cs =================================================================== diff -u -r418 -r420 --- src/Deltares.DSoilModel.Forms/DSoilModelPlugin.cs (.../DSoilModelPlugin.cs) (revision 418) +++ src/Deltares.DSoilModel.Forms/DSoilModelPlugin.cs (.../DSoilModelPlugin.cs) (revision 420) @@ -1097,16 +1097,33 @@ var soil = o as Soil; if (soil != null) { + // 1D profiles foreach (var sp1d in project.SoilProfiles1D) { - if (sp1d.Layers.Any(l => l.Soil == o)) + if (sp1d.Layers.Any(l => l.Soil == soil)) { LogErrorCannotDelete(soil, sp1d); result = false; } } - } + // 2D profiles + foreach (var sp2d in project.SoilProfiles2D) + { + if (sp2d.Surfaces.Any(s => s.Soil == soil)) + { + LogErrorCannotDelete(soil, sp2d); + result = false; + } + } + + // soil in the segments + foreach (var sgm in project.SoilSegments.Where(sgm => sgm.DefaultFillMaterialName == soil)) + { + LogErrorCannotDelete(soil, sgm); + result = false; + } + } return result; } Index: src/Deltares.DSoilModel.Forms.Tests/DSoilModelPluginTests.cs =================================================================== diff -u -r413 -r420 --- src/Deltares.DSoilModel.Forms.Tests/DSoilModelPluginTests.cs (.../DSoilModelPluginTests.cs) (revision 413) +++ src/Deltares.DSoilModel.Forms.Tests/DSoilModelPluginTests.cs (.../DSoilModelPluginTests.cs) (revision 420) @@ -1,4 +1,5 @@ using System.Linq; +using System.Reflection; using System.Threading; using Deltares.DSoilModel.Data; using Deltares.Geometry.Forms; @@ -7,7 +8,7 @@ using Deltares.Standard.Forms; using Deltares.Standard.Forms.DExpress; using System.Windows.Forms; - +using Deltares.Geotechnics; using NUnit.Framework; namespace Deltares.DSoilModel.Forms.Tests @@ -91,5 +92,68 @@ return p.Project; } + + private bool CanDelete(DSoilModelPlugin p, object obj) + { + return (bool) p.GetType().GetMethod("CanDelete", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(p, new[] {obj}); + } + + [Test] + public void CanDeleteTest_SoilInSoilProfiles1D() + { + var p = new DSoilModelProject(); + plugin.Project = p; + + var soilUsed = new Soil(); + var soilUnused = new Soil(); + p.Soils.Add(soilUnused); + p.Soils.Add(soilUsed); + + var sp1 = new SoilProfile1D(0, -1, soilUsed); + var sp2 = new SoilProfile1D(0, -1, soilUsed); + p.SoilProfiles1D.Add(sp1); + p.SoilProfiles1D.Add(sp2); + + Assert.IsTrue(CanDelete(plugin, soilUnused)); + Assert.IsFalse(CanDelete(plugin, soilUsed)); + } + + [Test] + public void CanDeleteTest_SoilInSoilProfiles2D() + { + var p = new DSoilModelProject(); + plugin.Project = p; + + var soilUsed = new Soil(); + var soilUnused = new Soil(); + p.Soils.Add(soilUnused); + p.Soils.Add(soilUsed); + + var sp = new SoilProfile2D {Surfaces = { new SoilLayer2D(), new SoilLayer2D {Soil = soilUsed}}}; + p.SoilProfiles2D.Add(sp); + + Assert.IsTrue(CanDelete(plugin, soilUnused)); + Assert.IsFalse(CanDelete(plugin, soilUsed)); + } + + [Test] + public void CanDeleteTest_SoilInSegments() + { + var p = new DSoilModelProject(); + plugin.Project = p; + + var soilUsed = new Soil(); + var soilUnused = new Soil(); + p.Soils.Add(soilUnused); + p.Soils.Add(soilUsed); + + var seg1 = new SoilSegment {DefaultFillMaterialName = soilUsed}; + var seg2 = new SoilSegment(); + p.SoilSegments.Add(seg1); + p.SoilSegments.Add(seg2); + + Assert.IsTrue(CanDelete(plugin, soilUnused)); + Assert.IsFalse(CanDelete(plugin, soilUsed)); + } } }