Index: src/Deltares.DSoilModel.Forms/DSoilModelPlugin.cs =================================================================== diff -u -r429 -r434 --- src/Deltares.DSoilModel.Forms/DSoilModelPlugin.cs (.../DSoilModelPlugin.cs) (revision 429) +++ src/Deltares.DSoilModel.Forms/DSoilModelPlugin.cs (.../DSoilModelPlugin.cs) (revision 434) @@ -55,7 +55,9 @@ private GridViewControl materialsTable; private GridViewControl cptsTable; + private GridViewControl boringsTable; private DSoilModelProject project; + private bool use1DProfiles = true; private bool use2DProfiles = true; private bool useBorings = true; @@ -204,6 +206,7 @@ { materialsTable.CanDelete = null; cptsTable.CanDelete = null; + boringsTable.CanDelete = null; if (null != GeometryEditor) { @@ -997,7 +1000,7 @@ if (UseBorings) { - var boringsTable = new GridViewControl + boringsTable = new GridViewControl { CurrentContext = Context.CurrentContext, HideUnusedColumns = true, @@ -1006,6 +1009,7 @@ ShowToolbar = true, EnableMasterViewMode = false }; + boringsTable.CanDelete += CanDeleteBoring; mainForm.RegisterTableControl(typeof(Boring), boringsTable, "Borings"); BindSupport.Bind(projectPanel, boringsTable, x => x.Borings); BarButtonItem boringAddButton = FindBarButtonItem(boringsTable, "AddBarItem"); @@ -1169,6 +1173,41 @@ return result; } + private bool CanDeleteBoring(object o) + { + var boring = o as Boring; + if (boring == null) + { + return true; + } + + var result = true; + // cpt in lookups 1D + foreach (var lookup in Project.BoringLookup1Ds.Where(lookup => lookup.Boring == boring)) + { + LogErrorCannotDelete(boring, lookup.SoilProfile1D); + result = false; + } + + // cpt in lookups 2D + foreach (var lookup in Project.BoringLookup2Ds.Where(lookup => lookup.Boring == boring)) + { + LogErrorCannotDelete(boring, lookup.SoilProfile2D); + result = false; + } + + // soil in the segments + foreach (var sgm in Project.SoilSegments) + { + foreach (var c in sgm.Borings.Where(c => c.Boring == boring)) + { + LogErrorCannotDelete(boring, sgm); + result = false; + } + } + return result; + } + private void RemoveBarButtonItem(GridViewControl gridViewTable, string buttonName) { var manager = gridViewTable.Toolbar.Manager; Index: src/Deltares.DSoilModel.Forms.Tests/DSoilModelPluginTests.cs =================================================================== diff -u -r433 -r434 --- src/Deltares.DSoilModel.Forms.Tests/DSoilModelPluginTests.cs (.../DSoilModelPluginTests.cs) (revision 433) +++ src/Deltares.DSoilModel.Forms.Tests/DSoilModelPluginTests.cs (.../DSoilModelPluginTests.cs) (revision 434) @@ -218,5 +218,67 @@ Assert.IsTrue(CanDelete(plugin, "CanDeleteCPT", cptUnused)); Assert.IsFalse(CanDelete(plugin, "CanDeleteCPT", cptUsed)); } + + [Test] + public void CanDeleteBoringTest_SoilProfiles1D() + { + var p = new DSoilModelProject(); + plugin.Project = p; + + var boringUsed = new Boring(); + var boringUnused = new Boring(); + p.Borings.Add(boringUsed); + p.Borings.Add(boringUnused); + + var lookup1 = new BoringLookup1D { Boring = boringUsed, SoilProfile1D = new SoilProfile1D() }; + var lookup2 = new BoringLookup1D(); + p.BoringLookup1Ds.Add(lookup1); + p.BoringLookup1Ds.Add(lookup2); + + Assert.IsTrue(CanDelete(plugin, "CanDeleteBoring", boringUnused)); + Assert.IsFalse(CanDelete(plugin, "CanDeleteBoring", boringUsed)); + } + + [Test] + public void CanDeleteBoringTest_SoilProfiles2D() + { + var p = new DSoilModelProject(); + plugin.Project = p; + + var boringUsed = new Boring(); + var boringUnused = new Boring(); + p.Borings.Add(boringUsed); + p.Borings.Add(boringUnused); + + var lookup1 = new BoringLookup2D { Boring = boringUsed, SoilProfile2D = new SoilProfile2D() }; + var lookup2 = new BoringLookup2D(); + p.BoringLookup2Ds.Add(lookup1); + p.BoringLookup2Ds.Add(lookup2); + + Assert.IsTrue(CanDelete(plugin, "CanDeleteBoring", boringUnused)); + Assert.IsFalse(CanDelete(plugin, "CanDeleteBoring", boringUsed)); + } + + [Test] + public void CanDeleteBoringTest_Segments() + { + var p = new DSoilModelProject(); + plugin.Project = p; + + var boringUsed = new Boring(); + var boringUnused = new Boring(); + p.Borings.Add(boringUsed); + p.Borings.Add(boringUnused); + + var segment1 = new SoilSegment { Borings = { new BoringPerSegment { Boring = boringUsed } } }; + var segment2 = new SoilSegment { Borings = { new BoringPerSegment() } }; + var segment3 = new SoilSegment(); + p.SoilSegments.Add(segment1); + p.SoilSegments.Add(segment2); + p.SoilSegments.Add(segment3); + + Assert.IsTrue(CanDelete(plugin, "CanDeleteBoring", boringUnused)); + Assert.IsFalse(CanDelete(plugin, "CanDeleteBoring", boringUsed)); + } } }