Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingCalculationsView.cs =================================================================== diff -u -ra9aafffab97152303562110b1d789bacb465ce24 -rcda9bb0707f49cfb8e685d3ec04da01240c73f26 --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingCalculationsView.cs (.../PipingCalculationsView.cs) (revision a9aafffab97152303562110b1d789bacb465ce24) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingCalculationsView.cs (.../PipingCalculationsView.cs) (revision cda9bb0707f49cfb8e685d3ec04da01240c73f26) @@ -29,7 +29,6 @@ using Core.Common.Controls.DataGrid; using Core.Common.Controls.Views; using Core.Common.Gui.Selection; -using Ringtoets.Common.Data; using Ringtoets.Common.Data.AssessmentSection; using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.HydraRing.Data; @@ -50,11 +49,12 @@ private readonly RecursiveObserver pipingCalculationObserver; private readonly Observer pipingFailureMechanismObserver; private readonly RecursiveObserver pipingInputObserver; - private readonly Observer pipingStochasticSoilProfilesObserver; + private readonly Observer pipingStochasticSoilModelsObserver; private IAssessmentSection assessmentSection; private DataGridViewComboBoxColumn hydraulicBoundaryLocationColumn; private PipingCalculationGroup pipingCalculationGroup; private Data.Piping piping; + private DataGridViewComboBoxColumn stochasticSoilModelColumn; private DataGridViewComboBoxColumn stochasticSoilProfileColumn; private bool updatingDataSource; @@ -67,7 +67,7 @@ InitializeDataGridView(); InitializeListBox(); - pipingStochasticSoilProfilesObserver = new Observer(OnStochasticSoilProfilesUpdate); + pipingStochasticSoilModelsObserver = new Observer(OnStochasticSoilModelsUpdate); pipingFailureMechanismObserver = new Observer(OnPipingFailureMechanismUpdate); assessmentSectionObserver = new Observer(UpdateHydraulicBoundaryLocationsColumn); pipingInputObserver = new RecursiveObserver(UpdateDataGridViewDataSource, pcg => pcg.Children.Concat(pcg.Children.OfType().Select(pc => pc.InputParameters))); @@ -87,10 +87,10 @@ set { piping = value; - - pipingStochasticSoilProfilesObserver.Observable = piping != null ? piping.StochasticSoilModels : null; + pipingStochasticSoilModelsObserver.Observable = piping != null ? piping.StochasticSoilModels : null; pipingFailureMechanismObserver.Observable = piping; + UpdateStochasticSoilModelColumn(); UpdateStochasticSoilProfileColumn(); UpdateSectionsListBox(); UpdateGenerateScenariosButtonState(); @@ -173,6 +173,16 @@ Name = "column_Name" }; + stochasticSoilModelColumn = new DataGridViewComboBoxColumn + { + DataPropertyName = "StochasticSoilModel", + HeaderText = Resources.PipingInput_StochasticSoilModel_DisplayName, + Name = "column_SoilModel", + ValueMember = "This", + ValueType = typeof(DataGridViewComboBoxItemWrapper), + DisplayMember = "DisplayName" + }; + stochasticSoilProfileColumn = new DataGridViewComboBoxColumn { DataPropertyName = "StochasticSoilProfile", @@ -226,6 +236,7 @@ dataGridView.AutoGenerateColumns = false; dataGridView.Columns.AddRange( nameColumn, + stochasticSoilModelColumn, stochasticSoilProfileColumn, hydraulicBoundaryLocationColumn, dampingFactorExitMeanColumn, @@ -240,13 +251,13 @@ } UpdateHydraulicBoundaryLocationsColumn(); + UpdateStochasticSoilModelColumn(); UpdateStochasticSoilProfileColumn(); } private void InitializeListBox() { listBox.DisplayMember = "Name"; - listBox.SelectedValueChanged += ListBoxOnSelectedValueChanged; } @@ -261,12 +272,24 @@ } } - private void OnStochasticSoilProfilesUpdate() + private void OnStochasticSoilModelsUpdate() { UpdateGenerateScenariosButtonState(); + UpdateStochasticSoilModelColumn(); UpdateStochasticSoilProfileColumn(); } + private void UpdateStochasticSoilModelColumn() + { + using (new SuspendDataGridViewColumnResizes(stochasticSoilModelColumn)) + { + foreach (DataGridViewRow dataGridViewRow in dataGridView.Rows) + { + FillAvailableSoilModelsList(dataGridViewRow); + } + } + } + private void UpdateStochasticSoilProfileColumn() { using (new SuspendDataGridViewColumnResizes(stochasticSoilProfileColumn)) @@ -296,6 +319,10 @@ // Skip changes coming from the view itself if (dataGridView.IsCurrentCellInEditMode) { + updatingDataSource = true; + UpdateStochasticSoilProfileColumn(); + updatingDataSource = false; + dataGridView.AutoResizeColumns(); return; @@ -321,6 +348,7 @@ .Select(pc => new PipingCalculationRow(pc)) .ToList(); + UpdateStochasticSoilModelColumn(); UpdateStochasticSoilProfileColumn(); updatingDataSource = false; @@ -336,60 +364,44 @@ return minimalDistance < 1.0e-6; } - private void PrefillComboBoxListItemsAtColumnLevel() + private void FillAvailableSoilModelsList(DataGridViewRow dataGridViewRow) { - // Need to prefill for all possible data in order to guarantee 'combo box' columns - // do not generate errors when their cell value is not present in the list of available - // items. - using (new SuspendDataGridViewColumnResizes(stochasticSoilProfileColumn)) - { - var pipingSoilProfiles = GetPipingStochasticSoilProfilesFromStochasticSoilModels(); - SetItemsOnObjectCollection(stochasticSoilProfileColumn.Items, GetSoilProfilesDataSource(pipingSoilProfiles).ToArray()); - } - using (new SuspendDataGridViewColumnResizes(hydraulicBoundaryLocationColumn)) - { - var hydraulicBoundaryLocations = assessmentSection != null && assessmentSection.HydraulicBoundaryDatabase != null - ? assessmentSection.HydraulicBoundaryDatabase.Locations - : null; - SetItemsOnObjectCollection( - hydraulicBoundaryLocationColumn.Items, - GetHydraulicBoundaryLocationsDataSource(hydraulicBoundaryLocations).ToArray()); - } - } + var rowData = (PipingCalculationRow) dataGridViewRow.DataBoundItem; + IEnumerable stochasticSoilModels = GetSoilModelsForCalculation(rowData.PipingCalculation); - private StochasticSoilProfile[] GetPipingStochasticSoilProfilesFromStochasticSoilModels() - { - if (piping != null) - { - return piping.StochasticSoilModels - .SelectMany(ssm => ssm.StochasticSoilProfiles) - .Distinct() - .ToArray(); - } - return null; + var cell = (DataGridViewComboBoxCell) dataGridViewRow.Cells[stochasticSoilModelColumn.Index]; + SetItemsOnObjectCollection(cell.Items, GetStochasticSoilModelColumnsDataSource(stochasticSoilModels).ToArray()); } private void FillAvailableSoilProfilesList(DataGridViewRow dataGridViewRow) { var rowData = (PipingCalculationRow) dataGridViewRow.DataBoundItem; - IEnumerable stochasticSoilProfiles = GetSoilProfilesForCalculation(rowData.PipingCalculation); var cell = (DataGridViewComboBoxCell) dataGridViewRow.Cells[stochasticSoilProfileColumn.Index]; SetItemsOnObjectCollection(cell.Items, GetSoilProfilesDataSource(stochasticSoilProfiles).ToArray()); } - private IEnumerable GetSoilProfilesForCalculation(PipingCalculation pipingCalculation) + private IEnumerable GetSoilModelsForCalculation(PipingCalculation pipingCalculation) { if (piping == null) { - return Enumerable.Empty(); + return Enumerable.Empty(); } - return PipingCalculationConfigurationHelper.GetStochasticSoilProfilesForSurfaceLine( + return PipingCalculationConfigurationHelper.GetStochasticSoilModelsForSurfaceLine( pipingCalculation.InputParameters.SurfaceLine, piping.StochasticSoilModels); } + private IEnumerable GetSoilProfilesForCalculation(PipingCalculation pipingCalculation) + { + if (pipingCalculation.InputParameters.StochasticSoilModel == null) + { + return Enumerable.Empty(); + } + return pipingCalculation.InputParameters.StochasticSoilModel.StochasticSoilProfiles; + } + private static void SetItemsOnObjectCollection(DataGridViewComboBoxCell.ObjectCollection objectCollection, object[] comboBoxItems) { objectCollection.Clear(); @@ -413,15 +425,28 @@ } } - private static IEnumerable> GetSoilProfilesDataSource(IEnumerable stochasticSoilProfile = null) + private static IEnumerable> GetStochasticSoilModelColumnsDataSource(IEnumerable stochasticSoilModels = null) { + yield return new DataGridViewComboBoxItemWrapper(null); + + if (stochasticSoilModels != null) + { + foreach (StochasticSoilModel stochasticSoilModel in stochasticSoilModels) + { + yield return new DataGridViewComboBoxItemWrapper(stochasticSoilModel); + } + } + } + + private static IEnumerable> GetSoilProfilesDataSource(IEnumerable stochasticSoilProfiles = null) + { yield return new DataGridViewComboBoxItemWrapper(null); - if (stochasticSoilProfile != null) + if (stochasticSoilProfiles != null) { - foreach (StochasticSoilProfile profile in stochasticSoilProfile) + foreach (StochasticSoilProfile stochasticSoilProfile in stochasticSoilProfiles) { - yield return new DataGridViewComboBoxItemWrapper(profile); + yield return new DataGridViewComboBoxItemWrapper(stochasticSoilProfile); } } } @@ -441,6 +466,48 @@ return dataGridViewComboBoxItemWrappers; } + #region Prefill combo box list items + + private void PrefillComboBoxListItemsAtColumnLevel() + { + // Need to prefill for all possible data in order to guarantee 'combo box' columns + // do not generate errors when their cell value is not present in the list of available + // items. + using (new SuspendDataGridViewColumnResizes(stochasticSoilModelColumn)) + { + var stochasticSoilModels = piping.StochasticSoilModels; + SetItemsOnObjectCollection(stochasticSoilModelColumn.Items, GetStochasticSoilModelColumnsDataSource(stochasticSoilModels).ToArray()); + } + using (new SuspendDataGridViewColumnResizes(stochasticSoilProfileColumn)) + { + var pipingSoilProfiles = GetPipingStochasticSoilProfilesFromStochasticSoilModels(); + SetItemsOnObjectCollection(stochasticSoilProfileColumn.Items, GetSoilProfilesDataSource(pipingSoilProfiles).ToArray()); + } + using (new SuspendDataGridViewColumnResizes(hydraulicBoundaryLocationColumn)) + { + var hydraulicBoundaryLocations = assessmentSection != null && assessmentSection.HydraulicBoundaryDatabase != null + ? assessmentSection.HydraulicBoundaryDatabase.Locations + : null; + SetItemsOnObjectCollection( + hydraulicBoundaryLocationColumn.Items, + GetHydraulicBoundaryLocationsDataSource(hydraulicBoundaryLocations).ToArray()); + } + } + + private StochasticSoilProfile[] GetPipingStochasticSoilProfilesFromStochasticSoilModels() + { + if (piping != null) + { + return piping.StochasticSoilModels + .SelectMany(ssm => ssm.StochasticSoilProfiles) + .Distinct() + .ToArray(); + } + return null; + } + + #endregion + #region Nested types /// @@ -497,6 +564,21 @@ } } + public DataGridViewComboBoxItemWrapper StochasticSoilModel + { + get + { + return new DataGridViewComboBoxItemWrapper(pipingCalculation.InputParameters.StochasticSoilModel); + } + set + { + pipingCalculation.InputParameters.StochasticSoilModel = value != null + ? value.WrappedObject + : null; + pipingCalculation.InputParameters.NotifyObservers(); + } + } + public DataGridViewComboBoxItemWrapper StochasticSoilProfile { get