Index: Riskeer/Common/src/Riskeer.Common.Forms/Views/ScenarioRow.cs
===================================================================
diff -u -ree4e41283cef2e918d2424b5568d593310a656e4 -ra7edac6e409e6f2bab9e784261cd59ece1a2a660
--- Riskeer/Common/src/Riskeer.Common.Forms/Views/ScenarioRow.cs (.../ScenarioRow.cs) (revision ee4e41283cef2e918d2424b5568d593310a656e4)
+++ Riskeer/Common/src/Riskeer.Common.Forms/Views/ScenarioRow.cs (.../ScenarioRow.cs) (revision a7edac6e409e6f2bab9e784261cd59ece1a2a660)
@@ -91,5 +91,10 @@
///
[TypeConverter(typeof(NoProbabilityValueDoubleConverter))]
public abstract string FailureProbability { get; }
+
+ ///
+ /// Updates the row based on the current output of the .
+ ///
+ public abstract void Update();
}
}
\ No newline at end of file
Index: Riskeer/Common/src/Riskeer.Common.Forms/Views/ScenariosView.cs
===================================================================
diff -u -rc216977d4793abacb072a2e1bcd059df9d91b4c4 -ra7edac6e409e6f2bab9e784261cd59ece1a2a660
--- Riskeer/Common/src/Riskeer.Common.Forms/Views/ScenariosView.cs (.../ScenariosView.cs) (revision c216977d4793abacb072a2e1bcd059df9d91b4c4)
+++ Riskeer/Common/src/Riskeer.Common.Forms/Views/ScenariosView.cs (.../ScenariosView.cs) (revision a7edac6e409e6f2bab9e784261cd59ece1a2a660)
@@ -25,6 +25,7 @@
using System.Windows.Forms;
using Core.Common.Base;
using Core.Common.Controls.Views;
+using Core.Common.Util.Extensions;
using Riskeer.Common.Data.Calculation;
using Riskeer.Common.Data.FailureMechanism;
using Riskeer.Common.Forms.Properties;
@@ -43,7 +44,10 @@
private readonly IFailureMechanism failureMechanism;
private readonly Observer failureMechanismObserver;
- private RecursiveObserver calculationGroupObserver;
+ private readonly RecursiveObserver calculationGroupObserver;
+ private readonly RecursiveObserver calculationObserver;
+
+ private IEnumerable scenarioRows;
///
/// Creates a new instance of .
@@ -80,6 +84,11 @@
Observable = calculationGroup
};
+ calculationObserver = new RecursiveObserver(UpdateScenarioRows, pcg => pcg.Children)
+ {
+ Observable = calculationGroup
+ };
+
InitializeComponent();
InitializeListBox();
@@ -105,6 +114,7 @@
{
failureMechanismObserver.Dispose();
calculationGroupObserver.Dispose();
+ calculationObserver.Dispose();
if (disposing)
{
@@ -122,7 +132,7 @@
return;
}
- IEnumerable scenarioRows = GetScenarioRows();
+ scenarioRows = GetScenarioRows();
dataGridViewControl.SetDataSource(scenarioRows);
}
@@ -167,5 +177,11 @@
{
UpdateDataGridViewDataSource();
}
+
+ private void UpdateScenarioRows()
+ {
+ scenarioRows.ForEachElementDo(row => row.Update());
+ dataGridViewControl.RefreshDataGridView();
+ }
}
}
\ No newline at end of file
Index: Riskeer/Common/test/Riskeer.Common.Forms.Test/Views/ScenarioRowTest.cs
===================================================================
diff -u -ree4e41283cef2e918d2424b5568d593310a656e4 -ra7edac6e409e6f2bab9e784261cd59ece1a2a660
--- Riskeer/Common/test/Riskeer.Common.Forms.Test/Views/ScenarioRowTest.cs (.../ScenarioRowTest.cs) (revision ee4e41283cef2e918d2424b5568d593310a656e4)
+++ Riskeer/Common/test/Riskeer.Common.Forms.Test/Views/ScenarioRowTest.cs (.../ScenarioRowTest.cs) (revision a7edac6e409e6f2bab9e784261cd59ece1a2a660)
@@ -122,6 +122,8 @@
: base(calculationScenario) {}
public override string FailureProbability { get; }
+
+ public override void Update() {}
}
}
}
\ No newline at end of file
Index: Riskeer/Common/test/Riskeer.Common.Forms.Test/Views/ScenariosViewTest.cs
===================================================================
diff -u -re71c76d2a2ec7402b4a273bf8eaa73bf9dba9079 -ra7edac6e409e6f2bab9e784261cd59ece1a2a660
--- Riskeer/Common/test/Riskeer.Common.Forms.Test/Views/ScenariosViewTest.cs (.../ScenariosViewTest.cs) (revision e71c76d2a2ec7402b4a273bf8eaa73bf9dba9079)
+++ Riskeer/Common/test/Riskeer.Common.Forms.Test/Views/ScenariosViewTest.cs (.../ScenariosViewTest.cs) (revision a7edac6e409e6f2bab9e784261cd59ece1a2a660)
@@ -219,8 +219,8 @@
var failureMechanism = new TestFailureMechanism();
ShowFullyConfiguredScenarioView(new CalculationGroup(), failureMechanism);
- var listBox = (ListBox)new ControlTester("listBox").TheObject;
- var dataGridView = (DataGridView)new ControlTester("dataGridView").TheObject;
+ var listBox = (ListBox) new ControlTester("listBox").TheObject;
+ var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject;
// Precondition
Assert.AreSame(failureMechanism.Sections.First(), listBox.SelectedItem);
@@ -339,6 +339,36 @@
CollectionAssert.AreNotEquivalent(sectionResultRows, updatedRows);
}
+ [Test]
+ public void GivenScenarioView_WhenCalculationNotifiesObserver_ThenViewUpdated()
+ {
+ // Given
+ var calculationGroup = new CalculationGroup();
+ ShowFullyConfiguredScenarioView(calculationGroup, new TestFailureMechanism());
+ var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject;
+
+ var refreshed = 0;
+ dataGridView.Invalidated += (sender, args) => refreshed++;
+
+ var scenarioRows = new List();
+ foreach (DataGridViewRow row in dataGridView.Rows)
+ {
+ scenarioRows.Add((TestScenarioRow) row.DataBoundItem);
+ }
+
+ // Precondition
+ Assert.IsTrue(scenarioRows.All(row => !row.Updated));
+
+ ICalculation calculation = calculationGroup.GetCalculations().First();
+
+ // When
+ calculation.NotifyObservers();
+
+ // Then
+ Assert.AreEqual(1, refreshed);
+ Assert.IsTrue(scenarioRows.All(row => row.Updated));
+ }
+
private void ShowFullyConfiguredScenarioView(CalculationGroup calculationGroup, IFailureMechanism failureMechanism)
{
FailureMechanismTestHelper.SetSections(failureMechanism, new[]
@@ -400,6 +430,13 @@
: base(calculationScenario) {}
public override string FailureProbability => "1";
+
+ public bool Updated { get; private set; }
+
+ public override void Update()
+ {
+ Updated = true;
+ }
}
}
}
\ No newline at end of file