Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Views/IllustrationPointRow.cs =================================================================== diff -u -rc2c7e9621863d470ddd3a1d5c0e4913844066aae -r29c0d37342d76d0bc06b1696aeaf56a316f86a19 --- Ringtoets/Common/src/Ringtoets.Common.Forms/Views/IllustrationPointRow.cs (.../IllustrationPointRow.cs) (revision c2c7e9621863d470ddd3a1d5c0e4913844066aae) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/Views/IllustrationPointRow.cs (.../IllustrationPointRow.cs) (revision 29c0d37342d76d0bc06b1696aeaf56a316f86a19) @@ -20,6 +20,7 @@ // All rights reserved. using System; +using Core.Common.Utils; using Ringtoets.Common.Data.Hydraulics.IllustrationPoints; namespace Ringtoets.Common.Forms.Views @@ -32,48 +33,62 @@ /// /// Creates a new instance of . /// - /// The wind direction. - /// The closing situation. - /// The calculated probability. - /// The calculated reliability. + /// /// Thrown when - /// or - /// is null. - public IllustrationPointRow(string windDirection, string closingSituation, - double probability, double reliability) + /// is null. + public IllustrationPointRow(TopLevelSubMechanismIllustrationPoint illustrationPoint) { - if (windDirection == null) + if (illustrationPoint == null) { - throw new ArgumentNullException(nameof(windDirection)); + throw new ArgumentNullException(nameof(illustrationPoint)); } - if (closingSituation == null) - { - throw new ArgumentNullException(nameof(closingSituation)); - } - WindDirection = windDirection; - ClosingSituation = closingSituation; - Probability = probability; - Reliability = reliability; + IllustrationPoint = illustrationPoint; } /// /// Gets the wind direction. /// - public string WindDirection { get; } + public string WindDirection + { + get + { + return IllustrationPoint.WindDirection.Name; + } + } /// /// Gets the closing situation. /// - public string ClosingSituation { get; } + public string ClosingSituation + { + get + { + return IllustrationPoint.ClosingSituation; + } + } /// /// Gets the calculated probability. /// - public double Probability { get; } + public double Probability + { + get + { + return StatisticsConverter.ReliabilityToProbability(IllustrationPoint.SubMechanismIllustrationPoint.Beta); + } + } /// /// Gets the calculated reliability. /// - public double Reliability { get; } + public double Reliability + { + get + { + return IllustrationPoint.SubMechanismIllustrationPoint.Beta; + } + } + + public TopLevelSubMechanismIllustrationPoint IllustrationPoint { get; } } } \ No newline at end of file Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Views/IllustrationPointsTableControl.cs =================================================================== diff -u -r391454e567c25dbf6ccee1ebd91e7662f3d409ab -r29c0d37342d76d0bc06b1696aeaf56a316f86a19 --- Ringtoets/Common/src/Ringtoets.Common.Forms/Views/IllustrationPointsTableControl.cs (.../IllustrationPointsTableControl.cs) (revision 391454e567c25dbf6ccee1ebd91e7662f3d409ab) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/Views/IllustrationPointsTableControl.cs (.../IllustrationPointsTableControl.cs) (revision 29c0d37342d76d0bc06b1696aeaf56a316f86a19) @@ -23,7 +23,7 @@ using System.Collections.Generic; using System.Linq; using System.Windows.Forms; -using Core.Common.Utils; +using Core.Common.Controls.Views; using Ringtoets.Common.Data.Hydraulics.IllustrationPoints; using Ringtoets.Common.Forms.Properties; @@ -32,17 +32,20 @@ /// /// Control to show illustration points in a table view. /// - public partial class IllustrationPointsTableControl : UserControl + public partial class IllustrationPointsTableControl : UserControl, ISelectionProvider { private const int closingSituationColumnIndex = 1; private GeneralResultSubMechanismIllustrationPoint data; + public event EventHandler SelectionChanged; + /// /// Creates a new instance of . /// public IllustrationPointsTableControl() { InitializeComponent(); + InitializeEventHandlers(); } /// @@ -66,6 +69,32 @@ } } + public object Selection + { + get + { + DataGridViewRow currentRow = illustrationPointsDataGridViewControl.CurrentRow; + + return ((IllustrationPointRow) currentRow?.DataBoundItem)?.IllustrationPoint; + } + } + + protected override void OnLoad(EventArgs e) + { + base.OnLoad(e); + InitializeDataGridView(); + } + + private void InitializeEventHandlers() + { + illustrationPointsDataGridViewControl.AddCurrentCellChangedHandler(DataGridViewOnCurrentCellChangedHandler); + } + + private void DataGridViewOnCurrentCellChangedHandler(object sender, EventArgs e) + { + OnSelectionChanged(); + } + private void UpdateClosingStructureVisibility() { if (data != null) @@ -80,12 +109,6 @@ illustrationPointsDataGridViewControl.SetColumnVisibility(closingSituationColumnIndex, false); } - protected override void OnLoad(EventArgs e) - { - base.OnLoad(e); - InitializeDataGridView(); - } - private void InitializeDataGridView() { illustrationPointsDataGridViewControl.AddTextBoxColumn(nameof(IllustrationPointRow.WindDirection), @@ -107,11 +130,13 @@ private List CreateRows() { return data.TopLevelSubMechanismIllustrationPoints - .Select(illustrationPoint => new IllustrationPointRow(illustrationPoint.WindDirection.Name, - illustrationPoint.ClosingSituation, - StatisticsConverter.ReliabilityToProbability(illustrationPoint.SubMechanismIllustrationPoint.Beta), - illustrationPoint.SubMechanismIllustrationPoint.Beta)) + .Select(illustrationPoint => new IllustrationPointRow(illustrationPoint)) .ToList(); } + + private void OnSelectionChanged() + { + SelectionChanged?.Invoke(this, EventArgs.Empty); + } } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/IllustrationPointRowTest.cs =================================================================== diff -u -rc2866a9d5e5990afc0f141fe2616c3c43d9ab1f9 -r29c0d37342d76d0bc06b1696aeaf56a316f86a19 --- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/IllustrationPointRowTest.cs (.../IllustrationPointRowTest.cs) (revision c2866a9d5e5990afc0f141fe2616c3c43d9ab1f9) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/IllustrationPointRowTest.cs (.../IllustrationPointRowTest.cs) (revision 29c0d37342d76d0bc06b1696aeaf56a316f86a19) @@ -20,7 +20,10 @@ // All rights reserved. using System; +using Core.Common.Utils; using NUnit.Framework; +using Ringtoets.Common.Data.Hydraulics.IllustrationPoints; +using Ringtoets.Common.Data.TestUtil.IllustrationPoints; using Ringtoets.Common.Forms.Views; namespace Ringtoets.Common.Forms.Test.Views @@ -29,44 +32,33 @@ public class IllustrationPointRowTest { [Test] - public void Constructor_WindDirectionNull_ThrowArgumentNullException() + public void Constructor_IllustrationPointNull_ThrowArgumentNullException() { // Call - TestDelegate test = () => new IllustrationPointRow(null, string.Empty, 0, 0); + TestDelegate test = () => new IllustrationPointRow(null); // Assert var exception = Assert.Throws(test); - Assert.AreEqual("windDirection", exception.ParamName); + Assert.AreEqual("illustrationPoint", exception.ParamName); } [Test] - public void Constructor_ClosingSituationNull_ThrowArgumentNullException() - { - // Call - TestDelegate test = () => new IllustrationPointRow("South", null, 0, 0); - - // Assert - var exception = Assert.Throws(test); - Assert.AreEqual("closingSituation", exception.ParamName); - } - - [Test] public void Constructor_ExpectedValues() { // Setup - const string windDirection = "South"; - const string closingSituation = "Regular"; - const double probability = 0.2; - const double reliability = 0.1; + var illustrationPoint = new TopLevelSubMechanismIllustrationPoint( + new TestWindDirection(), "Regular", + new TestSubMechanismIllustrationPoint()); // Call - var row = new IllustrationPointRow(windDirection, closingSituation, probability, reliability); + var row = new IllustrationPointRow(illustrationPoint); // Assert - Assert.AreEqual(windDirection, row.WindDirection); - Assert.AreEqual(closingSituation, row.ClosingSituation); - Assert.AreEqual(probability, row.Probability); - Assert.AreEqual(reliability, row.Reliability); + Assert.AreSame(illustrationPoint, row.IllustrationPoint); + Assert.AreEqual(illustrationPoint.WindDirection.Name, row.WindDirection); + Assert.AreEqual(illustrationPoint.ClosingSituation, row.ClosingSituation); + Assert.AreEqual(StatisticsConverter.ReliabilityToProbability(illustrationPoint.SubMechanismIllustrationPoint.Beta), row.Probability); + Assert.AreEqual(illustrationPoint.SubMechanismIllustrationPoint.Beta, row.Reliability); } } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/IllustrationPointsTableControlTest.cs =================================================================== diff -u -r391454e567c25dbf6ccee1ebd91e7662f3d409ab -r29c0d37342d76d0bc06b1696aeaf56a316f86a19 --- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/IllustrationPointsTableControlTest.cs (.../IllustrationPointsTableControlTest.cs) (revision 391454e567c25dbf6ccee1ebd91e7662f3d409ab) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/IllustrationPointsTableControlTest.cs (.../IllustrationPointsTableControlTest.cs) (revision 29c0d37342d76d0bc06b1696aeaf56a316f86a19) @@ -24,6 +24,8 @@ using System.Linq; using System.Windows.Forms; using Core.Common.Controls.DataGrid; +using Core.Common.Controls.Views; +using NUnit.Extensions.Forms; using NUnit.Framework; using Ringtoets.Common.Data.Hydraulics.IllustrationPoints; using Ringtoets.Common.Data.TestUtil.IllustrationPoints; @@ -61,6 +63,7 @@ // Assert Assert.IsInstanceOf(control); + Assert.IsInstanceOf(control); Assert.IsNull(control.Data); Assert.AreEqual(1, control.Controls.Count); Assert.IsInstanceOf(control.Controls[0]); @@ -195,6 +198,57 @@ Assert.IsFalse(dataGridView.Columns[closingScenarioColumnIndex].Visible); } + [Test] + public void GivenFullyConfiguredControl_WhenSelectingCellInRow_ThenSelectionChangedFired() + { + // Given + IllustrationPointsTableControl control = ShowControl(); + control.Data = GetGeneralResult(); + + var selectionChangedCount = 0; + control.SelectionChanged += (sender, args) => selectionChangedCount++; + + var dataGridView = (DataGridView)control.Controls.Find("DataGridView", true)[0]; + + // When + dataGridView.CurrentCell = dataGridView.Rows[1].Cells[calculatedProbabilityColumnIndex]; + EventHelper.RaiseEvent(dataGridView, "CellClick", new DataGridViewCellEventArgs(0, 0)); + + // Then + Assert.AreEqual(1, selectionChangedCount); + } + + [Test] + public void Selection_WithoutIllustrationPoints_ReturnsNull() + { + // Call + using (var control = new IllustrationPointsTableControl()) + { + // Assert + Assert.IsNull(control.Selection); + } + } + + [Test] + public void Selection_WithIllustrationPoints_ReturnsSelectedWindDirection() + { + // Call + IllustrationPointsTableControl control = ShowControl(); + control.Data = GetGeneralResult(); + + var dataGridView = (DataGridView)testForm.Controls.Find("dataGridView", true).First(); + DataGridViewRow selectedLocationRow = dataGridView.Rows[0]; + selectedLocationRow.Cells[0].Value = true; + + // Assert + var selection = control.Selection as TopLevelSubMechanismIllustrationPoint; + var dataBoundItem = selectedLocationRow.DataBoundItem as IllustrationPointRow; + + Assert.NotNull(selection); + Assert.NotNull(dataBoundItem); + Assert.AreSame(dataBoundItem.IllustrationPoint, selection); + } + private IllustrationPointsTableControl ShowControl() { var control = new IllustrationPointsTableControl();