Index: Core/Common/src/Core.Common.Controls/DataGrid/DataGridViewComboBoxItemWrapper.cs =================================================================== diff -u -r24da3aa72ccc0776599628c9f971081694048d9a -r4cd987d7abd8340848d2159381f1d8ed4dfb7d96 --- Core/Common/src/Core.Common.Controls/DataGrid/DataGridViewComboBoxItemWrapper.cs (.../DataGridViewComboBoxItemWrapper.cs) (revision 24da3aa72ccc0776599628c9f971081694048d9a) +++ Core/Common/src/Core.Common.Controls/DataGrid/DataGridViewComboBoxItemWrapper.cs (.../DataGridViewComboBoxItemWrapper.cs) (revision 4cd987d7abd8340848d2159381f1d8ed4dfb7d96) @@ -49,7 +49,7 @@ { get { - return wrappedObject == null ? Resources.DataGridViewComboBoxItemWrapper_DisplayName_None : wrappedObject.ToString(); + return wrappedObject == null ? Resources.DisplayName_None : wrappedObject.ToString(); } } Index: Core/Common/src/Core.Common.Controls/Properties/Resources.Designer.cs =================================================================== diff -u -rfea3ed82dfb6dfcad535eef16efcbaa9c01564ed -r4cd987d7abd8340848d2159381f1d8ed4dfb7d96 --- Core/Common/src/Core.Common.Controls/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision fea3ed82dfb6dfcad535eef16efcbaa9c01564ed) +++ Core/Common/src/Core.Common.Controls/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 4cd987d7abd8340848d2159381f1d8ed4dfb7d96) @@ -84,9 +84,9 @@ /// /// Looks up a localized string similar to <geen>. /// - public static string DataGridViewComboBoxItemWrapper_DisplayName_None { + public static string DisplayName_None { get { - return ResourceManager.GetString("DataGridViewComboBoxItemWrapper_DisplayName_None", resourceCulture); + return ResourceManager.GetString("DisplayName_None", resourceCulture); } } } Index: Core/Common/src/Core.Common.Controls/Properties/Resources.resx =================================================================== diff -u -r34af24d6bf23796e627fd03b7532d4abe6fc715c -r4cd987d7abd8340848d2159381f1d8ed4dfb7d96 --- Core/Common/src/Core.Common.Controls/Properties/Resources.resx (.../Resources.resx) (revision 34af24d6bf23796e627fd03b7532d4abe6fc715c) +++ Core/Common/src/Core.Common.Controls/Properties/Resources.resx (.../Resources.resx) (revision 4cd987d7abd8340848d2159381f1d8ed4dfb7d96) @@ -117,7 +117,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + <geen> \ No newline at end of file Index: Core/Common/test/Core.Common.Controls.Test/DataGrid/DataGridViewComboBoxItemWrapperTest.cs =================================================================== diff -u -r24da3aa72ccc0776599628c9f971081694048d9a -r4cd987d7abd8340848d2159381f1d8ed4dfb7d96 --- Core/Common/test/Core.Common.Controls.Test/DataGrid/DataGridViewComboBoxItemWrapperTest.cs (.../DataGridViewComboBoxItemWrapperTest.cs) (revision 24da3aa72ccc0776599628c9f971081694048d9a) +++ Core/Common/test/Core.Common.Controls.Test/DataGrid/DataGridViewComboBoxItemWrapperTest.cs (.../DataGridViewComboBoxItemWrapperTest.cs) (revision 4cd987d7abd8340848d2159381f1d8ed4dfb7d96) @@ -50,7 +50,7 @@ var dataGridViewComboBoxItemWrapper = new DataGridViewComboBoxItemWrapper(null); // Assert - Assert.AreEqual(Resources.DataGridViewComboBoxItemWrapper_DisplayName_None, dataGridViewComboBoxItemWrapper.DisplayName); + Assert.AreEqual("", dataGridViewComboBoxItemWrapper.DisplayName); Assert.IsNull(dataGridViewComboBoxItemWrapper.WrappedObject); Assert.AreEqual(dataGridViewComboBoxItemWrapper, dataGridViewComboBoxItemWrapper.This); } Index: Ringtoets/Common/src/Ringtoets.Common.Forms/UITypeEditors/SelectionEditor.cs =================================================================== diff -u -r4539b4546747c257739b1695b9ebc9c29e393ffe -r4cd987d7abd8340848d2159381f1d8ed4dfb7d96 --- Ringtoets/Common/src/Ringtoets.Common.Forms/UITypeEditors/SelectionEditor.cs (.../SelectionEditor.cs) (revision 4539b4546747c257739b1695b9ebc9c29e393ffe) +++ Ringtoets/Common/src/Ringtoets.Common.Forms/UITypeEditors/SelectionEditor.cs (.../SelectionEditor.cs) (revision 4cd987d7abd8340848d2159381f1d8ed4dfb7d96) @@ -63,17 +63,32 @@ editorService.DropDownControl(listBox); // Return user selected object, or original value if user did not select anything: - return listBox.SelectedItem ?? originalValue; + if (listBox.SelectedItem == null) + { + return originalValue; + } + + if (ReferenceEquals(listBox.SelectedItem, NullItem)) + { + return null; + } + + return listBox.SelectedItem; } return base.EditValue(context, provider, originalValue); } /// - /// Gets which member to show of in the dropdown editor. + /// Sets which member to show of in the dropdown editor. /// protected string DisplayMember { private get; set; } /// + /// Sets the item to show which represents a null value. + /// + protected TProperty NullItem { private get; set; } + + /// /// Gets the available options which populate the dropdown editor. /// /// The context on which to base the available options. @@ -112,6 +127,15 @@ }; listBox.SelectedValueChanged += (sender, eventArgs) => editorService.CloseDropDown(); + if (NullItem != null) + { + int index = listBox.Items.Add(NullItem); + if (GetCurrentOption(context) == null) + { + listBox.SelectedIndex = index; + } + } + foreach (TProperty option in GetAvailableOptions(context)) { int index = listBox.Items.Add(option); Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/UITypeEditors/SelectionEditorTest.cs =================================================================== diff -u -r4539b4546747c257739b1695b9ebc9c29e393ffe -r4cd987d7abd8340848d2159381f1d8ed4dfb7d96 --- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/UITypeEditors/SelectionEditorTest.cs (.../SelectionEditorTest.cs) (revision 4539b4546747c257739b1695b9ebc9c29e393ffe) +++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/UITypeEditors/SelectionEditorTest.cs (.../SelectionEditorTest.cs) (revision 4cd987d7abd8340848d2159381f1d8ed4dfb7d96) @@ -105,5 +105,36 @@ mockRepository.VerifyAll(); } + + [Test] + public void EditValue_NullItem_ReturnsNull() + { + var nullItem = new object(); + var editor = new TestSelectionEditor(nullItem); + + var mockRepository = new MockRepository(); + var provider = mockRepository.StrictMock(); + var service = mockRepository.StrictMock(); + var context = mockRepository.StrictMock(); + provider.Expect(p => p.GetService(null)).IgnoreArguments().Return(service); + service.Expect(s => s.DropDownControl(null)).IgnoreArguments(); + service.Expect(s => s.CloseDropDown()); + mockRepository.ReplayAll(); + + // Call + var result = editor.EditValue(context, provider, nullItem); + + // Assert + Assert.IsNull(result); + mockRepository.VerifyAll(); + } + + private class TestSelectionEditor : SelectionEditor + { + public TestSelectionEditor(object nullItem) + { + NullItem = nullItem; + } + } } } \ No newline at end of file Index: Ringtoets/StabilityStoneCover/src/Ringtoets.StabilityStoneCover.Forms/PropertyClasses/StabilityStoneCoverWaveConditionsCalculationInputContextProperties.cs =================================================================== diff -u -rb0b6b4fe952844ddc3e253e6f88a6cccc97dc71f -r4cd987d7abd8340848d2159381f1d8ed4dfb7d96 --- Ringtoets/StabilityStoneCover/src/Ringtoets.StabilityStoneCover.Forms/PropertyClasses/StabilityStoneCoverWaveConditionsCalculationInputContextProperties.cs (.../StabilityStoneCoverWaveConditionsCalculationInputContextProperties.cs) (revision b0b6b4fe952844ddc3e253e6f88a6cccc97dc71f) +++ Ringtoets/StabilityStoneCover/src/Ringtoets.StabilityStoneCover.Forms/PropertyClasses/StabilityStoneCoverWaveConditionsCalculationInputContextProperties.cs (.../StabilityStoneCoverWaveConditionsCalculationInputContextProperties.cs) (revision 4cd987d7abd8340848d2159381f1d8ed4dfb7d96) @@ -237,7 +237,6 @@ } } - [DynamicReadOnly] [PropertyOrder(orientationPropertyIndex)] [ResourcesCategory(typeof(RingtoetsCommonFormsResources), "Categories_Schematization")] [ResourcesDisplayName(typeof(RingtoetsCommonFormsResources), "Orientation_DisplayName")] @@ -308,11 +307,5 @@ { return data.ForeshoreProfiles; } - - [DynamicReadOnlyValidationMethod] - public bool DynamicReadOnlyValidationMethod(string propertyName) - { - return data.WrappedData.ForeshoreProfile == null; - } } } \ No newline at end of file Index: Ringtoets/StabilityStoneCover/src/Ringtoets.StabilityStoneCover.Forms/UITypeEditors/StabilityStoneCoverWaveConditionsCalculationInputContextForeshoreProfileEditor.cs =================================================================== diff -u -re4313e642aa3af2d1f1ced4c397c421579cfb36d -r4cd987d7abd8340848d2159381f1d8ed4dfb7d96 --- Ringtoets/StabilityStoneCover/src/Ringtoets.StabilityStoneCover.Forms/UITypeEditors/StabilityStoneCoverWaveConditionsCalculationInputContextForeshoreProfileEditor.cs (.../StabilityStoneCoverWaveConditionsCalculationInputContextForeshoreProfileEditor.cs) (revision e4313e642aa3af2d1f1ced4c397c421579cfb36d) +++ Ringtoets/StabilityStoneCover/src/Ringtoets.StabilityStoneCover.Forms/UITypeEditors/StabilityStoneCoverWaveConditionsCalculationInputContextForeshoreProfileEditor.cs (.../StabilityStoneCoverWaveConditionsCalculationInputContextForeshoreProfileEditor.cs) (revision 4cd987d7abd8340848d2159381f1d8ed4dfb7d96) @@ -21,10 +21,13 @@ using System.Collections.Generic; using System.ComponentModel; +using System.Linq; +using Core.Common.Base.Geometry; using Core.Common.Utils.Reflection; using Ringtoets.Common.Data.DikeProfiles; using Ringtoets.Common.Forms.UITypeEditors; using Ringtoets.StabilityStoneCover.Forms.PropertyClasses; +using CoreCommonControlsResources = Core.Common.Controls.Properties.Resources; namespace Ringtoets.StabilityStoneCover.Forms.UITypeEditors { @@ -40,7 +43,11 @@ /// public StabilityStoneCoverWaveConditionsCalculationInputContextForeshoreProfileEditor() { - DisplayMember = TypeUtils.GetMemberName(dp => dp.Name); + DisplayMember = TypeUtils.GetMemberName(dp => dp.Name); + NullItem = new ForeshoreProfile(new Point2D(0,0), Enumerable.Empty(), null, new ForeshoreProfile.ConstructionProperties + { + Name = CoreCommonControlsResources.DisplayName_None + }); } protected override IEnumerable GetAvailableOptions(ITypeDescriptorContext context) Index: Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Forms.Test/PropertyClasses/StabilityStoneCoverWaveConditionsCalculationInputContextPropertiesTest.cs =================================================================== diff -u -r9b0f19dce46cb8c54cd27dadb2d79888035a1aff -r4cd987d7abd8340848d2159381f1d8ed4dfb7d96 --- Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Forms.Test/PropertyClasses/StabilityStoneCoverWaveConditionsCalculationInputContextPropertiesTest.cs (.../StabilityStoneCoverWaveConditionsCalculationInputContextPropertiesTest.cs) (revision 9b0f19dce46cb8c54cd27dadb2d79888035a1aff) +++ Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Forms.Test/PropertyClasses/StabilityStoneCoverWaveConditionsCalculationInputContextPropertiesTest.cs (.../StabilityStoneCoverWaveConditionsCalculationInputContextPropertiesTest.cs) (revision 4cd987d7abd8340848d2159381f1d8ed4dfb7d96) @@ -125,7 +125,7 @@ } [Test] - public void Data_SetNewInputContextInstanceWithDikeProfile_ReturnCorrectPropertyValues() + public void Data_SetNewInputContextInstanceWithForeshoreProfile_ReturnCorrectPropertyValues() { // Setup var assessmentSectionMock = mockRepository.StrictMock(); @@ -382,7 +382,7 @@ PropertyDescriptor orientationProperty = dynamicProperties[orientationPropertyIndex]; Assert.IsNotNull(orientationProperty); - Assert.AreEqual(!withForeshoreProfile, orientationProperty.IsReadOnly); + Assert.IsFalse(orientationProperty.IsReadOnly); Assert.AreEqual(schematizationCategory, orientationProperty.Category); Assert.AreEqual("Oriëntatie [°]", orientationProperty.DisplayName); Assert.AreEqual("Oriëntatie van het voorlandprofiel ten opzichte van het noorden.", orientationProperty.Description); Index: Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Forms.Test/UITypeEditors/StabilityStoneCoverWaveConditionsCalculationInputContextForeshoreProfileEditorTest.cs =================================================================== diff -u -re4313e642aa3af2d1f1ced4c397c421579cfb36d -r4cd987d7abd8340848d2159381f1d8ed4dfb7d96 --- Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Forms.Test/UITypeEditors/StabilityStoneCoverWaveConditionsCalculationInputContextForeshoreProfileEditorTest.cs (.../StabilityStoneCoverWaveConditionsCalculationInputContextForeshoreProfileEditorTest.cs) (revision e4313e642aa3af2d1f1ced4c397c421579cfb36d) +++ Ringtoets/StabilityStoneCover/test/Ringtoets.StabilityStoneCover.Forms.Test/UITypeEditors/StabilityStoneCoverWaveConditionsCalculationInputContextForeshoreProfileEditorTest.cs (.../StabilityStoneCoverWaveConditionsCalculationInputContextForeshoreProfileEditorTest.cs) (revision 4cd987d7abd8340848d2159381f1d8ed4dfb7d96) @@ -78,7 +78,8 @@ var descriptorContextMock = mockRepository.StrictMock(); serviceProviderMock.Expect(p => p.GetService(null)).IgnoreArguments().Return(serviceMock); serviceMock.Expect(s => s.DropDownControl(null)).IgnoreArguments(); - descriptorContextMock.Expect(c => c.Instance).Return(propertyBag).Repeat.Twice(); + serviceMock.Expect(s => s.CloseDropDown()); + descriptorContextMock.Expect(c => c.Instance).Return(propertyBag).Repeat.Times(3); mockRepository.ReplayAll(); var someValue = new object(); @@ -87,7 +88,7 @@ var result = editor.EditValue(descriptorContextMock, serviceProviderMock, someValue); // Assert - Assert.AreSame(someValue, result); + Assert.IsNull(result); mockRepository.VerifyAll(); } @@ -128,7 +129,7 @@ serviceProviderMock.Expect(p => p.GetService(null)).IgnoreArguments().Return(serviceMock); serviceMock.Expect(s => s.DropDownControl(null)).IgnoreArguments(); serviceMock.Expect(s => s.CloseDropDown()).IgnoreArguments(); - descriptorContextMock.Expect(c => c.Instance).Return(propertyBag).Repeat.Twice(); + descriptorContextMock.Expect(c => c.Instance).Return(propertyBag).Repeat.Times(3); mockRepository.ReplayAll(); var someValue = new object();