Index: Core/Common/src/Core.Common.Controls/DataGrid/DataGridViewControl.cs =================================================================== diff -u -r71df8711592b93a889d1064548a2a0071b7eef19 -ra246db9c5134d2c12ee5a37b19bde5e442acce38 --- Core/Common/src/Core.Common.Controls/DataGrid/DataGridViewControl.cs (.../DataGridViewControl.cs) (revision 71df8711592b93a889d1064548a2a0071b7eef19) +++ Core/Common/src/Core.Common.Controls/DataGrid/DataGridViewControl.cs (.../DataGridViewControl.cs) (revision a246db9c5134d2c12ee5a37b19bde5e442acce38) @@ -224,6 +224,8 @@ /// Sets the datasource on the . /// /// The datasource to set. + /// Providing a value of null for + /// will clear the grid view. public void SetDataSource(object dataSource) { dataGridView.DataSource = dataSource; Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingInputView.Designer.cs =================================================================== diff -u -r640df7c0609a81e19cc3661323ee461d801049b0 -ra246db9c5134d2c12ee5a37b19bde5e442acce38 --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingInputView.Designer.cs (.../PipingInputView.Designer.cs) (revision 640df7c0609a81e19cc3661323ee461d801049b0) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingInputView.Designer.cs (.../PipingInputView.Designer.cs) (revision a246db9c5134d2c12ee5a37b19bde5e442acce38) @@ -37,32 +37,51 @@ private void InitializeComponent() { this.chartControl = new Core.Components.OxyPlot.Forms.ChartControl(); + this.pipingSoilLayerTable = new Ringtoets.Piping.Forms.Views.PipingSoilLayerTable(); this.SuspendLayout(); // // chartControl // this.chartControl.BottomAxisTitle = ""; this.chartControl.ChartTitle = null; + this.chartControl.Data = null; this.chartControl.Dock = System.Windows.Forms.DockStyle.Fill; this.chartControl.LeftAxisTitle = ""; this.chartControl.Location = new System.Drawing.Point(0, 0); + this.chartControl.MinimumSize = new System.Drawing.Size(100, 100); this.chartControl.Name = "chartControl"; - this.chartControl.Size = new System.Drawing.Size(150, 150); + this.chartControl.Size = new System.Drawing.Size(333, 202); this.chartControl.TabIndex = 0; this.chartControl.Text = "chartControl"; // + // pipingSoilLayerTable + // + this.pipingSoilLayerTable.Dock = System.Windows.Forms.DockStyle.Bottom; + this.pipingSoilLayerTable.Location = new System.Drawing.Point(0, 202); + this.pipingSoilLayerTable.MinimumSize = new System.Drawing.Size(300, 150); + this.pipingSoilLayerTable.MultiSelect = true; + this.pipingSoilLayerTable.Name = "pipingSoilLayerTable"; + this.pipingSoilLayerTable.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.RowHeaderSelect; + this.pipingSoilLayerTable.Size = new System.Drawing.Size(333, 156); + this.pipingSoilLayerTable.TabIndex = 1; + // // PipingInputView // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoScroll = true; this.Controls.Add(this.chartControl); + this.Controls.Add(this.pipingSoilLayerTable); + this.MinimumSize = new System.Drawing.Size(200, 300); this.Name = "PipingInputView"; + this.Size = new System.Drawing.Size(333, 358); this.ResumeLayout(false); } #endregion private Core.Components.OxyPlot.Forms.ChartControl chartControl; + private PipingSoilLayerTable pipingSoilLayerTable; } } Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingInputView.cs =================================================================== diff -u -r33d5e01761f16b2d2e113ac0ffa86d49a48db5cb -ra246db9c5134d2c12ee5a37b19bde5e442acce38 --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingInputView.cs (.../PipingInputView.cs) (revision 33d5e01761f16b2d2e113ac0ffa86d49a48db5cb) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingInputView.cs (.../PipingInputView.cs) (revision a246db9c5134d2c12ee5a37b19bde5e442acce38) @@ -67,7 +67,7 @@ InitializeChartControl(); calculationObserver = new Observer(UpdateChartTitle); - calculationInputObserver = new Observer(UpdateChartData); + calculationInputObserver = new Observer(UpdateViewData); chartDataCollection = new ChartDataCollection(RingtoetsCommonFormsResources.Calculation_Input); soilProfileChartData = PipingChartDataFactory.CreateSoilProfileChartData(); @@ -106,9 +106,7 @@ data = value as PipingCalculationScenario; calculationObserver.Observable = data; - calculationInputObserver.Observable = data != null - ? data.InputParameters - : null; + calculationInputObserver.Observable = data?.InputParameters; if (data == null) { @@ -122,6 +120,7 @@ chartControl.Data = chartDataCollection; chartControl.ChartTitle = data.Name; } + UpdateTableData(); } } @@ -156,6 +155,12 @@ chartControl.ChartTitle = data.Name; } + private void UpdateViewData() + { + UpdateChartData(); + UpdateTableData(); + } + private void UpdateChartData() { SetChartData(); @@ -172,6 +177,10 @@ soilProfileChartData.NotifyObservers(); soilProfileChartData.Collection.ForEachElementDo(md => md.NotifyObservers()); } + private void UpdateTableData() + { + pipingSoilLayerTable.SetData(data?.InputParameters.StochasticSoilProfile?.SoilProfile?.Layers); + } private void SetChartData() { Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingSoilLayerTable.cs =================================================================== diff -u -r71df8711592b93a889d1064548a2a0071b7eef19 -ra246db9c5134d2c12ee5a37b19bde5e442acce38 --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingSoilLayerTable.cs (.../PipingSoilLayerTable.cs) (revision 71df8711592b93a889d1064548a2a0071b7eef19) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/Views/PipingSoilLayerTable.cs (.../PipingSoilLayerTable.cs) (revision a246db9c5134d2c12ee5a37b19bde5e442acce38) @@ -33,13 +33,13 @@ AddColumns(); } + /// + /// Sets the given for which the properties + /// are shown in the table. + /// + /// The collection of layers to show. public void SetData(IEnumerable layers) { - if (layers == null) - { - throw new ArgumentNullException(nameof(layers)); - } - SetDataSource(layers); } Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Views/PipingInputViewTest.cs =================================================================== diff -u -r33d5e01761f16b2d2e113ac0ffa86d49a48db5cb -ra246db9c5134d2c12ee5a37b19bde5e442acce38 --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Views/PipingInputViewTest.cs (.../PipingInputViewTest.cs) (revision 33d5e01761f16b2d2e113ac0ffa86d49a48db5cb) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Views/PipingInputViewTest.cs (.../PipingInputViewTest.cs) (revision a246db9c5134d2c12ee5a37b19bde5e442acce38) @@ -57,6 +57,7 @@ Assert.IsInstanceOf(view); Assert.IsNotNull(view.Chart); Assert.IsNull(view.Data); + Assert.AreEqual(2, view.Controls.Count); } } @@ -67,16 +68,32 @@ using (var view = new PipingInputView()) { // Assert - Assert.AreEqual(1, view.Controls.Count); - Assert.AreSame(view.Chart, view.Controls[0]); - Assert.AreEqual(DockStyle.Fill, ((Control) view.Chart).Dock); - Assert.AreEqual("Afstand [m]", view.Chart.BottomAxisTitle); - Assert.AreEqual("Hoogte [m+NAP]", view.Chart.LeftAxisTitle); - Assert.IsNull(view.Chart.Data); + var chartControl = view.Controls.Find("chartControl", true).First() as IChartControl; + Assert.IsInstanceOf(chartControl); + Assert.NotNull(chartControl); + Assert.AreSame(chartControl, chartControl); + Assert.AreEqual(DockStyle.Fill, ((Control)chartControl).Dock); + Assert.AreEqual("Afstand [m]", chartControl.BottomAxisTitle); + Assert.AreEqual("Hoogte [m+NAP]", chartControl.LeftAxisTitle); + Assert.IsNull(chartControl.Data); } } [Test] + public void DefaultConstructor_Always_AddEmptyTableControl() + { + // Call + using (var view = new PipingInputView()) + { + // Assert + var tableControl = view.Controls.Find("pipingSoilLayerTable", true).First() as PipingSoilLayerTable; + Assert.NotNull(tableControl); + Assert.AreEqual(DockStyle.Bottom, tableControl.Dock); + CollectionAssert.IsEmpty(tableControl.Rows); + } + } + + [Test] public void Data_PipingCalculationScenario_DataSet() { // Setup @@ -129,18 +146,45 @@ } [Test] - public void Data_EmptyGrassCoverErosionInwardsCalculation_NoMapDataSet() + public void Data_SetToNull_TableDataCleared() { // Setup using (var view = new PipingInputView()) { - var calculation = new PipingCalculationScenario(new GeneralPipingInput()); + var calculation = new PipingCalculationScenario(new GeneralPipingInput()) + { + InputParameters = + { + StochasticSoilProfile = new StochasticSoilProfile(0.1, SoilProfileType.SoilProfile1D, 1) + { + SoilProfile = new PipingSoilProfile( + "profile", + -1, + new[] + { + new PipingSoilLayer(3.0), + new PipingSoilLayer(2.0), + new PipingSoilLayer(0) + }, + SoilProfileType.SoilProfile1D, + 1) + } + } + }; - // Call view.Data = calculation; + var tableControl = view.Controls.Find("pipingSoilLayerTable", true).First() as PipingSoilLayerTable; + // Precondition + Assert.NotNull(tableControl); + Assert.AreEqual(3, tableControl.Rows.Count); + + // Call + view.Data = null; + // Assert - AssertEmptyChartData(view.Chart.Data); + Assert.IsNull(view.Data); + CollectionAssert.IsEmpty(tableControl.Rows); } } @@ -185,6 +229,22 @@ } [Test] + public void Data_WithoutSurfaceLine_NoMapDataSet() + { + // Setup + using (var view = new PipingInputView()) + { + var calculation = new PipingCalculationScenario(new GeneralPipingInput()); + + // Call + view.Data = calculation; + + // Assert + AssertEmptyChartData(view.Chart.Data); + } + } + + [Test] public void Data_WithSurfaceLineWithoutStochasticSoilProfile_CollectionOfEmptyChartDataSetForSoilProfile() { // Setup @@ -244,6 +304,44 @@ } [Test] + public void Data_WithoutStochasticSoilProfile_SoilLayerTableEmpty() + { + // Setup + using (var view = new PipingInputView()) + { + var calculation = new PipingCalculationScenario(new GeneralPipingInput()); + + // Call + view.Data = calculation; + + // Assert + AssertEmtpySoilLayerTable(view); + } + } + + [Test] + public void Data_WithoutSoilProfile_SoilLayerTableEmpty() + { + // Setup + using (var view = new PipingInputView()) + { + var calculation = new PipingCalculationScenario(new GeneralPipingInput()) + { + InputParameters = + { + StochasticSoilProfile = new StochasticSoilProfile(0.5, SoilProfileType.SoilProfile1D, 1) + } + }; + + // Call + view.Data = calculation; + + // Assert + AssertEmtpySoilLayerTable(view); + } + } + + [Test] public void UpdateObserver_CalculationNameUpdated_ChartTitleUpdated() { // Setup @@ -621,6 +719,15 @@ return surfaceLine; } + private static void AssertEmtpySoilLayerTable(PipingInputView view) + { + var tableControl = view.Controls.Find("pipingSoilLayerTable", true).First() as PipingSoilLayerTable; + + // Precondition + Assert.NotNull(tableControl); + CollectionAssert.IsEmpty(tableControl.Rows); + } + private static void AssertEmptyChartData(ChartDataCollection chartDataCollection) { Assert.AreEqual("Invoer", chartDataCollection.Name); Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Views/PipingSoilLayerTableTest.cs =================================================================== diff -u -r71df8711592b93a889d1064548a2a0071b7eef19 -ra246db9c5134d2c12ee5a37b19bde5e442acce38 --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Views/PipingSoilLayerTableTest.cs (.../PipingSoilLayerTableTest.cs) (revision 71df8711592b93a889d1064548a2a0071b7eef19) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/Views/PipingSoilLayerTableTest.cs (.../PipingSoilLayerTableTest.cs) (revision a246db9c5134d2c12ee5a37b19bde5e442acce38) @@ -80,21 +80,26 @@ } [Test] - public void SetData_WithNullData_ThrowsArgumentNullException() + public void SetData_NoDataAlreadySet_SetNewData() { // Setup var table = new PipingSoilLayerTable(); + var layers = new[] + { + new PipingSoilLayer(2.5), + new PipingSoilLayer(2.3), + new PipingSoilLayer(1.1) + }; // Call - TestDelegate test = () => table.SetData(null); + table.SetData(layers); // Assert - string paramName = Assert.Throws(test).ParamName; - Assert.AreEqual("layers", paramName); + Assert.AreEqual(3, table.Rows.Count); } [Test] - public void SetData_NoDataSet_SetNewData() + public void SetData_SetNullDataAfterDataAlreadySet_ClearsData() { // Setup var table = new PipingSoilLayerTable(); @@ -104,16 +109,17 @@ new PipingSoilLayer(2.3), new PipingSoilLayer(1.1) }; + table.SetData(layers); // Call - table.SetData(layers); + table.SetData(null); // Assert - Assert.AreEqual(3, table.Rows.Count); + Assert.AreEqual(0, table.Rows.Count); } [Test] - public void SetData_WithDataSet_ClearDataAndAddNewData() + public void SetData_SetNewDataAfterDataAlreadySet_ClearDataAndAddNewData() { // Setup var table = new PipingSoilLayerTable();