using System.Collections; using System.Collections.Generic; using Deltares.DSoilModel.Data; using Deltares.Geotechnics; using Deltares.Geotechnics.ConePenetrationTest; using Deltares.Standard.Attributes; using Deltares.Standard.Forms.DExpress; using Deltares.Standard.Reflection; using Deltares.Standard.Reflection.Enumerator; namespace Deltares.DSoilModel.Forms { public class DSoilModelContext : GeotechnicsContext { #region Properties for user column filters private readonly HashSet alwaysVisibleProperties = new HashSet { StaticReflection.GetMemberName(s => s.Name), StaticReflection.GetMemberName(s => s.Description), StaticReflection.GetMemberName(s => s.Color), StaticReflection.GetMemberName(s => s.SoilType), }; private readonly HashSet macrostabilityBasicProperties = new HashSet { StaticReflection.GetMemberName(s => s.AbovePhreaticLevel), StaticReflection.GetMemberName(s => s.BelowPhreaticLevel), StaticReflection.GetMemberName(s => s.ShearStrengthModel), StaticReflection.GetMemberName(s => s.Cohesion), StaticReflection.GetMemberName(s => s.FrictionAngle), StaticReflection.GetMemberName(s => s.UsePop), StaticReflection.GetMemberName(s => s.POP), StaticReflection.GetMemberName(s => s.RatioCuPc), StaticReflection.GetMemberName(s => s.StrengthIncreaseExponent), }; private readonly HashSet pipingRingtoetsProperties = new HashSet { StaticReflection.GetMemberName(s => s.DiameterD70Stochast), StaticReflection.GetMemberName(s => s.PermeabKxStochast), StaticReflection.GetMemberName(s => s.AbovePhreaticLevelStochast), StaticReflection.GetMemberName(s => s.BelowPhreaticLevelStochast), }; #endregion /// /// The current filter to display all parameters, stochastic parameters only or as-is parameters only. /// public ParameterViewSettings ParameterView { get; set; } /// /// Method indicating a visibility override value for a given instance object. /// /// Object being evaluated. /// Name of the member which is part of . /// /// True if visible; False if hidden; Null if no override. /// public override bool? IsVisible(object source, string member) { if (source is BaseControlBinding || source is GridViewControl) { // Make sure popup menu item for adaption of units is disabled in gridview. if (member == "EditUnitCommand") { return false; } } if (source is MainForm) { // hide units command from tools menu if (member == "SelectUnits") { return false; } if (member == "ExecuteDeleteCommand") { return false; } } if (source is SosSoilLayer1D && member == ((SosSoilLayer1D)source).GetMemberName(x => x.BottomLevel)) { return false; } if (source is SoilLayer1D && member == ((SoilLayer1D)source).GetMemberName(x => x.BottomLevel)) { return false; } var layer = source as BoringLayer; if (layer != null) { if (member == layer.GetMemberName(x => x.Name)) { return false; } if (member == layer.GetMemberName(x => x.Description)) { return false; } if (member == layer.GetMemberName(x => x.IsAquifer)) { return false; } if (member == layer.GetMemberName(x => x.Height)) { return false; } if (member == layer.GetMemberName(x => x.SandMedian)) { return layer.IsSandMedianUsed; } if (member == layer.GetMemberName(x => x.SandMedian)) { return layer.IsSandMedianUsed; } if (member == layer.GetMemberName(x => x.GammaSat)) { return layer.IsGammaSatUsed; } if (member == layer.GetMemberName(x => x.GammaUnsat)) { return layer.IsGammaUnsatUsed; } } if (source is BoringDatarow || (source is Boring && member == ((Boring)source).GetMemberName(x => x.BoringDatarows))) { return false; } var profile1D = source as SoilProfile1D; if (profile1D != null) { if (member == profile1D.GetMemberName(sp1 => sp1.Location) || member == profile1D.GetMemberName(x => x.ProbabilityOfOccurrence) || member == profile1D.GetMemberName(x => x.X) || member == profile1D.GetMemberName(x => x.Y)) return false; } var profile2D = source as SoilProfile2D; if (profile2D != null) { if (member == profile2D.GetMemberName(sp1 => sp1.Location) || member == profile2D.GetMemberName(sp1 => sp1.XBegin) || member == profile2D.GetMemberName(sp1 => sp1.XEnd) || member == profile2D.GetMemberName(sp1 => sp1.YBegin) || member == profile2D.GetMemberName(sp1 => sp1.YEnd) || member == profile2D.GetMemberName(sp1 => sp1.Length)) { return false; } } var soil = source as Soil; if (soil != null) { // For Wti version, stresstables are not to be used (DSB-506) if (member == soil.GetMemberName(s => s.UseDefaultShearStrengthModel) || member == soil.GetMemberName(s => s.StressTable) || member == soil.GetMemberName(s => s.StressTableStochast) || member == soil.GetMemberName(s => s.BondStressTable)) { return false; } bool? visibleAccordingParameterView = VisibleAccordingParameterView(member); if (visibleAccordingParameterView != null && !(bool)visibleAccordingParameterView) { return false; } bool? visibleAccordingSoilUserFilter = VisibleAccordingSoilUserFilter(member); if (visibleAccordingSoilUserFilter != null) { return visibleAccordingSoilUserFilter; } if (member == "StressTableStochast") // DSB-299, used only in the "old" stability kernel { return false; } } if (source is SurfaceLine2) { var surfaceLine = (SurfaceLine2)source; if (member == surfaceLine.GetMemberName(x => x.GeometryMustIncludePoint_Xml)) { return false; } if (member == surfaceLine.GetMemberName(x => x.LandwardDirection)) { return false; } if (member == surfaceLine.GetMemberName(x => x.Geometry)) { return false; } } else if (source is SoilProfile1D || source is SoilProfile2D) { if (member == "ChangeLog") { return true; } } if (source is PreConsolidationStress) { if (member == ((PreConsolidationStress)source).GetMemberName(x => x.StressStochast)) { return ParameterView != ParameterViewSettings.AsIsParameters; } else if (member == ((PreConsolidationStress)source).GetMemberName(x => x.StressValue)) { return ParameterView != ParameterViewSettings.ProbabilisticParameters; } } //See DSB-538: for now do not use zones, old value = true var segment = source as SoilSegment; if (segment != null) { if (member == segment.GetMemberName(seg => seg.CreateSettlementZones)) { return false; } } return base.IsVisible(source, member); } /// /// Method indicating if the enabled override value for a given instance object. /// /// Object being evaluated. /// Name of the member which is part of . /// /// True if enabled; False if disabled; Null if no override. /// public override bool? IsEnabled(object source, string member) { if (source is ConePenetrationTestData) { return false; } if (source is Boring || source is BoringLayer) { return false; } if (source is ConePenetrationTestPerSegment && member == ((ConePenetrationTestPerSegment)source).GetMemberName(x => x.Xlocal)) { return false; } if (source is BoringPerSegment && member == ((BoringPerSegment)source).GetMemberName(x => x.Xlocal)) { return false; } var soil = source as Soil; if (soil != null) { BindPropertyInfo propertyInfo = PropertyInfoSupport.GetPropertyInfo(typeof(Soil), member); if (propertyInfo != null) { if (!propertyInfo.CanWrite) { return false; } } if (member.EndsWith("Stochast")) { if (ParameterView == ParameterViewSettings.AsIsParameters) { return false; } } if (!alwaysVisibleProperties.Contains(member)) { if (ParameterView == ParameterViewSettings.ProbabilisticParameters) { return false; } } if (member == soil.GetMemberName(s => s.Cohesion) || member == soil.GetMemberName(s => s.FrictionAngle)) { return soil.ShearStrengthModel == ShearStrengthModel.CPhi; } if (member == soil.GetMemberName(s => s.UsePop)) { return (soil.ShearStrengthModel == ShearStrengthModel.CuCalculated); } if (member == soil.GetMemberName(s => s.POP) || member == soil.GetMemberName(s => s.RatioCuPc) || member == soil.GetMemberName(s => s.StrengthIncreaseExponent)) { if (soil.ShearStrengthModel != ShearStrengthModel.CuCalculated) { return false; } } } return base.IsEnabled(source, member); } /// /// Method returning a collection of domain object for list or enum type members; /// /// Object being evaluated. /// Name of the member which is part of . /// A collection of domain object; Null if no override. public override ICollection GetDomain(object source, string member) { // not yet implemented here (yet) if (source is Soil && member == StaticReflection.GetMemberName(s => s.ShearStrengthModel)) { return new List { ShearStrengthModel.CPhi, ShearStrengthModel.CuCalculated, ShearStrengthModel.None }; } return null; } protected override HashSet GetFilteredProperties(object soilUserFilter) { if (soilUserFilter is UserColumnFilters) { switch ((UserColumnFilters)soilUserFilter) { case UserColumnFilters.MacrostabilityBasicModule: { return macrostabilityBasicProperties; } case UserColumnFilters.PipingRingtoets: { return pipingRingtoetsProperties; } } } return base.GetFilteredProperties(soilUserFilter); } private bool? VisibleAccordingSoilUserFilter(string member) { if (alwaysVisibleProperties.Contains(member)) { return true; } var filteredProperties = GetFilteredProperties(SoilUserFilter); if (filteredProperties == null) { return null; } return filteredProperties.Contains(member); } private bool? VisibleAccordingParameterView(string member) { if (member.EndsWith("Popup")) { return false; } if (member.EndsWith("Stochast")) { return ParameterView != ParameterViewSettings.AsIsParameters; } if (!alwaysVisibleProperties.Contains(member)) { return ParameterView != ParameterViewSettings.ProbabilisticParameters; } return null; } } }