using System; 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; 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 macrostabilitySoilProperties = new HashSet { StaticReflection.GetMemberName(s => s.AbovePhreaticLevel), StaticReflection.GetMemberName(s => s.AbovePhreaticLevelStochast), StaticReflection.GetMemberName(s => s.BelowPhreaticLevel), StaticReflection.GetMemberName(s => s.BelowPhreaticLevelStochast), StaticReflection.GetMemberName(s => s.ShearStrengthModel), StaticReflection.GetMemberName(s => s.Cohesion), StaticReflection.GetMemberName(s => s.CohesionStochast), StaticReflection.GetMemberName(s => s.FrictionAngle), StaticReflection.GetMemberName(s => s.FrictionAngleStochast), StaticReflection.GetMemberName(s => s.UsePop), StaticReflection.GetMemberName(s => s.POP), StaticReflection.GetMemberName(s => s.POPStochast), StaticReflection.GetMemberName(s => s.RatioCuPc), StaticReflection.GetMemberName(s => s.RatioCuPcStochast), StaticReflection.GetMemberName(s => s.StrengthIncreaseExponent), StaticReflection.GetMemberName(s => s.StrengthIncreaseExponentStochast) }; private readonly HashSet pipingSoilProperties = new HashSet { StaticReflection.GetMemberName(s => s.AbovePhreaticLevel), StaticReflection.GetMemberName(s => s.AbovePhreaticLevelStochast), StaticReflection.GetMemberName(s => s.BelowPhreaticLevelStochast), StaticReflection.GetMemberName(s => s.BelowPhreaticLevel), StaticReflection.GetMemberName(s => s.DiameterD70), StaticReflection.GetMemberName(s => s.DiameterD70Stochast), StaticReflection.GetMemberName(s => s.PermeabKx), StaticReflection.GetMemberName(s => s.PermeabKxStochast), }; private readonly HashSet flowslideSoilProperties = new HashSet { StaticReflection.GetMemberName(s => s.DiameterD15), StaticReflection.GetMemberName(s => s.DiameterD50), StaticReflection.GetMemberName(s => s.FrictionAngle), StaticReflection.GetMemberName(s => s.Porosity), StaticReflection.GetMemberName(s => s.MinPorosity), StaticReflection.GetMemberName(s => s.MaxPorosity), StaticReflection.GetMemberName(s => s.Evoldm), StaticReflection.GetMemberName(s => s.Ks0), StaticReflection.GetMemberName(s => s.GammaKorrel), StaticReflection.GetMemberName(s => s.ParM), StaticReflection.GetMemberName(s => s.ParU), StaticReflection.GetMemberName(s => s.ParV), StaticReflection.GetMemberName(s => s.ParR), StaticReflection.GetMemberName(s => s.ParS2), }; private readonly HashSet combinedSoilProperties = null; #endregion public DSoilModelContext() { combinedSoilProperties = new HashSet(); combinedSoilProperties.UnionWith(macrostabilitySoilProperties); combinedSoilProperties.UnionWith(pipingSoilProperties); combinedSoilProperties.UnionWith(flowslideSoilProperties); } /// /// 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; } } var grid = source as GridViewControl; if (grid != null) { if (member == "AddRowCommand" && (grid.Name == "GeometryPointsGridViewControl" || grid.Name == "GeometryCurvesGridViewControl")) { 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; } } return true; // all other parameters should be editable } var grid = source as GridViewControl; if (grid != null) { if ((member == "EditCommand" || member == "PasteCommand" || member == "CopyCommand") && (grid.Name == "CptsGridViewControl" || grid.Name == "BoringsGridViewControl")) { return false; } // GridViewControls from DSoilModelPlugin if ((member == "EditCommand" || member == "PasteCommand") && (grid.Name == "CPTsTable" || grid.Name == "BoringsTable")) { return false; } // GridViewControl from DSoilModelPlugin if ((member == "AddRowCommand" || member == "InsertRowCommand") && grid.Name == "SoilSegmentsTable") { 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; } /// /// Gets the format. /// /// The type. /// The source. /// The member. /// public override string GetFormat(Type type, object source, string member) { if (type == typeof(ConePenetrationTestPerSegment) || source is ConePenetrationTestPerSegment) { if (member == StaticReflection.GetMemberName(x => x.Xlocal)) { return "F3"; } } if (type == typeof(BoringPerSegment) || source is BoringPerSegment) { if (member == StaticReflection.GetMemberName(x => x.Xlocal)) { return "F3"; } } return base.GetFormat(type, source, member); } protected override HashSet GetFilteredProperties(object soilUserFilter) { if (soilUserFilter is UserColumnFilters) { switch ((UserColumnFilters)soilUserFilter) { case UserColumnFilters.MacrostabilityWti: { return macrostabilitySoilProperties; } case UserColumnFilters.PipingWti: { return pipingSoilProperties; } case UserColumnFilters.FlowSlideWti: { return flowslideSoilProperties; } } } return combinedSoilProperties; } 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; } } }