Index: Riskeer/GrassCoverErosionInwards/src/Riskeer.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsCalculationRow.cs =================================================================== diff -u -r789bfc0218617f5fc0cdf901634b170411878f2c -r4522cacb5cadeacd0612e4c17488e82698e8bcb9 --- Riskeer/GrassCoverErosionInwards/src/Riskeer.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsCalculationRow.cs (.../GrassCoverErosionInwardsCalculationRow.cs) (revision 789bfc0218617f5fc0cdf901634b170411878f2c) +++ Riskeer/GrassCoverErosionInwards/src/Riskeer.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsCalculationRow.cs (.../GrassCoverErosionInwardsCalculationRow.cs) (revision 4522cacb5cadeacd0612e4c17488e82698e8bcb9) @@ -148,18 +148,17 @@ /// /// Gets or sets the break water type of the . /// - public DataGridViewComboBoxItemWrapper BreakWaterType + public BreakWaterType BreakWaterType { get { - return new DataGridViewComboBoxItemWrapper(GrassCoverErosionInwardsCalculationScenario.InputParameters.BreakWater.Type); + return GrassCoverErosionInwardsCalculationScenario.InputParameters.BreakWater.Type; } set { - BreakWaterType valueToSet = value.WrappedObject; - if (!GrassCoverErosionInwardsCalculationScenario.InputParameters.BreakWater.Type.Equals(valueToSet)) + if (!GrassCoverErosionInwardsCalculationScenario.InputParameters.BreakWater.Type.Equals(value)) { - PropertyChangeHelper.ChangePropertyAndNotify(() => GrassCoverErosionInwardsCalculationScenario.InputParameters.BreakWater.Type = valueToSet, propertyChangeHandler); + PropertyChangeHelper.ChangePropertyAndNotify(() => GrassCoverErosionInwardsCalculationScenario.InputParameters.BreakWater.Type = value, propertyChangeHandler); } } } Index: Riskeer/GrassCoverErosionInwards/src/Riskeer.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsCalculationsView.Designer.cs =================================================================== diff -u -r3fba7629ec6d261d59417ddc5775fda727d75511 -r4522cacb5cadeacd0612e4c17488e82698e8bcb9 --- Riskeer/GrassCoverErosionInwards/src/Riskeer.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsCalculationsView.Designer.cs (.../GrassCoverErosionInwardsCalculationsView.Designer.cs) (revision 3fba7629ec6d261d59417ddc5775fda727d75511) +++ Riskeer/GrassCoverErosionInwards/src/Riskeer.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsCalculationsView.Designer.cs (.../GrassCoverErosionInwardsCalculationsView.Designer.cs) (revision 4522cacb5cadeacd0612e4c17488e82698e8bcb9) @@ -118,6 +118,7 @@ resources.ApplyResources(this.buttonGenerateCalculations, "buttonGenerateCalculations"); this.buttonGenerateCalculations.Name = "buttonGenerateCalculations"; this.buttonGenerateCalculations.UseVisualStyleBackColor = true; + this.buttonGenerateCalculations.MouseClick += new System.Windows.Forms.MouseEventHandler(this.OnGenerateCalculationsButtonClick); // // GrassCoverErosionInwardsCalculationsView // Index: Riskeer/GrassCoverErosionInwards/src/Riskeer.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsCalculationsView.cs =================================================================== diff -u -r789bfc0218617f5fc0cdf901634b170411878f2c -r4522cacb5cadeacd0612e4c17488e82698e8bcb9 --- Riskeer/GrassCoverErosionInwards/src/Riskeer.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsCalculationsView.cs (.../GrassCoverErosionInwardsCalculationsView.cs) (revision 789bfc0218617f5fc0cdf901634b170411878f2c) +++ Riskeer/GrassCoverErosionInwards/src/Riskeer.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsCalculationsView.cs (.../GrassCoverErosionInwardsCalculationsView.cs) (revision 4522cacb5cadeacd0612e4c17488e82698e8bcb9) @@ -27,6 +27,7 @@ using Core.Common.Base.Geometry; using Core.Common.Controls.DataGrid; using Core.Common.Controls.Views; +using Core.Common.Util; using Riskeer.Common.Data.AssessmentSection; using Riskeer.Common.Data.Calculation; using Riskeer.Common.Data.DikeProfiles; @@ -35,6 +36,7 @@ using Riskeer.Common.Forms.ChangeHandlers; using Riskeer.Common.Forms.Helpers; using Riskeer.Common.Forms.PresentationObjects; +using Riskeer.Common.Primitives; using Riskeer.GrassCoverErosionInwards.Data; using Riskeer.GrassCoverErosionInwards.Forms.PresentationObjects; using Riskeer.GrassCoverErosionInwards.Forms.Properties; @@ -94,7 +96,6 @@ grassCoverErosionInwardsFailureMechanism = value; grassCoverErosionInwardsFailureMechanismObserver.Observable = grassCoverErosionInwardsFailureMechanism; - UpdateDikeProfilesColumn(); UpdateSelectableHydraulicBoundaryLocationsColumn(); UpdateSectionsListBox(); @@ -193,12 +194,14 @@ dataGridViewControl.AddCheckBoxColumn(nameof(GrassCoverErosionInwardsCalculationRow.UseBreakWater), Resources.GrassCoverErosionInwardsCalculation_Use_Dam); - dataGridViewControl.AddComboBoxColumn>( - nameof(GrassCoverErosionInwardsCalculationRow.BreakWaterType), - Resources.GrassCoverErosionInwardsCalculation_Damtype, - null, - nameof(DataGridViewComboBoxItemWrapper.This), - nameof(DataGridViewComboBoxItemWrapper.DisplayName)); + dataGridViewControl.AddComboBoxColumn(nameof(GrassCoverErosionInwardsCalculationRow.BreakWaterType), + Resources.GrassCoverErosionInwardsCalculation_Damtype, + Enum.GetValues(typeof(BreakWaterType)) + .OfType() + .Select(bwt => new EnumDisplayWrapper(bwt)) + .ToArray(), + nameof(EnumDisplayWrapper.Value), + nameof(EnumDisplayWrapper.DisplayName)); dataGridViewControl.AddTextBoxColumn( nameof(GrassCoverErosionInwardsCalculationRow.BreakWaterHeight), @@ -217,6 +220,9 @@ dataGridViewControl.AddTextBoxColumn( nameof(GrassCoverErosionInwardsCalculationRow.StandardDeviationCriticalFlowRate), Resources.GrassCoverErosionInwardsCalculation_StandardDeviation_Critical_OvertoppingRate); + + UpdateDikeProfilesColumn(); + UpdateSelectableHydraulicBoundaryLocationsColumn(); } private void UpdateGenerateCalculationsButtonState() @@ -295,7 +301,7 @@ private void FillAvailableDikeProfilesList(DataGridViewRow dataGridViewRow) { - var cell = (DataGridViewComboBoxCell) dataGridViewRow.Cells[selectableHydraulicBoundaryLocationColumnIndex]; + var cell = (DataGridViewComboBoxCell) dataGridViewRow.Cells[selectableDikeProfileColumnIndex]; DataGridViewComboBoxItemWrapper[] dataGridViewComboBoxItemWrappers = GetSelectableDikeProfileDataSource(grassCoverErosionInwardsFailureMechanism.DikeProfiles).ToArray(); SetItemsOnObjectCollection(cell.Items, dataGridViewComboBoxItemWrappers); } @@ -393,19 +399,6 @@ { SetItemsOnObjectCollection(selectableDikeProfileColumn.Items, grassCoverErosionInwardsFailureMechanism.DikeProfiles.ToArray()); } - - var selectableBreakWaterTypesColumn = (DataGridViewComboBoxColumn) dataGridViewControl.GetColumnFromIndex(selectableBreakWaterTypesColumnIndex); - var breakWaterTypes = new object[] - { - BreakWaterType.Wall, - BreakWaterType.Caisson, - BreakWaterType.Dam - }; - - using (new SuspendDataGridViewColumnResizes(selectableBreakWaterTypesColumn)) - { - SetItemsOnObjectCollection(selectableBreakWaterTypesColumn.Items, breakWaterTypes); - } } private IEnumerable GetSelectableHydraulicBoundaryLocationsFromFailureMechanism() @@ -434,27 +427,38 @@ UpdateDataGridViewDataSource(); } - // private void OnGenerateCalculationsButtonClick(object sender, EventArgs e) - // { - // if (calculationGroup == null) - // { - // return; - // } - // - // var dialog = new PipingSurfaceLineSelectionDialog(Parent, pipingFailureMechanism.SurfaceLines); - // dialog.ShowDialog(); - // IEnumerable calculationsStructure = PipingCalculationConfigurationHelper.GenerateCalculationItemsStructure( - // dialog.SelectedItems, - // pipingFailureMechanism.StochasticSoilModels, - // pipingFailureMechanism.GeneralInput); - // foreach (ICalculationBase item in calculationsStructure) - // { - // calculationGroup.Children.Add(item); - // } - // - // calculationGroup.NotifyObservers(); - // } + private void OnGenerateCalculationsButtonClick(object sender, EventArgs e) + { + if (calculationGroup == null) + { + return; + } + using (var dialog = new GrassCoverErosionInwardsDikeProfileSelectionDialog(Parent, grassCoverErosionInwardsFailureMechanism.DikeProfiles)) + { + dialog.ShowDialog(); + GenerateCalculations(calculationGroup, dialog.SelectedItems); + } + + calculationGroup.NotifyObservers(); + } + + private static void GenerateCalculations(CalculationGroup calculationGroup, IEnumerable dikeProfiles) + { + foreach (DikeProfile profile in dikeProfiles) + { + var calculation = new GrassCoverErosionInwardsCalculationScenario + { + Name = NamingHelper.GetUniqueName(calculationGroup.Children, profile.Name, c => c.Name), + InputParameters = + { + DikeProfile = profile + } + }; + calculationGroup.Children.Add(calculation); + } + } + private void OnGrassCoverErosionInwardsFailureMechanismUpdate() { UpdateSectionsListBox(); Index: Riskeer/GrassCoverErosionInwards/src/Riskeer.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsCalculationsView.resx =================================================================== diff -u -r3fba7629ec6d261d59417ddc5775fda727d75511 -r4522cacb5cadeacd0612e4c17488e82698e8bcb9 --- Riskeer/GrassCoverErosionInwards/src/Riskeer.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsCalculationsView.resx (.../GrassCoverErosionInwardsCalculationsView.resx) (revision 3fba7629ec6d261d59417ddc5775fda727d75511) +++ Riskeer/GrassCoverErosionInwards/src/Riskeer.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsCalculationsView.resx (.../GrassCoverErosionInwardsCalculationsView.resx) (revision 4522cacb5cadeacd0612e4c17488e82698e8bcb9) @@ -448,7 +448,7 @@ 0 - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="splitContainer" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="buttonGenerateScenarios" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="Percent,100,AutoSize,0,Absolute,25" /></TableLayoutSettings> + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="splitContainer" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="buttonGenerateCalculations" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,100" /><Rows Styles="Percent,100,AutoSize,0,Absolute,25" /></TableLayoutSettings> True Index: Riskeer/GrassCoverErosionInwards/test/Riskeer.GrassCoverErosionInwards.Forms.Test/Views/GrassCoverErosionInwardsCalculationsViewTest.cs =================================================================== diff -u -r9817b8134222089e6812200b797ff63eb675d67b -r4522cacb5cadeacd0612e4c17488e82698e8bcb9 --- Riskeer/GrassCoverErosionInwards/test/Riskeer.GrassCoverErosionInwards.Forms.Test/Views/GrassCoverErosionInwardsCalculationsViewTest.cs (.../GrassCoverErosionInwardsCalculationsViewTest.cs) (revision 9817b8134222089e6812200b797ff63eb675d67b) +++ Riskeer/GrassCoverErosionInwards/test/Riskeer.GrassCoverErosionInwards.Forms.Test/Views/GrassCoverErosionInwardsCalculationsViewTest.cs (.../GrassCoverErosionInwardsCalculationsViewTest.cs) (revision 4522cacb5cadeacd0612e4c17488e82698e8bcb9) @@ -54,8 +54,8 @@ private const int damHeightColumnIndex = 5; private const int useForeShoreGeometryColumnIndex = 6; private const int dikeHeightColumnIndex = 7; - private const int expectedCriticalOvertoppingRateColumnIndex = 8; - private const int standardDeviationCriticalOvertoppingRateColumnIndex = 9; + private const int meanCriticalFlowRateColumnIndex = 8; + private const int standardDeviationCriticalFlowRateColumnIndex = 9; private Form testForm; [Test] @@ -87,7 +87,6 @@ foreach (DataGridViewComboBoxColumn column in dataGridView.Columns.OfType()) { - Assert.AreEqual("This", column.ValueMember); Assert.AreEqual("DisplayName", column.DisplayMember); } } @@ -110,8 +109,8 @@ Assert.AreEqual("Damhoogte [m+NAP]", dataGridView.Columns[damHeightColumnIndex].HeaderText); Assert.AreEqual("Gebruik voorlandgeometrie", dataGridView.Columns[useForeShoreGeometryColumnIndex].HeaderText); Assert.AreEqual("Dijkhoogte [m+NAP]", dataGridView.Columns[dikeHeightColumnIndex].HeaderText); - Assert.AreEqual("Verwachtingswaarde kritiek overslagdebiet [m3/m/s]", dataGridView.Columns[expectedCriticalOvertoppingRateColumnIndex].HeaderText); - Assert.AreEqual("Standaardafwijking kritiek overslagdebiet [m3/m/s]", dataGridView.Columns[standardDeviationCriticalOvertoppingRateColumnIndex].HeaderText); + Assert.AreEqual("Verwachtingswaarde kritiek overslagdebiet [m3/m/s]", dataGridView.Columns[meanCriticalFlowRateColumnIndex].HeaderText); + Assert.AreEqual("Standaardafwijking kritiek overslagdebiet [m3/m/s]", dataGridView.Columns[standardDeviationCriticalFlowRateColumnIndex].HeaderText); } } @@ -184,40 +183,40 @@ } } - // [Test] - // public void GrassCoverErosionInwardsCalculationsView_ChangingListBoxSelection_DataGridViewCorrectlySyncedAndSelectionChangedFired() - // { - // // Setup - // var mocks = new MockRepository(); - // var assessmentSection = mocks.Stub(); - // mocks.ReplayAll(); - // - // using (GrassCoverErosionInwardsCalculationsView grassCoverErosionInwardsCalculationsView = ShowFullyConfiguredGrassCoverErosionInwardsCalculationsView( - // assessmentSection)) - // { - // var selectionChangedCount = 0; - // grassCoverErosionInwardsCalculationsView.SelectionChanged += (sender, args) => selectionChangedCount++; - // - // var listBox = (ListBox) new ControlTester("listBox").TheObject; - // var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject; - // - // // Precondition - // Assert.AreEqual(2, dataGridView.Rows.Count); - // Assert.AreEqual("Calculation 1", dataGridView.Rows[0].Cells[nameColumnIndex].FormattedValue); - // Assert.AreEqual("Calculation 2", dataGridView.Rows[1].Cells[nameColumnIndex].FormattedValue); - // - // // Call - // listBox.SelectedIndex = 1; - // - // // Assert - // Assert.AreEqual(1, dataGridView.Rows.Count); - // Assert.AreEqual("Calculation 2", dataGridView.Rows[0].Cells[nameColumnIndex].FormattedValue); - // Assert.AreEqual(2, selectionChangedCount); - // } - // - // mocks.VerifyAll(); - // } + [Test] + public void GrassCoverErosionInwardsCalculationsView_ChangingListBoxSelection_DataGridViewCorrectlySyncedAndSelectionChangedFired() + { + // Setup + var mocks = new MockRepository(); + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + using (GrassCoverErosionInwardsCalculationsView grassCoverErosionInwardsCalculationsView = ShowFullyConfiguredGrassCoverErosionInwardsCalculationsView( + assessmentSection)) + { + var selectionChangedCount = 0; + grassCoverErosionInwardsCalculationsView.SelectionChanged += (sender, args) => selectionChangedCount++; + + var listBox = (ListBox) new ControlTester("listBox").TheObject; + var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject; + + // Precondition + Assert.AreEqual(2, dataGridView.Rows.Count); + Assert.AreEqual("Calculation 1", dataGridView.Rows[0].Cells[nameColumnIndex].FormattedValue); + Assert.AreEqual("Calculation 2", dataGridView.Rows[1].Cells[nameColumnIndex].FormattedValue); + + // Call + listBox.SelectedIndex = 1; + + // Assert + Assert.AreEqual(1, dataGridView.Rows.Count); + Assert.AreEqual("Calculation 2", dataGridView.Rows[0].Cells[nameColumnIndex].FormattedValue); + Assert.AreEqual(2, selectionChangedCount); + } + + mocks.VerifyAll(); + } + [Test] public void ButtonGenerateCalculations_WithoutGrassCoverErosionInwardsFailureMechanism_ButtonDisabled() { @@ -265,26 +264,26 @@ var mocks = new MockRepository(); var assessmentSection = mocks.Stub(); mocks.ReplayAll(); - + using (GrassCoverErosionInwardsCalculationsView grassCoverErosionInwardsCalculationsView = ShowFullyConfiguredGrassCoverErosionInwardsCalculationsView( assessmentSection)) { var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject; - + dataGridView.CurrentCell = dataGridView.Rows[selectedRow].Cells[0]; - + // Call object selection = grassCoverErosionInwardsCalculationsView.Selection; - + // Assert Assert.IsInstanceOf(selection); var dataRow = (GrassCoverErosionInwardsCalculationRow) dataGridView.Rows[selectedRow].DataBoundItem; Assert.AreSame(dataRow.GrassCoverErosionInwardsCalculationScenario, ((GrassCoverErosionInwardsInputContext) selection).Calculation); } - + mocks.VerifyAll(); } - + [Test] [TestCase(true)] [TestCase(false)] @@ -294,37 +293,37 @@ var mocks = new MockRepository(); var grassCoverErosionInwardsCalculationObserver = mocks.StrictMock(); var grassCoverErosionInwardsCalculationInputObserver = mocks.StrictMock(); - + grassCoverErosionInwardsCalculationObserver.Expect(o => o.UpdateObserver()); - + var assessmentSection = mocks.Stub(); mocks.ReplayAll(); - + using (GrassCoverErosionInwardsCalculationsView grassCoverErosionInwardsCalculationsView = ShowFullyConfiguredGrassCoverErosionInwardsCalculationsView( assessmentSection)) { var data = (CalculationGroup) grassCoverErosionInwardsCalculationsView.Data; var grassCoverErosionInwardsCalculation = (GrassCoverErosionInwardsCalculationScenario) data.Children.First(); - + if (useCalculationWithOutput) { grassCoverErosionInwardsCalculation.Output = new GrassCoverErosionInwardsOutput(new TestOvertoppingOutput(2.4), new TestDikeHeightOutput(4.2), new TestOvertoppingRateOutput(1.0)); } - + grassCoverErosionInwardsCalculation.Attach(grassCoverErosionInwardsCalculationObserver); grassCoverErosionInwardsCalculation.InputParameters.Attach(grassCoverErosionInwardsCalculationInputObserver); - + var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject; - + // Call dataGridView.Rows[0].Cells[nameColumnIndex].Value = "New name"; - + // Assert grassCoverErosionInwardsCalculation.Output = null; } - + mocks.VerifyAll(); } @@ -350,8 +349,8 @@ GrassCoverErosionInwardsFailureMechanism failureMechanism = ConfigureFailureMechanism(); return ShowFullyConfiguredGrassCoverErosionInwardsCalculationsView(assessmentSection, - failureMechanism, - ConfigureCalculationGroup()); + failureMechanism, + ConfigureCalculationGroup()); } private static void ConfigureHydraulicBoundaryDatabase(IAssessmentSection assessmentSection) @@ -367,8 +366,8 @@ } private GrassCoverErosionInwardsCalculationsView ShowFullyConfiguredGrassCoverErosionInwardsCalculationsView(IAssessmentSection assessmentSection, - GrassCoverErosionInwardsFailureMechanism failureMechanism, - CalculationGroup calculationGroup) + GrassCoverErosionInwardsFailureMechanism failureMechanism, + CalculationGroup calculationGroup) { GrassCoverErosionInwardsCalculationsView view = ShowGrassCoverErosionInwardsCalculationsView(); view.Data = calculationGroup; @@ -394,7 +393,7 @@ }, InputParameters = { - DikeProfile = null, + DikeProfile = DikeProfileTestFactory.CreateDikeProfile(new Point2D(0.0, 0.0)), HydraulicBoundaryLocation = null, DikeHeight = (RoundedDouble) 1.1, Orientation = (RoundedDouble) 2.2, @@ -427,7 +426,7 @@ }, InputParameters = { - DikeProfile = null, + DikeProfile = DikeProfileTestFactory.CreateDikeProfile(new Point2D(5.0, 0.0)), HydraulicBoundaryLocation = null, DikeHeight = (RoundedDouble) 1.1, Orientation = (RoundedDouble) 2.2,