Index: DamClients/DamUI/trunk/src/Dam/Forms/DamPlugin.cs =================================================================== diff -u -r2911 -r2968 --- DamClients/DamUI/trunk/src/Dam/Forms/DamPlugin.cs (.../DamPlugin.cs) (revision 2911) +++ DamClients/DamUI/trunk/src/Dam/Forms/DamPlugin.cs (.../DamPlugin.cs) (revision 2968) @@ -75,6 +75,7 @@ private readonly Panel calculationSpecificationPanel = new Panel(); private readonly Panel stabilityKernelTypeSpecificationPanel = new Panel(); private readonly Panel sensorPanel = new Panel(); + private GridViewControl materialsTable; private Deltares.DamEngine.Data.Standard.Calculation.ProgressDelegate progressDelegate = null; private bool initial = true; @@ -307,11 +308,16 @@ private void ConfigureTable() { - var materialsTable = new GridViewControl + materialsTable = new GridViewControl { + Name = "MaterialsGridViewControl", + CurrentContext = Context.CurrentContext, AllowedUserColumnFilters = Soil.AllowedUserColumnFilters, - HideUnusedColumns = true + AllowInserts = true, + HideUnusedColumns = true, + AllowUserColumnFilterEdit = true }; + mainForm.RegisterTableControl(typeof(Soil), materialsTable, "Materials"); BindSupport.Bind(materialPanel, materialsTable, typeof(Dike), "SoilList.Soils"); BindSupport.Bind(materialPanel, materialsTable.Parent, typeof(Dike), "SoilList.Soils", BindingType.Visibility); @@ -343,16 +349,8 @@ { Soil.AllowedUserColumnFilters = new[] { - UserColumnFilters.DGeoStability, - UserColumnFilters.DGeoStabilityCPhiModel, - UserColumnFilters.DGeoStabilitySuCalculated, - UserColumnFilters.DGeoStabilitySuMeasured, - UserColumnFilters.DGeoStabilitySuGradient, - UserColumnFilters.ShearStrengthParameters, - UserColumnFilters.ShearStrengthInput, - UserColumnFilters.ShearStrengthModel, - UserColumnFilters.Piping, - UserColumnFilters.UnitWeightFilter + UserColumnFilters.MacrostabilityWti, + UserColumnFilters.PipingWti, }; } @@ -896,8 +894,46 @@ { DataEventPublisher.AfterChange(this, "CurrentLocationJob"); } + else if (sender == materialsTable) + { + if (e.Property.Equals("SelectedFilter")) + { + var damContext = Context.CurrentContext as DamContext; + if (damContext != null) + { + damContext.SoilUserFilter = GetSoilUserFilterFromMaterialTable(); + UpdatePropertyControl(); + } + } + } + } + private void UpdatePropertyControl() + { + if (mainForm.DynamicPropertyControl != null && mainForm.DynamicPropertyControl.SelectedObject != null) + { + DataEventPublisher.AfterChange(mainForm.DynamicPropertyControl.SelectedObject); + } + } + + private UserColumnFilters? GetSoilUserFilterFromMaterialTable() + { + var selectedFilterText = materialsTable.SelectedFilter.Text; + UserColumnFilters? selectedFilterValue; + + try + { + selectedFilterValue = (UserColumnFilters)Enum.Parse(typeof(UserColumnFilters), selectedFilterText); + } + catch (ArgumentException) + { + // Filter "All" or not a valid member of the UserColumnFilters enumeration + selectedFilterValue = null; + } + return selectedFilterValue; + } + private void SelectWaterBoardJob(WaterBoardJob job) { DataEventPublisher.SelectionChanged(this.damProject.DamProjectData); Index: DamClients/DamUI/trunk/src/Dam/Forms/DamContext.cs =================================================================== diff -u -r2959 -r2968 --- DamClients/DamUI/trunk/src/Dam/Forms/DamContext.cs (.../DamContext.cs) (revision 2959) +++ DamClients/DamUI/trunk/src/Dam/Forms/DamContext.cs (.../DamContext.cs) (revision 2968) @@ -27,22 +27,16 @@ using Deltares.Geotechnics; using Deltares.Geotechnics.Soils; using Deltares.Geotechnics.SurfaceLines; +using Deltares.Standard.Attributes; using Deltares.Standard.Forms; using Deltares.Standard.Forms.DExpress; using Deltares.Standard.Reflection; namespace Deltares.Dam.Forms { - public class DamContext: GeotechnicsContext + public class DamContext : GeotechnicsContext { private bool wti = true; - - private Dictionary>> filters = new Dictionary>>(); - - private const string LocationScenarioInsideStability = "InsideStabilityScenarioCategory"; - private const string LocationScenarioPiping = "PipingScenarioCategory"; - private const string LocationScenarioPlLineSchematization = "PlLineSchematizationScenarioCategory"; - public bool Wti { get { return wti; } @@ -51,11 +45,77 @@ public DamContext() { - SetUpFilterDictionary(); + SetUpLocationsFilters(); + SetUpSoilsFilters(); } - private void SetUpFilterDictionary() + #region SoilFilters + private readonly HashSet alwaysVisibleProperties = new HashSet { + StaticReflection.GetMemberName(s => s.Name), + 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.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 pipingSoilProperties = new HashSet + { + StaticReflection.GetMemberName(s => s.BelowPhreaticLevel), + StaticReflection.GetMemberName(s => s.DiameterD70), + StaticReflection.GetMemberName(s => s.PermeabKx), + }; + + private HashSet combinedSoilProperties; + + private void SetUpSoilsFilters() + { + SoilUserFilter = UserColumnFilters.MacrostabilityWti; + combinedSoilProperties = new HashSet(); + combinedSoilProperties.UnionWith(macrostabilitySoilProperties); + combinedSoilProperties.UnionWith(pipingSoilProperties); + } + + protected override HashSet GetFilteredProperties(object userColumnFilters) + { + // TODO: For now always do all properties, until filtering works correctly (Issue MWDAM-1643) + return combinedSoilProperties; + if (userColumnFilters is UserColumnFilters) + { + switch ((UserColumnFilters)userColumnFilters ) + { + case UserColumnFilters.MacrostabilityWti: + return macrostabilitySoilProperties; + break; + case UserColumnFilters.PipingWti: + return pipingSoilProperties; + break; + } + } + return combinedSoilProperties; + } + #endregion SoilFilters + + #region LocationFilters + private Dictionary>> filters = new Dictionary>>(); + + private const string LocationScenarioInsideStability = "InsideStabilityScenarioCategory"; + private const string LocationScenarioPiping = "PipingScenarioCategory"; + private const string LocationScenarioPlLineSchematization = "PlLineSchematizationScenarioCategory"; + + private void SetUpLocationsFilters() + { var locationScenarioFilter = new Dictionary>(); filters[typeof(Scenario)] = locationScenarioFilter; @@ -128,6 +188,7 @@ } return null; } + #endregion LocationFilters /// /// Method indicating a visibility override value for a given instance object. @@ -162,6 +223,17 @@ { return true; } + + var soil = source as Soil; + if (soil != null) + { + bool? visibleAccordingSoilUserFilter = VisibleAccordingSoilUserFilter(member); + if (visibleAccordingSoilUserFilter != null) + { + return visibleAccordingSoilUserFilter; + } + } + // Make sure unwanted operations are hidden for the surface line grid for now. var grid = source as GridViewControl; if (grid != null) @@ -175,12 +247,37 @@ if (source is VisualValidationResult) { // Make sure that for DAM, all repairers are not used. - var vr = (VisualValidationResult) source; + var vr = (VisualValidationResult)source; vr.Repairer = null; } - return base.IsVisible(source, member); + + bool? isVisible = base.IsVisible(source, member); + if (member.Equals("Cohesion")) + { + return true; + } + if (isVisible != null && isVisible.Value) + { + return true; + } + return isVisible; } + private bool? VisibleAccordingSoilUserFilter(string member) + { + if (alwaysVisibleProperties.Contains(member)) + { + return true; + } + var filteredProperties = GetFilteredProperties(SoilUserFilter); + + if (filteredProperties == null) + { + return null; + } + return filteredProperties.Contains(member); + } + /// /// Method indicating if the enabled override value for a given instance object. /// @@ -200,7 +297,7 @@ { return false; } - return true; + return true; } if (source is SoilList) @@ -254,6 +351,11 @@ CharacteristicPointType.None, }; } + + if (property == "SoilUserFilter") + { + return GetSoilUserFilters(); + } return base.GetDomain(property); } }