Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismResultView.cs =================================================================== diff -u -r32d9f4564e35587c3b09cf460680b8d08d258199 -rb04dd6bba80cd9140af7752d377a428c0aa7366b --- Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismResultView.cs (.../FailureMechanismResultView.cs) (revision 32d9f4564e35587c3b09cf460680b8d08d258199) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismResultView.cs (.../FailureMechanismResultView.cs) (revision b04dd6bba80cd9140af7752d377a428c0aa7366b) @@ -115,7 +115,7 @@ failureMechanismSectionResultObserver.Dispose(); failureMechanismSectionResultsObserver.Dispose(); - DataGridViewControl.CellFormatting -= HandleDisabledFields; + DataGridViewControl.CellFormatting -= HandleCellStyling; if (disposing) { @@ -159,7 +159,7 @@ /// protected virtual void BindEvents() { - DataGridViewControl.CellFormatting += HandleDisabledFields; + DataGridViewControl.CellFormatting += HandleCellStyling; } /// @@ -173,22 +173,19 @@ } } - private void HandleDisabledFields(object sender, DataGridViewCellFormattingEventArgs e) + private void HandleCellStyling(object sender, DataGridViewCellFormattingEventArgs e) { TSectionResultRow row = GetDataAtRow(e.RowIndex); - IEnumerable> rules = FormattingRules; - IEnumerable> formattingRules = rules.Where(r => r.ColumnIndices.Contains(e.ColumnIndex)); - if (formattingRules.Any()) + if (row.ColumnStateDefinitions.ContainsKey(e.ColumnIndex)) { - if (formattingRules.Any(formattingRule => formattingRule.Rule(row))) - { - DataGridViewControl.DisableCell(e.RowIndex, e.ColumnIndex); - } - else - { - DataGridViewControl.RestoreCell(e.RowIndex, e.ColumnIndex); - } + DataGridViewColumnStateDefinition columnStateDefinition = row.ColumnStateDefinitions[e.ColumnIndex]; + DataGridViewCell cell = DataGridViewControl.GetCell(e.RowIndex, e.ColumnIndex); + + cell.ReadOnly = columnStateDefinition.ReadOnly; + cell.ErrorText = columnStateDefinition.ErrorText; + cell.Style.BackColor = columnStateDefinition.Style.BackgroundColor; + cell.Style.ForeColor = columnStateDefinition.Style.TextColor; } } } Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismSectionResultRow.cs =================================================================== diff -u -rd55fd711068a8742e38fd3833ee25209b48089ca -rb04dd6bba80cd9140af7752d377a428c0aa7366b --- Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismSectionResultRow.cs (.../FailureMechanismSectionResultRow.cs) (revision d55fd711068a8742e38fd3833ee25209b48089ca) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismSectionResultRow.cs (.../FailureMechanismSectionResultRow.cs) (revision b04dd6bba80cd9140af7752d377a428c0aa7366b) @@ -21,6 +21,7 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using Core.Common.Controls.DataGrid; using Ringtoets.Common.Data.FailureMechanism; @@ -47,6 +48,7 @@ } SectionResult = sectionResult; + ColumnStateDefinitions = new Dictionary(); } /// @@ -68,6 +70,6 @@ /// /// Gets the column state definitions for the given indices. /// - public IDictionary ColumnStateDefinitions { get; protected set; } + public IDictionary ColumnStateDefinitions { get; } } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismResultViewTest.cs =================================================================== diff -u -r32d9f4564e35587c3b09cf460680b8d08d258199 -rb04dd6bba80cd9140af7752d377a428c0aa7366b --- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismResultViewTest.cs (.../FailureMechanismResultViewTest.cs) (revision 32d9f4564e35587c3b09cf460680b8d08d258199) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismResultViewTest.cs (.../FailureMechanismResultViewTest.cs) (revision b04dd6bba80cd9140af7752d377a428c0aa7366b) @@ -26,6 +26,7 @@ using Core.Common.Controls.DataGrid; using Core.Common.Controls.Views; using Core.Common.TestUtil; +using Deltares.WTIStability.Data.Standard; using NUnit.Extensions.Forms; using NUnit.Framework; using Ringtoets.Common.Data.FailureMechanism; @@ -159,57 +160,45 @@ } [Test] - public void GivenFailureMechanismResultViewWithFormattingRules_WhenCellFormattingEventFired_ThenFormattingRulesEvaluated() + [TestCaseSource(nameof(CellFormattingStates))] + public void GivenFailureMechanismResultView_WhenCellFormattingEventFired_ThenCellStyleSetToColumnDefinition( + bool readOnly, string errorText, CellStyle style) { // Given - var sectionResults = new ObservableList - { - FailureMechanismSectionResultTestFactory.CreateFailureMechanismSectionResult() - }; + TestFailureMechanismSectionResult sectionResult = FailureMechanismSectionResultTestFactory.CreateFailureMechanismSectionResult(); - // When - using (TestFailureMechanismResultView view = ShowFailureMechanismResultsView(sectionResults)) - { - // Then - Assert.IsTrue(view.Evaluated); - } - } - - [Test] - public void GivenFailureMechanismResultViewWithFormatting_WhenRulesDoNotMeet_ThenCellEnabled() - { - // Given var sectionResults = new ObservableList { - FailureMechanismSectionResultTestFactory.CreateFailureMechanismSectionResult("Other name") + sectionResult }; - // When using (ShowFailureMechanismResultsView(sectionResults)) { var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject; + var row = (TestRow) dataGridView.Rows[0].DataBoundItem; + DataGridViewColumnStateDefinition definition = row.ColumnStateDefinitions[0]; + definition.ReadOnly = readOnly; + definition.ErrorText = errorText; + definition.Style = style; + // When + sectionResult.NotifyObservers(); + // Then - DataGridViewTestHelper.AssertCellIsEnabled(dataGridView.Rows[0].Cells[0], true); + DataGridViewCell cell = dataGridView.Rows[0].Cells[0]; + Assert.AreEqual(readOnly, cell.ReadOnly); + Assert.AreEqual(errorText, cell.ErrorText); + Assert.AreEqual(style.BackgroundColor, cell.Style.BackColor); + Assert.AreEqual(style.TextColor, cell.Style.ForeColor); } } - [Test] - public void GivenFailureMechanismResultViewWithFormatting_WhenSingleRuleMeets_ThenCellDisabled() + private static IEnumerable CellFormattingStates { - // Given - var sectionResults = new ObservableList + get { - FailureMechanismSectionResultTestFactory.CreateFailureMechanismSectionResult() - }; - - // When - using (ShowFailureMechanismResultsView(sectionResults)) - { - var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject; - - // Then - DataGridViewTestHelper.AssertCellIsDisabled(dataGridView.Rows[0].Cells[0]); + yield return new TestCaseData(true, "", CellStyle.Disabled); + yield return new TestCaseData(false, "Error", CellStyle.Enabled); } } @@ -226,25 +215,9 @@ public class TestFailureMechanismResultView : FailureMechanismResultView, TestFailureMechanism> { public TestFailureMechanismResultView(IObservableEnumerable failureMechanismSectionResults, TestFailureMechanism failureMechanism) - : base(failureMechanismSectionResults, failureMechanism) {} - - public bool Evaluated { get; private set; } - - protected override IEnumerable>> FormattingRules + : base(failureMechanismSectionResults, failureMechanism) { - get - { - yield return new DataGridViewColumnFormattingRule>( - new[] - { - 0 - }, - row => - { - Evaluated = true; - return row.Name.Equals("test"); - }); - } + } protected override FailureMechanismSectionResultRow CreateFailureMechanismSectionResultRow(FailureMechanismSectionResult sectionResult) @@ -260,6 +233,9 @@ public class TestRow : FailureMechanismSectionResultRow { - public TestRow(FailureMechanismSectionResult sectionResult) : base(sectionResult) {} + public TestRow(FailureMechanismSectionResult sectionResult) : base(sectionResult) + { + ColumnStateDefinitions.Add(0, new DataGridViewColumnStateDefinition()); + } } } \ No newline at end of file Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismSectionResultRowTest.cs =================================================================== diff -u -rd55fd711068a8742e38fd3833ee25209b48089ca -rb04dd6bba80cd9140af7752d377a428c0aa7366b --- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismSectionResultRowTest.cs (.../FailureMechanismSectionResultRowTest.cs) (revision d55fd711068a8742e38fd3833ee25209b48089ca) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismSectionResultRowTest.cs (.../FailureMechanismSectionResultRowTest.cs) (revision b04dd6bba80cd9140af7752d377a428c0aa7366b) @@ -51,7 +51,7 @@ // Assert Assert.AreEqual(sectionResult.Section.Name, row.Name); - Assert.IsNull(row.ColumnStateDefinitions); + CollectionAssert.IsEmpty(row.ColumnStateDefinitions); } } Index: Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsFailureMechanismResultView.cs =================================================================== diff -u -r32d9ea030147389df8fce761d102606d8fc8d6fd -rb04dd6bba80cd9140af7752d377a428c0aa7366b --- Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsFailureMechanismResultView.cs (.../GrassCoverErosionInwardsFailureMechanismResultView.cs) (revision 32d9ea030147389df8fce761d102606d8fc8d6fd) +++ Ringtoets/GrassCoverErosionInwards/src/Ringtoets.GrassCoverErosionInwards.Forms/Views/GrassCoverErosionInwardsFailureMechanismResultView.cs (.../GrassCoverErosionInwardsFailureMechanismResultView.cs) (revision b04dd6bba80cd9140af7752d377a428c0aa7366b) @@ -104,6 +104,7 @@ protected override void Dispose(bool disposing) { DataGridViewControl.CellFormatting -= ShowAssessmentLayerErrors; + DataGridViewControl.CellFormatting -= HandleCellStyling; calculationInputObserver.Dispose(); calculationOutputObserver.Dispose(); @@ -179,6 +180,7 @@ base.BindEvents(); DataGridViewControl.CellFormatting += ShowAssessmentLayerErrors; + DataGridViewControl.CellFormatting += HandleCellStyling; } private void ShowAssessmentLayerErrors(object sender, DataGridViewCellFormattingEventArgs e) @@ -204,6 +206,27 @@ normativeCalculation); } + private void HandleCellStyling(object sender, DataGridViewCellFormattingEventArgs e) + { + GrassCoverErosionInwardsFailureMechanismSectionResultRow row = GetDataAtRow(e.RowIndex); + + + IEnumerable> rules = FormattingRules; + + IEnumerable> formattingRules = rules.Where(r => r.ColumnIndices.Contains(e.ColumnIndex)); + if (formattingRules.Any()) + { + if (formattingRules.Any(formattingRule => formattingRule.Rule(row))) + { + DataGridViewControl.DisableCell(e.RowIndex, e.ColumnIndex); + } + else + { + DataGridViewControl.RestoreCell(e.RowIndex, e.ColumnIndex); + } + } + } + private static IEnumerable> CreateFormattingRules() { return new[] Index: Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/SectionResultRows/MacroStabilityOutwardsSectionResultRow.cs =================================================================== diff -u -rd55fd711068a8742e38fd3833ee25209b48089ca -rb04dd6bba80cd9140af7752d377a428c0aa7366b --- Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/SectionResultRows/MacroStabilityOutwardsSectionResultRow.cs (.../MacroStabilityOutwardsSectionResultRow.cs) (revision d55fd711068a8742e38fd3833ee25209b48089ca) +++ Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/SectionResultRows/MacroStabilityOutwardsSectionResultRow.cs (.../MacroStabilityOutwardsSectionResultRow.cs) (revision b04dd6bba80cd9140af7752d377a428c0aa7366b) @@ -101,7 +101,7 @@ combinedAssemblyCategoryGroupIndex = constructionProperties.CombinedAssemblyCategoryGroupIndex; manualAssemblyCategoryGroupIndex = constructionProperties.ManualAssemblyCategoryGroupIndex; - ColumnStateDefinitions = CreateColumnStateDefinitions(); + CreateColumnStateDefinitions(); Update(); } @@ -251,41 +251,18 @@ } } - private Dictionary CreateColumnStateDefinitions() + private void CreateColumnStateDefinitions() { - return new Dictionary - { - { - simpleAssessmentResultIndex, new DataGridViewColumnStateDefinition() - }, - { - detailedAssessmentResultIndex, new DataGridViewColumnStateDefinition() - }, - { - detailedAssessmentProbabilityIndex, new DataGridViewColumnStateDefinition() - }, - { - tailorMadeAssessmentResultIndex, new DataGridViewColumnStateDefinition() - }, - { - tailorMadeAssessmentProbabilityIndex, new DataGridViewColumnStateDefinition() - }, - { - simpleAssemblyCategoryGroupIndex, new DataGridViewColumnStateDefinition() - }, - { - detailedAssemblyCategoryGroupIndex, new DataGridViewColumnStateDefinition() - }, - { - tailorMadeAssemblyCategoryGroupIndex, new DataGridViewColumnStateDefinition() - }, - { - combinedAssemblyCategoryGroupIndex, new DataGridViewColumnStateDefinition() - }, - { - manualAssemblyCategoryGroupIndex, new DataGridViewColumnStateDefinition() - } - }; + ColumnStateDefinitions.Add(simpleAssessmentResultIndex, new DataGridViewColumnStateDefinition()); + ColumnStateDefinitions.Add(detailedAssessmentResultIndex, new DataGridViewColumnStateDefinition()); + ColumnStateDefinitions.Add(detailedAssessmentProbabilityIndex, new DataGridViewColumnStateDefinition()); + ColumnStateDefinitions.Add(tailorMadeAssessmentResultIndex, new DataGridViewColumnStateDefinition()); + ColumnStateDefinitions.Add(tailorMadeAssessmentProbabilityIndex, new DataGridViewColumnStateDefinition()); + ColumnStateDefinitions.Add(simpleAssemblyCategoryGroupIndex, new DataGridViewColumnStateDefinition()); + ColumnStateDefinitions.Add(detailedAssemblyCategoryGroupIndex, new DataGridViewColumnStateDefinition()); + ColumnStateDefinitions.Add(tailorMadeAssemblyCategoryGroupIndex, new DataGridViewColumnStateDefinition()); + ColumnStateDefinitions.Add(combinedAssemblyCategoryGroupIndex, new DataGridViewColumnStateDefinition()); + ColumnStateDefinitions.Add(manualAssemblyCategoryGroupIndex, new DataGridViewColumnStateDefinition()); } private void Update()