Index: Core/Components/src/Core.Components.Gis.Forms/Views/WmtsLocationControl.Designer.cs =================================================================== diff -u -r5be1ab23e8cdc4eacc23d0ba5b4f921d6be4a9c1 -rf6f7505803cfaf42422b61d33b16a7b714ce6400 --- Core/Components/src/Core.Components.Gis.Forms/Views/WmtsLocationControl.Designer.cs (.../WmtsLocationControl.Designer.cs) (revision 5be1ab23e8cdc4eacc23d0ba5b4f921d6be4a9c1) +++ Core/Components/src/Core.Components.Gis.Forms/Views/WmtsLocationControl.Designer.cs (.../WmtsLocationControl.Designer.cs) (revision f6f7505803cfaf42422b61d33b16a7b714ce6400) @@ -78,7 +78,7 @@ this.urlLocationComboBox.FormattingEnabled = true; this.urlLocationComboBox.Name = "urlLocationComboBox"; this.urlLocationComboBox.Sorted = true; - this.urlLocationComboBox.SelectedIndexChanged += new System.EventHandler(this.OnUrlLocationSelectedIndexChanged); + this.urlLocationComboBox.SelectedValueChanged += new System.EventHandler(this.OnUrlLocationSelectedValueChanged); // // flowLayoutPanel2 // Index: Core/Components/src/Core.Components.Gis.Forms/Views/WmtsLocationControl.cs =================================================================== diff -u -r1eeed8168101200ec6bbfb79defc20c67a1f7edb -rf6f7505803cfaf42422b61d33b16a7b714ce6400 --- Core/Components/src/Core.Components.Gis.Forms/Views/WmtsLocationControl.cs (.../WmtsLocationControl.cs) (revision 1eeed8168101200ec6bbfb79defc20c67a1f7edb) +++ Core/Components/src/Core.Components.Gis.Forms/Views/WmtsLocationControl.cs (.../WmtsLocationControl.cs) (revision f6f7505803cfaf42422b61d33b16a7b714ce6400) @@ -49,6 +49,8 @@ private readonly List capabilities; private string wmtsConnectionInfoFilePath; + private bool urlLocationComboBoxUpdating; + /// /// Creates a new instance of . /// @@ -70,7 +72,7 @@ InitializeComponent(); InitializeWmtsConnectionInfos(); InitializeDataGridView(); - UpdateComboBoxDataSource(); + InitializeComboBox(); InitializeEventHandlers(); PreselectForMapData(activeWmtsMapData); @@ -259,22 +261,27 @@ #region ComboBox - private void UpdateComboBoxDataSource() + private void InitializeComboBox() { - UpdateComboBoxDataSource(urlLocationComboBox.SelectedItem); + urlLocationComboBox.ValueMember = nameof(WmtsConnectionInfo.Url); + UpdateComboBoxDataSource(wmtsConnectionInfos.FirstOrDefault()); + } private void UpdateComboBoxDataSource(object selectedItem) { - urlLocationComboBox.DataSource = null; + urlLocationComboBox.BeginUpdate(); + + urlLocationComboBoxUpdating = true; + urlLocationComboBox.DataSource = wmtsConnectionInfos.OrderBy(i => i.Name).ToList(); urlLocationComboBox.DisplayMember = nameof(WmtsConnectionInfo.Name); - urlLocationComboBox.ValueMember = nameof(WmtsConnectionInfo.Url); - urlLocationComboBox.DataSource = wmtsConnectionInfos.ToArray(); + urlLocationComboBox.SelectedItem = null; + urlLocationComboBoxUpdating = false; - if (selectedItem != null) - { - urlLocationComboBox.SelectedItem = selectedItem; - } + urlLocationComboBox.EndUpdate(); + + urlLocationComboBox.SelectedItem = selectedItem; + UpdateButtons(); } @@ -292,8 +299,12 @@ dataGridViewControl.AddCurrentCellChangedHandler(DataGridViewCurrentCellChangedHandler); } - private void OnUrlLocationSelectedIndexChanged(object sender, EventArgs e) + private void OnUrlLocationSelectedValueChanged(object sender, EventArgs e) { + if (urlLocationComboBoxUpdating || urlLocationComboBox.SelectedIndex == -1) + { + return; + } ClearDataGridViewDataSource(); var selectedWmtsConnectionInfo = urlLocationComboBox.SelectedItem as WmtsConnectionInfo; Index: Core/Components/src/Core.Components.Gis.Forms/Views/WmtsLocationControl.resx =================================================================== diff -u -r5be1ab23e8cdc4eacc23d0ba5b4f921d6be4a9c1 -rf6f7505803cfaf42422b61d33b16a7b714ce6400 --- Core/Components/src/Core.Components.Gis.Forms/Views/WmtsLocationControl.resx (.../WmtsLocationControl.resx) (revision 5be1ab23e8cdc4eacc23d0ba5b4f921d6be4a9c1) +++ Core/Components/src/Core.Components.Gis.Forms/Views/WmtsLocationControl.resx (.../WmtsLocationControl.resx) (revision f6f7505803cfaf42422b61d33b16a7b714ce6400) @@ -334,7 +334,7 @@ dataGridViewControl - Core.Common.Controls.DataGrid.DataGridViewControl, Core.Common.Controls, Version=17.1.1.8459, Culture=neutral, PublicKeyToken=null + Core.Common.Controls.DataGrid.DataGridViewControl, Core.Common.Controls, Version=17.1.1.8553, Culture=neutral, PublicKeyToken=null tableLayoutPanel1 Index: Core/Components/test/Core.Components.Gis.Forms.Test/Views/WmtsLocationControlTest.cs =================================================================== diff -u -r1eeed8168101200ec6bbfb79defc20c67a1f7edb -rf6f7505803cfaf42422b61d33b16a7b714ce6400 --- Core/Components/test/Core.Components.Gis.Forms.Test/Views/WmtsLocationControlTest.cs (.../WmtsLocationControlTest.cs) (revision 1eeed8168101200ec6bbfb79defc20c67a1f7edb) +++ Core/Components/test/Core.Components.Gis.Forms.Test/Views/WmtsLocationControlTest.cs (.../WmtsLocationControlTest.cs) (revision f6f7505803cfaf42422b61d33b16a7b714ce6400) @@ -193,8 +193,8 @@ var urlLocations = (ComboBox) new ComboBoxTester("urlLocationComboBox", form).TheObject; Assert.AreEqual(ComboBoxStyle.DropDownList, urlLocations.DropDownStyle); - var connectionInfos = (WmtsConnectionInfo[]) urlLocations.DataSource; - Assert.Contains(activeWmtsConnectionInfo, connectionInfos); + var connectionInfos = (IList) urlLocations.DataSource; + Assert.Contains(activeWmtsConnectionInfo, connectionInfos.ToArray()); Assert.AreEqual("Name", urlLocations.DisplayMember); Assert.AreEqual("Url", urlLocations.ValueMember); @@ -471,8 +471,8 @@ // Then var comboBox = (ComboBox) new ComboBoxTester("urlLocationComboBox", form).TheObject; - var dataSource = (WmtsConnectionInfo[]) comboBox.DataSource; - Assert.AreEqual(2, dataSource.Length); + var dataSource = (IList) comboBox.DataSource; + Assert.AreEqual(2, dataSource.Count); var firstWmtsConnectionInfo = (WmtsConnectionInfo) comboBox.Items[0]; Assert.AreEqual("Actueel Hoogtebestand Nederland (AHN1)", firstWmtsConnectionInfo.Name); @@ -512,8 +512,8 @@ // Then var comboBox = (ComboBox) new ComboBoxTester("urlLocationComboBox", form).TheObject; - var dataSource = (WmtsConnectionInfo[]) comboBox.DataSource; - Assert.AreEqual(0, dataSource.Length); + var dataSource = (IList) comboBox.DataSource; + Assert.AreEqual(0, dataSource.Count); } }; @@ -557,8 +557,8 @@ // Then var comboBox = (ComboBox) new ComboBoxTester("urlLocationComboBox", form).TheObject; - var dataSource = (WmtsConnectionInfo[]) comboBox.DataSource; - Assert.AreEqual(0, dataSource.Length); + var dataSource = (IList) comboBox.DataSource; + Assert.AreEqual(0, dataSource.Count); } } @@ -609,8 +609,8 @@ // Then var comboBox = (ComboBox) new ComboBoxTester("urlLocationComboBox", form).TheObject; - var dataSource = (WmtsConnectionInfo[]) comboBox.DataSource; - Assert.AreEqual(1, dataSource.Length); + var dataSource = (IList) comboBox.DataSource; + Assert.AreEqual(1, dataSource.Count); var item = (WmtsConnectionInfo) comboBox.Items[0]; Assert.AreEqual(name, item.Name); Assert.AreEqual(url, item.Url); @@ -658,8 +658,8 @@ // Then var comboBox = (ComboBox) new ComboBoxTester("urlLocationComboBox", form).TheObject; - var dataSource = (WmtsConnectionInfo[]) comboBox.DataSource; - Assert.AreEqual(0, dataSource.Length); + var dataSource = (IList) comboBox.DataSource; + Assert.AreEqual(0, dataSource.Count); var connectToButton = (Button) new ButtonTester("connectToButton", form).TheObject; Assert.IsFalse(connectToButton.Enabled); @@ -720,8 +720,8 @@ string exceptionMessage = $"Er is een onverwachte fout opgetreden tijdens het schrijven van het bestand '{configFilePath}'."; TestHelper.AssertLogMessageWithLevelIsGenerated(action, Tuple.Create(exceptionMessage, LogLevelConstant.Error)); var comboBox = (ComboBox) new ComboBoxTester("urlLocationComboBox", form).TheObject; - var dataSource = (WmtsConnectionInfo[]) comboBox.DataSource; - Assert.AreEqual(1, dataSource.Length); + var dataSource = (IList) comboBox.DataSource; + Assert.AreEqual(1, dataSource.Count); } } } @@ -731,8 +731,9 @@ public void GivenWmtsLocationControlAndEditLocationClicked_WhenDialogCanceled_ThenWmtsLocationsNotUpdated() { // Given - wmtsCapabilityFactory.Expect(wcf => wcf.GetWmtsCapabilities(null)) - .IgnoreArguments() + const string capabilitiesName = "oldName"; + const string capabilitiesUrl = "oldUrl"; + wmtsCapabilityFactory.Expect(wcf => wcf.GetWmtsCapabilities(capabilitiesUrl)) .Return(Enumerable.Empty()); mockRepository.ReplayAll(); @@ -743,33 +744,35 @@ using (new UseCustomSettingsHelper(new TestSettingsHelper { - ApplicationLocalUserSettingsDirectory = TestHelper.GetTestDataPath(testPath, "noConfig") + ApplicationLocalUserSettingsDirectory = TestHelper.GetScratchPadPath(nameof(GivenWmtsLocationControlAndEditLocationClicked_WhenDialogCanceled_ThenWmtsLocationsNotUpdated)) })) - using (new UseCustomTileSourceFactoryConfig(tileFactory)) - using (var form = new Form()) - using (var control = new WmtsLocationControl(null, wmtsCapabilityFactory)) + using (new DirectoryDisposeHelper(TestHelper.GetScratchPadPath(), nameof(GivenWmtsLocationControlAndEditLocationClicked_WhenDialogCanceled_ThenWmtsLocationsNotUpdated))) { - form.Controls.Add(control); - form.Show(); + string filePath = Path.Combine(SettingsHelper.Instance.GetApplicationLocalUserSettingsDirectory(), + wmtsconnectioninfoConfigFile); - var comboBox = (ComboBox) new ComboBoxTester("urlLocationComboBox", form).TheObject; - comboBox.DataSource = new[] + WriteToFile(filePath, new WmtsConnectionInfo(capabilitiesName, capabilitiesUrl)); + + using (new UseCustomTileSourceFactoryConfig(tileFactory)) + using (var form = new Form()) + using (var control = new WmtsLocationControl(null, wmtsCapabilityFactory)) { - new WmtsConnectionInfo("oldName", "oldUrl") - }; + form.Controls.Add(control); + form.Show(); - var editLocationButton = new ButtonTester("editLocationButton", form); - ((Button) editLocationButton.TheObject).Enabled = true; + var editLocationButton = new ButtonTester("editLocationButton", form); - // When - editLocationButton.Click(); + // When + editLocationButton.Click(); - // Then - var dataSource = (WmtsConnectionInfo[]) comboBox.DataSource; - Assert.AreEqual(1, dataSource.Length); - var item = (WmtsConnectionInfo) comboBox.Items[0]; - Assert.AreEqual("oldName", item.Name); - Assert.AreEqual("oldUrl", item.Url); + // Then + var comboBox = (ComboBox) new ComboBoxTester("urlLocationComboBox", form).TheObject; + var dataSource = (IList) comboBox.DataSource; + Assert.AreEqual(1, dataSource.Count); + var item = (WmtsConnectionInfo) comboBox.Items[0]; + Assert.AreEqual(capabilitiesName, item.Name); + Assert.AreEqual(capabilitiesUrl, item.Url); + } } } @@ -778,10 +781,11 @@ public void GivenWmtsLocationControlAndEditLocationClicked_WhenValidDataInDialog_ThenWmtsLocationsUpdated() { // Given - const string newName = @"newName"; - const string newUrl = @"newUrl"; + const string newName = "newName"; + const string newUrl = "newUrl"; + const string oldUrl = "oldUrl"; - wmtsCapabilityFactory.Expect(wcf => wcf.GetWmtsCapabilities("oldUrl")).Return(Enumerable.Empty()); + wmtsCapabilityFactory.Expect(wcf => wcf.GetWmtsCapabilities(oldUrl)).Return(Enumerable.Empty()); wmtsCapabilityFactory.Expect(wcf => wcf.GetWmtsCapabilities(newUrl)).Return(Enumerable.Empty()); mockRepository.ReplayAll(); @@ -803,35 +807,37 @@ using (new UseCustomSettingsHelper(new TestSettingsHelper { - ApplicationLocalUserSettingsDirectory = TestHelper.GetTestDataPath(testPath, "noConfig") + ApplicationLocalUserSettingsDirectory = TestHelper.GetScratchPadPath(nameof(GivenWmtsLocationControlAndEditLocationClicked_WhenValidDataInDialog_ThenWmtsLocationsUpdated)) })) - using (new FileDisposeHelper(Path.Combine(SettingsHelper.Instance.GetApplicationLocalUserSettingsDirectory(), - wmtsconnectioninfoConfigFile))) - using (new UseCustomTileSourceFactoryConfig(tileFactory)) - using (var form = new Form()) - using (var control = new WmtsLocationControl(null, wmtsCapabilityFactory)) { - form.Controls.Add(control); - form.Show(); - - var comboBox = (ComboBox) new ComboBoxTester("urlLocationComboBox", form).TheObject; - comboBox.DataSource = new List + using (new DirectoryDisposeHelper(TestHelper.GetScratchPadPath(), nameof(GivenWmtsLocationControlAndEditLocationClicked_WhenValidDataInDialog_ThenWmtsLocationsUpdated))) { - new WmtsConnectionInfo("oldName", "oldUrl") - }; + string filePath = Path.Combine(SettingsHelper.Instance.GetApplicationLocalUserSettingsDirectory(), + wmtsconnectioninfoConfigFile); - var editLocationButton = new ButtonTester("editLocationButton", form); - ((Button) editLocationButton.TheObject).Enabled = true; + WriteToFile(filePath, new WmtsConnectionInfo("oldName", oldUrl)); - // When - editLocationButton.Click(); + using (new UseCustomTileSourceFactoryConfig(tileFactory)) + using (var form = new Form()) + using (var control = new WmtsLocationControl(null, wmtsCapabilityFactory)) + { + form.Controls.Add(control); + form.Show(); - // Then - var dataSource = (WmtsConnectionInfo[]) comboBox.DataSource; - Assert.AreEqual(1, dataSource.Length); - var item = (WmtsConnectionInfo) comboBox.Items[0]; - Assert.AreEqual(newName, item.Name); - Assert.AreEqual(newUrl, item.Url); + var editLocationButton = new ButtonTester("editLocationButton", form); + + // When + editLocationButton.Click(); + + // Then + var comboBox = (ComboBox) new ComboBoxTester("urlLocationComboBox", form).TheObject; + var dataSource = (IList) comboBox.DataSource; + Assert.AreEqual(1, dataSource.Count); + var item = (WmtsConnectionInfo) comboBox.Items[0]; + Assert.AreEqual(newName, item.Name); + Assert.AreEqual(newUrl, item.Url); + } + } } } @@ -982,5 +988,13 @@ connectToButton.Enabled = true; return control; } + + private static void WriteToFile(string filePath, WmtsConnectionInfo wmtsConnectionInfo) + { + File.WriteAllText(filePath, "" + + $"{wmtsConnectionInfo.Name}{wmtsConnectionInfo.Url}" + + "") + ; + } } } \ No newline at end of file