Index: src/Deltares.DSoilModel.Forms.Tests/DSoilModelPluginTests.cs =================================================================== diff -u -r420 -r426 --- src/Deltares.DSoilModel.Forms.Tests/DSoilModelPluginTests.cs (.../DSoilModelPluginTests.cs) (revision 420) +++ src/Deltares.DSoilModel.Forms.Tests/DSoilModelPluginTests.cs (.../DSoilModelPluginTests.cs) (revision 426) @@ -9,6 +9,7 @@ using Deltares.Standard.Forms.DExpress; using System.Windows.Forms; using Deltares.Geotechnics; +using Deltares.Geotechnics.ConePenetrationTest; using NUnit.Framework; namespace Deltares.DSoilModel.Forms.Tests @@ -93,9 +94,9 @@ return p.Project; } - private bool CanDelete(DSoilModelPlugin p, object obj) + private bool CanDelete(DSoilModelPlugin p, string actualCanDeleteName, object obj) { - return (bool) p.GetType().GetMethod("CanDelete", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(p, new[] {obj}); + return (bool)p.GetType().GetMethod(actualCanDeleteName, BindingFlags.NonPublic | BindingFlags.Instance).Invoke(p, new[] { obj }); } [Test] @@ -114,8 +115,8 @@ p.SoilProfiles1D.Add(sp1); p.SoilProfiles1D.Add(sp2); - Assert.IsTrue(CanDelete(plugin, soilUnused)); - Assert.IsFalse(CanDelete(plugin, soilUsed)); + Assert.IsTrue(CanDelete(plugin, "CanDeleteSoil", soilUnused)); + Assert.IsFalse(CanDelete(plugin, "CanDeleteSoil", soilUsed)); } [Test] @@ -132,8 +133,8 @@ 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)); + Assert.IsTrue(CanDelete(plugin, "CanDeleteSoil", soilUnused)); + Assert.IsFalse(CanDelete(plugin, "CanDeleteSoil", soilUsed)); } [Test] @@ -152,8 +153,70 @@ p.SoilSegments.Add(seg1); p.SoilSegments.Add(seg2); - Assert.IsTrue(CanDelete(plugin, soilUnused)); - Assert.IsFalse(CanDelete(plugin, soilUsed)); + Assert.IsTrue(CanDelete(plugin, "CanDeleteSoil", soilUnused)); + Assert.IsFalse(CanDelete(plugin, "CanDeleteSoil", soilUsed)); } + + [Test] + public void CanDeleteTest_CptInSoilProfiles1D() + { + var p = new DSoilModelProject(); + plugin.Project = p; + + var cptUsed = new ConePenetrationTestData(); + var cptUnused = new ConePenetrationTestData(); + p.CPTs.Add(cptUsed); + p.CPTs.Add(cptUnused); + + var lookup1 = new ConePenetrationTestLookup1D { ConePenetrationTestData = cptUsed, SoilProfile1D = new SoilProfile1D()}; + var lookup2 = new ConePenetrationTestLookup1D(); + p.CptLookup1Ds.Add(lookup1); + p.CptLookup1Ds.Add(lookup2); + + Assert.IsTrue(CanDelete(plugin, "CanDeleteCPT", cptUnused)); + Assert.IsFalse(CanDelete(plugin, "CanDeleteCPT", cptUsed)); + } + + [Test] + public void CanDeleteTest_CptInSoilProfiles2D() + { + var p = new DSoilModelProject(); + plugin.Project = p; + + var cptUsed = new ConePenetrationTestData(); + var cptUnused = new ConePenetrationTestData(); + p.CPTs.Add(cptUsed); + p.CPTs.Add(cptUnused); + + var lookup1 = new ConePenetrationTestLookup2D { ConePenetrationTestData = cptUsed, SoilProfile2D = new SoilProfile2D() }; + var lookup2 = new ConePenetrationTestLookup2D(); + p.CptLookup2Ds.Add(lookup1); + p.CptLookup2Ds.Add(lookup2); + + Assert.IsTrue(CanDelete(plugin, "CanDeleteCPT", cptUnused)); + Assert.IsFalse(CanDelete(plugin, "CanDeleteCPT", cptUsed)); + } + + [Test] + public void CanDeleteTest_CptInSegments() + { + var p = new DSoilModelProject(); + plugin.Project = p; + + var cptUsed = new ConePenetrationTestData(); + var cptUnused = new ConePenetrationTestData(); + p.CPTs.Add(cptUsed); + p.CPTs.Add(cptUnused); + + var segment1 = new SoilSegment { Cpts = { new ConePenetrationTestPerSegment { ConePenetrationTestData = cptUsed } } }; + var segment2 = new SoilSegment { Cpts = { new ConePenetrationTestPerSegment () } }; + var segment3 = new SoilSegment(); + p.SoilSegments.Add(segment1); + p.SoilSegments.Add(segment2); + p.SoilSegments.Add(segment3); + + Assert.IsTrue(CanDelete(plugin, "CanDeleteCPT", cptUnused)); + Assert.IsFalse(CanDelete(plugin, "CanDeleteCPT", cptUsed)); + } } } Index: src/Deltares.DSoilModel.Forms/DSoilModelPlugin.cs =================================================================== diff -u -r421 -r426 --- src/Deltares.DSoilModel.Forms/DSoilModelPlugin.cs (.../DSoilModelPlugin.cs) (revision 421) +++ src/Deltares.DSoilModel.Forms/DSoilModelPlugin.cs (.../DSoilModelPlugin.cs) (revision 426) @@ -54,6 +54,7 @@ private DSoilModelMapEditor mapEditor; private GridViewControl materialsTable; + private GridViewControl cptsTable; private DSoilModelProject project; private bool use1DProfiles = true; private bool use2DProfiles = true; @@ -201,6 +202,9 @@ public void Dispose() { + materialsTable.CanDelete = null; + cptsTable.CanDelete = null; + if (null != GeometryEditor) { GeometryEditor.Dispose(); @@ -325,13 +329,11 @@ // Set correct active table. if (project.Soils.Soils.Count == 0 && project.CPTs.Count > 0) { - var cptTable = mainForm.DynamicTableControl.TabControl.Controls.Find("CPTsTable", true).FirstOrDefault(); - mainForm.SetAsActiveTable(cptTable); + mainForm.SetAsActiveTable(cptsTable); } else { - var soilTable = mainForm.DynamicTableControl.TabControl.Controls.Find("MaterialsGridViewControl", true).FirstOrDefault(); - mainForm.SetAsActiveTable(soilTable); + mainForm.SetAsActiveTable(materialsTable); } // Activate first line in table and set proper property window. project.ActivateFirstData(); @@ -971,17 +973,18 @@ }; mainForm.RegisterTableControl(typeof(Soil), materialsTable, "Materials"); BindSupport.Bind(projectPanel, materialsTable, typeof(DSoilModelProject), "Soils.Soils"); - materialsTable.CanDelete += CanDelete; + materialsTable.CanDelete += CanDeleteSoil; - var cptsTable = new GridViewControl + cptsTable = new GridViewControl { CurrentContext = Context.CurrentContext, HideUnusedColumns = true, AllowInserts = false, AllowAddDeleteOnly = true, ShowToolbar = true, - Name = "CPTsTable" + Name = "CPTsTable", }; + cptsTable.CanDelete += CanDeleteCPT; mainForm.RegisterTableControl(typeof(ConePenetrationTestData), cptsTable, "CPTs"); BindSupport.Bind(projectPanel, cptsTable, x => x.CPTs); BarButtonItem cptAddButton = FindBarButtonItem(cptsTable, "AddBarItem"); @@ -1091,11 +1094,17 @@ } } - private bool CanDeleteSoil(DSoilModelProject prj, Soil soil) + private bool CanDeleteSoil(object o) { + var soil = o as Soil; + if (soil == null) + { + return true; + } + var result = true; // 1D profiles - foreach (var sp1d in prj.SoilProfiles1D) + foreach (var sp1d in Project.SoilProfiles1D) { if (sp1d.Layers.Any(l => l.Soil == soil)) { @@ -1105,7 +1114,7 @@ } // 2D profiles - foreach (var sp2d in prj.SoilProfiles2D) + foreach (var sp2d in Project.SoilProfiles2D) { if (sp2d.Surfaces.Any(s => s.Soil == soil)) { @@ -1115,24 +1124,47 @@ } // soil in the segments - foreach (var sgm in prj.SoilSegments.Where(sgm => sgm.DefaultFillMaterialName == soil)) + foreach (var sgm in Project.SoilSegments.Where(sgm => sgm.DefaultFillMaterialName == soil)) { LogErrorCannotDelete(soil, sgm); result = false; } return result; } - private bool CanDelete(object o) + private bool CanDeleteCPT(object o) { - if (o is Soil) + var cpt = o as ConePenetrationTestData; + if (cpt == null) { - return CanDeleteSoil(Project, o as Soil); + return true; } - else + + var result = true; + // cpt in lookups 1D + foreach (var lookup in Project.CptLookup1Ds.Where(lookup => lookup.ConePenetrationTestData == cpt)) { - return true; + LogErrorCannotDelete(cpt, lookup.SoilProfile1D); + result = false; } + + // cpt in lookups 2D + foreach (var lookup in Project.CptLookup2Ds.Where(lookup => lookup.ConePenetrationTestData == cpt)) + { + LogErrorCannotDelete(cpt, lookup.SoilProfile2D); + result = false; + } + + // soil in the segments + foreach (var sgm in Project.SoilSegments) + { + foreach (var c in sgm.Cpts.Where(c => c.ConePenetrationTestData == cpt)) + { + LogErrorCannotDelete(cpt, sgm); + result = false; + } + } + return result; } private void RemoveBarButtonItem(GridViewControl gridViewTable, string buttonName)