Index: Core/Components/src/Core.Components.Charting/Data/PointBasedChartData.cs =================================================================== diff -u -rfbb37872d09f1ded75ce2209e8e48a6b64d8a78f -r3167b898b071fea4cf86c775bca5467fab086038 --- Core/Components/src/Core.Components.Charting/Data/PointBasedChartData.cs (.../PointBasedChartData.cs) (revision fbb37872d09f1ded75ce2209e8e48a6b64d8a78f) +++ Core/Components/src/Core.Components.Charting/Data/PointBasedChartData.cs (.../PointBasedChartData.cs) (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -29,8 +29,8 @@ /// /// Base class for which is based on a collection of points. /// - public abstract class PointBasedChartData : ChartData { - + public abstract class PointBasedChartData : ChartData + { /// /// Creates a new instance of . /// Index: Core/Components/src/Core.Components.DotSpatial/BaseMap.cs =================================================================== diff -u -r37dc25947c67f84a31ca868d2acceec4f48721cc -r3167b898b071fea4cf86c775bca5467fab086038 --- Core/Components/src/Core.Components.DotSpatial/BaseMap.cs (.../BaseMap.cs) (revision 37dc25947c67f84a31ca868d2acceec4f48721cc) +++ Core/Components/src/Core.Components.DotSpatial/BaseMap.cs (.../BaseMap.cs) (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -19,14 +19,10 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. -using System; -using System.IO; using System.Windows.Forms; +using Core.Components.DotSpatial.Converter; using Core.Components.DotSpatial.Data; -using Core.Components.DotSpatial.Exceptions; -using Core.Components.DotSpatial.Properties; using DotSpatial.Controls; -using log4net; namespace Core.Components.DotSpatial { @@ -35,7 +31,7 @@ /// public sealed class BaseMap : Control, IMap { - private static readonly ILog Log = LogManager.GetLogger(typeof(BaseMap)); + private readonly MapDataFactory mapDataFactory = new MapDataFactory(); private MapData data; private Map map; @@ -50,9 +46,6 @@ /// /// Gets and sets the . When is not empty it will load the data on the map. /// - /// Thrown when is null. - /// Thrown when does not exist. - /// Thrown when the data in is not valid. public MapData Data { get @@ -66,47 +59,29 @@ return; } - if (value == null) - { - throw new ArgumentNullException("MapData", "MapData is required when adding shapeFiles"); - } + data = value; + DrawFeatureSets(); + } + } - if (value.IsValid()) - { - data = value; - LoadData(); - } - else - { - throw new MapDataException(Resources.BaseMap_SetMapData_The_data_available_in_MapData_is_not_valid_); - } + private void DrawFeatureSets() + { + map.ClearLayers(); + if (data != null) + { + map.Layers.Add(mapDataFactory.Create(data)); } } - /// - /// Initialize the for the - /// private void InitializeMapView() { map = new Map { + ProjectionModeDefine = ActionMode.Never, Dock = DockStyle.Fill, FunctionMode = FunctionMode.Pan, }; Controls.Add(map); } - - /// - /// Loads the data from the files given in and shows them on the . - /// - private void LoadData() - { - foreach (string filePath in data.FilePaths) - { - map.AddLayer(filePath); - - Log.InfoFormat(Resources.BaseMap_LoadData_Shape_file_on_path__0__is_added_to_the_map_, filePath); - } - } } } \ No newline at end of file Index: Core/Components/src/Core.Components.DotSpatial/Converter/IMapDataConverter.cs =================================================================== diff -u --- Core/Components/src/Core.Components.DotSpatial/Converter/IMapDataConverter.cs (revision 0) +++ Core/Components/src/Core.Components.DotSpatial/Converter/IMapDataConverter.cs (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -0,0 +1,50 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using Core.Components.DotSpatial.Data; +using DotSpatial.Data; + +namespace Core.Components.DotSpatial.Converter +{ + /// + /// The interface for a converter which converts into . + /// + public interface IMapDataConverter + { + /// + /// Checks whether the can convert the . + /// + /// The to check for. + /// True if the can be converter by the + /// , false otheriwse. + bool CanConvertMapData(MapData data); + + /// + /// Creates a based on the that was given. + /// + /// The data to transform into a . + /// A new . + /// Thrown when returns false. + /// Thrown when is null. + FeatureSet Convert(MapData data); + } +} Index: Core/Components/src/Core.Components.DotSpatial/Converter/MapDataConverter.cs =================================================================== diff -u --- Core/Components/src/Core.Components.DotSpatial/Converter/MapDataConverter.cs (revision 0) +++ Core/Components/src/Core.Components.DotSpatial/Converter/MapDataConverter.cs (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -0,0 +1,60 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using Core.Components.DotSpatial.Data; +using DotSpatial.Data; + +namespace Core.Components.DotSpatial.Converter +{ + /// + /// The abstract base class for transforming in specific instances. + /// + public abstract class MapDataConverter : IMapDataConverter where T : MapData + { + public bool CanConvertMapData(MapData data) + { + return data.GetType() == typeof(T); + } + + public FeatureSet Convert(MapData data) + { + if (data == null) + { + throw new ArgumentNullException("Null data cannot be converted into feature sets"); + } + + if (!CanConvertMapData(data)) + { + var message = string.Format("The data of type {0} cannot be converted by this converter.", data.GetType()); + throw new ArgumentException(message); + } + return Convert((T) data); + } + + /// + /// Creates a based on the that was given. + /// + /// The data to transform into a . + /// A new . + protected abstract FeatureSet Convert(T data); + } +} Index: Core/Components/src/Core.Components.DotSpatial/Converter/MapDataFactory.cs =================================================================== diff -u --- Core/Components/src/Core.Components.DotSpatial/Converter/MapDataFactory.cs (revision 0) +++ Core/Components/src/Core.Components.DotSpatial/Converter/MapDataFactory.cs (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -0,0 +1,58 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using Core.Components.DotSpatial.Data; +using DotSpatial.Data; + +namespace Core.Components.DotSpatial.Converter +{ + /// + /// A factory to create data from which can be used on the map. + /// + public class MapDataFactory + { + private readonly IEnumerable converters = new Collection + { + new MapPointDataConverter() + }; + /// + /// Creates a new from the given . + /// + /// The to base the creation of upon. + /// A new . + /// Thrown when the given type is not supported. + public FeatureSet Create(MapData data) + { + foreach (var converter in converters) + { + if (converter.CanConvertMapData(data)) + { + return converter.Convert(data); + } + } + + throw new NotSupportedException(string.Format("MapData of type {0} is not supported.", data.GetType().Name)); + } + } +} Index: Core/Components/src/Core.Components.DotSpatial/Converter/MapPointDataConverter.cs =================================================================== diff -u --- Core/Components/src/Core.Components.DotSpatial/Converter/MapPointDataConverter.cs (revision 0) +++ Core/Components/src/Core.Components.DotSpatial/Converter/MapPointDataConverter.cs (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -0,0 +1,43 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using Core.Components.DotSpatial.Data; +using DotSpatial.Data; +using DotSpatial.Topology; + +namespace Core.Components.DotSpatial.Converter +{ + public class MapPointDataConverter : MapDataConverter + { + protected override FeatureSet Convert(MapPointData data) + { + var featureSet = new FeatureSet(FeatureType.Point); + + foreach (var point in data.Points) + { + var coordinate = new Coordinate(point.Item1, point.Item2); + featureSet.Features.Add(coordinate); + } + + return featureSet; + } + } +} \ No newline at end of file Index: Core/Components/src/Core.Components.DotSpatial/Core.Components.DotSpatial.csproj =================================================================== diff -u -r22f1bb3808dd48f3350d6a39171fe3b002da0a91 -r3167b898b071fea4cf86c775bca5467fab086038 --- Core/Components/src/Core.Components.DotSpatial/Core.Components.DotSpatial.csproj (.../Core.Components.DotSpatial.csproj) (revision 22f1bb3808dd48f3350d6a39171fe3b002da0a91) +++ Core/Components/src/Core.Components.DotSpatial/Core.Components.DotSpatial.csproj (.../Core.Components.DotSpatial.csproj) (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -95,7 +95,12 @@ Component + + + + + Index: Core/Components/src/Core.Components.DotSpatial/Data/MapPointData.cs =================================================================== diff -u --- Core/Components/src/Core.Components.DotSpatial/Data/MapPointData.cs (revision 0) +++ Core/Components/src/Core.Components.DotSpatial/Data/MapPointData.cs (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -0,0 +1,60 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; + +namespace Core.Components.DotSpatial.Data +{ + /// + /// A collection of points for the Map. + /// + public class MapPointData : MapData + { + /// + /// Create a new instance of . + /// + /// A of as (X,Y) coordinates. + /// Thrown when is null. + public MapPointData(IEnumerable> points) + { + if (points == null) + { + throw new ArgumentNullException("points", "A point collection is required when creating MapPointData."); + } + + Points = points.ToArray(); + IsVisible = true; + } + + /// + /// Gets or sets a value indicating whether the is visible. + /// + public bool IsVisible { get; set; } + + /// + /// Gets to collection of points in 2D space. + /// + public IEnumerable> Points { get; private set; } + } +} Index: Core/Components/test/Core.Components.DotSpatial.Test/BaseMapTest.cs =================================================================== diff -u -r37dc25947c67f84a31ca868d2acceec4f48721cc -r3167b898b071fea4cf86c775bca5467fab086038 --- Core/Components/test/Core.Components.DotSpatial.Test/BaseMapTest.cs (.../BaseMapTest.cs) (revision 37dc25947c67f84a31ca868d2acceec4f48721cc) +++ Core/Components/test/Core.Components.DotSpatial.Test/BaseMapTest.cs (.../BaseMapTest.cs) (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -1,155 +1,85 @@ using System; using System.IO; +using System.Linq; using System.Windows.Forms; -using Core.Common.TestUtil; using Core.Common.Utils.Reflection; using Core.Components.DotSpatial.Data; -using Core.Components.DotSpatial.Exceptions; -using Core.Components.DotSpatial.Properties; +using Core.Components.DotSpatial.TestUtil; using DotSpatial.Controls; using NUnit.Framework; -using Rhino.Mocks; -using Rhino.Mocks.Constraints; namespace Core.Components.DotSpatial.Test { [TestFixture] public class BaseMapTest { - private readonly string segmentsFile = Path.Combine(TestHelper.GetTestDataPath(TestDataPath.Core.Components.DotSpatial, "ShapeFiles"), "DR10_segments.shp"); - private readonly string dijkvakgebiedenFile = Path.Combine(TestHelper.GetTestDataPath(TestDataPath.Core.Components.DotSpatial, "ShapeFiles"), "DR10_dijkvakgebieden.shp"); - private readonly string binnenTeenFile = Path.Combine(TestHelper.GetTestDataPath(TestDataPath.Core.Components.DotSpatial, "ShapeFiles"), "DR10_binnenteen.shp"); - private readonly string tempTeenFile = Path.Combine(TestHelper.GetTestDataPath(TestDataPath.Core.Components.DotSpatial, "ShapeFiles"), "DR10_teen.shp"); - [Test] - public void DefaultConstructor_PropertiesSet() + public void DefaultConstructor_DefaultValues() { // Call - var baseMap = new BaseMap(); - - // Assert - Assert.IsInstanceOf(baseMap); - } - - [Test] - public void Data_ShapeFileIsValidMissesNeededFiles_ThrowsFileNotFoundException() - { - // Setup var map = new BaseMap(); - var data = new MapData(); - data.AddShapeFile(segmentsFile); - - // Call - TestDelegate setDataDelegate = () => map.Data = data; - // Assert - Assert.Throws(setDataDelegate); + Assert.IsInstanceOf(map); + Assert.IsInstanceOf(map); + Assert.IsNull(map.Data); } [Test] - public void SetDataOnMap_FileDeleted_ThrowsFileNotFoundException() + public void Data_NotKnowMapData_ThrowsNotSupportedException() { // Setup var map = new BaseMap(); - var data = new MapData(); + var testData = new TestMapData(); - data.AddShapeFile(binnenTeenFile); - - RenameFile(tempTeenFile, binnenTeenFile); - // Call - TestDelegate testDelegate = () => map.Data = data; + TestDelegate test = () => map.Data = testData; - try - { - // Assert - Assert.Throws(testDelegate); - } - finally - { - // Place the original file back for other tests. - RenameFile(binnenTeenFile, tempTeenFile); - } - } - - [Test] - public void SetData_ToNull_ThrowsArgrumentNullException() - { - // Setup - var map = new BaseMap(); - - // Call - TestDelegate testDelegate = () => map.Data = null; - // Assert - ArgumentNullException exception = Assert.Throws(testDelegate); - Assert.AreEqual("MapData", exception.ParamName); + Assert.Throws(test); } [Test] - public void Data_IsValid_DoesNotThrowException() + public void Data_Null_ReturnsNull() { // Setup var map = new BaseMap(); - var data = new MapData(); - data.AddShapeFile(dijkvakgebiedenFile); - // Call - TestDelegate setDataDelegate = () => map.Data = data; + map.Data = null; // Assert - Assert.DoesNotThrow(setDataDelegate); + Assert.IsNull(map.Data); } [Test] - public void GetData_Always_ReturnsData() + public void Data_NotNull_ReturnsData() { // Setup var map = new BaseMap(); - var data = new MapData(); - data.AddShapeFile(dijkvakgebiedenFile); - map.Data = data; + var testData = new MapPointData(Enumerable.Empty>()); + map.Data = testData; // Call - var getData = map.Data; + var data = map.Data; // Assert - Assert.AreSame(getData, data); + Assert.AreSame(testData, data); } [Test] - public void SetDataOnMap_Succeeds_AddOneMapLayerAndWriteLog() + public void Data_KnownMapData_MapFeatureAdded() { // Setup var map = new BaseMap(); - var data = new MapData(); + var testData = new MapPointData(Enumerable.Empty>()); + var mapView = TypeUtils.GetField(map, "map"); - var excpectedLog = string.Format(Resources.BaseMap_LoadData_Shape_file_on_path__0__is_added_to_the_map_, dijkvakgebiedenFile); - - data.AddShapeFile(dijkvakgebiedenFile); - - var mapComponent = TypeUtils.GetField(map, "map"); - - // Pre-condition - var preLayerCount = mapComponent.GetLayers().Count; - // Call - Action action = () => map.Data = data; + map.Data = testData; // Assert - TestHelper.AssertLogMessageIsGenerated(action, excpectedLog); - Assert.AreEqual(preLayerCount + 1, mapComponent.GetLayers().Count); + Assert.AreEqual(1, mapView.Layers.Count); } - - private static void RenameFile(string newPath, string path) - { - if (File.Exists(newPath)) - { - File.Delete(newPath); - } - File.Move(path, newPath); - } } } \ No newline at end of file Index: Core/Components/test/Core.Components.DotSpatial.Test/Converter/MapDataConverterTest.cs =================================================================== diff -u --- Core/Components/test/Core.Components.DotSpatial.Test/Converter/MapDataConverterTest.cs (revision 0) +++ Core/Components/test/Core.Components.DotSpatial.Test/Converter/MapDataConverterTest.cs (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -0,0 +1,97 @@ +using System; +using Core.Common.TestUtil; +using Core.Components.DotSpatial.Converter; +using Core.Components.DotSpatial.Data; +using Core.Components.DotSpatial.TestUtil; +using DotSpatial.Data; +using DotSpatial.Topology; +using NUnit.Framework; + +namespace Core.Components.DotSpatial.Test.Converter +{ + [TestFixture] + public class MapDataConverterTest + { + [Test] + public void TupleToDataPoint_RandomTupleDoubleDouble_ReturnsDataPoint() + { + // Setup + var random = new Random(21); + var a = random.NextDouble(); + var b = random.NextDouble(); + var tuple = new Tuple(a, b); + var testConverter = new TestMapDataConverter(); + + // Call + var coordinate = testConverter.PublicTupleToCoordinate(tuple); + + // Assert + Assert.AreEqual(a, coordinate.X); + Assert.AreEqual(b, coordinate.Y); + } + + [Test] + public void CanConvertSeries_DifferentInherritingTypes_OnlySupportsExactType() + { + // Setup + var testConverter = new TestMapDataConverter(); + + // Call + var chartDataResult = testConverter.CanConvertMapData(new TestMapData()); + var classResult = testConverter.CanConvertMapData(new Class()); + var childResult = testConverter.CanConvertMapData(new Child()); + + // Assert + Assert.IsFalse(chartDataResult); + Assert.IsTrue(classResult); + Assert.IsFalse(childResult); + } + + [Test] + public void Convert_DataNull_ThrowsArgumentNullException() + { + // Setup + var testConverter = new TestMapDataConverter(); + + // Call + TestDelegate test = () => testConverter.Convert(null); + + // Assert + Assert.Throws(test); + } + + [Test] + public void Convert_DataCannotBeConverted_ThrowsArgumentException() + { + // Setup + var testConverter = new TestMapDataConverter(); + var testChartData = new TestMapData(); + var expectedMessage = string.Format("The data of type {0} cannot be converted by this converter.", testChartData.GetType()); + // Precondition + Assert.IsFalse(testConverter.CanConvertMapData(testChartData)); + + // Call + TestDelegate test = () => testConverter.Convert(testChartData); + + // Assert + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, expectedMessage); + } + + private class Class : MapData {} + + private class Child : Class {} + + private class TestMapDataConverter : MapDataConverter where T : MapData + { + protected override FeatureSet Convert(T data) + { + throw new NotImplementedException(); + } + + public Coordinate PublicTupleToCoordinate(Tuple obj) + { + return new Coordinate(obj.Item1, obj.Item2); + } + } + } +} Index: Core/Components/test/Core.Components.DotSpatial.Test/Converter/MapDataFactoryTest.cs =================================================================== diff -u --- Core/Components/test/Core.Components.DotSpatial.Test/Converter/MapDataFactoryTest.cs (revision 0) +++ Core/Components/test/Core.Components.DotSpatial.Test/Converter/MapDataFactoryTest.cs (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -0,0 +1,57 @@ +using System; +using System.Collections.ObjectModel; +using System.Linq; +using Core.Components.DotSpatial.Converter; +using Core.Components.DotSpatial.Data; +using Core.Components.DotSpatial.TestUtil; +using DotSpatial.Data; +using DotSpatial.Topology; +using NUnit.Framework; + +namespace Core.Components.DotSpatial.Test.Converter +{ + [TestFixture] + public class MapDataFactoryTest + { + [Test] + public void Create_MapPointData_ReturnFeatureSetWithPointType() + { + // Setup + var factory = new MapDataFactory(); + var testData = CreateTestData(); + + // Call + FeatureSet featureSet = factory.Create(new MapPointData(testData)); + + // Assert + Assert.AreEqual(testData.Count, featureSet.Features.Count); + Assert.IsInstanceOf(featureSet); + Assert.AreEqual(FeatureType.Point, featureSet.FeatureType); + CollectionAssert.AreNotEqual(testData, featureSet.Features[0].Coordinates); + } + + [Test] + public void Create_OtherData_ThrownsNotSupportedException() + { + // Setup + var factory = new MapDataFactory(); + var testData = new TestMapData(); + + // Call + TestDelegate test = () => factory.Create(testData); + + // Assert + Assert.Throws(test); + } + + private static Collection> CreateTestData() + { + return new Collection> + { + new Tuple(1.2, 3.4), + new Tuple(3.2, 3.4), + new Tuple(0.2, 2.4) + }; + } + } +} Index: Core/Components/test/Core.Components.DotSpatial.Test/Converter/MapPointDataConverterTest.cs =================================================================== diff -u --- Core/Components/test/Core.Components.DotSpatial.Test/Converter/MapPointDataConverterTest.cs (revision 0) +++ Core/Components/test/Core.Components.DotSpatial.Test/Converter/MapPointDataConverterTest.cs (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -0,0 +1,111 @@ +using System; +using System.Collections.ObjectModel; +using System.Linq; +using Core.Common.TestUtil; +using Core.Components.DotSpatial.Converter; +using Core.Components.DotSpatial.Data; +using Core.Components.DotSpatial.TestUtil; +using DotSpatial.Data; +using DotSpatial.Topology; +using NUnit.Framework; + +namespace Core.Components.DotSpatial.Test.Converter +{ + [TestFixture] + public class MapPointDataConverterTest + { + [Test] + public void DefaultConstructor_IsMapDataConverter() + { + // Call + var converter = new MapPointDataConverter(); + + // Assert + Assert.IsInstanceOf>(converter); + } + + [Test] + public void CanConvertMapData_MapPointData_ReturnsTrue() + { + // Setup + var converter = new MapPointDataConverter(); + var pointData = new MapPointData(new Collection>()); + + // Call + var canConvert = converter.CanConvertMapData(pointData); + + // Assert + Assert.IsTrue(canConvert); + } + + [Test] + public void CanConvertMapData_MapData_ReturnsFalse() + { + // Setup + var converter = new MapPointDataConverter(); + var mapData = new TestMapData(); + + // Call + var canConvert = converter.CanConvertMapData(mapData); + + // Assert + Assert.IsFalse(canConvert); + } + + [Test] + public void Convert_RandomPointData_ReturnsNewSeries() + { + // Setup + var converter = new MapPointDataConverter(); + var random = new Random(21); + var randomCount = random.Next(5, 10); + var points = new Collection>(); + + for (int i = 0; i < randomCount; i++) + { + points.Add(new Tuple(random.NextDouble(), random.NextDouble())); + } + + var pointData = new MapPointData(points); + + // Call + var featureSet = converter.Convert(pointData); + + // Assert + Assert.AreEqual(pointData.Points.ToArray().Length, featureSet.Features.Count); + Assert.IsInstanceOf(featureSet); + Assert.AreEqual(FeatureType.Point, featureSet.FeatureType); + CollectionAssert.AreNotEqual(pointData.Points, featureSet.Features[0].Coordinates); + } + + [Test] + public void Convert_DataNull_ThrowsArgumentNullException() + { + // Setup + var testConverter = new MapPointDataConverter(); + + // Call + TestDelegate test = () => testConverter.Convert(null); + + // Assert + Assert.Throws(test); + } + + [Test] + public void Convert_DataCannotBeConverted_ThrowsArgumentException() + { + // Setup + var testConverter = new MapPointDataConverter(); + var testChartData = new TestMapData(); + var expectedMessage = string.Format("The data of type {0} cannot be converted by this converter.", testChartData.GetType()); + // Precondition + Assert.IsFalse(testConverter.CanConvertMapData(testChartData)); + + // Call + TestDelegate test = () => testConverter.Convert(testChartData); + + // Assert + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(test, expectedMessage); + } + } +} Index: Core/Components/test/Core.Components.DotSpatial.Test/Core.Components.DotSpatial.Test.csproj =================================================================== diff -u -r37dc25947c67f84a31ca868d2acceec4f48721cc -r3167b898b071fea4cf86c775bca5467fab086038 --- Core/Components/test/Core.Components.DotSpatial.Test/Core.Components.DotSpatial.Test.csproj (.../Core.Components.DotSpatial.Test.csproj) (revision 37dc25947c67f84a31ca868d2acceec4f48721cc) +++ Core/Components/test/Core.Components.DotSpatial.Test/Core.Components.DotSpatial.Test.csproj (.../Core.Components.DotSpatial.Test.csproj) (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -101,7 +101,11 @@ + + + + @@ -118,6 +122,10 @@ {aa47e858-a2a7-470e-8b2d-c76ae8ed9ccd} Core.Components.DotSpatial + + {9b6f3987-eaf7-4733-80c1-3dcab44d87ae} + Core.Components.DotSpatial.TestUtil + Index: Core/Components/test/Core.Components.DotSpatial.Test/Data/MapPointDataTest.cs =================================================================== diff -u --- Core/Components/test/Core.Components.DotSpatial.Test/Data/MapPointDataTest.cs (revision 0) +++ Core/Components/test/Core.Components.DotSpatial.Test/Data/MapPointDataTest.cs (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -0,0 +1,60 @@ +using System; +using System.Collections.ObjectModel; +using Core.Components.DotSpatial.Data; +using NUnit.Framework; + +namespace Core.Components.DotSpatial.Test.Data +{ + [TestFixture] + public class MapPointDataTest + { + [Test] + public void Constructor_NullPoints_ThrowsArgumentNullException() + { + // Call + TestDelegate test = () => new MapPointData(null); + + // Assert + Assert.Throws(test); + } + + [Test] + public void Constructor_WithEmptyPoints_CreatesNewICharData() + { + // Setup + var points = new Collection>(); + + // Call + var data = new MapPointData(points); + + // Assert + Assert.IsInstanceOf(data); + Assert.AreNotSame(points, data.Points); + } + + [Test] + public void Constructor_WithPoints_CreatesNewICharData() + { + // Setup + var points = CreateTestPoints(); + + // Call + var data = new MapPointData(points); + + // Assert + Assert.IsInstanceOf(data); + Assert.AreNotSame(points, data.Points); + CollectionAssert.AreEqual(points, data.Points); + } + + private Collection> CreateTestPoints() + { + return new Collection> + { + new Tuple(0.0, 1.1), + new Tuple(1.0, 2.1), + new Tuple(1.6, 1.6) + }; + } + } +} Index: Core/Components/test/Core.Components.DotSpatial.TestUtil/Core.Components.DotSpatial.TestUtil.csproj =================================================================== diff -u --- Core/Components/test/Core.Components.DotSpatial.TestUtil/Core.Components.DotSpatial.TestUtil.csproj (revision 0) +++ Core/Components/test/Core.Components.DotSpatial.TestUtil/Core.Components.DotSpatial.TestUtil.csproj (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -0,0 +1,63 @@ + + + + + Debug + x86 + {9B6F3987-EAF7-4733-80C1-3DCAB44D87AE} + Library + Properties + Core.Components.DotSpatial.TestUtil + Core.Components.DotSpatial.TestUtil + v4.0 + 512 + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + bin\ReleaseForCodeCoverage\ + TRACE + true + pdbonly + prompt + 4 + + + + + + + + + + + + {aa47e858-a2a7-470e-8b2d-c76ae8ed9ccd} + Core.Components.DotSpatial + + + + + \ No newline at end of file Index: Core/Components/test/Core.Components.DotSpatial.TestUtil/Properties/AssemblyInfo.cs =================================================================== diff -u --- Core/Components/test/Core.Components.DotSpatial.TestUtil/Properties/AssemblyInfo.cs (revision 0) +++ Core/Components/test/Core.Components.DotSpatial.TestUtil/Properties/AssemblyInfo.cs (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -0,0 +1,13 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +[assembly: AssemblyTitle("Core.Components.Charting.TestUtil")] +[assembly: AssemblyProduct("Core.Components.Charting.TestUtil")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("ba9d8cee-92dd-4abf-ac2f-412c2e09e7e5")] \ No newline at end of file Index: Core/Components/test/Core.Components.DotSpatial.TestUtil/TestMapData.cs =================================================================== diff -u --- Core/Components/test/Core.Components.DotSpatial.TestUtil/TestMapData.cs (revision 0) +++ Core/Components/test/Core.Components.DotSpatial.TestUtil/TestMapData.cs (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -0,0 +1,11 @@ +using Core.Components.DotSpatial.Data; + +namespace Core.Components.DotSpatial.TestUtil +{ + /// + /// A class representing a MapData type which is not in the regular codebase. + /// + public class TestMapData : MapData + { + } +} Index: Core/Plugins/test/Core.Plugins.DotSpatial.Test/Commands/ToggleMapLegendViewCommandTest.cs =================================================================== diff -u --- Core/Plugins/test/Core.Plugins.DotSpatial.Test/Commands/ToggleMapLegendViewCommandTest.cs (revision 0) +++ Core/Plugins/test/Core.Plugins.DotSpatial.Test/Commands/ToggleMapLegendViewCommandTest.cs (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -0,0 +1,86 @@ +using Core.Common.Controls.Commands; +using Core.Common.Gui; +using Core.Plugins.DotSpatial.Commands; +using Core.Plugins.DotSpatial.Legend; +using NUnit.Framework; +using Rhino.Mocks; + +namespace Core.Plugins.DotSpatial.Test.Commands +{ + [TestFixture] + public class ToggleMapLegendViewCommandTest + { + [Test] + public void Constructor_Always_CreatesICommand() + { + // Call + var command = new ToggleMapLegendViewCommand(null); + + // Assert + Assert.IsInstanceOf(command); + } + + [Test] + public void Enabled_Always_ReturnsTrue() + { + // Call + var command = new ToggleMapLegendViewCommand(null); + + // Assert + Assert.IsTrue(command.Enabled); + } + + [Test] + [TestCase(true)] + [TestCase(false)] + public void Checekd_LegendViewOpenOrClosed_ReturnsExpectedState(bool open) + { + // Setup + var mocks = new MockRepository(); + var plugin = mocks.StrictMock(); + plugin.Expect(p => p.IsToolWindowOpen()).Return(open); + + mocks.ReplayAll(); + + var controller = new MapLegendController(plugin); + var command = new ToggleMapLegendViewCommand(controller); + + // Call + var result = command.Checked; + + // Assert + Assert.AreEqual(open, result); + mocks.VerifyAll(); + } + + [Test] + public void Execute_Always_TogglesLegend() + { + // Setup + var mocks = new MockRepository(); + var plugin = mocks.StrictMock(); + + // Open first + using (mocks.Ordered()) + { + plugin.Expect(p => p.IsToolWindowOpen()).Return(false); + plugin.Expect(p => p.OpenToolView(Arg.Matches(v => true))); + + // Then close + plugin.Expect(p => p.IsToolWindowOpen()).Return(true); + plugin.Expect(p => p.CloseToolView(Arg.Matches(v => true))); + } + mocks.ReplayAll(); + + var controller = new MapLegendController(plugin); + var command = new ToggleMapLegendViewCommand(controller); + + // Call + command.Execute(); + command.Execute(); + + // Assert + mocks.VerifyAll(); + } + } +} Index: Core/Plugins/test/Core.Plugins.DotSpatial.Test/Core.Plugins.DotSpatial.Test.csproj =================================================================== diff -u -r47324919290e03ed6e8147f85e67024c16e602a8 -r3167b898b071fea4cf86c775bca5467fab086038 --- Core/Plugins/test/Core.Plugins.DotSpatial.Test/Core.Plugins.DotSpatial.Test.csproj (.../Core.Plugins.DotSpatial.Test.csproj) (revision 47324919290e03ed6e8147f85e67024c16e602a8) +++ Core/Plugins/test/Core.Plugins.DotSpatial.Test/Core.Plugins.DotSpatial.Test.csproj (.../Core.Plugins.DotSpatial.Test.csproj) (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -67,6 +67,7 @@ + @@ -102,6 +103,10 @@ {AA47E858-A2A7-470E-8B2D-C76AE8ED9CCD} Core.Components.DotSpatial + + {9B6F3987-EAF7-4733-80C1-3DCAB44D87AE} + Core.Components.DotSpatial.TestUtil + {610e0a9c-1997-4c43-a10e-39d4c66ada93} Core.Plugins.DotSpatial Index: Core/Plugins/test/Core.Plugins.DotSpatial.Test/Forms/MapDataViewTest.cs =================================================================== diff -u -r47324919290e03ed6e8147f85e67024c16e602a8 -r3167b898b071fea4cf86c775bca5467fab086038 --- Core/Plugins/test/Core.Plugins.DotSpatial.Test/Forms/MapDataViewTest.cs (.../MapDataViewTest.cs) (revision 47324919290e03ed6e8147f85e67024c16e602a8) +++ Core/Plugins/test/Core.Plugins.DotSpatial.Test/Forms/MapDataViewTest.cs (.../MapDataViewTest.cs) (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -1,8 +1,7 @@ using System; -using System.IO; +using System.Linq; using System.Windows.Forms; using Core.Common.Controls.Views; -using Core.Common.TestUtil; using Core.Components.DotSpatial; using Core.Components.DotSpatial.Data; using Core.Plugins.DotSpatial.Forms; @@ -13,8 +12,6 @@ [TestFixture] public class MapDataViewTest { - private readonly string dijkvakgebiedenFile = Path.Combine(TestHelper.GetTestDataPath(TestDataPath.Core.Plugins.DotSpatial, "ShapeFiles"), "DR10_dijkvakgebieden.shp"); - [Test] public void DefaultConstructor_DefaultValues() { @@ -43,6 +40,20 @@ } [Test] + public void Data_SetToNull_BaseMapNoFeatures() + { + // Setup + var mapView = new MapDataView(); + var map = (BaseMap)mapView.Controls[0]; + + // Call + mapView.Data = null; + + // Assert + Assert.IsNull(map.Data); + } + + [Test] public void Data_SetToNull_DoesNotThrowException() { // Setup @@ -69,19 +80,19 @@ } [Test] - public void Data_Always_IsMapData() + public void Data_SetToMapPointData_MapDataSet() { // Setup - var mapData = new MapData(); var mapView = new MapDataView(); - mapData.AddShapeFile(dijkvakgebiedenFile); - mapView.Data = mapData; + var map = (BaseMap)mapView.Controls[0]; + var pointData = new MapPointData(Enumerable.Empty>()); // Call - var data = mapView.Data; + mapView.Data = pointData; // Assert - Assert.IsInstanceOf(data); + Assert.AreSame(pointData, map.Data); + Assert.AreSame(pointData, mapView.Data); } } } \ No newline at end of file Index: Core/Plugins/test/Core.Plugins.DotSpatial.Test/MapRibbonTest.cs =================================================================== diff -u -r47324919290e03ed6e8147f85e67024c16e602a8 -r3167b898b071fea4cf86c775bca5467fab086038 --- Core/Plugins/test/Core.Plugins.DotSpatial.Test/MapRibbonTest.cs (.../MapRibbonTest.cs) (revision 47324919290e03ed6e8147f85e67024c16e602a8) +++ Core/Plugins/test/Core.Plugins.DotSpatial.Test/MapRibbonTest.cs (.../MapRibbonTest.cs) (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -1,9 +1,16 @@ -using System.Windows; +using System.Linq; +using System.Windows; using System.Windows.Controls; +using System.Windows.Controls.Primitives; +using Core.Common.Controls.Commands; +using Core.Common.Gui; using Core.Components.DotSpatial; +using Core.Plugins.DotSpatial.Commands; +using Core.Plugins.DotSpatial.Legend; using Fluent; using NUnit.Framework; using Rhino.Mocks; +using ToggleButton = Fluent.ToggleButton; namespace Core.Plugins.DotSpatial.Test { @@ -34,6 +41,30 @@ [Test] [RequiresSTA] + public void Commands_CommandsAssigned_ReturnsAssignedCommands() + { + // Setup + var mocks = new MockRepository(); + var toolViewController = mocks.Stub(); + mocks.ReplayAll(); + + var toggleLegendViewCommand = new ToggleMapLegendViewCommand(new MapLegendController(toolViewController)); + + var ribbon = new MapRibbon + { + ToggleLegendViewCommand = toggleLegendViewCommand + }; + + // Call + var commands = ribbon.Commands.ToArray(); + + // Assert + CollectionAssert.AreEqual(new ICommand[] { toggleLegendViewCommand }, commands); + mocks.VerifyAll(); + } + + [Test] + [RequiresSTA] public void IsContextualTabVisible_Always_ReturnsFalse() { // Setup @@ -68,5 +99,32 @@ Assert.AreEqual(mapVisible ? Visibility.Visible : Visibility.Collapsed, contextualGroup.Visibility); mocks.VerifyAll(); } + + [Test] + [RequiresSTA] + public void ToggleLegendViewButton_OnClick_ExecutesToggleLegendViewCommand() + { + // Setup + var mocks = new MockRepository(); + var command = mocks.StrictMock(); + command.Expect(c => c.Execute()); + + mocks.ReplayAll(); + + var ribbon = new MapRibbon + { + ToggleLegendViewCommand = command + }; + var button = ribbon.GetRibbonControl().FindName("ToggleLegendViewButton") as ToggleButton; + + // Precondition + Assert.IsNotNull(button, "Ribbon should have a toggle legend view button"); + + // Call + button.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent)); + + // Assert + mocks.VerifyAll(); + } } } Index: Demo/Ringtoets/src/Demo.Ringtoets/Commands/OpenMapViewCommand.cs =================================================================== diff -u -rf9058d5293ecb785069c5b6b4c554dc6800ee771 -r3167b898b071fea4cf86c775bca5467fab086038 --- Demo/Ringtoets/src/Demo.Ringtoets/Commands/OpenMapViewCommand.cs (.../OpenMapViewCommand.cs) (revision f9058d5293ecb785069c5b6b4c554dc6800ee771) +++ Demo/Ringtoets/src/Demo.Ringtoets/Commands/OpenMapViewCommand.cs (.../OpenMapViewCommand.cs) (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; - +using System.Collections.ObjectModel; using Core.Common.Controls.Commands; using Core.Common.Gui; using Core.Components.DotSpatial.Data; @@ -38,28 +38,14 @@ public void Execute(params object[] arguments) { - var data = new MapData(); - - var paths = new List + var points = new MapPointData(new Collection> { - "Resources/DR10_dijkvakgebieden.shp", - "Resources/DR10_cross_sections.shp", - "Resources/DR10_dammen_caissons.shp" - }; + new Tuple(10.5, 3), + new Tuple(11, 5), + new Tuple(11.5, 4) + }); - foreach (string path in paths) - { - try - { - data.AddShapeFile(path); - } - catch (Exception e) - { - Console.WriteLine(e.Message); - } - } - - documentViewController.DocumentViewsResolver.OpenViewForData(data); + documentViewController.DocumentViewsResolver.OpenViewForData(points); } } } \ No newline at end of file Index: Demo/Ringtoets/test/Demo.Ringtoets.Test/Commands/OpenMapViewCommandTest.cs =================================================================== diff -u -r0c64d8a6c718c0aa67403a16c94dd0c10f862455 -r3167b898b071fea4cf86c775bca5467fab086038 --- Demo/Ringtoets/test/Demo.Ringtoets.Test/Commands/OpenMapViewCommandTest.cs (.../OpenMapViewCommandTest.cs) (revision 0c64d8a6c718c0aa67403a16c94dd0c10f862455) +++ Demo/Ringtoets/test/Demo.Ringtoets.Test/Commands/OpenMapViewCommandTest.cs (.../OpenMapViewCommandTest.cs) (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -37,7 +37,7 @@ var documentViewControllerMock = mocks.StrictMock(); var viewResolverMock = mocks.StrictMock(); documentViewControllerMock.Expect(g => g.DocumentViewsResolver).Return(viewResolverMock); - viewResolverMock.Expect(vr => vr.OpenViewForData(Arg.Matches(md => md.IsValid()), Arg.Matches(b => b == false))).Return(true); + viewResolverMock.Expect(vr => vr.OpenViewForData(null)).IgnoreArguments().Return(true); mocks.ReplayAll(); Index: Demo/Ringtoets/test/Demo.Ringtoets.Test/Ribbons/RingtoestDemoProjectRibbonTest.cs =================================================================== diff -u -r0c64d8a6c718c0aa67403a16c94dd0c10f862455 -r3167b898b071fea4cf86c775bca5467fab086038 --- Demo/Ringtoets/test/Demo.Ringtoets.Test/Ribbons/RingtoestDemoProjectRibbonTest.cs (.../RingtoestDemoProjectRibbonTest.cs) (revision 0c64d8a6c718c0aa67403a16c94dd0c10f862455) +++ Demo/Ringtoets/test/Demo.Ringtoets.Test/Ribbons/RingtoestDemoProjectRibbonTest.cs (.../RingtoestDemoProjectRibbonTest.cs) (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -80,9 +80,7 @@ // Setup var mocks = new MockRepository(); var viewResolver = mocks.StrictMock(); - viewResolver.Expect(vr => vr.OpenViewForData(Arg.Matches(md => md.IsValid()), - Arg.Matches(b => b == false))) - .Return(true); + viewResolver.Expect(vr => vr.OpenViewForData(null)).IgnoreArguments().Return(true); var projectOwner = mocks.Stub(); var documentViewController = mocks.Stub(); Index: Ringtoets.sln =================================================================== diff -u -r3c2ebd8edcc16834ccba60890a022ed79d6948bd -r3167b898b071fea4cf86c775bca5467fab086038 --- Ringtoets.sln (.../Ringtoets.sln) (revision 3c2ebd8edcc16834ccba60890a022ed79d6948bd) +++ Ringtoets.sln (.../Ringtoets.sln) (revision 3167b898b071fea4cf86c775bca5467fab086038) @@ -213,6 +213,8 @@ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Demo.Ringtoets.Test", "Demo\Ringtoets\test\Demo.Ringtoets.Test\Demo.Ringtoets.Test.csproj", "{C48E2C11-3FDA-4356-A10F-757469A108FD}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core.Components.DotSpatial.TestUtil", "Core\Components\test\Core.Components.DotSpatial.TestUtil\Core.Components.DotSpatial.TestUtil.csproj", "{9B6F3987-EAF7-4733-80C1-3DCAB44D87AE}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution CreateInstaller|x86 = CreateInstaller|x86 @@ -806,6 +808,14 @@ {C48E2C11-3FDA-4356-A10F-757469A108FD}.Release|x86.Build.0 = Release|x86 {C48E2C11-3FDA-4356-A10F-757469A108FD}.ReleaseForCodeCoverage|x86.ActiveCfg = ReleaseForCodeCoverage|x86 {C48E2C11-3FDA-4356-A10F-757469A108FD}.ReleaseForCodeCoverage|x86.Build.0 = ReleaseForCodeCoverage|x86 + {9B6F3987-EAF7-4733-80C1-3DCAB44D87AE}.CreateInstaller|x86.ActiveCfg = Release|x86 + {9B6F3987-EAF7-4733-80C1-3DCAB44D87AE}.CreateInstallerWithDemoProject|x86.ActiveCfg = Release|x86 + {9B6F3987-EAF7-4733-80C1-3DCAB44D87AE}.Debug|x86.ActiveCfg = Debug|x86 + {9B6F3987-EAF7-4733-80C1-3DCAB44D87AE}.Debug|x86.Build.0 = Debug|x86 + {9B6F3987-EAF7-4733-80C1-3DCAB44D87AE}.Release|x86.ActiveCfg = Release|x86 + {9B6F3987-EAF7-4733-80C1-3DCAB44D87AE}.Release|x86.Build.0 = Release|x86 + {9B6F3987-EAF7-4733-80C1-3DCAB44D87AE}.ReleaseForCodeCoverage|x86.ActiveCfg = ReleaseForCodeCoverage|x86 + {9B6F3987-EAF7-4733-80C1-3DCAB44D87AE}.ReleaseForCodeCoverage|x86.Build.0 = ReleaseForCodeCoverage|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -895,6 +905,7 @@ {DD7ECAFF-D8A1-4D92-99C0-27498ACB32D4} = {D9DC93FF-DCF3-44A4-9193-9911966CDFF4} {F40A7DC1-A697-41A7-8676-6C0AD8274FB4} = {D9DC93FF-DCF3-44A4-9193-9911966CDFF4} {E900A014-CA87-4374-87F0-813D653A9698} = {D9DC93FF-DCF3-44A4-9193-9911966CDFF4} + {9B6F3987-EAF7-4733-80C1-3DCAB44D87AE} = {D9DC93FF-DCF3-44A4-9193-9911966CDFF4} {594C5C6D-5833-4E1C-9F30-13A202628EEF} = {EE8D5A6C-4871-452A-A69B-F04E374D715E} {555F3460-DD3D-4B1D-8319-0AA454050FF7} = {EC6E52A5-2BB1-4080-9784-5DC8D0B08ED3} {F2C4C4F7-4058-4E71-859B-D704F15D2745} = {555F3460-DD3D-4B1D-8319-0AA454050FF7}