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.Cohesion), StaticReflection.GetMemberName(s => s.FrictionAngle), StaticReflection.GetMemberName(s => s.RatioCuPc), StaticReflection.GetMemberName(s => s.StrengthIncreaseExponent), StaticReflection.GetMemberName(s => s.POP), StaticReflection.GetMemberName(s => s.ShearStrengthModel), StaticReflection.GetMemberName(s => s.UsePop) }; 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; } 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 (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 && member == profile1D.GetMemberName(x => x.ProbabilityOfOccurrence)) { return false; } if (source is Soil) { if (member == "SoilType") { return true; } if (member == "UseDefaultShearStrengthModel") { 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; } } return base.IsVisible(source, member); } 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; } if (source is Soil) { BindPropertyInfo propertyInfo = PropertyInfoSupport.GetPropertyInfo(typeof(Soil), member); if (propertyInfo != null) { if (!propertyInfo.CanWrite) { return false; } } if (member.EndsWith("Stochast")) { return ParameterView != ParameterViewSettings.AsIsParameters; } if (!alwaysVisibleProperties.Contains(member)) { return ParameterView != ParameterViewSettings.ProbabilisticParameters; } } return base.IsEnabled(source, member); } 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; } } }