diff --git a/.gitignore b/.gitignore index f953adf..71ff1f3 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ [Rr]eleases/ x64/ x86/ +packages/ build/ bld/ [Bb]in/ diff --git a/BikeTouringGIS.Library.UnitTests/BikeTouringGIS.Library.UnitTests.csproj b/BikeTouringGIS.Library.UnitTests/BikeTouringGIS.Library.UnitTests.csproj index 02488e0..c2b3216 100644 --- a/BikeTouringGIS.Library.UnitTests/BikeTouringGIS.Library.UnitTests.csproj +++ b/BikeTouringGIS.Library.UnitTests/BikeTouringGIS.Library.UnitTests.csproj @@ -36,34 +36,48 @@ 4 - - ..\packages\Castle.Core.4.1.0\lib\net45\Castle.Core.dll + + ..\packages\Castle.Core.4.1.1\lib\net45\Castle.Core.dll + + + ..\packages\CommonServiceLocator.2.0.2\lib\net45\CommonServiceLocator.dll False ..\..\..\..\ArcGIS\runtime\DotNet10.2.7\WindowsDesktop\bin\Esri.ArcGISRuntime.dll - - ..\packages\FluentAssertions.4.19.3\lib\net45\FluentAssertions.dll + + ..\packages\FluentAssertions.4.19.4\lib\net45\FluentAssertions.dll + + + ..\packages\FluentAssertions.4.19.4\lib\net45\FluentAssertions.Core.dll + + + ..\packages\MvvmLightLibs.5.4.1\lib\net45\GalaSoft.MvvmLight.dll - - ..\packages\FluentAssertions.4.19.3\lib\net45\FluentAssertions.Core.dll + + ..\packages\MvvmLightLibs.5.4.1\lib\net45\GalaSoft.MvvmLight.Extras.dll - - - ..\packages\Moq.4.7.63\lib\net45\Moq.dll + + ..\packages\MvvmLightLibs.5.4.1\lib\net45\GalaSoft.MvvmLight.Platform.dll + + + ..\packages\Moq.4.7.99\lib\net45\Moq.dll - ..\packages\AutoFixture.3.50.3\lib\net40\Ploeh.AutoFixture.dll + ..\packages\AutoFixture.3.50.6\lib\net40\Ploeh.AutoFixture.dll - ..\packages\AutoFixture.AutoMoq.3.50.3\lib\net40\Ploeh.AutoFixture.AutoMoq.dll + ..\packages\AutoFixture.AutoMoq.3.50.6\lib\net40\Ploeh.AutoFixture.AutoMoq.dll ..\BicycleTripsPreparationApp\packages\System.Management.Automation.6.1.7601.17515\lib\net45\System.Management.Automation.dll True + + ..\packages\MvvmLightLibs.5.4.1\lib\net45\System.Windows.Interactivity.dll + @@ -143,6 +157,12 @@ Always + + Always + + + Always + Designer Always diff --git a/BikeTouringGIS.Library.UnitTests/BikeTouringGISLayerComparerTest.cs b/BikeTouringGIS.Library.UnitTests/BikeTouringGISLayerComparerTest.cs index b98128e..9ddd1ad 100644 --- a/BikeTouringGIS.Library.UnitTests/BikeTouringGISLayerComparerTest.cs +++ b/BikeTouringGIS.Library.UnitTests/BikeTouringGISLayerComparerTest.cs @@ -26,7 +26,7 @@ public void Setup() [TestMethod] public void OrderBy() { - Mock mock = new Mock(); + Mock mock = new Mock(); var list = new List() { new BikeTouringGISLayer("abc", mock.Object), new BikeTouringGISLayer("Points of Interest"), new BikeTouringGISLayer("def", mock.Object) }; var result = list.OrderBy(x => x.Type); var firstItem = result.First().Type == LayerType.PointsOfInterest; diff --git a/BikeTouringGIS.Library.UnitTests/BikeTouringGISLayerTest.cs b/BikeTouringGIS.Library.UnitTests/BikeTouringGISLayerTest.cs index 859e8df..cbbd016 100644 --- a/BikeTouringGIS.Library.UnitTests/BikeTouringGISLayerTest.cs +++ b/BikeTouringGIS.Library.UnitTests/BikeTouringGISLayerTest.cs @@ -10,6 +10,7 @@ using FluentAssertions; using BikeTouringGISLibrary.Model; using GPX; +using BikeTouringGISLibrary.Services; namespace BikeTouringGISLibrary.UnitTests { @@ -71,8 +72,9 @@ private BikeTouringGISLayer CreateLayer(string fileName) { var path = Path.Combine(UnitTestDirectory, fileName); var gpxInfo = new GpxFileReader().LoadFile(path); - gpxInfo.Tracks.ForEach(x => x.ConvertTrackToRoute()); - gpxInfo.CreateGeometries(); + gpxInfo.Tracks.ForEach(x => x.IsConvertedToRoute = true); + var factory = new GeometryFactory(gpxInfo); + factory.CreateGeometries(); var layer = new BikeTouringGISLayer("testroute", gpxInfo.Routes.First()); layer.SetExtentToFitWithWaypoints(gpxInfo.WayPointsExtent); return layer; diff --git a/BikeTouringGIS.Library.UnitTests/GPXFileReaderTest.cs b/BikeTouringGIS.Library.UnitTests/GPXFileReaderTest.cs index 3e1fb5d..e48d5c7 100644 --- a/BikeTouringGIS.Library.UnitTests/GPXFileReaderTest.cs +++ b/BikeTouringGIS.Library.UnitTests/GPXFileReaderTest.cs @@ -4,18 +4,38 @@ using System.IO; using BikeTouringGISLibrary.Model; using BikeTouringGIS.Controls; +using BikeTouringGISLibrary.Services; namespace BikeTouringGISLibrary.UnitTests { [TestClass] public class GPXFileReaderTest : UnitTestingBase { - private GpxFileReader _fileReader; + private GeometryFactory _geometryFactory; - [TestInitialize] - public void Setup() + [TestMethod] + // bug #69 + public void LoadFile_All_WayPoints_Do_Have_Description() { - _fileReader = new GpxFileReader(); + var gpxInfo = LoadGPXData("dwingeloo.gpx"); + foreach (var wpt in gpxInfo.WayPoints) + { + wpt.Name.Should().NotBeNullOrEmpty(wpt.Points[0].ToString()); + } + } + + [TestMethod] + // bug #34 + public void LoadFile_Check_If_All_Have_Length() + { + var gpxInfo = LoadGPXData("Sample.gpx"); + gpxInfo.Tracks.ForEach(x => x.IsConvertedToRoute = true); + _geometryFactory.CreateGeometries(); + foreach (var route in gpxInfo.Routes) + { + var layer = new BikeTouringGISLayer("testroute", route); + layer.Extent.Should().NotBeNull($"route, {route.Name}"); + } } [TestMethod] @@ -38,37 +58,37 @@ public void LoadFile_Counts_Tracks_Routes_Waypoints_Are_Correct2() } [TestMethod] - // bug #34 - public void LoadFile_Check_If_All_Have_Length() + // #100 file gecorrigeerd en geen fouten + public void LoadFile_Counts_Waypoints_Are_Correct() { - var gpxInfo = LoadGPXData("Sample.gpx"); - gpxInfo.Tracks.ForEach(x => x.ConvertTrackToRoute()); - gpxInfo.CreateGeometries(); - foreach(var route in gpxInfo.Routes) - { - var layer = new BikeTouringGISLayer("testroute", route); - layer.Extent.Should().NotBeNull($"route, {route.Name}"); - } + var gpxInfo = LoadGPXData("pois.gpx"); + gpxInfo.Routes.Count.ShouldBeEquivalentTo(0); + gpxInfo.Tracks.Count.ShouldBeEquivalentTo(0); + gpxInfo.WayPoints.Count.ShouldBeEquivalentTo(157); } [TestMethod] - // bug #69 - public void LoadFile_All_WayPoints_Do_Have_Description() + // #100 + public void LoadFile_Counts_Waypoints_Are_Correct2() + { + var gpxInfo = LoadGPXData("pois2.gpx"); + gpxInfo.Routes.Count.ShouldBeEquivalentTo(0); + gpxInfo.Tracks.Count.ShouldBeEquivalentTo(0); + gpxInfo.WayPoints.Count.ShouldBeEquivalentTo(157); + } + + [TestInitialize] + public void Setup() { - var gpxInfo = LoadGPXData("dwingeloo.gpx"); - foreach(var wpt in gpxInfo.WayPoints) - { - wpt.Name.Should().NotBeNullOrEmpty(wpt.Points[0].ToString()); - } } private GpxInformation LoadGPXData(string fileName) { + var fileReader = new GpxFileReader(); var path = Path.Combine(UnitTestDirectory, fileName); - var gpxInfo = _fileReader.LoadFile(path); - gpxInfo.CreateGeometries(); + var gpxInfo = fileReader.LoadFile(path); + _geometryFactory = new GeometryFactory(gpxInfo); return gpxInfo; } - } -} +} \ No newline at end of file diff --git a/BikeTouringGIS.Library.UnitTests/ViewModels/BikeTouringGISMapViewModelTest.cs b/BikeTouringGIS.Library.UnitTests/ViewModels/BikeTouringGISMapViewModelTest.cs index e0943d0..39b0548 100644 --- a/BikeTouringGIS.Library.UnitTests/ViewModels/BikeTouringGISMapViewModelTest.cs +++ b/BikeTouringGIS.Library.UnitTests/ViewModels/BikeTouringGISMapViewModelTest.cs @@ -15,6 +15,8 @@ using BikeTouringGISLibrary.Model; using System.Collections.ObjectModel; using BikeTouringGIS.Extensions; +using BikeTouringGISLibrary.Services; +using BikeTouringGIS.Services; namespace BikeTouringGISLibrary.UnitTests.ViewModels { @@ -98,11 +100,8 @@ private List GetLayers(string path) { var gpxData = GetGPXData(path); _vm.AddPoIs(gpxData.WayPoints); - gpxData.AllRoutes.ForEach(x => - { - var layer = new BikeTouringGISLayer(path, x); - _vm.AddRoutes(layer); - }); + var layerFactory = new LayerFactory(gpxData.WayPointsExtent); + _vm.AddRoutes(layerFactory.CreateRoutes(gpxData.Routes)); _vm.BikeTouringGISLayers = new ObservableCollection(_vm.Map.GetBikeTouringGISLayers()); return _vm.BikeTouringGISLayers.ToList(); } @@ -110,11 +109,9 @@ private List GetLayers(string path) private GpxInformation GetGPXData(string fileName) { var gpxFileInformation = new GpxFileReader().LoadFile(fileName); - foreach (var track in gpxFileInformation.Tracks) - { - track.ConvertTrackToRoute(); - } - gpxFileInformation.CreateGeometries(); + gpxFileInformation.Tracks.ForEach(t => t.IsConvertedToRoute = true); + var factory = new GeometryFactory(gpxFileInformation); + factory.CreateGeometries(); return gpxFileInformation; } diff --git a/BikeTouringGIS.Library.UnitTests/ViewModels/BikeTouringGISViewModelTest.cs b/BikeTouringGIS.Library.UnitTests/ViewModels/BikeTouringGISViewModelTest.cs index 2770c15..364ddd2 100644 --- a/BikeTouringGIS.Library.UnitTests/ViewModels/BikeTouringGISViewModelTest.cs +++ b/BikeTouringGIS.Library.UnitTests/ViewModels/BikeTouringGISViewModelTest.cs @@ -42,9 +42,9 @@ public void OpenGPXFile_Cant_Load_Two_Times_Same_File() var filename = "85.gpx"; var path = Path.Combine(UnitTestDirectory, filename); _vm.OpenGpxFile(_map, path); - _map.BikeTouringGISLayers.Count.ShouldBeEquivalentTo(2); + _map.BikeTouringGISLayers.Count.ShouldBeEquivalentTo(1); _vm.OpenGpxFile(_map, path); - _map.BikeTouringGISLayers.Count.ShouldBeEquivalentTo(2); + _map.BikeTouringGISLayers.Count.ShouldBeEquivalentTo(1); } diff --git a/BikeTouringGIS.Library.UnitTests/ViewModels/LayerListViewModelTest.cs b/BikeTouringGIS.Library.UnitTests/ViewModels/LayerListViewModelTest.cs index b613623..3735220 100644 --- a/BikeTouringGIS.Library.UnitTests/ViewModels/LayerListViewModelTest.cs +++ b/BikeTouringGIS.Library.UnitTests/ViewModels/LayerListViewModelTest.cs @@ -10,19 +10,21 @@ using BikeTouringGIS.Controls; using BikeTouringGISLibrary.Enumerations; using Moq; +using BikeTouringGISLibrary.Model; +using Ploeh.AutoFixture; namespace BikeTouringGISLibrary.UnitTests.ViewModels { [TestClass] public class LayerListViewModelTest : UnitTestingBase { private LayerListViewModel _vm; - private IRoute _route; + private IPath _route; [TestInitialize] public void Setup() { _vm = new LayerListViewModel(); - _route = new Mock().Object; + _route = new Mock().Object; } [TestMethod] @@ -42,6 +44,7 @@ public void SelectedLayer_Is_Not_Null_With_SplitRouteLayer() [TestMethod] public void SelectedLayer_Is_Not_Null_With_GPXLayer() { + _route = _fixture.Build().OmitAutoProperties().Create(); var layer = new BikeTouringGISLayer("test", _route); _vm.SelectedLayer = layer; _vm.SelectedLayer.Type.ShouldBeEquivalentTo(LayerType.GPXRoute); diff --git a/BikeTouringGIS.Library.UnitTests/app.config b/BikeTouringGIS.Library.UnitTests/app.config index d2cb90a..d76c3a6 100644 --- a/BikeTouringGIS.Library.UnitTests/app.config +++ b/BikeTouringGIS.Library.UnitTests/app.config @@ -4,7 +4,7 @@ - + @@ -32,7 +32,7 @@ - + diff --git a/BikeTouringGIS.Library.UnitTests/packages.config b/BikeTouringGIS.Library.UnitTests/packages.config index 949ef1f..d9b0b75 100644 --- a/BikeTouringGIS.Library.UnitTests/packages.config +++ b/BikeTouringGIS.Library.UnitTests/packages.config @@ -1,10 +1,12 @@  - - - - - + + + + + + + \ No newline at end of file diff --git a/BikeTouringGIS.Library.UnitTests/pois.gpx b/BikeTouringGIS.Library.UnitTests/pois.gpx new file mode 100644 index 0000000..24cf133 --- /dev/null +++ b/BikeTouringGIS.Library.UnitTests/pois.gpx @@ -0,0 +1,475 @@ + + + + Juritz -Feistritz in Rosental [<51] (15/04-30/09) -CCA (456m) >00-4342282115 + 0 + + + Radcamping Schutz - Kirschentheuer [<51] (01/05-30/09) (430m) >00-4342272482 + + + Rosental ROZ - Dobrowa (01/04-31/10) (420m) >00-43422681000 + + + Pirkdorfer See - Pirkdorf (01/05-30/09) (526m) >00-434230321 + + + Florian-Sandbank - Faak am See (01/01-31/12) (562m) >00-4342542261 + + + Poglitsch - Faak am See (01/04-15/10) (556m) >00-4342542718 + + + Am Walde - Ledenitzen (01/05-25/09) (580m) >00-4342542670 + + + Gruber - Faak am See (01/04-20/09) (562m) >00-4342542298 + + + Anderwald - Faak am See (10/04-15/10) (564m) >00-4342542297 + + + Arneitz - Faak am See (25/04-30/09) -CCA (560m) >00-4342542137 + + + Gosselsdorfersee - Gosselsdorf (01/05-30/09) -CCA (474m) >00-4342362168 + + + Naturist - Mullerhof am Keutschachersee - Keutschach am See (01/05-30/09) (533m) >00-4342732517 + + + Naturist - Sabotnik - Keutschach (16/05-30/09) (531m) >00-4342732509 + + + Reichmann - Keutschach [<51] (01/05-30/09) (523m) >00-4369915000057 + + + Naturist - Turkwiese - Keutschach [<51] (01/06-31/08) (518m) >00-43422481218 + + + Naturist - Rutar Lido - Eberndorf (01/01-31/12) -CCA (463m) >00-43423622620 + + + Bruckler Sud - Keutschach (01/05-30/09) -CCA (516m) >00-4342732773 + + + Breznik - St. Primus-Turnersee (15/04-30/09) -CC-CCA (491m) >00-4342392350 + + + Terrassencamping - Obersammelsdorf (01/05-31/10) (498m) >00-4342392285 + + + Reautschnighof - Keutschach [<51] (01/05-30/09) (525m) >00-43463281106 + + + Panorama II - St. Kanzian (01/05-25/10) (526m) >00-4342392285 + + + Valentinitsch - Keutschach [<51] (01/05-30/09) (521m) >00-4342733780 + + + Hafnersee - Keutschach (01/05-30/09) (518m) >00-43427323750 + + + Wiesencamping Marhof - Drobollach [<51] (01/04-30/09) (599m) >00-4342542888 + + + Bruckler Nord - Keutschach am See (01/05-30/09) -CC (509m) >00-4342732384 + + + Mittewald - Mittewald [<51] (01/04-30/09) (590m) >00-436605288887 + + + Ferienzentrum Sud - St. Kanzian am Klopeiner See (01/05-25/09) (462m) >00-4342392322 + + + Naturist - Auenweg - Klagenfurt (433m) + + + Michelin - Klagenfurt [<51] (01/01-31/12) (444m) >00-43463294656 + + + Nord - Sankt Kanzian (01/05-30/09) (460m) >00-434239222432 + + + Gerli - Villach-Fellach [<51] (01/01-31/12) -BD (575m) >00-43424257402 + + + Strandbad - Klagenfurt (20/04-30/09) (442m) >00-434635216391 + + + Weisses Rossl - Auen-Schiefling [<51] (15/04-05/10) (473m) >00-4342742898 + + + Seehof am Vassachersee - Villach [<51] (01/05-30/09) (526m) >00-43676843740713 + + + Stausee - Volkermarkt (01/05-31/10) (396m) >00-436502644996 + + + Lavamund - Lavamund [<51] (01/04-31/10) (353m) >00-436504229194 + + + Berghof -Villach-Landskron (15/04-20/10) -CCA (524m) >00-43424241133 + + + Mentl - Villach-Landskron (20/04-30/09) -BD (521m) >00-43424241886 + + + Plorz - Villach-Landskron [<51] (01/04-25/10) (518m) >00-436763221494 + + + Ossiacher See - Annenheim (15/04-30/09) -CCA (502m) >00-4342482757 + + + Lindenhof - Annenheim [<51] (01/05-30/09) (519m) >00-4342482703 + + + Schlossbad - Moosburg [<51] (01/05-30/09) (516m) >00-43427282237 + + + Dammwirt - Moosburg [<51] (01/05-30/09) (510m) >00-43427282053 + + + Kolbl - Ossiach (01/01-31/12) -CCA (509m) >00-4342438223 + + + Ossiacher See - Ossiach (01/05-30/09) -CCA (513m) >00-434243436 + + + Parth - Ossiach (01/04-31/10) (520m) >00-43424327440 + + + Blasge - Bodensdorf [<51] (11/04-05/11) (508m) >00-436644232006 + + + Lampele - Ossiach (01/05-30/09) -CCA (507m) >00-434243529 + + + Naturist - Tigringer See - Moosburg [<51] (01/05-30/09) (556m) >00-43427283542 + + + Jodl - Ossiach (20/04-30/09) (514m) >00-4342438779 + + + Kalkgruber - Ossiach [<51] (20/04-30/09) -CCA (508m) >00-434243527 + + + Prefelnig - Ossiach [<51] (01/05-31/10) (517m) >00-4342438226 + + + Olspur - Eibiswald [<51] (15/04-15/10) (353m) >00-436603490810 + + + Morgenfurt - Steindorf [<51] (15/05-31/08) (507m) >00-4342432290 + + + Seecamping Laggner - Steindorf [<51] (01/05-30/09) -CCA (503m) >00-436507300706 + + + Hoffmann - Steindorf (01/05-30/09) -CCA (515m) >00-4342438704 + + + Seecamping Nagele - Steindorf (01/05-30/09) (506m) >00-4342438314 + + + Maltschachersee - Briefelsdorf (01/05-30/09) (594m) >00-4342772644 + + + Seewirt - Maltschach [<51] (01/05-30/09) (598m) >00-4342772637 + + + Mureck - Mureck [<51] (01/04-30/11) (234m) >00-4334722164 + + + International Gosdorf - Misselsdorf (01/04-31/10) (230m) >00-4334723459 + + + Rocksee -Misselsdorf (01/04-31/10) (230m) >00-4334722292 + + + Eden Resort - Polfing-Brunn [<51] (01/01-31/12) (319m) >00-4369913000110 + + + Dachbergschenke - Maria Rojach [<51] (454m) >00-4343553002 + + + Weinland - Gleinstatten [<51] (01/04-03/11) (307m) >00-4334573344 + + + Sulmsee - Tillmitsch (01/05-30/09) (273m) >00-43345282866 + + + Leibnitz - Leibnitz [<51] (01/05-15/09) (269m) >00-43345282463 + + + Wieser - St Georgen-Bernaich (01/05-10/10) -CCA (573m) >00-4342123535 + + + Schwarzl-See - Unterpremstatten (15/04-30/09) (330m) >00-43313553577 + + + Reisemobil Stellplatz - Graz (01/01-31/12) (353m) >00-436763785102 + + + Piberstein - Koflach [<51] (480m) >00-4331447095950 + + + Naturist - Freie Menschen - Purgstall (09/05-19/10) (437m) >00-436644104215 + + + Lanzmaierhof - Frohnleiten [<51] (25/03-15/10) (426m) >00-4331262360 + + + Almenland-Am Bauernhof - Fladnitz an der Teichalm [<51] (01/01-31/12) (680m) >00-433179238888 + + + Hinterberg - Leoben  (15/04-30/09) (562m) >00-43384226758 + + + Gasthof Pichler - Oberaich [<51] (01/01-31/12) (491m) >00-43386251418 + + + Naturist - Gluckliche Freizeit - St. Lorenzen im Murztal [<51] (19/05-01/11) (521m) >00-436641761386 + + + Freizeitsee Zenz - Tragoss [<51] (01/01-31/12) (750m) >00-4338688410 + + + Rosskogler - Aflenz-Land [<51] (01/01-31/12) (740m) >00-436767576131 + + + Europa - Langenwang [<51] (01/01-31/12) (634m) >00-4338542950 + + + Gipfelblick - Sankt Aegyd am Neuwalde (01/01-31/12) (720m) >00-4327682544 + + + KohlhofMuhl - Neusiedl [<51] (01/01-31/12) (449m) >00-43263274035 + + + Spittelberg - Turnitz [<51] (01/01-31/12) (489m) >00-436649201239 + + + Gravogl - Turnitz [<51] (01/01-31/12) (456m) >00-4327698201 + + + Voralpen - Kleinzell (01/01-31/12) (486m) >00-432766275 + + + Paradise Garden - Thenneberg-Kaumberg (01/04-30/09) -CCA-BD (449m) >00-436764741966 + + + Golsental - Hainfeld (01/03-31/10) (408m) >00-43676842246272 + + + Terrassen Traisen - Traisen (15/02-15/11) -CCA-BD (406m) >00-43276262900 + + + Wienerwald - Sulz [<51] (15/04-15/10) (430m) >00-436644609796 + + + Rodaun - Wien-Bezirk (15/03-05/11) (241m) >00-4318884154 + + + Wien Sud - Wien-Bezirk (01/05-30/09) (206m) >00-4318673649 + + + Naturist - Lobau - Wenen (01/05-15/09) (156m) >00-4312804254 + + + Neue Donau - Wien Ost (01/05-30/09) (168m) >00-4312024010 + + + Wien West - Penzing (16/02-01/02) (245m) >00-4319142314 + + + Krackingberg - Kracking [<51] (01/01-31/12) (339m) >00-4322748344 + + + Finsterhof - Neulengbach (01/01-31/12) (211m) >00-43277252130 + + + Am See - Sankt Polten (15/04-31/10) -CCA (253m) >00-43676898798898 + + + Donaupark Klosterneuburg - Klosterneuburg (15/03-31/10) -CCA (168m) >00-43224325877 + + + Donaupark Tulln - Tulln an der Donau (01/04-15/10) -CCA (175m) >00-43227265200 + + + An der Donau - Zwentendorf [<51] (16/04-30/09) (182m) >00-4322772444 + + + Zebed - Gradacac [<51] (01/05-30/09) (144m) >00-38735852505 + + + Spacva - Lipovac (01/05-30/09) (83m) >00-38532341880 + + + Radonja - Karlovac [<51] (01/04-31/10) (122m) >00-38547718295 + + + Tradicije Cigoc - Kratecko [<51] (95m) >00-38544715124 + + + Autocamp Slapic**** - Duga Resa [<51] (01/04-31/10) -CCA-BD (134m) >00-38598860601 + + + Jankovic - Adlesici [<51] (01/05-30/09) (206m) >00-38573070570 + + + Srakovcic - Ribnik [<51] (01/04-31/10) (237m) >00-38547609090 + + + Family Kopacevo - Bilje [<51] (15/04-15/10) (83m) >00-38531752318 + + + Etno kuca pod Okicem - Klake [<51] (01/06-30/09) (327m) >00-38513382335 + + + Plitvice - Lucko-Zagreb (01/05-31/10) (120m) >00-38516530446 + + + Zagreb Kamp - Rakitje (01/01-31/12) -CCA (119m) >00-38513324567 + + + Davod - Davod (83m) >00-3679481041 + + + Sugovica - Baja (92m) >00-3679321755 + + + Ifjusagi Szallo - Baja (01/05-01/09) (91m) >00-3679522230 + + + Zornica Kuca - Bacevac [<51] (15/03-30/10) (167m) >00-381112540254 + + + Dunav - Zemun [<51] (01/05-30/09) (88m) >00-381112199072 + + + Zasavica - Sremska Mitrovica [<51] (25/04-01/11) (76m) >00-38122656214 + + + Eko Fruska Gora - Sremski Karlovci [<51] (01/05-30/09) (152m) >00-38121882511 + + + Apatin - Budzak [<51] (22/04-30/09) (78m) >00-38145741563 + + + Katra - Vinica [<51] (01/05-30/09) (169m) >00-38641368312 + + + Kolpa - Vinica (01/01-31/12) -BD (166m) >00-38641615560 + + + Benetic - Vinica [<51] (01/05-30/09) (160m) >00-38641643630 + + + Sotorisce Kanu Kamp - Stari trg ob Kolpi [<51] (22/04-30/09) (186m) >00-38641518536 + + + Muhvic - Stari trg ob Kolpi [<51] (01/05-15/09) (195m) >00-38618943675 + + + Konda - Stari trg ob Kolpi (01/01-31/12) (183m) >00-38618943671 + + + Zaga - Kostel [<51] (01/05-30/09) (210m) >00-39641218049 + + + Maleric - Dragatus [<51] (01/01-31/12) (159m) >00-38673057120 + + + Pezdirc - Gradac [<51] (01/06-30/09) (140m) >00-38640306051 + + + Krasinec - Gradac [<51] (20/04-30/09) (134m) >00-38640555183 + + + Podzemelj - Gradac-Metlika (135m) >00-38673069572 + + + Lovsin - Metlika [<51] (01/05-15/09) (136m) >00-38641883969 + + + Dolenjske Toplice - Dolenjske Toplice [<51] (174m) >00-38640466589 + + + Otocec - Otocec [<51] (01/04-15/10) (158m) >00-38640466589 + + + Pristava - Ivancna Gorica [<51] (01/01-31/12) (670m) >00-38631505400 + + + Ljubljana Resort*** - Ljubljana-Jezica (01/01-31/12) -CCA (288m) >00-38615683913 + + + Smlednik ** - Smlednik (01/05-15/10) (345m) >00-38613627002 + + + Resnik - Kamnik [<51] (01/05-30/09) (389m) >00-38618317314 + + + Danica - Bohinjska Bistrica (01/01-31/12) -CCA-BD (505m) >00-38645721702 + + + Zlatorog - Bohinj (01/05-30/09) (530m) >00-38645723064 + + + Bizjak - Preddvor [<51] (01/01-31/12) (484m) >00-38642555600 + + + Trnovc - Naklo [<51] (01/05-30/09) (413m) >00-38645331000 + + + Kraljev hrib - Stahovica [<51] (01/05-15/10) (590m) >00-38641816477 + + + Alpe - Stahovica [<51] (01/01-31/12) (530m) >00-38618327258 + + + Radovljica - Radovljica (01/06-15/09) (497m) >00-38645315770 + + + Sobec *** - Lesce (15/04-30/09) (421m) >00-38645353700 + + + Bled*** - Bled (01/04-15/10) -CCA-BD (478m) >00-38645752000 + + + Jezero - Velenje (26/04-31/10) -CCA (372m) >00-38631455977 + + + Trenta - Soca [<51] (01/05-30/09) -BD (689m) >00-38651615966 + + + Podljubelj -Trzic [<51] (15/06-15/09) (673m) >00-38640554436 + + + Stara Posta - Jezersko [<51] (01/04-30/09) (888m) >00-38670542123 + + + Senkove domacija - Jezersko [<51] (15/04-15/10) (915m) >00-38631777188 + + + Perun Lipce - Blejska Dobrava [<51] (01/04-15/10) (525m) >00-38641666187 + + + Terme Ptuj - Ptuj (01/01-31/12) -CCA-BD (222m) >00-38627494580 + + + Kamne * - Mojstrana [<51] (01/01-31/12) -BD (657m) >00-38645891105 + + + Spik - Gozd Martuljek (01/01-31/12) -CCA-BD (742m) >00-38651634466 + + + Natura Eco (tents only) - Krajska Gora [<51] (01/06-15/09) (827m) >00-38664121966 + + + Kekec - Maribor (01/01-31/12) -CCA-BD (298m) >00-38640225386 + + \ No newline at end of file diff --git a/BikeTouringGIS.Library.UnitTests/pois2.gpx b/BikeTouringGIS.Library.UnitTests/pois2.gpx new file mode 100644 index 0000000..e7f66c2 --- /dev/null +++ b/BikeTouringGIS.Library.UnitTests/pois2.gpx @@ -0,0 +1,475 @@ + + + + Juritz -Feistritz in Rosental [<51] (15/04-30/09) -CCA (456m) >00-4342282115 + 0 + + + Radcamping Schutz - Kirschentheuer [<51] (01/05-30/09) (430m) >00-4342272482 + + + Rosental ROZ - Dobrowa (01/04-31/10) (420m) >00-43422681000 + + + Pirkdorfer See - Pirkdorf (01/05-30/09) (526m) >00-434230321 + + + Florian-Sandbank - Faak am See (01/01-31/12) (562m) >00-4342542261 + + + Poglitsch - Faak am See (01/04-15/10) (556m) >00-4342542718 + + + Am Walde - Ledenitzen (01/05-25/09) (580m) >00-4342542670 + + + Gruber - Faak am See (01/04-20/09) (562m) >00-4342542298 + + + Anderwald - Faak am See (10/04-15/10) (564m) >00-4342542297 + + + Arneitz - Faak am See (25/04-30/09) -CCA (560m) >00-4342542137 + + + Gosselsdorfersee - Gosselsdorf (01/05-30/09) -CCA (474m) >00-4342362168 + + + Naturist - Mullerhof am Keutschachersee - Keutschach am See (01/05-30/09) (533m) >00-4342732517 + + + Naturist - Sabotnik - Keutschach (16/05-30/09) (531m) >00-4342732509 + + + Reichmann - Keutschach [<51] (01/05-30/09) (523m) >00-4369915000057 + + + Naturist - Turkwiese - Keutschach [<51] (01/06-31/08) (518m) >00-43422481218 + + + Naturist - Rutar Lido - Eberndorf (01/01-31/12) -CCA (463m) >00-43423622620 + + + Bruckler Sud - Keutschach (01/05-30/09) -CCA (516m) >00-4342732773 + + + Breznik - St. Primus-Turnersee (15/04-30/09) -CC-CCA (491m) >00-4342392350 + + + Terrassencamping - Obersammelsdorf (01/05-31/10) (498m) >00-4342392285 + + + Reautschnighof - Keutschach [<51] (01/05-30/09) (525m) >00-43463281106 + + + Panorama II - St. Kanzian (01/05-25/10) (526m) >00-4342392285 + + + Valentinitsch - Keutschach [<51] (01/05-30/09) (521m) >00-4342733780 + + + Hafnersee - Keutschach (01/05-30/09) (518m) >00-43427323750 + + + Wiesencamping Marhof - Drobollach [<51] (01/04-30/09) (599m) >00-4342542888 + + + Bruckler Nord - Keutschach am See (01/05-30/09) -CC (509m) >00-4342732384 + + + Mittewald - Mittewald [<51] (01/04-30/09) (590m) >00-436605288887 + + + Ferienzentrum Sud - St. Kanzian am Klopeiner See (01/05-25/09) (462m) >00-4342392322 + + + Naturist - Auenweg - Klagenfurt (433m) + + + Michelin - Klagenfurt [<51] (01/01-31/12) (444m) >00-43463294656 + + + Nord - Sankt Kanzian (01/05-30/09) (460m) >00-434239222432 + + + Gerli - Villach-Fellach [<51] (01/01-31/12) -BD (575m) >00-43424257402 + + + Strandbad - Klagenfurt (20/04-30/09) (442m) >00-434635216391 + + + Weisses Rossl - Auen-Schiefling [<51] (15/04-05/10) (473m) >00-4342742898 + + + Seehof am Vassachersee - Villach [<51] (01/05-30/09) (526m) >00-43676843740713 + + + Stausee - Volkermarkt (01/05-31/10) (396m) >00-436502644996 + + + Lavamund - Lavamund [<51] (01/04-31/10) (353m) >00-436504229194 + + + Berghof -Villach-Landskron (15/04-20/10) -CCA (524m) >00-43424241133 + + + Mentl - Villach-Landskron (20/04-30/09) -BD (521m) >00-43424241886 + + + Plorz - Villach-Landskron [<51] (01/04-25/10) (518m) >00-436763221494 + + + Ossiacher See - Annenheim (15/04-30/09) -CCA (502m) >00-4342482757 + + + Lindenhof - Annenheim [<51] (01/05-30/09) (519m) >00-4342482703 + + + Schlossbad - Moosburg [<51] (01/05-30/09) (516m) >00-43427282237 + + + Dammwirt - Moosburg [<51] (01/05-30/09) (510m) >00-43427282053 + + + Kolbl - Ossiach (01/01-31/12) -CCA (509m) >00-4342438223 + + + Ossiacher See - Ossiach (01/05-30/09) -CCA (513m) >00-434243436 + + + Parth - Ossiach (01/04-31/10) (520m) >00-43424327440 + + + Blasge - Bodensdorf [<51] (11/04-05/11) (508m) >00-436644232006 + + + Lampele - Ossiach (01/05-30/09) -CCA (507m) >00-434243529 + + + Naturist - Tigringer See - Moosburg [<51] (01/05-30/09) (556m) >00-43427283542 + + + Jodl - Ossiach (20/04-30/09) (514m) >00-4342438779 + + + Kalkgruber - Ossiach [<51] (20/04-30/09) -CCA (508m) >00-434243527 + + + Prefelnig - Ossiach [<51] (01/05-31/10) (517m) >00-4342438226 + + + Olspur - Eibiswald [<51] (15/04-15/10) (353m) >00-436603490810 + + + Morgenfurt - Steindorf [<51] (15/05-31/08) (507m) >00-4342432290 + + + Seecamping Laggner - Steindorf [<51] (01/05-30/09) -CCA (503m) >00-436507300706 + + + Hoffmann - Steindorf (01/05-30/09) -CCA (515m) >00-4342438704 + + + Seecamping Nagele - Steindorf (01/05-30/09) (506m) >00-4342438314 + + + Maltschachersee - Briefelsdorf (01/05-30/09) (594m) >00-4342772644 + + + Seewirt - Maltschach [<51] (01/05-30/09) (598m) >00-4342772637 + + + Mureck - Mureck [<51] (01/04-30/11) (234m) >00-4334722164 + + + International Gosdorf - Misselsdorf (01/04-31/10) (230m) >00-4334723459 + + + Rocksee -Misselsdorf (01/04-31/10) (230m) >00-4334722292 + + + Eden Resort - Polfing-Brunn [<51] (01/01-31/12) (319m) >00-4369913000110 + + + Dachbergschenke - Maria Rojach [<51] (454m) >00-4343553002 + + + Weinland - Gleinstatten [<51] (01/04-03/11) (307m) >00-4334573344 + + + Sulmsee - Tillmitsch (01/05-30/09) (273m) >00-43345282866 + + + Leibnitz - Leibnitz [<51] (01/05-15/09) (269m) >00-43345282463 + + + Wieser - St Georgen-Bernaich (01/05-10/10) -CCA (573m) >00-4342123535 + + + Schwarzl-See - Unterpremstatten (15/04-30/09) (330m) >00-43313553577 + + + Reisemobil Stellplatz - Graz (01/01-31/12) (353m) >00-436763785102 + + + Piberstein - Koflach [<51] (480m) >00-4331447095950 + + + Naturist - Freie Menschen - Purgstall (09/05-19/10) (437m) >00-436644104215 + + + Lanzmaierhof - Frohnleiten [<51] (25/03-15/10) (426m) >00-4331262360 + + + Almenland-Am Bauernhof - Fladnitz an der Teichalm [<51] (01/01-31/12) (680m) >00-433179238888 + + + Hinterberg - Leoben  (15/04-30/09) (562m) >00-43384226758 + + + Gasthof Pichler - Oberaich [<51] (01/01-31/12) (491m) >00-43386251418 + + + Naturist - Gluckliche Freizeit - St. Lorenzen im Murztal [<51] (19/05-01/11) (521m) >00-436641761386 + + + Freizeitsee Zenz - Tragoss [<51] (01/01-31/12) (750m) >00-4338688410 + + + Rosskogler - Aflenz-Land [<51] (01/01-31/12) (740m) >00-436767576131 + + + Europa - Langenwang [<51] (01/01-31/12) (634m) >00-4338542950 + + + Gipfelblick - Sankt Aegyd am Neuwalde (01/01-31/12) (720m) >00-4327682544 + + + KohlhofMuhl - Neusiedl [<51] (01/01-31/12) (449m) >00-43263274035 + + + Spittelberg - Turnitz [<51] (01/01-31/12) (489m) >00-436649201239 + + + Gravogl - Turnitz [<51] (01/01-31/12) (456m) >00-4327698201 + + + Voralpen - Kleinzell (01/01-31/12) (486m) >00-432766275 + + + Paradise Garden - Thenneberg-Kaumberg (01/04-30/09) -CCA-BD (449m) >00-436764741966 + + + Golsental - Hainfeld (01/03-31/10) (408m) >00-43676842246272 + + + Terrassen Traisen - Traisen (15/02-15/11) -CCA-BD (406m) >00-43276262900 + + + Wienerwald - Sulz [<51] (15/04-15/10) (430m) >00-436644609796 + + + Rodaun - Wien-Bezirk (15/03-05/11) (241m) >00-4318884154 + + + Wien Sud - Wien-Bezirk (01/05-30/09) (206m) >00-4318673649 + + + Naturist - Lobau - Wenen (01/05-15/09) (156m) >00-4312804254 + + + Neue Donau - Wien Ost (01/05-30/09) (168m) >00-4312024010 + + + Wien West - Penzing (16/02-01/02) (245m) >00-4319142314 + + + Krackingberg - Kracking [<51] (01/01-31/12) (339m) >00-4322748344 + + + Finsterhof - Neulengbach (01/01-31/12) (211m) >00-43277252130 + + + Am See - Sankt Polten (15/04-31/10) -CCA (253m) >00-43676898798898 + + + Donaupark Klosterneuburg - Klosterneuburg (15/03-31/10) -CCA (168m) >00-43224325877 + + + Donaupark Tulln - Tulln an der Donau (01/04-15/10) -CCA (175m) >00-43227265200 + + + An der Donau - Zwentendorf [<51] (16/04-30/09) (182m) >00-4322772444 + + + Zebed - Gradacac [<51] (01/05-30/09) (144m) >00-38735852505 + + + Spacva - Lipovac (01/05-30/09) (83m) >00-38532341880 + + + Radonja - Karlovac [<51] (01/04-31/10) (122m) >00-38547718295 + + + Tradicije Cigoc - Kratecko [<51] (95m) >00-38544715124 + + + Autocamp Slapic**** - Duga Resa [<51] (01/04-31/10) -CCA-BD (134m) >00-38598860601 + + + Jankovic - Adlesici [<51] (01/05-30/09) (206m) >00-38573070570 + + + Srakovcic - Ribnik [<51] (01/04-31/10) (237m) >00-38547609090 + + + Family Kopacevo - Bilje [<51] (15/04-15/10) (83m) >00-38531752318 + + + Etno kuca pod Okicem - Klake [<51] (01/06-30/09) (327m) >00-38513382335 + + + Plitvice - Lucko-Zagreb (01/05-31/10) (120m) >00-38516530446 + + + Zagreb Kamp - Rakitje (01/01-31/12) -CCA (119m) >00-38513324567 + + + Davod - Davod (83m) >00-3679481041 + + + Sugovica - Baja (92m) >00-3679321755 + + + Ifjusagi Szallo - Baja (01/05-01/09) (91m) >00-3679522230 + + + Zornica Kuca - Bacevac [<51] (15/03-30/10) (167m) >00-381112540254 + + + Dunav - Zemun [<51] (01/05-30/09) (88m) >00-381112199072 + + + Zasavica - Sremska Mitrovica [<51] (25/04-01/11) (76m) >00-38122656214 + + + Eko Fruska Gora - Sremski Karlovci [<51] (01/05-30/09) (152m) >00-38121882511 + + + Apatin - Budzak [<51] (22/04-30/09) (78m) >00-38145741563 + + + Katra - Vinica [<51] (01/05-30/09) (169m) >00-38641368312 + + + Kolpa - Vinica (01/01-31/12) -BD (166m) >00-38641615560 + + + Benetic - Vinica [<51] (01/05-30/09) (160m) >00-38641643630 + + + Sotorisce Kanu Kamp - Stari trg ob Kolpi [<51] (22/04-30/09) (186m) >00-38641518536 + + + Muhvic - Stari trg ob Kolpi [<51] (01/05-15/09) (195m) >00-38618943675 + + + Konda - Stari trg ob Kolpi (01/01-31/12) (183m) >00-38618943671 + + + Zaga - Kostel [<51] (01/05-30/09) (210m) >00-39641218049 + + + Maleric - Dragatus [<51] (01/01-31/12) (159m) >00-38673057120 + + + Pezdirc - Gradac [<51] (01/06-30/09) (140m) >00-38640306051 + + + Krasinec - Gradac [<51] (20/04-30/09) (134m) >00-38640555183 + + + Podzemelj - Gradac-Metlika (135m) >00-38673069572 + + + Lovsin - Metlika [<51] (01/05-15/09) (136m) >00-38641883969 + + + Dolenjske Toplice - Dolenjske Toplice [<51] (174m) >00-38640466589 + + + Otocec - Otocec [<51] (01/04-15/10) (158m) >00-38640466589 + + + Pristava - Ivancna Gorica [<51] (01/01-31/12) (670m) >00-38631505400 + + + Ljubljana Resort*** - Ljubljana-Jezica (01/01-31/12) -CCA (288m) >00-38615683913 + + + Smlednik ** - Smlednik (01/05-15/10) (345m) >00-38613627002 + + + Resnik - Kamnik [<51] (01/05-30/09) (389m) >00-38618317314 + + + Danica - Bohinjska Bistrica (01/01-31/12) -CCA-BD (505m) >00-38645721702 + + + Zlatorog - Bohinj (01/05-30/09) (530m) >00-38645723064 + + + Bizjak - Preddvor [<51] (01/01-31/12) (484m) >00-38642555600 + + + Trnovc - Naklo [<51] (01/05-30/09) (413m) >00-38645331000 + + + Kraljev hrib - Stahovica [<51] (01/05-15/10) (590m) >00-38641816477 + + + Alpe - Stahovica [<51] (01/01-31/12) (530m) >00-38618327258 + + + Radovljica - Radovljica (01/06-15/09) (497m) >00-38645315770 + + + Sobec *** - Lesce (15/04-30/09) (421m) >00-38645353700 + + + Bled*** - Bled (01/04-15/10) -CCA-BD (478m) >00-38645752000 + + + Jezero - Velenje (26/04-31/10) -CCA (372m) >00-38631455977 + + + Trenta - Soca [<51] (01/05-30/09) -BD (689m) >00-38651615966 + + + Podljubelj -Trzic [<51] (15/06-15/09) (673m) >00-38640554436 + + + Stara Posta - Jezersko [<51] (01/04-30/09) (888m) >00-38670542123 + + + Senkove domacija - Jezersko [<51] (15/04-15/10) (915m) >00-38631777188 + + + Perun Lipce - Blejska Dobrava [<51] (01/04-15/10) (525m) >00-38641666187 + + + Terme Ptuj - Ptuj (01/01-31/12) -CCA-BD (222m) >00-38627494580 + + + Kamne * - Mojstrana [<51] (01/01-31/12) -BD (657m) >00-38645891105 + + + Spik - Gozd Martuljek (01/01-31/12) -CCA-BD (742m) >00-38651634466 + + + Natura Eco (tents only) - Krajska Gora [<51] (01/06-15/09) (827m) >00-38664121966 + + + Kekec - Maribor (01/01-31/12) -CCA-BD (298m) >00-38640225386 + + \ No newline at end of file diff --git a/BikeTouringGIS.Library/BikeTouringGIS.Library.csproj b/BikeTouringGIS.Library/BikeTouringGIS.Library.csproj index c19710f..14b408d 100644 --- a/BikeTouringGIS.Library/BikeTouringGIS.Library.csproj +++ b/BikeTouringGIS.Library/BikeTouringGIS.Library.csproj @@ -55,23 +55,30 @@ + - - - + + + + + {159f1fc4-4759-4db0-8695-ffd423302db4} GPX + + {55c7fa03-c3b0-4aa0-be48-3fa435ee37c1} + WinUX.Common + diff --git a/BikeTouringGIS.Library/Enumerations/GraphicType.cs b/BikeTouringGIS.Library/Enumerations/GraphicType.cs index 2485263..c2d235c 100644 --- a/BikeTouringGIS.Library/Enumerations/GraphicType.cs +++ b/BikeTouringGIS.Library/Enumerations/GraphicType.cs @@ -12,6 +12,7 @@ public enum GraphicType PointOfInterest, PoILabelM, PoILabelL, - PoILabelXL + PoILabelXL, + GPXTrack } } \ No newline at end of file diff --git a/BikeTouringGIS.Library/Enumerations/LayerType.cs b/BikeTouringGIS.Library/Enumerations/LayerType.cs index 91abb21..b6a61a0 100644 --- a/BikeTouringGIS.Library/Enumerations/LayerType.cs +++ b/BikeTouringGIS.Library/Enumerations/LayerType.cs @@ -5,6 +5,7 @@ public enum LayerType Unknown, PointsOfInterest, GPXRoute, - SplitRoutes + SplitRoutes, + GPXTrack } } \ No newline at end of file diff --git a/BikeTouringGIS.Library/Enumerations/PathType.cs b/BikeTouringGIS.Library/Enumerations/PathType.cs new file mode 100644 index 0000000..4bc8bd9 --- /dev/null +++ b/BikeTouringGIS.Library/Enumerations/PathType.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BikeTouringGISLibrary.Enumerations +{ + public enum PathType + { + Unknown, + Route, + Track + } +} \ No newline at end of file diff --git a/BikeTouringGIS.Library/GeometryCreatable.cs b/BikeTouringGIS.Library/GeometryCreatable.cs deleted file mode 100644 index e98dd85..0000000 --- a/BikeTouringGIS.Library/GeometryCreatable.cs +++ /dev/null @@ -1,32 +0,0 @@ -using BikeTouringGISLibrary.Enumerations; -using Esri.ArcGISRuntime.Geometry; -using GPX; -using System.Collections.Generic; - -namespace BikeTouringGISLibrary -{ - public abstract class GeometryCreatable - { - public Envelope Extent { get; protected set; } - public List Points { get; internal set; } - protected Geometry Geometry { get; set; } - - internal abstract void CreateGeometry(); - - protected BikeTouringGISGraphic CreateBikeTouringGISGraphic(string nameAttribute, GraphicType typeOfGraphic) - { - var g = new BikeTouringGISGraphic(Geometry, typeOfGraphic); - g.Attributes["name"] = nameAttribute; - return g; - } - - protected BikeTouringGISGraphic CreateBikeTouringGISPointGraphic(wptType location, string nameAttribute, GraphicType typeOfPoint) - { - var mappoint = new MapPoint((double)location.lon, (double)location.lat, new SpatialReference(4326)); - var g = new BikeTouringGISGraphic(mappoint, typeOfPoint); - g.ZIndex = 1; - g.Attributes["name"] = nameAttribute; - return g; - } - } -} \ No newline at end of file diff --git a/BikeTouringGIS.Library/GeometryData.cs b/BikeTouringGIS.Library/GeometryData.cs new file mode 100644 index 0000000..fbf467c --- /dev/null +++ b/BikeTouringGIS.Library/GeometryData.cs @@ -0,0 +1,16 @@ +using BikeTouringGISLibrary.Enumerations; +using Esri.ArcGISRuntime.Geometry; +using GPX; +using System.Collections.Generic; + +namespace BikeTouringGISLibrary +{ + public abstract class GeometryData + { + public Envelope Extent { get; internal set; } + public List Points { get; set; } + public string Name { get; internal set; } + public BikeTouringGISGraphic Geometry { get; internal set; } + public string FileName { get; set; } + } +} \ No newline at end of file diff --git a/BikeTouringGIS.Library/IRoute.cs b/BikeTouringGIS.Library/IPath.cs similarity index 60% rename from BikeTouringGIS.Library/IRoute.cs rename to BikeTouringGIS.Library/IPath.cs index a26a85c..f18e5a0 100644 --- a/BikeTouringGIS.Library/IRoute.cs +++ b/BikeTouringGIS.Library/IPath.cs @@ -1,16 +1,16 @@ -using GPX; +using BikeTouringGISLibrary.Enumerations; +using GPX; using System.Collections.Generic; namespace BikeTouringGISLibrary { - public interface IRoute + public interface IPath { BikeTouringGISGraphic EndLocation { get; } string Name { get; } List Points { get; } - BikeTouringGISGraphic RouteGeometry { get; } + BikeTouringGISGraphic Geometry { get; } BikeTouringGISGraphic StartLocation { get; } - - void Flip(); + PathType Type { get; set; } } } \ No newline at end of file diff --git a/BikeTouringGIS.Library/Model/GpxInformation.cs b/BikeTouringGIS.Library/Model/GpxInformation.cs index f572905..c55dd23 100644 --- a/BikeTouringGIS.Library/Model/GpxInformation.cs +++ b/BikeTouringGIS.Library/Model/GpxInformation.cs @@ -12,11 +12,9 @@ public GpxInformation() Tracks = new List(); WayPoints = new List(); } - - public IEnumerable AllRoutes { get; private set; } - public List Routes { get; private set; } - public List Tracks { get; private set; } - public List WayPoints { get; private set; } + public List Routes { get; set; } + public List Tracks { get; set; } + public List WayPoints { get; set; } public Envelope WayPointsExtent { @@ -31,17 +29,5 @@ public Envelope WayPointsExtent return initialExtent; } } - - public void CreateGeometries() - { - WayPoints.ForEach(wp => wp.CreateGeometry()); - var routes = Routes; - routes.AddRange(Tracks.Where(t => t.IsConvertedToRoute)); - AllRoutes = routes.Cast(); - foreach (var route in AllRoutes) - { - route.CreateGeometry(); - } - } } } \ No newline at end of file diff --git a/BikeTouringGIS.Library/Model/Route.cs b/BikeTouringGIS.Library/Model/Route.cs index d108c74..95ecb41 100644 --- a/BikeTouringGIS.Library/Model/Route.cs +++ b/BikeTouringGIS.Library/Model/Route.cs @@ -1,62 +1,21 @@ using BikeTouringGISLibrary.Enumerations; +using BikeTouringGISLibrary.Services; using Esri.ArcGISRuntime.Geometry; using GPX; using System.Collections.Generic; - +using WinUX; namespace BikeTouringGISLibrary.Model { - public class Route : GeometryCreatable, IRoute + public class Route : Track { public Route() { + Type = PathType.Route; } - - public Route(List points) - { - Points = points; - } - - public BikeTouringGISGraphic EndLocation - { - get - { - return CreateBikeTouringGISPointGraphic(Points[Points.Count - 1], "end", GraphicType.GPXRouteEndLocation); - } - } - - public string Name { get; internal set; } - - public BikeTouringGISGraphic RouteGeometry - { - get - { - return CreateBikeTouringGISGraphic(Name, GraphicType.GPXRoute); - } - } - - public BikeTouringGISGraphic StartLocation - { - get - { - return CreateBikeTouringGISPointGraphic(Points[0], "start", GraphicType.GPXRouteStartLocation); - } - } - public void Flip() { Points.Reverse(); - CreateGeometry(); - } - - internal override void CreateGeometry() - { - var builder = new PolylineBuilder(new SpatialReference(4326)); - foreach (var wayPoint in Points) - { - builder.AddPoint(new MapPoint((double)wayPoint.lon, (double)wayPoint.lat)); - } - Geometry = builder.ToGeometry(); - Extent = Geometry.Extent; + Geometry = GeometryOperator.ReversePoints(Points); } } } \ No newline at end of file diff --git a/BikeTouringGIS.Library/Model/Track.cs b/BikeTouringGIS.Library/Model/Track.cs index fe3a94b..20ec1aa 100644 --- a/BikeTouringGIS.Library/Model/Track.cs +++ b/BikeTouringGIS.Library/Model/Track.cs @@ -1,22 +1,50 @@ -using GPX; +using BikeTouringGISLibrary.Enumerations; +using Esri.ArcGISRuntime.Geometry; +using GPX; using System.Collections.Generic; - +using WinUX; namespace BikeTouringGISLibrary.Model { - public class Track : Route + public class Track : GeometryData, IPath { - public bool IsConvertedToRoute { get; private set; } - public trksegType[] Segments { get; internal set; } - - public void ConvertTrackToRoute() + private bool _isConverted; + public Track() { - var waypoints = new List(); - foreach (var segment in Segments) + Type = PathType.Track; + } + public BikeTouringGISGraphic StartLocation { get; internal set; } + public BikeTouringGISGraphic EndLocation { get; internal set; } + public bool IsConvertedToRoute + { + get { return _isConverted; } + set + { + if (value != _isConverted) + { + _isConverted = value; + Type = _isConverted ? PathType.Route : PathType.Track; + } + } + } + public trksegType[] Segments + { + set { - waypoints.AddRange(segment.trkpt); + var waypoints = new List(); + foreach (var segment in value) + { + waypoints.AddRange(segment.trkpt); + } + Points = waypoints; } - Points = waypoints; - IsConvertedToRoute = true; + } + public PathType Type { get; set; } + public Route ConvertTrack() + { + var newRoute = new Route(); + this.CopyProperties(newRoute, new string[] { "Segments"}, true); + newRoute.Type = PathType.Route; + return newRoute; } } } \ No newline at end of file diff --git a/BikeTouringGIS.Library/Model/WayPoint.cs b/BikeTouringGIS.Library/Model/WayPoint.cs index e21100f..6711d98 100644 --- a/BikeTouringGIS.Library/Model/WayPoint.cs +++ b/BikeTouringGIS.Library/Model/WayPoint.cs @@ -4,11 +4,10 @@ namespace BikeTouringGISLibrary.Model { - public class WayPoint : GeometryCreatable + public class WayPoint : GeometryData { public decimal Lat { get; private set; } public decimal Lon { get; private set; } - public string Name { get; internal set; } public string Source { get; internal set; } public static implicit operator wptType(WayPoint waypoint) @@ -19,20 +18,5 @@ public class WayPoint : GeometryCreatable wptType.lat = waypoint.Lat; return wptType; } - - public BikeTouringGISGraphic ToGraphic() - { - var graphic = CreateBikeTouringGISGraphic(Name, GraphicType.PointOfInterest); - graphic.Attributes["source"] = Source; - return graphic; - } - - internal override void CreateGeometry() - { - Lat = Points[0].lat; - Lon = Points[0].lon; - Geometry = new MapPoint((double)Lon, (double)Lat, new SpatialReference(4326)); - Extent = Geometry.Extent; - } } } \ No newline at end of file diff --git a/BikeTouringGIS.Library/Services/GPXFileReader.cs b/BikeTouringGIS.Library/Services/GPXFileReader.cs new file mode 100644 index 0000000..ec090f6 --- /dev/null +++ b/BikeTouringGIS.Library/Services/GPXFileReader.cs @@ -0,0 +1,70 @@ +using BikeTouringGISLibrary.Model; +using GPX; +using System.Collections.Generic; + +namespace BikeTouringGISLibrary.Services +{ + public class GpxFileReader + { + private string _fileName; + private GpxInformation _gpxData; + + public GpxInformation LoadFile(string fileName) + { + _gpxData = new GpxInformation(); + _fileName = fileName; + var gpx = new GPXFile(_fileName); + LoadRoutes(gpx); + LoadWayPoints(gpx); + LoadTracks(gpx); + return _gpxData; + } + + private void LoadRoutes(GPXFile gpx) + { + var routeIndex = 1; + foreach (var route in gpx.GetRoutes()) + { + var gpxRoute = new Route(); + if (string.IsNullOrEmpty(route.name)) + { + route.name = string.Format("r{0}", routeIndex.ToString()); + routeIndex++; + } + gpxRoute.Name = route.name; + gpxRoute.Points = route.RouteWayPoints; + _gpxData.Routes.Add(gpxRoute); + } + } + + private void LoadTracks(GPXFile gpx) + { + var trackIndex = 1; + foreach (var track in gpx.GetTracks()) + { + var gpxTrack = new Track(); + if (string.IsNullOrEmpty(track.name) && string.IsNullOrEmpty(gpx.Name)) + { + track.name = $"t{trackIndex.ToString()}"; + trackIndex++; + } + gpxTrack.Name = string.IsNullOrEmpty(track.name) ? gpx.Name : track.name; + gpxTrack.Segments = track.trkseg; + gpxTrack.FileName = _fileName; + _gpxData.Tracks.Add(gpxTrack); + } + } + + private void LoadWayPoints(GPXFile gpx) + { + foreach (var waypoint in gpx.GetWaypoints()) + { + var wPoint = new WayPoint(); + wPoint.Name = waypoint.name; + wPoint.Source = _fileName; + wPoint.Points = new List() { waypoint }; + _gpxData.WayPoints.Add(wPoint); + } + } + } +} \ No newline at end of file diff --git a/BikeTouringGIS.Library/Services/GeometryFactory.cs b/BikeTouringGIS.Library/Services/GeometryFactory.cs new file mode 100644 index 0000000..edde52a --- /dev/null +++ b/BikeTouringGIS.Library/Services/GeometryFactory.cs @@ -0,0 +1,82 @@ +using BikeTouringGISLibrary.Enumerations; +using BikeTouringGISLibrary.Model; +using Esri.ArcGISRuntime.Geometry; +using GPX; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WinUX; +namespace BikeTouringGISLibrary.Services +{ + public sealed class GeometryFactory + { + private GpxInformation _gpxInformation; + public GeometryFactory(GpxInformation gpxData) + { + _gpxInformation = gpxData; + } + public void CreateGeometries() + { + _gpxInformation.WayPoints.ForEach(wp => CreateWayPointGeometry(wp)); + var tracksToConvert = _gpxInformation.Tracks.Where(t => t.IsConvertedToRoute); + var routes = new List(); + tracksToConvert.ForEach(t => + { + Route newRoute = t.ConvertTrack(); + CreateRouteGeometry(newRoute); + routes.Add(newRoute); + }); + _gpxInformation.Routes = routes; + var tracks = _gpxInformation.Tracks.Where(t => !t.IsConvertedToRoute); + tracks.ForEach(t => CreateTrackGeometry(t)); + _gpxInformation.Tracks = tracks.ToList(); + } + + private void CreateTrackGeometry(Track track) + { + CreateGeometryAndExtentForTrackOrRoute(track, GraphicType.GPXTrack); + } + private void CreateRouteGeometry(Route route) + { + CreateGeometryAndExtentForTrackOrRoute(route, GraphicType.GPXRoute); + route.StartLocation = CreateBikeTouringGISPointGraphic(route.Points.First(), route.Name, GraphicType.GPXRouteStartLocation); + route.EndLocation = CreateBikeTouringGISPointGraphic(route.Points.Last(), route.Name, GraphicType.GPXRouteEndLocation); + } + + private void CreateWayPointGeometry(WayPoint wayPoint) + { + var graphic = CreateBikeTouringGISPointGraphic(wayPoint.Points[0], wayPoint.Name, GraphicType.PointOfInterest); + graphic.Attributes["source"] = wayPoint.Source; + wayPoint.Geometry = graphic; + wayPoint.Extent = graphic.Geometry.Extent; + } + + private BikeTouringGISGraphic CreateBikeTouringGISPointGraphic(wptType location, string nameAttribute, GraphicType typeOfPoint) + { + var mappoint = new MapPoint((double)location.lon, (double)location.lat, new SpatialReference(4326)); + var g = new BikeTouringGISGraphic(mappoint, typeOfPoint) + { + ZIndex = 1 + }; + g.Attributes["name"] = nameAttribute; + return g; + } + private void CreateGeometryAndExtentForTrackOrRoute(GeometryData data, GraphicType typeOfGraphic) + { + var builder = new PolylineBuilder(new SpatialReference(4326)); + foreach (var wayPoint in data.Points) + { + builder.AddPoint(new MapPoint((double)wayPoint.lon, (double)wayPoint.lat)); + } + var esriGeometry = builder.ToGeometry(); + data.Extent = esriGeometry.Extent; + var geometry = new BikeTouringGISGraphic(esriGeometry, typeOfGraphic); + geometry.Attributes["name"] = data.Name; + geometry.Attributes["filename"] = data.FileName; + data.Geometry = geometry; + } + + } +} diff --git a/BikeTouringGIS.Library/Services/GeometryOperator.cs b/BikeTouringGIS.Library/Services/GeometryOperator.cs new file mode 100644 index 0000000..2b83d1b --- /dev/null +++ b/BikeTouringGIS.Library/Services/GeometryOperator.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using GPX; + +namespace BikeTouringGISLibrary.Services +{ + class GeometryOperator + { + internal static BikeTouringGISGraphic ReversePoints(List points) + { + throw new NotImplementedException(); + } + } +} diff --git a/BikeTouringGIS.sln b/BikeTouringGIS.sln index f2709ac..3c4c8e9 100644 --- a/BikeTouringGIS.sln +++ b/BikeTouringGIS.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 +# Visual Studio 15 +VisualStudioVersion = 15.0.27130.2026 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BikeTouringGIS", "BikeTouringGIS\BikeTouringGIS.csproj", "{39DE280E-2709-4C05-8F0C-01F8774D73C7}" EndProject @@ -15,18 +15,83 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "theRightDirection.Library.L EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinUX.Common", "..\WinUX-UWP-Toolkit\WinUX\WinUX.Common\WinUX.Common.csproj", "{55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BikeTouringGISApp", "BikeTouringGISApp\BikeTouringGISApp.csproj", "{772BF105-4384-4701-A398-8756CB5BA908}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BikeTouringGISApp.Library", "BikeTouringGISApp.Library\BikeTouringGISApp.Library.csproj", "{01A37488-B1A9-40D0-BCD9-3A5ED692F127}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BikeTouringGISApp.UnitTests", "BikeTouringGISApp.UnitTests\BikeTouringGISApp.UnitTests.csproj", "{60E942B6-18E4-4B43-BCFF-C0C4C72B0356}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinUX.UWP", "..\WinUX-UWP-Toolkit\WinUX\WinUX.UWP\WinUX.UWP.csproj", "{B7D2BD46-3485-459D-AD88-ECABF497D508}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinUX.UWP.Xaml", "..\WinUX-UWP-Toolkit\WinUX\WinUX.UWP.Xaml\WinUX.UWP.Xaml.csproj", "{0D958504-42C8-4B04-B9A7-2C6CB6E8009C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Toolkit.Uwp.Services", "..\UWPCommunityToolkit\Microsoft.Toolkit.Uwp.Services\Microsoft.Toolkit.Uwp.Services.csproj", "{7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Toolkit.Uwp", "..\UWPCommunityToolkit\Microsoft.Toolkit.Uwp\Microsoft.Toolkit.Uwp.csproj", "{805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Toolkit.Services", "..\UWPCommunityToolkit\Microsoft.Toolkit.Services\Microsoft.Toolkit.Services.csproj", "{1C8A345B-FA57-4F22-B648-C703599F6F00}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Toolkit", "..\UWPCommunityToolkit\Microsoft.Toolkit\Microsoft.Toolkit.csproj", "{1C743253-00DD-406B-A0A9-7F956344838F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Toolkit.Uwp.UI.Controls", "..\UWPCommunityToolkit\Microsoft.Toolkit.Uwp.UI.Controls\Microsoft.Toolkit.Uwp.UI.Controls.csproj", "{E9FAABFB-D726-42C1-83C1-CB46A29FEA81}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Toolkit.Uwp.UI.Animations", "..\UWPCommunityToolkit\Microsoft.Toolkit.Uwp.UI.Animations\Microsoft.Toolkit.Uwp.UI.Animations.csproj", "{B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Toolkit.Uwp.UI", "..\UWPCommunityToolkit\Microsoft.Toolkit.Uwp.UI\Microsoft.Toolkit.Uwp.UI.csproj", "{3DD8AA7C-3569-4E51-992F-0C2257E8878E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{CCB51AC0-5179-4E8D-B239-1F5DF9E0B427}" + ProjectSection(SolutionItems) = preProject + UnitTestSettings.testsettings = UnitTestSettings.testsettings + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug (Anniversary Update)|Any CPU = Debug (Anniversary Update)|Any CPU + Debug (Anniversary Update)|ARM = Debug (Anniversary Update)|ARM + Debug (Anniversary Update)|x64 = Debug (Anniversary Update)|x64 + Debug (Anniversary Update)|x86 = Debug (Anniversary Update)|x86 + Debug (Version 1511)|Any CPU = Debug (Version 1511)|Any CPU + Debug (Version 1511)|ARM = Debug (Version 1511)|ARM + Debug (Version 1511)|x64 = Debug (Version 1511)|x64 + Debug (Version 1511)|x86 = Debug (Version 1511)|x86 Debug|Any CPU = Debug|Any CPU Debug|ARM = Debug|ARM Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 + Publish|Any CPU = Publish|Any CPU + Publish|ARM = Publish|ARM + Publish|x64 = Publish|x64 + Publish|x86 = Publish|x86 + Release (Anniversary Update)|Any CPU = Release (Anniversary Update)|Any CPU + Release (Anniversary Update)|ARM = Release (Anniversary Update)|ARM + Release (Anniversary Update)|x64 = Release (Anniversary Update)|x64 + Release (Anniversary Update)|x86 = Release (Anniversary Update)|x86 + Release (Version 1511)|Any CPU = Release (Version 1511)|Any CPU + Release (Version 1511)|ARM = Release (Version 1511)|ARM + Release (Version 1511)|x64 = Release (Version 1511)|x64 + Release (Version 1511)|x86 = Release (Version 1511)|x86 Release|Any CPU = Release|Any CPU Release|ARM = Release|ARM Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Debug (Anniversary Update)|Any CPU.ActiveCfg = Debug|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Debug (Anniversary Update)|Any CPU.Build.0 = Debug|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Debug (Anniversary Update)|ARM.ActiveCfg = Debug|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Debug (Anniversary Update)|ARM.Build.0 = Debug|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Debug (Anniversary Update)|x64.ActiveCfg = Debug|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Debug (Anniversary Update)|x64.Build.0 = Debug|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Debug (Anniversary Update)|x86.ActiveCfg = Debug|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Debug (Anniversary Update)|x86.Build.0 = Debug|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Debug (Version 1511)|Any CPU.ActiveCfg = Debug|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Debug (Version 1511)|Any CPU.Build.0 = Debug|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Debug (Version 1511)|ARM.ActiveCfg = Debug|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Debug (Version 1511)|ARM.Build.0 = Debug|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Debug (Version 1511)|x64.ActiveCfg = Debug|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Debug (Version 1511)|x64.Build.0 = Debug|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Debug (Version 1511)|x86.ActiveCfg = Debug|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Debug (Version 1511)|x86.Build.0 = Debug|Any CPU {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Debug|Any CPU.Build.0 = Debug|Any CPU {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Debug|ARM.ActiveCfg = Debug|Any CPU @@ -35,6 +100,30 @@ Global {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Debug|x64.Build.0 = Debug|Any CPU {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Debug|x86.ActiveCfg = Debug|Any CPU {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Debug|x86.Build.0 = Debug|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Publish|Any CPU.ActiveCfg = Release|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Publish|Any CPU.Build.0 = Release|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Publish|ARM.ActiveCfg = Release|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Publish|ARM.Build.0 = Release|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Publish|x64.ActiveCfg = Release|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Publish|x64.Build.0 = Release|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Publish|x86.ActiveCfg = Release|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Publish|x86.Build.0 = Release|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Release (Anniversary Update)|Any CPU.ActiveCfg = Release|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Release (Anniversary Update)|Any CPU.Build.0 = Release|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Release (Anniversary Update)|ARM.ActiveCfg = Release|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Release (Anniversary Update)|ARM.Build.0 = Release|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Release (Anniversary Update)|x64.ActiveCfg = Release|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Release (Anniversary Update)|x64.Build.0 = Release|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Release (Anniversary Update)|x86.ActiveCfg = Release|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Release (Anniversary Update)|x86.Build.0 = Release|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Release (Version 1511)|Any CPU.ActiveCfg = Release|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Release (Version 1511)|Any CPU.Build.0 = Release|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Release (Version 1511)|ARM.ActiveCfg = Release|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Release (Version 1511)|ARM.Build.0 = Release|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Release (Version 1511)|x64.ActiveCfg = Release|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Release (Version 1511)|x64.Build.0 = Release|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Release (Version 1511)|x86.ActiveCfg = Release|Any CPU + {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Release (Version 1511)|x86.Build.0 = Release|Any CPU {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Release|Any CPU.ActiveCfg = Release|Any CPU {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Release|Any CPU.Build.0 = Release|Any CPU {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Release|ARM.ActiveCfg = Release|Any CPU @@ -43,6 +132,22 @@ Global {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Release|x64.Build.0 = Release|Any CPU {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Release|x86.ActiveCfg = Release|Any CPU {39DE280E-2709-4C05-8F0C-01F8774D73C7}.Release|x86.Build.0 = Release|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Debug (Anniversary Update)|Any CPU.ActiveCfg = Debug|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Debug (Anniversary Update)|Any CPU.Build.0 = Debug|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Debug (Anniversary Update)|ARM.ActiveCfg = Debug|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Debug (Anniversary Update)|ARM.Build.0 = Debug|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Debug (Anniversary Update)|x64.ActiveCfg = Debug|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Debug (Anniversary Update)|x64.Build.0 = Debug|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Debug (Anniversary Update)|x86.ActiveCfg = Debug|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Debug (Anniversary Update)|x86.Build.0 = Debug|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Debug (Version 1511)|Any CPU.ActiveCfg = Debug|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Debug (Version 1511)|Any CPU.Build.0 = Debug|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Debug (Version 1511)|ARM.ActiveCfg = Debug|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Debug (Version 1511)|ARM.Build.0 = Debug|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Debug (Version 1511)|x64.ActiveCfg = Debug|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Debug (Version 1511)|x64.Build.0 = Debug|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Debug (Version 1511)|x86.ActiveCfg = Debug|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Debug (Version 1511)|x86.Build.0 = Debug|Any CPU {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Debug|Any CPU.Build.0 = Debug|Any CPU {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Debug|ARM.ActiveCfg = Debug|Any CPU @@ -51,6 +156,30 @@ Global {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Debug|x64.Build.0 = Debug|Any CPU {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Debug|x86.ActiveCfg = Debug|Any CPU {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Debug|x86.Build.0 = Debug|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Publish|Any CPU.ActiveCfg = Release|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Publish|Any CPU.Build.0 = Release|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Publish|ARM.ActiveCfg = Release|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Publish|ARM.Build.0 = Release|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Publish|x64.ActiveCfg = Release|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Publish|x64.Build.0 = Release|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Publish|x86.ActiveCfg = Release|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Publish|x86.Build.0 = Release|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Release (Anniversary Update)|Any CPU.ActiveCfg = Release|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Release (Anniversary Update)|Any CPU.Build.0 = Release|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Release (Anniversary Update)|ARM.ActiveCfg = Release|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Release (Anniversary Update)|ARM.Build.0 = Release|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Release (Anniversary Update)|x64.ActiveCfg = Release|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Release (Anniversary Update)|x64.Build.0 = Release|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Release (Anniversary Update)|x86.ActiveCfg = Release|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Release (Anniversary Update)|x86.Build.0 = Release|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Release (Version 1511)|Any CPU.ActiveCfg = Release|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Release (Version 1511)|Any CPU.Build.0 = Release|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Release (Version 1511)|ARM.ActiveCfg = Release|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Release (Version 1511)|ARM.Build.0 = Release|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Release (Version 1511)|x64.ActiveCfg = Release|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Release (Version 1511)|x64.Build.0 = Release|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Release (Version 1511)|x86.ActiveCfg = Release|Any CPU + {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Release (Version 1511)|x86.Build.0 = Release|Any CPU {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Release|Any CPU.ActiveCfg = Release|Any CPU {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Release|Any CPU.Build.0 = Release|Any CPU {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Release|ARM.ActiveCfg = Release|Any CPU @@ -59,6 +188,22 @@ Global {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Release|x64.Build.0 = Release|Any CPU {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Release|x86.ActiveCfg = Release|Any CPU {BDC204A2-F656-43B9-9B4B-C6308BD81404}.Release|x86.Build.0 = Release|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Debug (Anniversary Update)|Any CPU.ActiveCfg = Debug|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Debug (Anniversary Update)|Any CPU.Build.0 = Debug|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Debug (Anniversary Update)|ARM.ActiveCfg = Debug|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Debug (Anniversary Update)|ARM.Build.0 = Debug|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Debug (Anniversary Update)|x64.ActiveCfg = Debug|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Debug (Anniversary Update)|x64.Build.0 = Debug|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Debug (Anniversary Update)|x86.ActiveCfg = Debug|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Debug (Anniversary Update)|x86.Build.0 = Debug|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Debug (Version 1511)|Any CPU.ActiveCfg = Debug|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Debug (Version 1511)|Any CPU.Build.0 = Debug|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Debug (Version 1511)|ARM.ActiveCfg = Debug|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Debug (Version 1511)|ARM.Build.0 = Debug|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Debug (Version 1511)|x64.ActiveCfg = Debug|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Debug (Version 1511)|x64.Build.0 = Debug|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Debug (Version 1511)|x86.ActiveCfg = Debug|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Debug (Version 1511)|x86.Build.0 = Debug|Any CPU {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Debug|Any CPU.Build.0 = Debug|Any CPU {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Debug|ARM.ActiveCfg = Debug|Any CPU @@ -67,6 +212,30 @@ Global {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Debug|x64.Build.0 = Debug|Any CPU {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Debug|x86.ActiveCfg = Debug|Any CPU {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Debug|x86.Build.0 = Debug|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Publish|Any CPU.ActiveCfg = Release|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Publish|Any CPU.Build.0 = Release|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Publish|ARM.ActiveCfg = Release|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Publish|ARM.Build.0 = Release|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Publish|x64.ActiveCfg = Release|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Publish|x64.Build.0 = Release|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Publish|x86.ActiveCfg = Release|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Publish|x86.Build.0 = Release|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Release (Anniversary Update)|Any CPU.ActiveCfg = Release|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Release (Anniversary Update)|Any CPU.Build.0 = Release|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Release (Anniversary Update)|ARM.ActiveCfg = Release|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Release (Anniversary Update)|ARM.Build.0 = Release|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Release (Anniversary Update)|x64.ActiveCfg = Release|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Release (Anniversary Update)|x64.Build.0 = Release|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Release (Anniversary Update)|x86.ActiveCfg = Release|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Release (Anniversary Update)|x86.Build.0 = Release|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Release (Version 1511)|Any CPU.ActiveCfg = Release|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Release (Version 1511)|Any CPU.Build.0 = Release|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Release (Version 1511)|ARM.ActiveCfg = Release|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Release (Version 1511)|ARM.Build.0 = Release|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Release (Version 1511)|x64.ActiveCfg = Release|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Release (Version 1511)|x64.Build.0 = Release|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Release (Version 1511)|x86.ActiveCfg = Release|Any CPU + {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Release (Version 1511)|x86.Build.0 = Release|Any CPU {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Release|Any CPU.ActiveCfg = Release|Any CPU {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Release|Any CPU.Build.0 = Release|Any CPU {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Release|ARM.ActiveCfg = Release|Any CPU @@ -75,6 +244,22 @@ Global {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Release|x64.Build.0 = Release|Any CPU {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Release|x86.ActiveCfg = Release|Any CPU {02120E6D-3E7D-445A-A27F-9EA8EF43F18B}.Release|x86.Build.0 = Release|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Debug (Anniversary Update)|Any CPU.ActiveCfg = Debug|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Debug (Anniversary Update)|Any CPU.Build.0 = Debug|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Debug (Anniversary Update)|ARM.ActiveCfg = Debug|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Debug (Anniversary Update)|ARM.Build.0 = Debug|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Debug (Anniversary Update)|x64.ActiveCfg = Debug|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Debug (Anniversary Update)|x64.Build.0 = Debug|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Debug (Anniversary Update)|x86.ActiveCfg = Debug|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Debug (Anniversary Update)|x86.Build.0 = Debug|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Debug (Version 1511)|Any CPU.ActiveCfg = Debug|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Debug (Version 1511)|Any CPU.Build.0 = Debug|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Debug (Version 1511)|ARM.ActiveCfg = Debug|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Debug (Version 1511)|ARM.Build.0 = Debug|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Debug (Version 1511)|x64.ActiveCfg = Debug|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Debug (Version 1511)|x64.Build.0 = Debug|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Debug (Version 1511)|x86.ActiveCfg = Debug|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Debug (Version 1511)|x86.Build.0 = Debug|Any CPU {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Debug|Any CPU.Build.0 = Debug|Any CPU {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Debug|ARM.ActiveCfg = Debug|Any CPU @@ -83,6 +268,30 @@ Global {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Debug|x64.Build.0 = Debug|Any CPU {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Debug|x86.ActiveCfg = Debug|Any CPU {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Debug|x86.Build.0 = Debug|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Publish|Any CPU.ActiveCfg = Release|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Publish|Any CPU.Build.0 = Release|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Publish|ARM.ActiveCfg = Release|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Publish|ARM.Build.0 = Release|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Publish|x64.ActiveCfg = Release|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Publish|x64.Build.0 = Release|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Publish|x86.ActiveCfg = Release|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Publish|x86.Build.0 = Release|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Release (Anniversary Update)|Any CPU.ActiveCfg = Release|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Release (Anniversary Update)|Any CPU.Build.0 = Release|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Release (Anniversary Update)|ARM.ActiveCfg = Release|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Release (Anniversary Update)|ARM.Build.0 = Release|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Release (Anniversary Update)|x64.ActiveCfg = Release|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Release (Anniversary Update)|x64.Build.0 = Release|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Release (Anniversary Update)|x86.ActiveCfg = Release|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Release (Anniversary Update)|x86.Build.0 = Release|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Release (Version 1511)|Any CPU.ActiveCfg = Release|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Release (Version 1511)|Any CPU.Build.0 = Release|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Release (Version 1511)|ARM.ActiveCfg = Release|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Release (Version 1511)|ARM.Build.0 = Release|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Release (Version 1511)|x64.ActiveCfg = Release|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Release (Version 1511)|x64.Build.0 = Release|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Release (Version 1511)|x86.ActiveCfg = Release|Any CPU + {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Release (Version 1511)|x86.Build.0 = Release|Any CPU {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Release|Any CPU.ActiveCfg = Release|Any CPU {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Release|Any CPU.Build.0 = Release|Any CPU {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Release|ARM.ActiveCfg = Release|Any CPU @@ -91,6 +300,22 @@ Global {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Release|x64.Build.0 = Release|Any CPU {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Release|x86.ActiveCfg = Release|Any CPU {159F1FC4-4759-4DB0-8695-FFD423302DB4}.Release|x86.Build.0 = Release|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Debug (Anniversary Update)|Any CPU.ActiveCfg = Debug|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Debug (Anniversary Update)|Any CPU.Build.0 = Debug|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Debug (Anniversary Update)|ARM.ActiveCfg = Debug|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Debug (Anniversary Update)|ARM.Build.0 = Debug|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Debug (Anniversary Update)|x64.ActiveCfg = Debug|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Debug (Anniversary Update)|x64.Build.0 = Debug|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Debug (Anniversary Update)|x86.ActiveCfg = Debug|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Debug (Anniversary Update)|x86.Build.0 = Debug|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Debug (Version 1511)|Any CPU.ActiveCfg = Debug|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Debug (Version 1511)|Any CPU.Build.0 = Debug|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Debug (Version 1511)|ARM.ActiveCfg = Debug|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Debug (Version 1511)|ARM.Build.0 = Debug|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Debug (Version 1511)|x64.ActiveCfg = Debug|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Debug (Version 1511)|x64.Build.0 = Debug|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Debug (Version 1511)|x86.ActiveCfg = Debug|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Debug (Version 1511)|x86.Build.0 = Debug|Any CPU {302E3909-04AF-4064-A533-6FAA5E6593CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {302E3909-04AF-4064-A533-6FAA5E6593CF}.Debug|Any CPU.Build.0 = Debug|Any CPU {302E3909-04AF-4064-A533-6FAA5E6593CF}.Debug|ARM.ActiveCfg = Debug|Any CPU @@ -99,6 +324,30 @@ Global {302E3909-04AF-4064-A533-6FAA5E6593CF}.Debug|x64.Build.0 = Debug|Any CPU {302E3909-04AF-4064-A533-6FAA5E6593CF}.Debug|x86.ActiveCfg = Debug|Any CPU {302E3909-04AF-4064-A533-6FAA5E6593CF}.Debug|x86.Build.0 = Debug|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Publish|Any CPU.ActiveCfg = Release|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Publish|Any CPU.Build.0 = Release|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Publish|ARM.ActiveCfg = Release|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Publish|ARM.Build.0 = Release|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Publish|x64.ActiveCfg = Release|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Publish|x64.Build.0 = Release|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Publish|x86.ActiveCfg = Release|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Publish|x86.Build.0 = Release|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Release (Anniversary Update)|Any CPU.ActiveCfg = Release|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Release (Anniversary Update)|Any CPU.Build.0 = Release|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Release (Anniversary Update)|ARM.ActiveCfg = Release|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Release (Anniversary Update)|ARM.Build.0 = Release|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Release (Anniversary Update)|x64.ActiveCfg = Release|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Release (Anniversary Update)|x64.Build.0 = Release|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Release (Anniversary Update)|x86.ActiveCfg = Release|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Release (Anniversary Update)|x86.Build.0 = Release|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Release (Version 1511)|Any CPU.ActiveCfg = Release|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Release (Version 1511)|Any CPU.Build.0 = Release|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Release (Version 1511)|ARM.ActiveCfg = Release|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Release (Version 1511)|ARM.Build.0 = Release|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Release (Version 1511)|x64.ActiveCfg = Release|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Release (Version 1511)|x64.Build.0 = Release|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Release (Version 1511)|x86.ActiveCfg = Release|Any CPU + {302E3909-04AF-4064-A533-6FAA5E6593CF}.Release (Version 1511)|x86.Build.0 = Release|Any CPU {302E3909-04AF-4064-A533-6FAA5E6593CF}.Release|Any CPU.ActiveCfg = Release|Any CPU {302E3909-04AF-4064-A533-6FAA5E6593CF}.Release|Any CPU.Build.0 = Release|Any CPU {302E3909-04AF-4064-A533-6FAA5E6593CF}.Release|ARM.ActiveCfg = Release|Any CPU @@ -107,6 +356,22 @@ Global {302E3909-04AF-4064-A533-6FAA5E6593CF}.Release|x64.Build.0 = Release|Any CPU {302E3909-04AF-4064-A533-6FAA5E6593CF}.Release|x86.ActiveCfg = Release|Any CPU {302E3909-04AF-4064-A533-6FAA5E6593CF}.Release|x86.Build.0 = Release|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Debug (Anniversary Update)|Any CPU.ActiveCfg = Debug|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Debug (Anniversary Update)|Any CPU.Build.0 = Debug|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Debug (Anniversary Update)|ARM.ActiveCfg = Debug|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Debug (Anniversary Update)|ARM.Build.0 = Debug|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Debug (Anniversary Update)|x64.ActiveCfg = Debug|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Debug (Anniversary Update)|x64.Build.0 = Debug|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Debug (Anniversary Update)|x86.ActiveCfg = Debug|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Debug (Anniversary Update)|x86.Build.0 = Debug|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Debug (Version 1511)|Any CPU.ActiveCfg = Debug|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Debug (Version 1511)|Any CPU.Build.0 = Debug|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Debug (Version 1511)|ARM.ActiveCfg = Debug|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Debug (Version 1511)|ARM.Build.0 = Debug|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Debug (Version 1511)|x64.ActiveCfg = Debug|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Debug (Version 1511)|x64.Build.0 = Debug|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Debug (Version 1511)|x86.ActiveCfg = Debug|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Debug (Version 1511)|x86.Build.0 = Debug|Any CPU {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Debug|Any CPU.Build.0 = Debug|Any CPU {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Debug|ARM.ActiveCfg = Debug|Any CPU @@ -115,6 +380,30 @@ Global {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Debug|x64.Build.0 = Debug|Any CPU {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Debug|x86.ActiveCfg = Debug|Any CPU {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Debug|x86.Build.0 = Debug|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Publish|Any CPU.ActiveCfg = Release|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Publish|Any CPU.Build.0 = Release|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Publish|ARM.ActiveCfg = Release|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Publish|ARM.Build.0 = Release|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Publish|x64.ActiveCfg = Release|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Publish|x64.Build.0 = Release|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Publish|x86.ActiveCfg = Release|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Publish|x86.Build.0 = Release|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Release (Anniversary Update)|Any CPU.ActiveCfg = Release|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Release (Anniversary Update)|Any CPU.Build.0 = Release|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Release (Anniversary Update)|ARM.ActiveCfg = Release|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Release (Anniversary Update)|ARM.Build.0 = Release|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Release (Anniversary Update)|x64.ActiveCfg = Release|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Release (Anniversary Update)|x64.Build.0 = Release|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Release (Anniversary Update)|x86.ActiveCfg = Release|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Release (Anniversary Update)|x86.Build.0 = Release|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Release (Version 1511)|Any CPU.ActiveCfg = Release|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Release (Version 1511)|Any CPU.Build.0 = Release|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Release (Version 1511)|ARM.ActiveCfg = Release|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Release (Version 1511)|ARM.Build.0 = Release|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Release (Version 1511)|x64.ActiveCfg = Release|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Release (Version 1511)|x64.Build.0 = Release|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Release (Version 1511)|x86.ActiveCfg = Release|Any CPU + {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Release (Version 1511)|x86.Build.0 = Release|Any CPU {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Release|Any CPU.ActiveCfg = Release|Any CPU {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Release|Any CPU.Build.0 = Release|Any CPU {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Release|ARM.ActiveCfg = Release|Any CPU @@ -123,8 +412,721 @@ Global {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Release|x64.Build.0 = Release|Any CPU {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Release|x86.ActiveCfg = Release|Any CPU {55C7FA03-C3B0-4AA0-BE48-3FA435EE37C1}.Release|x86.Build.0 = Release|Any CPU + {772BF105-4384-4701-A398-8756CB5BA908}.Debug (Anniversary Update)|Any CPU.ActiveCfg = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Debug (Anniversary Update)|Any CPU.Build.0 = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Debug (Anniversary Update)|Any CPU.Deploy.0 = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Debug (Anniversary Update)|ARM.ActiveCfg = Debug|ARM + {772BF105-4384-4701-A398-8756CB5BA908}.Debug (Anniversary Update)|ARM.Build.0 = Debug|ARM + {772BF105-4384-4701-A398-8756CB5BA908}.Debug (Anniversary Update)|ARM.Deploy.0 = Debug|ARM + {772BF105-4384-4701-A398-8756CB5BA908}.Debug (Anniversary Update)|x64.ActiveCfg = Debug|x64 + {772BF105-4384-4701-A398-8756CB5BA908}.Debug (Anniversary Update)|x64.Build.0 = Debug|x64 + {772BF105-4384-4701-A398-8756CB5BA908}.Debug (Anniversary Update)|x64.Deploy.0 = Debug|x64 + {772BF105-4384-4701-A398-8756CB5BA908}.Debug (Anniversary Update)|x86.ActiveCfg = Debug|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Debug (Anniversary Update)|x86.Build.0 = Debug|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Debug (Anniversary Update)|x86.Deploy.0 = Debug|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Debug (Version 1511)|Any CPU.ActiveCfg = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Debug (Version 1511)|Any CPU.Build.0 = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Debug (Version 1511)|Any CPU.Deploy.0 = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Debug (Version 1511)|ARM.ActiveCfg = Debug|ARM + {772BF105-4384-4701-A398-8756CB5BA908}.Debug (Version 1511)|ARM.Build.0 = Debug|ARM + {772BF105-4384-4701-A398-8756CB5BA908}.Debug (Version 1511)|ARM.Deploy.0 = Debug|ARM + {772BF105-4384-4701-A398-8756CB5BA908}.Debug (Version 1511)|x64.ActiveCfg = Debug|x64 + {772BF105-4384-4701-A398-8756CB5BA908}.Debug (Version 1511)|x64.Build.0 = Debug|x64 + {772BF105-4384-4701-A398-8756CB5BA908}.Debug (Version 1511)|x64.Deploy.0 = Debug|x64 + {772BF105-4384-4701-A398-8756CB5BA908}.Debug (Version 1511)|x86.ActiveCfg = Debug|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Debug (Version 1511)|x86.Build.0 = Debug|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Debug (Version 1511)|x86.Deploy.0 = Debug|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Debug|Any CPU.ActiveCfg = Debug|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Debug|ARM.ActiveCfg = Debug|ARM + {772BF105-4384-4701-A398-8756CB5BA908}.Debug|ARM.Build.0 = Debug|ARM + {772BF105-4384-4701-A398-8756CB5BA908}.Debug|ARM.Deploy.0 = Debug|ARM + {772BF105-4384-4701-A398-8756CB5BA908}.Debug|x64.ActiveCfg = Debug|x64 + {772BF105-4384-4701-A398-8756CB5BA908}.Debug|x64.Build.0 = Debug|x64 + {772BF105-4384-4701-A398-8756CB5BA908}.Debug|x64.Deploy.0 = Debug|x64 + {772BF105-4384-4701-A398-8756CB5BA908}.Debug|x86.ActiveCfg = Debug|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Debug|x86.Build.0 = Debug|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Debug|x86.Deploy.0 = Debug|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Publish|Any CPU.ActiveCfg = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Publish|Any CPU.Build.0 = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Publish|Any CPU.Deploy.0 = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Publish|ARM.ActiveCfg = Release|ARM + {772BF105-4384-4701-A398-8756CB5BA908}.Publish|ARM.Build.0 = Release|ARM + {772BF105-4384-4701-A398-8756CB5BA908}.Publish|ARM.Deploy.0 = Release|ARM + {772BF105-4384-4701-A398-8756CB5BA908}.Publish|x64.ActiveCfg = Release|x64 + {772BF105-4384-4701-A398-8756CB5BA908}.Publish|x64.Build.0 = Release|x64 + {772BF105-4384-4701-A398-8756CB5BA908}.Publish|x64.Deploy.0 = Release|x64 + {772BF105-4384-4701-A398-8756CB5BA908}.Publish|x86.ActiveCfg = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Publish|x86.Build.0 = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Publish|x86.Deploy.0 = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Release (Anniversary Update)|Any CPU.ActiveCfg = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Release (Anniversary Update)|Any CPU.Build.0 = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Release (Anniversary Update)|Any CPU.Deploy.0 = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Release (Anniversary Update)|ARM.ActiveCfg = Release|ARM + {772BF105-4384-4701-A398-8756CB5BA908}.Release (Anniversary Update)|ARM.Build.0 = Release|ARM + {772BF105-4384-4701-A398-8756CB5BA908}.Release (Anniversary Update)|ARM.Deploy.0 = Release|ARM + {772BF105-4384-4701-A398-8756CB5BA908}.Release (Anniversary Update)|x64.ActiveCfg = Release|x64 + {772BF105-4384-4701-A398-8756CB5BA908}.Release (Anniversary Update)|x64.Build.0 = Release|x64 + {772BF105-4384-4701-A398-8756CB5BA908}.Release (Anniversary Update)|x64.Deploy.0 = Release|x64 + {772BF105-4384-4701-A398-8756CB5BA908}.Release (Anniversary Update)|x86.ActiveCfg = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Release (Anniversary Update)|x86.Build.0 = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Release (Anniversary Update)|x86.Deploy.0 = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Release (Version 1511)|Any CPU.ActiveCfg = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Release (Version 1511)|Any CPU.Build.0 = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Release (Version 1511)|Any CPU.Deploy.0 = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Release (Version 1511)|ARM.ActiveCfg = Release|ARM + {772BF105-4384-4701-A398-8756CB5BA908}.Release (Version 1511)|ARM.Build.0 = Release|ARM + {772BF105-4384-4701-A398-8756CB5BA908}.Release (Version 1511)|ARM.Deploy.0 = Release|ARM + {772BF105-4384-4701-A398-8756CB5BA908}.Release (Version 1511)|x64.ActiveCfg = Release|x64 + {772BF105-4384-4701-A398-8756CB5BA908}.Release (Version 1511)|x64.Build.0 = Release|x64 + {772BF105-4384-4701-A398-8756CB5BA908}.Release (Version 1511)|x64.Deploy.0 = Release|x64 + {772BF105-4384-4701-A398-8756CB5BA908}.Release (Version 1511)|x86.ActiveCfg = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Release (Version 1511)|x86.Build.0 = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Release (Version 1511)|x86.Deploy.0 = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Release|Any CPU.ActiveCfg = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Release|ARM.ActiveCfg = Release|ARM + {772BF105-4384-4701-A398-8756CB5BA908}.Release|ARM.Build.0 = Release|ARM + {772BF105-4384-4701-A398-8756CB5BA908}.Release|ARM.Deploy.0 = Release|ARM + {772BF105-4384-4701-A398-8756CB5BA908}.Release|x64.ActiveCfg = Release|x64 + {772BF105-4384-4701-A398-8756CB5BA908}.Release|x64.Build.0 = Release|x64 + {772BF105-4384-4701-A398-8756CB5BA908}.Release|x64.Deploy.0 = Release|x64 + {772BF105-4384-4701-A398-8756CB5BA908}.Release|x86.ActiveCfg = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Release|x86.Build.0 = Release|x86 + {772BF105-4384-4701-A398-8756CB5BA908}.Release|x86.Deploy.0 = Release|x86 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Debug (Anniversary Update)|Any CPU.ActiveCfg = Debug|Any CPU + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Debug (Anniversary Update)|Any CPU.Build.0 = Debug|Any CPU + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Debug (Anniversary Update)|ARM.ActiveCfg = Debug|ARM + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Debug (Anniversary Update)|ARM.Build.0 = Debug|ARM + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Debug (Anniversary Update)|x64.ActiveCfg = Debug|x64 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Debug (Anniversary Update)|x64.Build.0 = Debug|x64 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Debug (Anniversary Update)|x86.ActiveCfg = Debug|x86 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Debug (Anniversary Update)|x86.Build.0 = Debug|x86 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Debug (Version 1511)|Any CPU.ActiveCfg = Debug|Any CPU + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Debug (Version 1511)|Any CPU.Build.0 = Debug|Any CPU + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Debug (Version 1511)|ARM.ActiveCfg = Debug|ARM + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Debug (Version 1511)|ARM.Build.0 = Debug|ARM + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Debug (Version 1511)|x64.ActiveCfg = Debug|x64 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Debug (Version 1511)|x64.Build.0 = Debug|x64 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Debug (Version 1511)|x86.ActiveCfg = Debug|x86 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Debug (Version 1511)|x86.Build.0 = Debug|x86 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Debug|ARM.ActiveCfg = Debug|ARM + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Debug|ARM.Build.0 = Debug|ARM + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Debug|x64.ActiveCfg = Debug|x64 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Debug|x64.Build.0 = Debug|x64 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Debug|x86.ActiveCfg = Debug|x86 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Debug|x86.Build.0 = Debug|x86 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Publish|Any CPU.ActiveCfg = Release|Any CPU + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Publish|Any CPU.Build.0 = Release|Any CPU + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Publish|ARM.ActiveCfg = Release|ARM + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Publish|ARM.Build.0 = Release|ARM + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Publish|x64.ActiveCfg = Release|x64 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Publish|x64.Build.0 = Release|x64 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Publish|x86.ActiveCfg = Release|x86 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Publish|x86.Build.0 = Release|x86 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Release (Anniversary Update)|Any CPU.ActiveCfg = Release|Any CPU + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Release (Anniversary Update)|Any CPU.Build.0 = Release|Any CPU + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Release (Anniversary Update)|ARM.ActiveCfg = Release|ARM + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Release (Anniversary Update)|ARM.Build.0 = Release|ARM + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Release (Anniversary Update)|x64.ActiveCfg = Release|x64 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Release (Anniversary Update)|x64.Build.0 = Release|x64 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Release (Anniversary Update)|x86.ActiveCfg = Release|x86 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Release (Anniversary Update)|x86.Build.0 = Release|x86 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Release (Version 1511)|Any CPU.ActiveCfg = Release|Any CPU + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Release (Version 1511)|Any CPU.Build.0 = Release|Any CPU + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Release (Version 1511)|ARM.ActiveCfg = Release|ARM + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Release (Version 1511)|ARM.Build.0 = Release|ARM + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Release (Version 1511)|x64.ActiveCfg = Release|x64 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Release (Version 1511)|x64.Build.0 = Release|x64 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Release (Version 1511)|x86.ActiveCfg = Release|x86 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Release (Version 1511)|x86.Build.0 = Release|x86 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Release|Any CPU.ActiveCfg = Release|Any CPU + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Release|Any CPU.Build.0 = Release|Any CPU + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Release|ARM.ActiveCfg = Release|ARM + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Release|ARM.Build.0 = Release|ARM + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Release|x64.ActiveCfg = Release|x64 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Release|x64.Build.0 = Release|x64 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Release|x86.ActiveCfg = Release|x86 + {01A37488-B1A9-40D0-BCD9-3A5ED692F127}.Release|x86.Build.0 = Release|x86 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug (Anniversary Update)|Any CPU.ActiveCfg = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug (Anniversary Update)|Any CPU.Build.0 = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug (Anniversary Update)|Any CPU.Deploy.0 = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug (Anniversary Update)|ARM.ActiveCfg = Debug|ARM + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug (Anniversary Update)|ARM.Build.0 = Debug|ARM + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug (Anniversary Update)|ARM.Deploy.0 = Debug|ARM + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug (Anniversary Update)|x64.ActiveCfg = Debug|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug (Anniversary Update)|x64.Build.0 = Debug|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug (Anniversary Update)|x64.Deploy.0 = Debug|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug (Anniversary Update)|x86.ActiveCfg = Debug|x86 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug (Anniversary Update)|x86.Build.0 = Debug|x86 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug (Anniversary Update)|x86.Deploy.0 = Debug|x86 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug (Version 1511)|Any CPU.ActiveCfg = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug (Version 1511)|Any CPU.Build.0 = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug (Version 1511)|Any CPU.Deploy.0 = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug (Version 1511)|ARM.ActiveCfg = Debug|ARM + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug (Version 1511)|ARM.Build.0 = Debug|ARM + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug (Version 1511)|ARM.Deploy.0 = Debug|ARM + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug (Version 1511)|x64.ActiveCfg = Debug|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug (Version 1511)|x64.Build.0 = Debug|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug (Version 1511)|x64.Deploy.0 = Debug|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug (Version 1511)|x86.ActiveCfg = Debug|x86 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug (Version 1511)|x86.Build.0 = Debug|x86 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug (Version 1511)|x86.Deploy.0 = Debug|x86 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug|Any CPU.ActiveCfg = Debug|x86 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug|ARM.ActiveCfg = Debug|ARM + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug|ARM.Build.0 = Debug|ARM + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug|ARM.Deploy.0 = Debug|ARM + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug|x64.ActiveCfg = Debug|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug|x64.Build.0 = Debug|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug|x64.Deploy.0 = Debug|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug|x86.ActiveCfg = Debug|x86 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug|x86.Build.0 = Debug|x86 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Debug|x86.Deploy.0 = Debug|x86 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Publish|Any CPU.ActiveCfg = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Publish|Any CPU.Build.0 = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Publish|Any CPU.Deploy.0 = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Publish|ARM.ActiveCfg = Release|ARM + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Publish|ARM.Build.0 = Release|ARM + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Publish|ARM.Deploy.0 = Release|ARM + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Publish|x64.ActiveCfg = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Publish|x64.Build.0 = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Publish|x64.Deploy.0 = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Publish|x86.ActiveCfg = Release|x86 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Publish|x86.Build.0 = Release|x86 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Publish|x86.Deploy.0 = Release|x86 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release (Anniversary Update)|Any CPU.ActiveCfg = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release (Anniversary Update)|Any CPU.Build.0 = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release (Anniversary Update)|Any CPU.Deploy.0 = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release (Anniversary Update)|ARM.ActiveCfg = Release|ARM + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release (Anniversary Update)|ARM.Build.0 = Release|ARM + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release (Anniversary Update)|ARM.Deploy.0 = Release|ARM + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release (Anniversary Update)|x64.ActiveCfg = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release (Anniversary Update)|x64.Build.0 = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release (Anniversary Update)|x64.Deploy.0 = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release (Anniversary Update)|x86.ActiveCfg = Release|x86 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release (Anniversary Update)|x86.Build.0 = Release|x86 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release (Anniversary Update)|x86.Deploy.0 = Release|x86 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release (Version 1511)|Any CPU.ActiveCfg = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release (Version 1511)|Any CPU.Build.0 = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release (Version 1511)|Any CPU.Deploy.0 = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release (Version 1511)|ARM.ActiveCfg = Release|ARM + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release (Version 1511)|ARM.Build.0 = Release|ARM + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release (Version 1511)|ARM.Deploy.0 = Release|ARM + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release (Version 1511)|x64.ActiveCfg = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release (Version 1511)|x64.Build.0 = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release (Version 1511)|x64.Deploy.0 = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release (Version 1511)|x86.ActiveCfg = Release|x86 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release (Version 1511)|x86.Build.0 = Release|x86 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release (Version 1511)|x86.Deploy.0 = Release|x86 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release|Any CPU.ActiveCfg = Release|x86 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release|ARM.ActiveCfg = Release|ARM + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release|ARM.Build.0 = Release|ARM + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release|ARM.Deploy.0 = Release|ARM + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release|x64.ActiveCfg = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release|x64.Build.0 = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release|x64.Deploy.0 = Release|x64 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release|x86.ActiveCfg = Release|x86 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release|x86.Build.0 = Release|x86 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356}.Release|x86.Deploy.0 = Release|x86 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Debug (Anniversary Update)|Any CPU.ActiveCfg = Debug|Any CPU + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Debug (Anniversary Update)|Any CPU.Build.0 = Debug|Any CPU + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Debug (Anniversary Update)|ARM.ActiveCfg = Debug|ARM + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Debug (Anniversary Update)|ARM.Build.0 = Debug|ARM + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Debug (Anniversary Update)|x64.ActiveCfg = Debug|x64 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Debug (Anniversary Update)|x64.Build.0 = Debug|x64 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Debug (Anniversary Update)|x86.ActiveCfg = Debug|x86 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Debug (Anniversary Update)|x86.Build.0 = Debug|x86 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Debug (Version 1511)|Any CPU.ActiveCfg = Debug|Any CPU + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Debug (Version 1511)|Any CPU.Build.0 = Debug|Any CPU + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Debug (Version 1511)|ARM.ActiveCfg = Debug|ARM + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Debug (Version 1511)|ARM.Build.0 = Debug|ARM + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Debug (Version 1511)|x64.ActiveCfg = Debug|x64 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Debug (Version 1511)|x64.Build.0 = Debug|x64 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Debug (Version 1511)|x86.ActiveCfg = Debug|x86 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Debug (Version 1511)|x86.Build.0 = Debug|x86 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Debug|ARM.ActiveCfg = Debug|ARM + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Debug|ARM.Build.0 = Debug|ARM + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Debug|x64.ActiveCfg = Debug|x64 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Debug|x64.Build.0 = Debug|x64 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Debug|x86.ActiveCfg = Debug|x86 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Debug|x86.Build.0 = Debug|x86 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Publish|Any CPU.ActiveCfg = Release|Any CPU + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Publish|Any CPU.Build.0 = Release|Any CPU + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Publish|ARM.ActiveCfg = Release|ARM + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Publish|ARM.Build.0 = Release|ARM + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Publish|x64.ActiveCfg = Release|x64 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Publish|x64.Build.0 = Release|x64 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Publish|x86.ActiveCfg = Release|x86 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Publish|x86.Build.0 = Release|x86 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Release (Anniversary Update)|Any CPU.ActiveCfg = Release|Any CPU + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Release (Anniversary Update)|Any CPU.Build.0 = Release|Any CPU + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Release (Anniversary Update)|ARM.ActiveCfg = Release|ARM + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Release (Anniversary Update)|ARM.Build.0 = Release|ARM + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Release (Anniversary Update)|x64.ActiveCfg = Release|x64 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Release (Anniversary Update)|x64.Build.0 = Release|x64 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Release (Anniversary Update)|x86.ActiveCfg = Release|x86 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Release (Anniversary Update)|x86.Build.0 = Release|x86 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Release (Version 1511)|Any CPU.ActiveCfg = Release|Any CPU + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Release (Version 1511)|Any CPU.Build.0 = Release|Any CPU + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Release (Version 1511)|ARM.ActiveCfg = Release|ARM + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Release (Version 1511)|ARM.Build.0 = Release|ARM + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Release (Version 1511)|x64.ActiveCfg = Release|x64 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Release (Version 1511)|x64.Build.0 = Release|x64 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Release (Version 1511)|x86.ActiveCfg = Release|x86 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Release (Version 1511)|x86.Build.0 = Release|x86 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Release|Any CPU.Build.0 = Release|Any CPU + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Release|ARM.ActiveCfg = Release|ARM + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Release|ARM.Build.0 = Release|ARM + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Release|x64.ActiveCfg = Release|x64 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Release|x64.Build.0 = Release|x64 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Release|x86.ActiveCfg = Release|x86 + {B7D2BD46-3485-459D-AD88-ECABF497D508}.Release|x86.Build.0 = Release|x86 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Debug (Anniversary Update)|Any CPU.ActiveCfg = Debug|Any CPU + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Debug (Anniversary Update)|Any CPU.Build.0 = Debug|Any CPU + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Debug (Anniversary Update)|ARM.ActiveCfg = Debug|ARM + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Debug (Anniversary Update)|ARM.Build.0 = Debug|ARM + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Debug (Anniversary Update)|x64.ActiveCfg = Debug|x64 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Debug (Anniversary Update)|x64.Build.0 = Debug|x64 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Debug (Anniversary Update)|x86.ActiveCfg = Debug|x86 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Debug (Anniversary Update)|x86.Build.0 = Debug|x86 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Debug (Version 1511)|Any CPU.ActiveCfg = Debug|Any CPU + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Debug (Version 1511)|Any CPU.Build.0 = Debug|Any CPU + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Debug (Version 1511)|ARM.ActiveCfg = Debug|ARM + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Debug (Version 1511)|ARM.Build.0 = Debug|ARM + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Debug (Version 1511)|x64.ActiveCfg = Debug|x64 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Debug (Version 1511)|x64.Build.0 = Debug|x64 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Debug (Version 1511)|x86.ActiveCfg = Debug|x86 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Debug (Version 1511)|x86.Build.0 = Debug|x86 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Debug|ARM.ActiveCfg = Debug|ARM + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Debug|ARM.Build.0 = Debug|ARM + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Debug|x64.ActiveCfg = Debug|x64 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Debug|x64.Build.0 = Debug|x64 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Debug|x86.ActiveCfg = Debug|x86 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Debug|x86.Build.0 = Debug|x86 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Publish|Any CPU.ActiveCfg = Release|Any CPU + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Publish|Any CPU.Build.0 = Release|Any CPU + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Publish|ARM.ActiveCfg = Release|ARM + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Publish|ARM.Build.0 = Release|ARM + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Publish|x64.ActiveCfg = Release|x64 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Publish|x64.Build.0 = Release|x64 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Publish|x86.ActiveCfg = Release|x86 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Publish|x86.Build.0 = Release|x86 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Release (Anniversary Update)|Any CPU.ActiveCfg = Release|Any CPU + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Release (Anniversary Update)|Any CPU.Build.0 = Release|Any CPU + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Release (Anniversary Update)|ARM.ActiveCfg = Release|ARM + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Release (Anniversary Update)|ARM.Build.0 = Release|ARM + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Release (Anniversary Update)|x64.ActiveCfg = Release|x64 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Release (Anniversary Update)|x64.Build.0 = Release|x64 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Release (Anniversary Update)|x86.ActiveCfg = Release|x86 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Release (Anniversary Update)|x86.Build.0 = Release|x86 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Release (Version 1511)|Any CPU.ActiveCfg = Release|Any CPU + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Release (Version 1511)|Any CPU.Build.0 = Release|Any CPU + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Release (Version 1511)|ARM.ActiveCfg = Release|ARM + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Release (Version 1511)|ARM.Build.0 = Release|ARM + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Release (Version 1511)|x64.ActiveCfg = Release|x64 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Release (Version 1511)|x64.Build.0 = Release|x64 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Release (Version 1511)|x86.ActiveCfg = Release|x86 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Release (Version 1511)|x86.Build.0 = Release|x86 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Release|Any CPU.Build.0 = Release|Any CPU + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Release|ARM.ActiveCfg = Release|ARM + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Release|ARM.Build.0 = Release|ARM + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Release|x64.ActiveCfg = Release|x64 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Release|x64.Build.0 = Release|x64 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Release|x86.ActiveCfg = Release|x86 + {0D958504-42C8-4B04-B9A7-2C6CB6E8009C}.Release|x86.Build.0 = Release|x86 + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Debug (Anniversary Update)|Any CPU.ActiveCfg = Debug|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Debug (Anniversary Update)|Any CPU.Build.0 = Debug|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Debug (Anniversary Update)|ARM.ActiveCfg = Debug|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Debug (Anniversary Update)|ARM.Build.0 = Debug|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Debug (Anniversary Update)|x64.ActiveCfg = Debug|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Debug (Anniversary Update)|x64.Build.0 = Debug|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Debug (Anniversary Update)|x86.ActiveCfg = Debug|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Debug (Anniversary Update)|x86.Build.0 = Debug|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Debug (Version 1511)|Any CPU.ActiveCfg = Debug|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Debug (Version 1511)|Any CPU.Build.0 = Debug|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Debug (Version 1511)|ARM.ActiveCfg = Debug|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Debug (Version 1511)|ARM.Build.0 = Debug|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Debug (Version 1511)|x64.ActiveCfg = Debug|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Debug (Version 1511)|x64.Build.0 = Debug|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Debug (Version 1511)|x86.ActiveCfg = Debug|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Debug (Version 1511)|x86.Build.0 = Debug|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Debug|ARM.ActiveCfg = Debug|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Debug|ARM.Build.0 = Debug|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Debug|x64.ActiveCfg = Debug|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Debug|x64.Build.0 = Debug|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Debug|x86.ActiveCfg = Debug|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Debug|x86.Build.0 = Debug|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Publish|Any CPU.ActiveCfg = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Publish|Any CPU.Build.0 = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Publish|ARM.ActiveCfg = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Publish|ARM.Build.0 = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Publish|x64.ActiveCfg = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Publish|x64.Build.0 = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Publish|x86.ActiveCfg = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Publish|x86.Build.0 = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Release (Anniversary Update)|Any CPU.ActiveCfg = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Release (Anniversary Update)|Any CPU.Build.0 = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Release (Anniversary Update)|ARM.ActiveCfg = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Release (Anniversary Update)|ARM.Build.0 = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Release (Anniversary Update)|x64.ActiveCfg = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Release (Anniversary Update)|x64.Build.0 = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Release (Anniversary Update)|x86.ActiveCfg = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Release (Anniversary Update)|x86.Build.0 = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Release (Version 1511)|Any CPU.ActiveCfg = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Release (Version 1511)|Any CPU.Build.0 = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Release (Version 1511)|ARM.ActiveCfg = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Release (Version 1511)|ARM.Build.0 = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Release (Version 1511)|x64.ActiveCfg = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Release (Version 1511)|x64.Build.0 = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Release (Version 1511)|x86.ActiveCfg = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Release (Version 1511)|x86.Build.0 = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Release|Any CPU.Build.0 = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Release|ARM.ActiveCfg = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Release|ARM.Build.0 = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Release|x64.ActiveCfg = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Release|x64.Build.0 = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Release|x86.ActiveCfg = Release|Any CPU + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A}.Release|x86.Build.0 = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug (Anniversary Update)|Any CPU.ActiveCfg = Debug|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug (Anniversary Update)|Any CPU.Build.0 = Debug|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug (Anniversary Update)|ARM.ActiveCfg = Debug|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug (Anniversary Update)|ARM.Build.0 = Debug|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug (Anniversary Update)|x64.ActiveCfg = Debug|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug (Anniversary Update)|x64.Build.0 = Debug|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug (Anniversary Update)|x86.ActiveCfg = Debug|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug (Anniversary Update)|x86.Build.0 = Debug|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug (Version 1511)|Any CPU.ActiveCfg = Debug|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug (Version 1511)|Any CPU.Build.0 = Debug|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug (Version 1511)|ARM.ActiveCfg = Debug|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug (Version 1511)|ARM.Build.0 = Debug|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug (Version 1511)|x64.ActiveCfg = Debug|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug (Version 1511)|x64.Build.0 = Debug|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug (Version 1511)|x86.ActiveCfg = Debug|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug (Version 1511)|x86.Build.0 = Debug|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug|ARM.ActiveCfg = Debug|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug|ARM.Build.0 = Debug|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug|x64.ActiveCfg = Debug|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug|x64.Build.0 = Debug|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug|x86.ActiveCfg = Debug|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug|x86.Build.0 = Debug|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Publish|Any CPU.ActiveCfg = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Publish|Any CPU.Build.0 = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Publish|ARM.ActiveCfg = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Publish|ARM.Build.0 = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Publish|x64.ActiveCfg = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Publish|x64.Build.0 = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Publish|x86.ActiveCfg = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Publish|x86.Build.0 = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release (Anniversary Update)|Any CPU.ActiveCfg = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release (Anniversary Update)|Any CPU.Build.0 = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release (Anniversary Update)|ARM.ActiveCfg = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release (Anniversary Update)|ARM.Build.0 = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release (Anniversary Update)|x64.ActiveCfg = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release (Anniversary Update)|x64.Build.0 = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release (Anniversary Update)|x86.ActiveCfg = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release (Anniversary Update)|x86.Build.0 = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release (Version 1511)|Any CPU.ActiveCfg = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release (Version 1511)|Any CPU.Build.0 = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release (Version 1511)|ARM.ActiveCfg = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release (Version 1511)|ARM.Build.0 = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release (Version 1511)|x64.ActiveCfg = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release (Version 1511)|x64.Build.0 = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release (Version 1511)|x86.ActiveCfg = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release (Version 1511)|x86.Build.0 = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release|Any CPU.Build.0 = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release|ARM.ActiveCfg = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release|ARM.Build.0 = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release|x64.ActiveCfg = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release|x64.Build.0 = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release|x86.ActiveCfg = Release|Any CPU + {805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release|x86.Build.0 = Release|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Debug (Anniversary Update)|Any CPU.ActiveCfg = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Debug (Anniversary Update)|Any CPU.Build.0 = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Debug (Anniversary Update)|ARM.ActiveCfg = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Debug (Anniversary Update)|ARM.Build.0 = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Debug (Anniversary Update)|x64.ActiveCfg = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Debug (Anniversary Update)|x64.Build.0 = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Debug (Anniversary Update)|x86.ActiveCfg = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Debug (Anniversary Update)|x86.Build.0 = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Debug (Version 1511)|Any CPU.ActiveCfg = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Debug (Version 1511)|Any CPU.Build.0 = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Debug (Version 1511)|ARM.ActiveCfg = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Debug (Version 1511)|ARM.Build.0 = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Debug (Version 1511)|x64.ActiveCfg = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Debug (Version 1511)|x64.Build.0 = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Debug (Version 1511)|x86.ActiveCfg = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Debug (Version 1511)|x86.Build.0 = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Debug|ARM.ActiveCfg = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Debug|ARM.Build.0 = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Debug|x64.ActiveCfg = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Debug|x64.Build.0 = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Debug|x86.ActiveCfg = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Debug|x86.Build.0 = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Publish|Any CPU.ActiveCfg = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Publish|Any CPU.Build.0 = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Publish|ARM.ActiveCfg = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Publish|ARM.Build.0 = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Publish|x64.ActiveCfg = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Publish|x64.Build.0 = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Publish|x86.ActiveCfg = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Publish|x86.Build.0 = Debug|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Release (Anniversary Update)|Any CPU.ActiveCfg = Release|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Release (Anniversary Update)|Any CPU.Build.0 = Release|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Release (Anniversary Update)|ARM.ActiveCfg = Release|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Release (Anniversary Update)|ARM.Build.0 = Release|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Release (Anniversary Update)|x64.ActiveCfg = Release|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Release (Anniversary Update)|x64.Build.0 = Release|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Release (Anniversary Update)|x86.ActiveCfg = Release|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Release (Anniversary Update)|x86.Build.0 = Release|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Release (Version 1511)|Any CPU.ActiveCfg = Release|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Release (Version 1511)|Any CPU.Build.0 = Release|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Release (Version 1511)|ARM.ActiveCfg = Release|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Release (Version 1511)|ARM.Build.0 = Release|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Release (Version 1511)|x64.ActiveCfg = Release|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Release (Version 1511)|x64.Build.0 = Release|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Release (Version 1511)|x86.ActiveCfg = Release|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Release (Version 1511)|x86.Build.0 = Release|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Release|Any CPU.Build.0 = Release|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Release|ARM.ActiveCfg = Release|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Release|ARM.Build.0 = Release|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Release|x64.ActiveCfg = Release|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Release|x64.Build.0 = Release|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Release|x86.ActiveCfg = Release|Any CPU + {1C8A345B-FA57-4F22-B648-C703599F6F00}.Release|x86.Build.0 = Release|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Debug (Anniversary Update)|Any CPU.ActiveCfg = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Debug (Anniversary Update)|Any CPU.Build.0 = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Debug (Anniversary Update)|ARM.ActiveCfg = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Debug (Anniversary Update)|ARM.Build.0 = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Debug (Anniversary Update)|x64.ActiveCfg = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Debug (Anniversary Update)|x64.Build.0 = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Debug (Anniversary Update)|x86.ActiveCfg = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Debug (Anniversary Update)|x86.Build.0 = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Debug (Version 1511)|Any CPU.ActiveCfg = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Debug (Version 1511)|Any CPU.Build.0 = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Debug (Version 1511)|ARM.ActiveCfg = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Debug (Version 1511)|ARM.Build.0 = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Debug (Version 1511)|x64.ActiveCfg = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Debug (Version 1511)|x64.Build.0 = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Debug (Version 1511)|x86.ActiveCfg = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Debug (Version 1511)|x86.Build.0 = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Debug|ARM.ActiveCfg = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Debug|ARM.Build.0 = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Debug|x64.ActiveCfg = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Debug|x64.Build.0 = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Debug|x86.ActiveCfg = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Debug|x86.Build.0 = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Publish|Any CPU.ActiveCfg = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Publish|Any CPU.Build.0 = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Publish|ARM.ActiveCfg = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Publish|ARM.Build.0 = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Publish|x64.ActiveCfg = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Publish|x64.Build.0 = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Publish|x86.ActiveCfg = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Publish|x86.Build.0 = Debug|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Release (Anniversary Update)|Any CPU.ActiveCfg = Release|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Release (Anniversary Update)|Any CPU.Build.0 = Release|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Release (Anniversary Update)|ARM.ActiveCfg = Release|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Release (Anniversary Update)|ARM.Build.0 = Release|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Release (Anniversary Update)|x64.ActiveCfg = Release|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Release (Anniversary Update)|x64.Build.0 = Release|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Release (Anniversary Update)|x86.ActiveCfg = Release|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Release (Anniversary Update)|x86.Build.0 = Release|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Release (Version 1511)|Any CPU.ActiveCfg = Release|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Release (Version 1511)|Any CPU.Build.0 = Release|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Release (Version 1511)|ARM.ActiveCfg = Release|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Release (Version 1511)|ARM.Build.0 = Release|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Release (Version 1511)|x64.ActiveCfg = Release|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Release (Version 1511)|x64.Build.0 = Release|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Release (Version 1511)|x86.ActiveCfg = Release|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Release (Version 1511)|x86.Build.0 = Release|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Release|Any CPU.Build.0 = Release|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Release|ARM.ActiveCfg = Release|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Release|ARM.Build.0 = Release|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Release|x64.ActiveCfg = Release|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Release|x64.Build.0 = Release|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Release|x86.ActiveCfg = Release|Any CPU + {1C743253-00DD-406B-A0A9-7F956344838F}.Release|x86.Build.0 = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug (Anniversary Update)|Any CPU.ActiveCfg = Debug|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug (Anniversary Update)|Any CPU.Build.0 = Debug|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug (Anniversary Update)|ARM.ActiveCfg = Debug|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug (Anniversary Update)|ARM.Build.0 = Debug|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug (Anniversary Update)|x64.ActiveCfg = Debug|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug (Anniversary Update)|x64.Build.0 = Debug|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug (Anniversary Update)|x86.ActiveCfg = Debug|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug (Anniversary Update)|x86.Build.0 = Debug|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug (Version 1511)|Any CPU.ActiveCfg = Debug|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug (Version 1511)|Any CPU.Build.0 = Debug|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug (Version 1511)|ARM.ActiveCfg = Debug|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug (Version 1511)|ARM.Build.0 = Debug|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug (Version 1511)|x64.ActiveCfg = Debug|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug (Version 1511)|x64.Build.0 = Debug|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug (Version 1511)|x86.ActiveCfg = Debug|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug (Version 1511)|x86.Build.0 = Debug|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug|ARM.ActiveCfg = Debug|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug|ARM.Build.0 = Debug|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug|x64.ActiveCfg = Debug|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug|x64.Build.0 = Debug|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug|x86.ActiveCfg = Debug|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug|x86.Build.0 = Debug|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Publish|Any CPU.ActiveCfg = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Publish|Any CPU.Build.0 = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Publish|ARM.ActiveCfg = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Publish|ARM.Build.0 = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Publish|x64.ActiveCfg = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Publish|x64.Build.0 = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Publish|x86.ActiveCfg = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Publish|x86.Build.0 = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release (Anniversary Update)|Any CPU.ActiveCfg = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release (Anniversary Update)|Any CPU.Build.0 = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release (Anniversary Update)|ARM.ActiveCfg = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release (Anniversary Update)|ARM.Build.0 = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release (Anniversary Update)|x64.ActiveCfg = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release (Anniversary Update)|x64.Build.0 = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release (Anniversary Update)|x86.ActiveCfg = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release (Anniversary Update)|x86.Build.0 = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release (Version 1511)|Any CPU.ActiveCfg = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release (Version 1511)|Any CPU.Build.0 = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release (Version 1511)|ARM.ActiveCfg = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release (Version 1511)|ARM.Build.0 = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release (Version 1511)|x64.ActiveCfg = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release (Version 1511)|x64.Build.0 = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release (Version 1511)|x86.ActiveCfg = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release (Version 1511)|x86.Build.0 = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release|Any CPU.Build.0 = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release|ARM.ActiveCfg = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release|ARM.Build.0 = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release|x64.ActiveCfg = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release|x64.Build.0 = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release|x86.ActiveCfg = Release|Any CPU + {E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release|x86.Build.0 = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Debug (Anniversary Update)|Any CPU.ActiveCfg = Debug|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Debug (Anniversary Update)|Any CPU.Build.0 = Debug|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Debug (Anniversary Update)|ARM.ActiveCfg = Debug|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Debug (Anniversary Update)|ARM.Build.0 = Debug|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Debug (Anniversary Update)|x64.ActiveCfg = Debug|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Debug (Anniversary Update)|x64.Build.0 = Debug|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Debug (Anniversary Update)|x86.ActiveCfg = Debug|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Debug (Anniversary Update)|x86.Build.0 = Debug|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Debug (Version 1511)|Any CPU.ActiveCfg = Debug|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Debug (Version 1511)|Any CPU.Build.0 = Debug|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Debug (Version 1511)|ARM.ActiveCfg = Debug|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Debug (Version 1511)|ARM.Build.0 = Debug|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Debug (Version 1511)|x64.ActiveCfg = Debug|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Debug (Version 1511)|x64.Build.0 = Debug|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Debug (Version 1511)|x86.ActiveCfg = Debug|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Debug (Version 1511)|x86.Build.0 = Debug|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Debug|ARM.ActiveCfg = Debug|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Debug|ARM.Build.0 = Debug|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Debug|x64.ActiveCfg = Debug|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Debug|x64.Build.0 = Debug|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Debug|x86.ActiveCfg = Debug|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Debug|x86.Build.0 = Debug|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Publish|Any CPU.ActiveCfg = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Publish|Any CPU.Build.0 = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Publish|ARM.ActiveCfg = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Publish|ARM.Build.0 = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Publish|x64.ActiveCfg = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Publish|x64.Build.0 = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Publish|x86.ActiveCfg = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Publish|x86.Build.0 = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Release (Anniversary Update)|Any CPU.ActiveCfg = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Release (Anniversary Update)|Any CPU.Build.0 = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Release (Anniversary Update)|ARM.ActiveCfg = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Release (Anniversary Update)|ARM.Build.0 = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Release (Anniversary Update)|x64.ActiveCfg = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Release (Anniversary Update)|x64.Build.0 = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Release (Anniversary Update)|x86.ActiveCfg = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Release (Anniversary Update)|x86.Build.0 = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Release (Version 1511)|Any CPU.ActiveCfg = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Release (Version 1511)|Any CPU.Build.0 = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Release (Version 1511)|ARM.ActiveCfg = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Release (Version 1511)|ARM.Build.0 = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Release (Version 1511)|x64.ActiveCfg = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Release (Version 1511)|x64.Build.0 = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Release (Version 1511)|x86.ActiveCfg = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Release (Version 1511)|x86.Build.0 = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Release|Any CPU.Build.0 = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Release|ARM.ActiveCfg = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Release|ARM.Build.0 = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Release|x64.ActiveCfg = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Release|x64.Build.0 = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Release|x86.ActiveCfg = Release|Any CPU + {B24A296C-B3EB-4E06-A64E-74AC2D1ACC91}.Release|x86.Build.0 = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Debug (Anniversary Update)|Any CPU.ActiveCfg = Debug|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Debug (Anniversary Update)|Any CPU.Build.0 = Debug|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Debug (Anniversary Update)|ARM.ActiveCfg = Debug|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Debug (Anniversary Update)|ARM.Build.0 = Debug|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Debug (Anniversary Update)|x64.ActiveCfg = Debug|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Debug (Anniversary Update)|x64.Build.0 = Debug|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Debug (Anniversary Update)|x86.ActiveCfg = Debug|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Debug (Anniversary Update)|x86.Build.0 = Debug|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Debug (Version 1511)|Any CPU.ActiveCfg = Debug|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Debug (Version 1511)|Any CPU.Build.0 = Debug|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Debug (Version 1511)|ARM.ActiveCfg = Debug|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Debug (Version 1511)|ARM.Build.0 = Debug|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Debug (Version 1511)|x64.ActiveCfg = Debug|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Debug (Version 1511)|x64.Build.0 = Debug|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Debug (Version 1511)|x86.ActiveCfg = Debug|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Debug (Version 1511)|x86.Build.0 = Debug|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Debug|ARM.ActiveCfg = Debug|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Debug|ARM.Build.0 = Debug|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Debug|x64.ActiveCfg = Debug|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Debug|x64.Build.0 = Debug|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Debug|x86.ActiveCfg = Debug|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Debug|x86.Build.0 = Debug|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Publish|Any CPU.ActiveCfg = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Publish|Any CPU.Build.0 = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Publish|ARM.ActiveCfg = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Publish|ARM.Build.0 = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Publish|x64.ActiveCfg = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Publish|x64.Build.0 = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Publish|x86.ActiveCfg = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Publish|x86.Build.0 = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Release (Anniversary Update)|Any CPU.ActiveCfg = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Release (Anniversary Update)|Any CPU.Build.0 = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Release (Anniversary Update)|ARM.ActiveCfg = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Release (Anniversary Update)|ARM.Build.0 = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Release (Anniversary Update)|x64.ActiveCfg = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Release (Anniversary Update)|x64.Build.0 = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Release (Anniversary Update)|x86.ActiveCfg = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Release (Anniversary Update)|x86.Build.0 = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Release (Version 1511)|Any CPU.ActiveCfg = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Release (Version 1511)|Any CPU.Build.0 = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Release (Version 1511)|ARM.ActiveCfg = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Release (Version 1511)|ARM.Build.0 = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Release (Version 1511)|x64.ActiveCfg = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Release (Version 1511)|x64.Build.0 = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Release (Version 1511)|x86.ActiveCfg = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Release (Version 1511)|x86.Build.0 = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Release|Any CPU.Build.0 = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Release|ARM.ActiveCfg = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Release|ARM.Build.0 = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Release|x64.ActiveCfg = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Release|x64.Build.0 = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Release|x86.ActiveCfg = Release|Any CPU + {3DD8AA7C-3569-4E51-992F-0C2257E8878E}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {D3AA6B3A-B04B-42ED-A42C-796BFBC555C7} + EndGlobalSection EndGlobal diff --git a/BikeTouringGIS/BikeTouringGIS.csproj b/BikeTouringGIS/BikeTouringGIS.csproj index 9085a99..319da0d 100644 --- a/BikeTouringGIS/BikeTouringGIS.csproj +++ b/BikeTouringGIS/BikeTouringGIS.csproj @@ -43,6 +43,9 @@ biketouringgislogo.ico + + ..\packages\CommonServiceLocator.2.0.2\lib\net45\CommonServiceLocator.dll + ..\packages\ControlzEx.2.2.0.4\lib\net45\ControlzEx.dll True @@ -65,20 +68,17 @@ ..\packages\Fluent.Ribbon.5.0.2.46\lib\net45\Fluent.dll - - packages\MvvmLightLibs.5.3.0.0\lib\net45\GalaSoft.MvvmLight.dll - True + + ..\packages\MvvmLightLibs.5.4.1\lib\net45\GalaSoft.MvvmLight.dll - - packages\MvvmLightLibs.5.3.0.0\lib\net45\GalaSoft.MvvmLight.Extras.dll - True + + ..\packages\MvvmLightLibs.5.4.1\lib\net45\GalaSoft.MvvmLight.Extras.dll - - packages\MvvmLightLibs.5.3.0.0\lib\net45\GalaSoft.MvvmLight.Platform.dll - True + + ..\packages\MvvmLightLibs.5.4.1\lib\net45\GalaSoft.MvvmLight.Platform.dll - - ..\packages\JetBrains.Annotations.10.4.0\lib\net\JetBrains.Annotations.dll + + ..\packages\JetBrains.Annotations.11.1.0\lib\net20\JetBrains.Annotations.dll True @@ -93,16 +93,12 @@ ..\packages\MahApps.Metro.1.5.0\lib\net45\MahApps.Metro.dll True - - ..\packages\MahApps.Metro.IconPacks.FontAwesome.1.9.0\lib\net46\MahApps.Metro.IconPacks.FontAwesome.dll - True - - - ..\packages\MahApps.Metro.IconPacks.Material.1.9.0\lib\net46\MahApps.Metro.IconPacks.Material.dll + + ..\packages\MahApps.Metro.IconPacks.FontAwesome.1.9.1\lib\net46\MahApps.Metro.IconPacks.FontAwesome.dll True - - packages\CommonServiceLocator.1.3\lib\portable-net4+sl5+netcore45+wpa81+wp8\Microsoft.Practices.ServiceLocation.dll + + ..\packages\MahApps.Metro.IconPacks.Material.1.9.1\lib\net46\MahApps.Metro.IconPacks.Material.dll True @@ -121,36 +117,38 @@ packages\Mono.Cecil.0.9.6.4\lib\net45\Mono.Cecil.Rocks.dll True - - ..\packages\morelinq.2.6.0\lib\net40\MoreLinq.dll + + ..\packages\morelinq.2.8.0\lib\net40\MoreLinq.dll + True ..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll - - ..\packages\squirrel.windows.1.7.6\lib\Net45\NuGet.Squirrel.dll + + ..\packages\squirrel.windows.1.7.8\lib\Net45\NuGet.Squirrel.dll + True - - ..\packages\SharpCompress.0.17.1\lib\net45\SharpCompress.dll + + ..\packages\SharpCompress.0.18.2\lib\net45\SharpCompress.dll + True ..\packages\Splat.2.0.0\lib\Net45\Splat.dll True - - ..\packages\squirrel.windows.1.7.6\lib\Net45\Squirrel.dll + + ..\packages\squirrel.windows.1.7.8\lib\Net45\Squirrel.dll + True - - ..\packages\System.ValueTuple.4.3.1\lib\netstandard1.0\System.ValueTuple.dll - True + + ..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll - ..\packages\ControlzEx.2.2.0.4\lib\net45\System.Windows.Interactivity.dll - True + ..\packages\MvvmLightLibs.5.4.1\lib\net45\System.Windows.Interactivity.dll @@ -211,7 +209,8 @@ - + + StatusBar.xaml diff --git a/BikeTouringGIS/Controls/BikeTouringGISLayer.cs b/BikeTouringGIS/Controls/BikeTouringGISLayer.cs index 2102a06..a0ac07b 100644 --- a/BikeTouringGIS/Controls/BikeTouringGISLayer.cs +++ b/BikeTouringGIS/Controls/BikeTouringGISLayer.cs @@ -1,4 +1,5 @@ -using BikeTouringGISLibrary; +using BikeTouringGIS.Services; +using BikeTouringGISLibrary; using BikeTouringGISLibrary.Enumerations; using BikeTouringGISLibrary.Model; using Esri.ArcGISRuntime.Geometry; @@ -15,7 +16,7 @@ namespace BikeTouringGIS.Controls { public class BikeTouringGISLayer : GraphicsLayer { - private IRoute _route; + private IPath _routeOrTrack; private BikeTouringGISLayer _splitLayer; private Dictionary _symbols; private bool _isInEditMode, _isSplitted, _isSelected; @@ -39,18 +40,24 @@ public BikeTouringGISLayer(string name) : this() SplitLayer = new BikeTouringGISLayer() { ShowLegend = false, Type = LayerType.SplitRoutes, SelectionColor = Colors.LimeGreen }; } - public BikeTouringGISLayer(string fileName, IRoute route) : this(fileName) + public BikeTouringGISLayer(string fileName, IPath routeOrTrack) : this(fileName) { - _route = route; - Title = string.IsNullOrEmpty(route.Name) ? Path.GetFileNameWithoutExtension(fileName) : route.Name; + _routeOrTrack = routeOrTrack; + Title = string.IsNullOrEmpty(_routeOrTrack.Name) ? Path.GetFileNameWithoutExtension(fileName) : _routeOrTrack.Name; var subStringLength = Title.Length > 15 ? 15 : Title.Length; SplitPrefix = Title.Substring(0, subStringLength); - Graphics.Add(route.StartLocation); - Graphics.Add(route.EndLocation); - Graphics.Add(route.RouteGeometry); + Graphics.Add(_routeOrTrack.StartLocation); + Graphics.Add(_routeOrTrack.EndLocation); + Graphics.Add(_routeOrTrack.Geometry); SetLength(); SelectionColor = Colors.LimeGreen; - Type = LayerType.GPXRoute; + switch(routeOrTrack.Type) + { + case PathType.Route: Type = LayerType.GPXRoute; + break; + case PathType.Track: Type = LayerType.GPXTrack; + break; + } IsInEditMode = false; } @@ -199,16 +206,21 @@ private void SetVisibility(object sender, NotifyCollectionChangedEventArgs e) internal void FlipDirection() { - Graphics.Clear(); - _route.Flip(); - Graphics.Add(_route.StartLocation); - Graphics.Add(_route.EndLocation); - Graphics.Add(_route.RouteGeometry); - SetSymbols(); - IsInEditMode = true; - if (IsSplitted) + if (Type == LayerType.GPXRoute) { - SplitRoute(_splitDistance); + Graphics.Clear(); + var route = (Route)_routeOrTrack; + route.Flip(); + // TODO nieuwe graphics maken + Graphics.Add(_routeOrTrack.StartLocation); + Graphics.Add(_routeOrTrack.EndLocation); + Graphics.Add(_routeOrTrack.Geometry); + SetSymbols(); + IsInEditMode = true; + if (IsSplitted) + { + SplitRoute(_splitDistance); + } } } @@ -301,11 +313,11 @@ internal void SplitRoute(int splitDistance) SplitLayer.DisplayName = $"{splitDistance} km"; SplitLayer.Graphics.Clear(); SplitLayer.Opacity = Opacity; - _routeSplitter.SplitRoute(_splitDistance, _route.Points); + _routeSplitter.SplitRoute(_splitDistance, _routeOrTrack.Points); var splitPoints = _routeSplitter.GetSplitPoints(); var splitRoutes = _routeSplitter.GetSplittedRoutes(); - SplitLayer.Graphics.Add(_route.StartLocation); - SplitLayer.Graphics.Add(_route.EndLocation); + SplitLayer.Graphics.Add(_routeOrTrack.StartLocation); + SplitLayer.Graphics.Add(_routeOrTrack.EndLocation); SplitLayer.Graphics.AddRange(splitPoints); SplitLayer.Graphics.AddRange(splitRoutes); SetSymbols(SplitLayer.Graphics); @@ -315,7 +327,7 @@ internal void SplitRoute(int splitDistance) SplitLayer.SetSelectionColorOfGraphics(); } - public IEnumerable SplitRoutes + public IEnumerable SplitRoutes { get { @@ -334,9 +346,9 @@ public List WayPoints } } - public IRoute ToRoute() + public IPath ToRoute() { - return _route; + return _routeOrTrack; } } } \ No newline at end of file diff --git a/BikeTouringGIS/Controls/PointsOfInterestLayer.cs b/BikeTouringGIS/Controls/PointsOfInterestLayer.cs index b692cc7..1bc4779 100644 --- a/BikeTouringGIS/Controls/PointsOfInterestLayer.cs +++ b/BikeTouringGIS/Controls/PointsOfInterestLayer.cs @@ -2,6 +2,7 @@ using BikeTouringGISLibrary.Model; using Esri.ArcGISRuntime.Layers; using System.Collections.Generic; +using WinUX; namespace BikeTouringGIS.Controls { @@ -13,11 +14,8 @@ public PointsOfInterestLayer(string name) : base(name) internal void AddPoIs(IEnumerable wayPoints) { - foreach (var wayPoint in wayPoints) - { - _wayPoints.Add(wayPoint); - Graphics.Add(wayPoint.ToGraphic()); - } + _wayPoints.AddRange(wayPoints); + wayPoints.ForEach(wp => Graphics.Add(wp.Geometry)); } // ook refactoren en in aparte poilayer plaatsen @@ -25,7 +23,7 @@ internal void RemovePoIs(IEnumerable wayPoints) { foreach (var wayPoint in wayPoints) { - var g = wayPoint.ToGraphic(); + var g = wayPoint.Geometry; var index = FindIndexOfPointOfInterest(g); if (index > -1) { diff --git a/BikeTouringGIS/Services/LayerFactory.cs b/BikeTouringGIS/Services/LayerFactory.cs new file mode 100644 index 0000000..082b558 --- /dev/null +++ b/BikeTouringGIS/Services/LayerFactory.cs @@ -0,0 +1,46 @@ +using BikeTouringGIS.Controls; +using BikeTouringGISLibrary; +using BikeTouringGISLibrary.Model; +using Esri.ArcGISRuntime.Geometry; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BikeTouringGIS.Services +{ + public class LayerFactory + { + private Envelope _wayPointsExtent; + + public LayerFactory(Envelope wayPointsExtent) + { + _wayPointsExtent = wayPointsExtent; + } + + internal List CreateRoutes(List routes) + { + var result = new List(); + foreach (Route route in routes) + { + var layer = new BikeTouringGISLayer(route.FileName, route); + layer.SetExtentToFitWithWaypoints(_wayPointsExtent); + result.Add(layer); + } + return result; + } + + internal List CreateTracks(List tracks) + { + var result = new List(); + foreach (Track track in tracks) + { + var layer = new BikeTouringGISLayer(track.FileName, track); + layer.SetExtentToFitWithWaypoints(_wayPointsExtent); + result.Add(layer); + } + return result; + } + } +} \ No newline at end of file diff --git a/BikeTouringGIS/RouteSplitter.cs b/BikeTouringGIS/Services/RouteSplitter.cs similarity index 95% rename from BikeTouringGIS/RouteSplitter.cs rename to BikeTouringGIS/Services/RouteSplitter.cs index 07eaf0c..666235b 100644 --- a/BikeTouringGIS/RouteSplitter.cs +++ b/BikeTouringGIS/Services/RouteSplitter.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Linq; -namespace BikeTouringGIS +namespace BikeTouringGIS.Services { internal class RouteSplitter { @@ -123,14 +123,14 @@ private Polyline CreateGeometryFromWayPoints(List wayPoints) return builder.ToGeometry(); } - public IEnumerable SplitRoutes + public IEnumerable SplitRoutes { get { - var result = new List(); + var result = new List(); foreach (var routePoints in _splitRoutes) { - result.Add(new Route(routePoints)); + result.Add(new Route() { Points = routePoints }); } return result; } diff --git a/BikeTouringGIS/ViewModels/BikeTouringGISMapViewModel.cs b/BikeTouringGIS/ViewModels/BikeTouringGISMapViewModel.cs index 612cebb..c369cf9 100644 --- a/BikeTouringGIS/ViewModels/BikeTouringGISMapViewModel.cs +++ b/BikeTouringGIS/ViewModels/BikeTouringGISMapViewModel.cs @@ -183,15 +183,25 @@ public bool ShowOpenCycleMap } } - internal void AddRoutes(BikeTouringGISLayer layer) + internal void AddRoutes(List routes) { - layer.SetSymbolsAndSplitLayerDefaultProperties(_mapSymbols); - _map.Layers.Add(layer); - _map.Layers.Add(layer.SplitLayer); + routes.ForEach(x => x.SetSymbolsAndSplitLayerDefaultProperties(_mapSymbols)); + routes.ForEach(x => _map.Layers.Add(x)); + routes.ForEach(x => _map.Layers.Add(x.SplitLayer)); SetExtent(); CalculateTotalLength(); PlacePointsOfInterestLayerOnTop(); + routes.ForEach(x => LayerLoaded(x)); + } + + internal void AddTracks(List tracks) + { + /* + _map.Layers.Add(layer); + SetExtent(); + CalculateTotalLength(); LayerLoaded(layer); + */ } private void PlacePointsOfInterestLayerOnTop() diff --git a/BikeTouringGIS/ViewModels/BikeTouringGISViewModel.cs b/BikeTouringGIS/ViewModels/BikeTouringGISViewModel.cs index f2a074f..ef59840 100644 --- a/BikeTouringGIS/ViewModels/BikeTouringGISViewModel.cs +++ b/BikeTouringGIS/ViewModels/BikeTouringGISViewModel.cs @@ -2,12 +2,16 @@ using BikeTouringGIS.Controls; using BikeTouringGIS.Messenges; using BikeTouringGIS.Models; +using BikeTouringGIS.Services; using BikeTouringGISLibrary; using BikeTouringGISLibrary.Enumerations; +using BikeTouringGISLibrary.Model; +using BikeTouringGISLibrary.Services; using GalaSoft.MvvmLight.Command; using GPX; using MahApps.Metro.Controls; using MahApps.Metro.Controls.Dialogs; +using System; using System.Collections.Generic; using System.IO; using System.Text; @@ -146,6 +150,7 @@ internal async void OpenGpxFile(BikeTouringGISMapViewModel mapViewModel, string foreach (var track in gpxFileInformation.Tracks) { bool convertTrack = ConvertTracksToRoutesAutomatically; + var convertTrackDialogResult = convertTrack ? MessageDialogResult.Affirmative : MessageDialogResult.FirstAuxiliary; if (!convertTrack) { StringBuilder textBuilder = new StringBuilder(); @@ -155,33 +160,40 @@ internal async void OpenGpxFile(BikeTouringGISMapViewModel mapViewModel, string textBuilder.AppendLine("tracks are to register where you have been"); textBuilder.AppendLine(); textBuilder.AppendLine("Do you want to convert it to a route?"); - convertTrack = await ConvertTrackToRoute(textBuilder.ToString()); + convertTrackDialogResult = await ConvertTrackToRoute(textBuilder.ToString()); } - if (convertTrack) + switch (convertTrackDialogResult) { - track.ConvertTrackToRoute(); + case MessageDialogResult.Affirmative: + track.IsConvertedToRoute = true; + break; + case MessageDialogResult.Negative: + break; + case MessageDialogResult.FirstAuxiliary: + return; } } _loadedFiles.Add(path); - gpxFileInformation.CreateGeometries(); - foreach (IRoute route in gpxFileInformation.AllRoutes) - { - var layer = new BikeTouringGISLayer(path, route); - layer.SetExtentToFitWithWaypoints(gpxFileInformation.WayPointsExtent); - mapViewModel.AddRoutes(layer); - } + var geometryFactory = new GeometryFactory(gpxFileInformation); + geometryFactory.CreateGeometries(); + var layerFactory = new LayerFactory(gpxFileInformation.WayPointsExtent); + var routes = layerFactory.CreateRoutes(gpxFileInformation.Routes); + mapViewModel.AddRoutes(routes); + var tracks = layerFactory.CreateTracks(gpxFileInformation.Tracks); + mapViewModel.AddTracks(tracks); mapViewModel.AddPoIs(gpxFileInformation.WayPoints); } - private async Task ConvertTrackToRoute(string text) + private async Task ConvertTrackToRoute(string text) { var window = Application.Current.MainWindow as MetroWindow; - var result = await window.ShowMessageAsync("Convert track to route", text, MessageDialogStyle.AffirmativeAndNegative); - if (result == MessageDialogResult.Affirmative) + var dialogSettings = new MetroDialogSettings() { - return true; - } - return false; + AffirmativeButtonText = "Convert to route", + NegativeButtonText = "Keep as track", + FirstAuxiliaryButtonText = "Cancel" + }; + return await window.ShowMessageAsync("Convert track to route", text, MessageDialogStyle.AffirmativeAndNegativeAndSingleAuxiliary, dialogSettings); } public string VersionInformation diff --git a/BikeTouringGIS/ViewModels/ViewModelLocator.cs b/BikeTouringGIS/ViewModels/ViewModelLocator.cs index 181686e..a85e4a1 100644 --- a/BikeTouringGIS/ViewModels/ViewModelLocator.cs +++ b/BikeTouringGIS/ViewModels/ViewModelLocator.cs @@ -1,5 +1,5 @@ -using GalaSoft.MvvmLight.Ioc; -using Microsoft.Practices.ServiceLocation; +using CommonServiceLocator; +using GalaSoft.MvvmLight.Ioc; namespace BikeTouringGIS.ViewModels { diff --git a/BikeTouringGIS/app.config b/BikeTouringGIS/app.config index f5f20e2..f2989e8 100644 --- a/BikeTouringGIS/app.config +++ b/BikeTouringGIS/app.config @@ -29,7 +29,7 @@ - + diff --git a/BikeTouringGIS/packages.config b/BikeTouringGIS/packages.config index 721da52..4239a10 100644 --- a/BikeTouringGIS/packages.config +++ b/BikeTouringGIS/packages.config @@ -1,22 +1,22 @@  - + - + - - + + - - + + - + - - + + \ No newline at end of file diff --git a/BikeTouringGISApp.Library/BikeTouringGISApp.Library.csproj b/BikeTouringGISApp.Library/BikeTouringGISApp.Library.csproj new file mode 100644 index 0000000..566987d --- /dev/null +++ b/BikeTouringGISApp.Library/BikeTouringGISApp.Library.csproj @@ -0,0 +1,148 @@ + + + + + Debug + AnyCPU + {01A37488-B1A9-40D0-BCD9-3A5ED692F127} + Library + Properties + BikeTouringGISApp.Library + BikeTouringGISApp.Library + en-US + UAP + 10.0.15063.0 + 10.0.15063.0 + 14 + 512 + {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + prompt + 4 + + + x86 + true + bin\x86\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x86 + false + prompt + + + x86 + bin\x86\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x86 + false + prompt + + + ARM + true + bin\ARM\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + ARM + false + prompt + + + ARM + bin\ARM\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + ARM + false + prompt + + + x64 + true + bin\x64\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x64 + false + prompt + + + x64 + bin\x64\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x64 + false + prompt + + + PackageReference + + + + + + + + + + + + + + + + 5.4.0 + + + 5.3.0 + + + 1.0.0.5 + + + + + {55c7fa03-c3b0-4aa0-be48-3fa435ee37c1} + WinUX.Common + + + + 14.0 + + + + \ No newline at end of file diff --git a/BikeTouringGISApp.Library/Comparers/EntityComparer.cs b/BikeTouringGISApp.Library/Comparers/EntityComparer.cs new file mode 100644 index 0000000..4980882 --- /dev/null +++ b/BikeTouringGISApp.Library/Comparers/EntityComparer.cs @@ -0,0 +1,30 @@ +using BikeTouringGISApp.Library.Interfaces; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WinUX; + +namespace BikeTouringGISApp.Library.Comparers +{ + public enum EntityComparerModificationDateMode + { + Unknown, + ModificationDateIsGreaterThenOrEqualTo, + ModificationDateIsSmallerThen + } + + public class EntityComparer : IEqualityComparer where T : IEntity + { + public bool Equals(T x, T y) + { + return x.Identifier.Equals(y.Identifier); + } + + public int GetHashCode(T obj) + { + return obj.Identifier.GetHashCode(); + } + } +} \ No newline at end of file diff --git a/BikeTouringGISApp.Library/Enumerations/LogStoryLanguage.cs b/BikeTouringGISApp.Library/Enumerations/LogStoryLanguage.cs new file mode 100644 index 0000000..1b9f0c3 --- /dev/null +++ b/BikeTouringGISApp.Library/Enumerations/LogStoryLanguage.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BikeTouringGISApp.Library.Enumerations +{ + public enum LogStoryLanguage + { + Unknown, + Dutch, + English + } +} \ No newline at end of file diff --git a/BikeTouringGISApp.Library/Enumerations/RepositorySource.cs b/BikeTouringGISApp.Library/Enumerations/RepositorySource.cs new file mode 100644 index 0000000..fe94b29 --- /dev/null +++ b/BikeTouringGISApp.Library/Enumerations/RepositorySource.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BikeTouringGISApp.Library.Enumerations +{ + public enum RepositorySource + { + Unknown, + Local, + OneDrive + } +} \ No newline at end of file diff --git a/BikeTouringGISApp.Library/Interfaces/IEntity.cs b/BikeTouringGISApp.Library/Interfaces/IEntity.cs new file mode 100644 index 0000000..051acfb --- /dev/null +++ b/BikeTouringGISApp.Library/Interfaces/IEntity.cs @@ -0,0 +1,24 @@ +using BikeTouringGISApp.Library.Enumerations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BikeTouringGISApp.Library.Interfaces +{ + public interface IEntity + { + Guid Identifier { get; set; } + DateTime LastModificationDate { get; set; } + RepositorySource Source { get; set; } + + /// + /// 1 = newer 0 = equal + /// -1 = older + /// + /// + /// + int IsNewerThen(T otherItem); + } +} \ No newline at end of file diff --git a/BikeTouringGISApp.Library/Interfaces/IRepository.cs b/BikeTouringGISApp.Library/Interfaces/IRepository.cs new file mode 100644 index 0000000..1c74c3f --- /dev/null +++ b/BikeTouringGISApp.Library/Interfaces/IRepository.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BikeTouringGISApp.Library.Interfaces +{ + public interface IRepository where T : IEntity + { + IEnumerable Entities { get; } + + Task AddEntity(T entityToAdd); + + Task DeleteEntity(T entityToDelete); + + Task LoadData(); + + Task ModifyEntity(T entityToModify); + } +} \ No newline at end of file diff --git a/BikeTouringGISApp.Library/Model/Log.cs b/BikeTouringGISApp.Library/Model/Log.cs new file mode 100644 index 0000000..1d7848e --- /dev/null +++ b/BikeTouringGISApp.Library/Model/Log.cs @@ -0,0 +1,90 @@ +using BikeTouringGISApp.Library.Interfaces; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Telerik.Data.Core; +using WinUX; +using BikeTouringGISApp.Library.Enumerations; + +namespace BikeTouringGISApp.Library.Model +{ + public class Log : IEntity, IEquatable + { + private List _stories; + + public Log() + { + Date = new DateTimeOffset(DateTime.Now); + LastModificationDate = DateTime.Now; + Identifier = Guid.NewGuid(); + Source = RepositorySource.Unknown; + _stories = new List(); + } + + public DateTimeOffset Date { get; set; } + public double Distance { get; set; } + public string End { get; set; } + public string FileName { get; set; } + + [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] + [Ignore] + public Guid Identifier { get; set; } + + [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] + [Ignore] + public DateTime LastModificationDate { get; set; } + + public double Latitude { get; set; } + + [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] + [Ignore] + public Guid LogBook { get; set; } + + public double Longitude { get; set; } + + [Ignore] + [JsonIgnore] + public RepositorySource Source { get; set; } + + public string Start { get; set; } + public IEnumerable Stories { get { return _stories; } } + public int TravelTimeHours { get; set; } + public int TravelTimeMinutes { get; set; } + public int TravelTimeSeconds { get; set; } + + public void AddLogStory(LogStory story) + { + var findStoryWithSameLanguage = _stories.Where(x => x.Language == story.Language).FirstOrDefault(); + if (findStoryWithSameLanguage == null) + { + _stories.Add(story); + } + else + { + var index = _stories.IndexOf(findStoryWithSameLanguage); + _stories[index] = story; + } + } + + public bool Equals(Log other) + { + return Identifier.Equals(other.Identifier); + } + + public int IsNewerThen(Log otherItem) + { + if (LastModificationDate > otherItem.LastModificationDate) { return 1; } + if (LastModificationDate == otherItem.LastModificationDate) { return 0; } + return -1; + } + + public void SetFileName() + { + FileName = $"{Guid.NewGuid().ToString()}.json"; + } + } +} \ No newline at end of file diff --git a/BikeTouringGISApp.Library/Model/LogBook.cs b/BikeTouringGISApp.Library/Model/LogBook.cs new file mode 100644 index 0000000..a7f3f0b --- /dev/null +++ b/BikeTouringGISApp.Library/Model/LogBook.cs @@ -0,0 +1,62 @@ +using BikeTouringGISApp.Library.Enumerations; +using BikeTouringGISApp.Library.Interfaces; +using GalaSoft.MvvmLight; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Telerik.Data.Core; + +namespace BikeTouringGISApp.Library.Model +{ + public class LogBook : ViewModelBase, IEntity + { + private string _name; + + public LogBook() + { + Identifier = Guid.NewGuid(); + LastModificationDate = DateTime.Now; + Source = RepositorySource.Unknown; + } + + [Display(Header = "Description", PlaceholderText = "description of the trip")] + public string Description { get; set; } + + [Display(Header = "End date")] + [Required] + public DateTime EndDate { get; set; } + + [Ignore] + public Guid Identifier { get; set; } + + [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] + [Ignore] + public DateTime LastModificationDate { get; set; } + + [Display(Header = "Name", PlaceholderText = "name of the logbook")] + [Required] + public string Name + { + get { return _name; } + set { Set(() => Name, ref _name, value); } + } + + [Ignore] + [JsonIgnore] + public RepositorySource Source { get; set; } + + [Display(Header = "Start date")] + [Required] + public DateTime StartDate { get; set; } + + public int IsNewerThen(LogBook otherItem) + { + if (LastModificationDate > otherItem.LastModificationDate) { return 1; } + if (LastModificationDate == otherItem.LastModificationDate) { return 0; } + return -1; + } + } +} \ No newline at end of file diff --git a/BikeTouringGISApp.Library/Model/LogStory.cs b/BikeTouringGISApp.Library/Model/LogStory.cs new file mode 100644 index 0000000..df4869e --- /dev/null +++ b/BikeTouringGISApp.Library/Model/LogStory.cs @@ -0,0 +1,30 @@ +using BikeTouringGISApp.Library.Enumerations; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BikeTouringGISApp.Library.Model +{ + public class LogStory + { + private LogStoryLanguage _language = LogStoryLanguage.Dutch; + private string _storyText; + + [JsonConverter(typeof(StringEnumConverter))] + public LogStoryLanguage Language + { + get { return _language; } + set { _language = value; } + } + + public string Text + { + get { return _storyText; } + set { _storyText = value; } + } + } +} \ No newline at end of file diff --git a/BikeTouringGISApp.Library/Properties/AssemblyInfo.cs b/BikeTouringGISApp.Library/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..c7bd0ec --- /dev/null +++ b/BikeTouringGISApp.Library/Properties/AssemblyInfo.cs @@ -0,0 +1,29 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("BikeTouringGISApp.Library")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("BikeTouringGISApp.Library")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: ComVisible(false)] \ No newline at end of file diff --git a/BikeTouringGISApp.Library/Properties/BikeTouringGISApp.Library.rd.xml b/BikeTouringGISApp.Library/Properties/BikeTouringGISApp.Library.rd.xml new file mode 100644 index 0000000..3661840 --- /dev/null +++ b/BikeTouringGISApp.Library/Properties/BikeTouringGISApp.Library.rd.xml @@ -0,0 +1,33 @@ + + + + + + + + + diff --git a/BikeTouringGISApp.UnitTests/BikeTouringGISApp.UnitTests.csproj b/BikeTouringGISApp.UnitTests/BikeTouringGISApp.UnitTests.csproj new file mode 100644 index 0000000..9ca88d1 --- /dev/null +++ b/BikeTouringGISApp.UnitTests/BikeTouringGISApp.UnitTests.csproj @@ -0,0 +1,166 @@ + + + + + Debug + x86 + {60E942B6-18E4-4B43-BCFF-C0C4C72B0356} + AppContainerExe + Properties + BikeTouringGISApp.UnitTests + BikeTouringGISApp.UnitTests + en-US + UAP + 10.0.15063.0 + 10.0.15063.0 + 14 + 512 + {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + BikeTouringGISApp.UnitTests_TemporaryKey.pfx + $(VisualStudioVersion) + + + true + bin\x86\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x86 + false + prompt + true + + + bin\x86\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x86 + false + prompt + true + true + + + true + bin\ARM\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + ARM + false + prompt + true + + + bin\ARM\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + ARM + false + prompt + true + true + + + true + bin\x64\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x64 + false + prompt + true + + + bin\x64\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x64 + false + prompt + true + true + + + PackageReference + + + + + + + + + + UnitTestApp.xaml + + + + + MSBuild:Compile + Designer + + + + + Designer + + + + + + + + + 5.4.0 + + + 1.1.18 + + + 1.1.18 + + + + + + + + + + + {1c8a345b-fa57-4f22-b648-c703599f6f00} + Microsoft.Toolkit.Services + + + {7189A42D-6F1A-4FA3-8E00-E2C14FDF167A} + Microsoft.Toolkit.Uwp.Services + + + {805f80df-75c6-4c2f-8fd9-b47f6d0df5a3} + Microsoft.Toolkit.Uwp + + + {01A37488-B1A9-40D0-BCD9-3A5ED692F127} + BikeTouringGISApp.Library + + + + 14.0 + + + + \ No newline at end of file diff --git a/BikeTouringGISApp.UnitTests/Library/Comparers/EntityComparerTest.cs b/BikeTouringGISApp.UnitTests/Library/Comparers/EntityComparerTest.cs new file mode 100644 index 0000000..8c34348 --- /dev/null +++ b/BikeTouringGISApp.UnitTests/Library/Comparers/EntityComparerTest.cs @@ -0,0 +1,43 @@ +using BikeTouringGISApp.Library.Comparers; +using BikeTouringGISApp.Library.Enumerations; +using BikeTouringGISApp.Library.Model; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BikeTouringGISApp.UnitTests.Library.Comparers +{ + [TestClass] + public class EntityComparerTest + { + private EntityComparer _comparer; + + [TestMethod] + public void CheckOfItemIsInOneDrive() + { + var log = new Log(); + var oneDrive = new List() { log }; + var local = new List() { log }; + var itemsNotInOneDrive = local.Except(oneDrive, _comparer); + Assert.AreEqual(itemsNotInOneDrive.Count(), 0); + } + + [TestMethod] + public void CheckOfItemIsMissingInOneDrive() + { + var oneDrive = new List(); + var local = new List() { new Log() }; + var itemsNotInOneDrive = local.Except(oneDrive, _comparer); + Assert.AreEqual(itemsNotInOneDrive.Count(), 1); + } + + [TestInitialize] + public void Setup() + { + _comparer = new EntityComparer(); + } + } +} \ No newline at end of file diff --git a/BikeTouringGISApp.UnitTests/Package.appxmanifest b/BikeTouringGISApp.UnitTests/Package.appxmanifest new file mode 100644 index 0000000..1ed2478 --- /dev/null +++ b/BikeTouringGISApp.UnitTests/Package.appxmanifest @@ -0,0 +1,27 @@ + + + + + + BikeTouringGISApp.UnitTests + info + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BikeTouringGISApp.UnitTests/Properties/AssemblyInfo.cs b/BikeTouringGISApp.UnitTests/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..fe98de0 --- /dev/null +++ b/BikeTouringGISApp.UnitTests/Properties/AssemblyInfo.cs @@ -0,0 +1,18 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +[assembly: AssemblyTitle("BikeTouringGISApp.UnitTests")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("BikeTouringGISApp.UnitTests")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: AssemblyMetadata("TargetPlatform","UAP")] + +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: ComVisible(false)] \ No newline at end of file diff --git a/BikeTouringGISApp.UnitTests/Properties/UnitTestApp.rd.xml b/BikeTouringGISApp.UnitTests/Properties/UnitTestApp.rd.xml new file mode 100644 index 0000000..efee59d --- /dev/null +++ b/BikeTouringGISApp.UnitTests/Properties/UnitTestApp.rd.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/BikeTouringGISApp.UnitTests/Services/FaceBookServiceTest.cs b/BikeTouringGISApp.UnitTests/Services/FaceBookServiceTest.cs new file mode 100644 index 0000000..d3dd98f --- /dev/null +++ b/BikeTouringGISApp.UnitTests/Services/FaceBookServiceTest.cs @@ -0,0 +1,53 @@ +namespace BikeTouringGISApp.UnitTests.Services +{ + using System.Linq; + using System.Threading.Tasks; + using Microsoft.Toolkit.Uwp.Services.Facebook; + using Microsoft.VisualStudio.TestTools.UnitTesting; + + [TestClass] + public class FaceBookServiceTest + { + [TestMethod] + public async Task GetPagePictureUrl() + { + await Login(); + var pages = await FacebookService.Instance.RequestAsync(FacebookDataConfig.MyPages); + var pageId = pages.First().Id; + var imageData = await FacebookService.Instance.GetPagePictureInfoAsync(pageId); + Assert.AreEqual("https://scontent.xx.fbcdn.net/v/t1.0-1/p50x50/14568257_1795295790740226_1853951626961530489_n.png?oh=61ce1acf6bdfd89bc35b49aef19d8d55&oe=59FC7FAF", imageData.Url); + } + + [TestMethod] + public async Task GetPagesForUser() + { + await Login(); + var pages = await FacebookService.Instance.RequestAsync(FacebookDataConfig.MyPages); + Assert.AreEqual(6, pages.Count); + } + + [TestMethod] + public async Task GetPlaces() + { + var latitude = 53.196981; + var longitude = 6.584016; + await Login(); + var places = await FacebookService.Instance.GetPlacesByCoordinatesAsync(latitude, longitude); + Assert.AreEqual(10, places.Count); + } + + [TestMethod] + public async Task GetUserPictureUrl() + { + await Login(); + var imageData = await FacebookService.Instance.GetUserPictureInfoAsync(); + Assert.AreEqual("https://scontent.xx.fbcdn.net/v/t1.0-1/p50x50/16387445_10154864101373529_7907991150593038797_n.jpg?oh=c3287ae14b9550a2376318fe8ec77259&oe=59F344B1", imageData.Url); + } + + private async Task Login() + { + FacebookService.Instance.Initialize("687964081409306", FacebookPermissions.PublicProfile | FacebookPermissions.UserPosts | FacebookPermissions.PublishActions | FacebookPermissions.UserPhotos | FacebookPermissions.ManagePages); + await FacebookService.Instance.LoginAsync(); + } + } +} \ No newline at end of file diff --git a/BikeTouringGISApp.UnitTests/UnitTestApp.xaml b/BikeTouringGISApp.UnitTests/UnitTestApp.xaml new file mode 100644 index 0000000..2df6fd6 --- /dev/null +++ b/BikeTouringGISApp.UnitTests/UnitTestApp.xaml @@ -0,0 +1,8 @@ + + + diff --git a/BikeTouringGISApp.UnitTests/UnitTestApp.xaml.cs b/BikeTouringGISApp.UnitTests/UnitTestApp.xaml.cs new file mode 100644 index 0000000..8c0ef48 --- /dev/null +++ b/BikeTouringGISApp.UnitTests/UnitTestApp.xaml.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.ApplicationModel; +using Windows.ApplicationModel.Activation; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +namespace BikeTouringGISApp.UnitTests +{ + /// + /// Provides application-specific behavior to supplement the default Application class. + /// + sealed partial class App : Application + { + /// + /// Initializes the singleton application object. This is the first line of authored code + /// executed, and as such is the logical equivalent of main() or WinMain(). + /// + public App() + { + this.InitializeComponent(); + this.Suspending += OnSuspending; + } + + /// + /// Invoked when the application is launched normally by the end user. Other entry points + /// will be used such as when the application is launched to open a specific file. + /// + /// Details about the launch request and process. + protected override void OnLaunched(LaunchActivatedEventArgs e) + { + +#if DEBUG + if (System.Diagnostics.Debugger.IsAttached) + { + this.DebugSettings.EnableFrameRateCounter = true; + } +#endif + + Frame rootFrame = Window.Current.Content as Frame; + + // Do not repeat app initialization when the Window already has content, + // just ensure that the window is active + if (rootFrame == null) + { + // Create a Frame to act as the navigation context and navigate to the first page + rootFrame = new Frame(); + + rootFrame.NavigationFailed += OnNavigationFailed; + + if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) + { + //TODO: Load state from previously suspended application + } + + // Place the frame in the current Window + Window.Current.Content = rootFrame; + } + + Microsoft.VisualStudio.TestPlatform.TestExecutor.UnitTestClient.CreateDefaultUI(); + + // Ensure the current window is active + Window.Current.Activate(); + + Microsoft.VisualStudio.TestPlatform.TestExecutor.UnitTestClient.Run(e.Arguments); + } + + /// + /// Invoked when Navigation to a certain page fails + /// + /// The Frame which failed navigation + /// Details about the navigation failure + void OnNavigationFailed(object sender, NavigationFailedEventArgs e) + { + throw new Exception("Failed to load Page " + e.SourcePageType.FullName); + } + + /// + /// Invoked when application execution is being suspended. Application state is saved + /// without knowing whether the application will be terminated or resumed with the contents + /// of memory still intact. + /// + /// The source of the suspend request. + /// Details about the suspend request. + private void OnSuspending(object sender, SuspendingEventArgs e) + { + var deferral = e.SuspendingOperation.GetDeferral(); + //TODO: Save application state and stop any background activity + deferral.Complete(); + } + } +} diff --git a/BikeTouringGISApp/App.xaml b/BikeTouringGISApp/App.xaml new file mode 100644 index 0000000..11536bf --- /dev/null +++ b/BikeTouringGISApp/App.xaml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BikeTouringGISApp/App.xaml.cs b/BikeTouringGISApp/App.xaml.cs new file mode 100644 index 0000000..c543659 --- /dev/null +++ b/BikeTouringGISApp/App.xaml.cs @@ -0,0 +1,64 @@ +using Windows.UI.Xaml; +using System.Threading.Tasks; +using Windows.ApplicationModel.Activation; +using Template10.Controls; +using Windows.UI.Xaml.Data; +using Microsoft.Practices.ServiceLocation; +using GalaSoft.MvvmLight.Ioc; +using WinUX.CloudServices; +using WinUX.CloudServices.OneDrive; +using Template10.Common; +using BikeTouringGISApp.Services; +using WinUX.CloudServices.Facebook; +using BikeTouringGISApp.Library.Interfaces; +using BikeTouringGISApp.Library.Model; +using BikeTouringGISApp.Repositories; + +namespace BikeTouringGISApp +{ + // OneDrive client ID --> 00000000441DB51C + + [Bindable] + sealed partial class App : BootStrapper + { + public App() + { + InitializeComponent(); + SplashFactory = (e) => new Views.Splash(e); + } + + public override async Task OnInitializeAsync(IActivatedEventArgs args) + { + if (Window.Current.Content as ModalDialog == null) + { + // create a new frame + var nav = NavigationServiceFactory(BackButton.Attach, ExistingContent.Include); + + // create modal root + Window.Current.Content = new ModalDialog + { + DisableBackButtonWhenModal = true, + Content = new Views.Shell(nav), + ModalContent = new Views.Busy(), + }; + } + await Task.CompletedTask; + } + + public override async Task OnStartAsync(StartKind startKind, IActivatedEventArgs args) + { + ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default); + SimpleIoc.Default.Register>(() => new LogBookRepository()); + SimpleIoc.Default.Register>(() => new LogRepository()); + await FileService.Instance.SetMainFolder(); + + /* + SimpleIoc.Default.Register(); + var fbClient = new FacebookClient(); + await fbClient.LoginAsync("687964081409306"); + SimpleIoc.Default.Register(() => fbClient); + */ + NavigationService.Navigate(typeof(Views.CreateNewLog)); + } + } +} \ No newline at end of file diff --git a/BikeTouringGISApp/Assets/LockScreenLogo.scale-200.png b/BikeTouringGISApp/Assets/LockScreenLogo.scale-200.png new file mode 100644 index 0000000..735f57a Binary files /dev/null and b/BikeTouringGISApp/Assets/LockScreenLogo.scale-200.png differ diff --git a/BikeTouringGISApp/Assets/SplashScreen.scale-100.png b/BikeTouringGISApp/Assets/SplashScreen.scale-100.png new file mode 100644 index 0000000..0293462 Binary files /dev/null and b/BikeTouringGISApp/Assets/SplashScreen.scale-100.png differ diff --git a/BikeTouringGISApp/Assets/SplashScreen.scale-200.png b/BikeTouringGISApp/Assets/SplashScreen.scale-200.png new file mode 100644 index 0000000..ffc15d0 Binary files /dev/null and b/BikeTouringGISApp/Assets/SplashScreen.scale-200.png differ diff --git a/BikeTouringGISApp/Assets/Square150x150Logo.scale-100.png b/BikeTouringGISApp/Assets/Square150x150Logo.scale-100.png new file mode 100644 index 0000000..3800a29 Binary files /dev/null and b/BikeTouringGISApp/Assets/Square150x150Logo.scale-100.png differ diff --git a/BikeTouringGISApp/Assets/Square150x150Logo.scale-200.png b/BikeTouringGISApp/Assets/Square150x150Logo.scale-200.png new file mode 100644 index 0000000..8b588c4 Binary files /dev/null and b/BikeTouringGISApp/Assets/Square150x150Logo.scale-200.png differ diff --git a/BikeTouringGISApp/Assets/Square310x310Logo.scale-100.png b/BikeTouringGISApp/Assets/Square310x310Logo.scale-100.png new file mode 100644 index 0000000..409fbd5 Binary files /dev/null and b/BikeTouringGISApp/Assets/Square310x310Logo.scale-100.png differ diff --git a/BikeTouringGISApp/Assets/Square44x44Logo.scale-100.png b/BikeTouringGISApp/Assets/Square44x44Logo.scale-100.png new file mode 100644 index 0000000..cb022d5 Binary files /dev/null and b/BikeTouringGISApp/Assets/Square44x44Logo.scale-100.png differ diff --git a/BikeTouringGISApp/Assets/Square44x44Logo.scale-200.png b/BikeTouringGISApp/Assets/Square44x44Logo.scale-200.png new file mode 100644 index 0000000..af1d74a Binary files /dev/null and b/BikeTouringGISApp/Assets/Square44x44Logo.scale-200.png differ diff --git a/BikeTouringGISApp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/BikeTouringGISApp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png new file mode 100644 index 0000000..fcb7229 Binary files /dev/null and b/BikeTouringGISApp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png differ diff --git a/BikeTouringGISApp/Assets/Square71x71Logo.scale-100.png b/BikeTouringGISApp/Assets/Square71x71Logo.scale-100.png new file mode 100644 index 0000000..370db7f Binary files /dev/null and b/BikeTouringGISApp/Assets/Square71x71Logo.scale-100.png differ diff --git a/BikeTouringGISApp/Assets/StoreLogo.png b/BikeTouringGISApp/Assets/StoreLogo.png new file mode 100644 index 0000000..5f57933 Binary files /dev/null and b/BikeTouringGISApp/Assets/StoreLogo.png differ diff --git a/BikeTouringGISApp/Assets/Wide310x150Logo.scale-100.png b/BikeTouringGISApp/Assets/Wide310x150Logo.scale-100.png new file mode 100644 index 0000000..8f586e8 Binary files /dev/null and b/BikeTouringGISApp/Assets/Wide310x150Logo.scale-100.png differ diff --git a/BikeTouringGISApp/Assets/Wide310x150Logo.scale-200.png b/BikeTouringGISApp/Assets/Wide310x150Logo.scale-200.png new file mode 100644 index 0000000..0293462 Binary files /dev/null and b/BikeTouringGISApp/Assets/Wide310x150Logo.scale-200.png differ diff --git a/BikeTouringGISApp/BikeTouringGISApp.csproj b/BikeTouringGISApp/BikeTouringGISApp.csproj new file mode 100644 index 0000000..6d52cd3 --- /dev/null +++ b/BikeTouringGISApp/BikeTouringGISApp.csproj @@ -0,0 +1,309 @@ + + + + + Debug + x86 + {772BF105-4384-4701-A398-8756CB5BA908} + AppContainerExe + Properties + BikeTouringGISApp + BikeTouringGISApp + en-US + 100 + UAP + 10.0.15063.0 + 10.0.15063.0 + 14 + 512 + {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + true + BikeTouringGISApp_StoreKey.pfx + 12FF34CF31C09755E815094D2E8E0DDDA6E54175 + True + C:\GitHub\BikeTouringGIS\apppackages\ + False + Always + x86|x64|arm + + + true + bin\x86\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x86 + false + prompt + true + + + bin\x86\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x86 + false + prompt + true + true + + + true + bin\ARM\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + ARM + false + prompt + true + + + bin\ARM\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + ARM + false + prompt + true + true + + + true + bin\x64\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x64 + false + prompt + true + + + bin\x64\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x64 + false + prompt + true + true + + + PackageReference + + + + App.xaml + + + + + + + + + + + + + + + + + + + Busy.xaml + + + CreateNewLog.xaml + + + LogBooks.xaml + + + Logs.xaml + + + MainPage.xaml + + + Settings.xaml + + + Shell.xaml + + + Splash.xaml + + + + + Designer + + + + + + + + + + + + + + + + + + + + + + + + MSBuild:Compile + Designer + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + PreserveNewest + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + + + 5.4.0 + + + 2.0.0 + + + 5.3.0 + + + 10.0.3 + + + 1.0.0.5 + + + 1.1.12 + + + + + {1c8a345b-fa57-4f22-b648-c703599f6f00} + Microsoft.Toolkit.Services + + + {7189a42d-6f1a-4fa3-8e00-e2c14fdf167a} + Microsoft.Toolkit.Uwp.Services + + + {e9faabfb-d726-42c1-83c1-cb46a29fea81} + Microsoft.Toolkit.Uwp.UI.Controls + + + {3dd8aa7c-3569-4e51-992f-0c2257e8878e} + Microsoft.Toolkit.Uwp.UI + + + {805f80df-75c6-4c2f-8fd9-b47f6d0df5a3} + Microsoft.Toolkit.Uwp + + + {1c743253-00dd-406b-a0a9-7f956344838f} + Microsoft.Toolkit + + + {55c7fa03-c3b0-4aa0-be48-3fa435ee37c1} + WinUX.Common + + + {0d958504-42c8-4b04-b9a7-2c6cb6e8009c} + WinUX.UWP.Xaml + + + {B7D2BD46-3485-459D-AD88-ECABF497D508} + WinUX.UWP + + + {01A37488-B1A9-40D0-BCD9-3A5ED692F127} + BikeTouringGISApp.Library + + + + + + + 14.0 + + + + \ No newline at end of file diff --git a/BikeTouringGISApp/Package.StoreAssociation.xml b/BikeTouringGISApp/Package.StoreAssociation.xml new file mode 100644 index 0000000..6d39ab1 --- /dev/null +++ b/BikeTouringGISApp/Package.StoreAssociation.xml @@ -0,0 +1,374 @@ + + + CN=8E90FFAF-18EE-4B9D-99D1-D3BFBA494579 + the Right Direction + http://www.w3.org/2001/04/xmlenc#sha256 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 32736theRightDirection.BikeTouringGIS + + BikeTouringGIS + + + + 32736theRightDirection.BasketBalNieuws + 32736theRightDirection.BasketBalNieuwseditor + 32736theRightDirection.mannusmannus + 32736theRightDirection.MyMoneyApp + 32736theRightDirection.SportsDataManager + + + \ No newline at end of file diff --git a/BikeTouringGISApp/Package.appxmanifest b/BikeTouringGISApp/Package.appxmanifest new file mode 100644 index 0000000..337e60c --- /dev/null +++ b/BikeTouringGISApp/Package.appxmanifest @@ -0,0 +1,42 @@ + + + + + + BikeTouringGIS + the Right Direction + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + + .json + + + + + + + + + + + + \ No newline at end of file diff --git a/BikeTouringGISApp/Properties/AssemblyInfo.cs b/BikeTouringGISApp/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..040c4f2 --- /dev/null +++ b/BikeTouringGISApp/Properties/AssemblyInfo.cs @@ -0,0 +1,29 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("BikeTouringGISApp")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("BikeTouringGISApp")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: ComVisible(false)] \ No newline at end of file diff --git a/BikeTouringGISApp/Properties/Default.rd.xml b/BikeTouringGISApp/Properties/Default.rd.xml new file mode 100644 index 0000000..7c40ffe --- /dev/null +++ b/BikeTouringGISApp/Properties/Default.rd.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/BikeTouringGISApp/Repositories/LogBookRepository.cs b/BikeTouringGISApp/Repositories/LogBookRepository.cs new file mode 100644 index 0000000..6ad8691 --- /dev/null +++ b/BikeTouringGISApp/Repositories/LogBookRepository.cs @@ -0,0 +1,44 @@ +using BikeTouringGISApp.Library.Enumerations; +using BikeTouringGISApp.Library.Interfaces; +using BikeTouringGISApp.Library.Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WinUX; + +namespace BikeTouringGISApp.Repositories +{ + public class LogBookRepository : Repository, IRepository + { + private IEnumerable _entities = null; + + public LogBookRepository() : base("logbooks") + { + } + + public IEnumerable Entities => _entities; + + public async Task AddEntity(LogBook entityToAdd) + { + await Save(entityToAdd); + } + + public async Task DeleteEntity(LogBook entityToDelete) + { + await Delete(entityToDelete); + } + + public async Task LoadData() + { + _entities = await GetData(); + _entities.ForEach(x => x.Source = RepositorySource.Local); + } + + public Task ModifyEntity(LogBook entityToModify) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/BikeTouringGISApp/Repositories/LogRepository.cs b/BikeTouringGISApp/Repositories/LogRepository.cs new file mode 100644 index 0000000..06c78ea --- /dev/null +++ b/BikeTouringGISApp/Repositories/LogRepository.cs @@ -0,0 +1,44 @@ +using BikeTouringGISApp.Library.Enumerations; +using BikeTouringGISApp.Library.Interfaces; +using BikeTouringGISApp.Library.Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WinUX; + +namespace BikeTouringGISApp.Repositories +{ + public class LogRepository : Repository, IRepository + { + private IEnumerable _entities = null; + + public LogRepository() : base("logs") + { + } + + public IEnumerable Entities => _entities; + + public async Task AddEntity(Log entityToAdd) + { + await Save(entityToAdd); + } + + public async Task DeleteEntity(Log entityToDelete) + { + await Delete(entityToDelete); + } + + public async Task LoadData() + { + _entities = await GetData(); + _entities.ForEach(x => x.Source = RepositorySource.Local); + } + + public Task ModifyEntity(Log entityToModify) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/BikeTouringGISApp/Repositories/OneDriveRepository.cs b/BikeTouringGISApp/Repositories/OneDriveRepository.cs new file mode 100644 index 0000000..57bd1f3 --- /dev/null +++ b/BikeTouringGISApp/Repositories/OneDriveRepository.cs @@ -0,0 +1,84 @@ +using BikeTouringGISApp.Library.Enumerations; +using BikeTouringGISApp.Library.Model; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WinUX; +using WinUX.CloudServices.OneDrive; + +namespace BikeTouringGISApp.Repositories +{ + internal class OneDriveRepository : OneDriveService + { + private const string LOGBOOKSDIRECTORYNAME = "LogBooks"; + private const string LOGSDIRECTORYNAME = "Logs"; + + public OneDriveRepository() : base("theRightDirection/BikeTouringGIS", "00000000441DB51C", new string[] { "wl.signin", "wl.offline_access", "onedrive.readwrite" }) + { + } + + internal async Task> GetLogBooks() + { + var items = await GetItems(LOGBOOKSDIRECTORYNAME); + items.ForEach(x => x.Source = RepositorySource.OneDrive); + return items; + } + + internal async Task> GetLogs() + { + return await GetItems(LOGSDIRECTORYNAME); + } + + internal async Task SaveOrUpdateLog(Log log) + { + var isConnected = await ConnectToOneDrive(); + if (isConnected) + { + await UpdateAsync($"{log.Identifier}.json", JsonConvert.SerializeObject(log), LOGSDIRECTORYNAME); + } + } + + internal async Task SaveOrUpdateLogBook(LogBook logBook) + { + var isConnected = await ConnectToOneDrive(); + if (isConnected) + { + await UpdateAsync($"{logBook.Identifier}.json", JsonConvert.SerializeObject(logBook), LOGBOOKSDIRECTORYNAME); + } + } + + private async Task ConnectToOneDrive() + { + var result = await Connect(); + if (result.IsConnected) + { + await CreateFolderAsync(LOGBOOKSDIRECTORYNAME); + await CreateFolderAsync(LOGSDIRECTORYNAME); + } + return result.IsConnected; + } + + private async Task> GetItems(string folderName) + { + var items = new List(); + try + { + var isConnected = await ConnectToOneDrive(); + if (isConnected) + { + var content = await GetAllItemsAsync(folderName); + content.ForEach(item => + { + var realObject = JsonConvert.DeserializeObject(item); + items.Add(realObject); + }); + } + } + catch (Exception e) { } + return items; + } + } +} \ No newline at end of file diff --git a/BikeTouringGISApp/Repositories/Repository.cs b/BikeTouringGISApp/Repositories/Repository.cs new file mode 100644 index 0000000..338f32f --- /dev/null +++ b/BikeTouringGISApp/Repositories/Repository.cs @@ -0,0 +1,88 @@ +using BikeTouringGISApp.Library.Interfaces; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Windows.Storage; + +namespace BikeTouringGISApp.Repositories +{ + public abstract class Repository where T : IEntity + { + private readonly string APPLICATIONFOLDERNAME; + private readonly string FOLDERNAME; + private StorageFolder MAINSYSTEMFOLDER; + + protected Repository(string folderName) + { + APPLICATIONFOLDERNAME = "BikeTouringGIS"; + FOLDERNAME = folderName; + SetMainPath(); + } + + public string Path { get; private set; } + + public async Task Delete(T entity) + { + var folderToLoad = await CreateBaseFolder(); + var file = await folderToLoad.TryGetItemAsync($"{entity.Identifier.ToString()}.json"); + if (file != null) + { + await file.DeleteAsync(); + } + } + + public async Task> GetData() + { + var folderToLoad = await CreateBaseFolder(); + var files = await folderToLoad.GetFilesAsync(); + var result = new List(); + foreach (var file in files) + { + var text = await FileIO.ReadTextAsync(file); + var item = JsonConvert.DeserializeObject(text); + result.Add(item); + } + return result; + } + + public async Task Save(T entity) + { + var logAsJson = JsonConvert.SerializeObject(entity); + var folderToSave = await CreateBaseFolder(); + var file = await folderToSave.CreateFileAsync($"{entity.Identifier.ToString()}.json", CreationCollisionOption.ReplaceExisting); + await FileIO.WriteTextAsync(file, logAsJson); + } + + private async Task CreateBaseFolder() + { + await SetMainPath(); + var baseFolder = await MAINSYSTEMFOLDER.CreateFolderAsync(APPLICATIONFOLDERNAME, CreationCollisionOption.OpenIfExists); + var logsFolder = await baseFolder.CreateFolderAsync(FOLDERNAME, CreationCollisionOption.OpenIfExists); + Path = logsFolder.Path; + return logsFolder; + } + + private async Task GetMainSystemPath() + { + var removableDevices = KnownFolders.RemovableDevices; + var removableFolders = await removableDevices.GetFoldersAsync(); + var sdCard = removableFolders.FirstOrDefault(); + if (sdCard != null && sdCard.Attributes.HasFlag(FileAttributes.ReadOnly) == false) + { + var foldersOnSdCard = await sdCard.GetFoldersAsync(); + var documents = foldersOnSdCard.Where(x => x.DisplayName.Equals("Documents")).First(); + return documents; + } + return ApplicationData.Current.RoamingFolder; + } + + private async Task SetMainPath() + { + var mainSystemPath = await GetMainSystemPath(); + MAINSYSTEMFOLDER = mainSystemPath; + } + } +} \ No newline at end of file diff --git a/BikeTouringGISApp/Services/FileService.cs b/BikeTouringGISApp/Services/FileService.cs new file mode 100644 index 0000000..0332c79 --- /dev/null +++ b/BikeTouringGISApp/Services/FileService.cs @@ -0,0 +1,77 @@ +using BikeTouringGISApp.Library.Model; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Windows.Storage; + +namespace BikeTouringGISApp.Services +{ + internal class FileService + { + private readonly string APPLICATIONFOLDERNAME; + private readonly string LOGSFOLDERNAME; + private StorageFolder MAINSYSTEMFOLDER; + + private FileService() + { + APPLICATIONFOLDERNAME = "BikeTouringGIS"; + LOGSFOLDERNAME = "Logs"; + } + + public static FileService Instance { get; } = new FileService(); + public string Path { get; private set; } + + public async Task> GetLogs() + { + var folderToLoad = await CreateBaseFolder(); + var files = await folderToLoad.GetFilesAsync(); + var result = new List(); + foreach (var file in files) + { + var text = await FileIO.ReadTextAsync(file); + var log = JsonConvert.DeserializeObject(text); + result.Add(log); + } + return result; + } + + public async Task SaveLog(Log log) + { + var logAsJson = JsonConvert.SerializeObject(log); + var folderToSave = await CreateBaseFolder(); + var file = await folderToSave.CreateFileAsync(log.FileName, CreationCollisionOption.ReplaceExisting); + await FileIO.WriteTextAsync(file, logAsJson); + } + + public async Task SetMainFolder() + { + var mainSystemPath = await GetMainSystemPath(); + MAINSYSTEMFOLDER = mainSystemPath; + } + + private async Task CreateBaseFolder() + { + var baseFolder = await MAINSYSTEMFOLDER.CreateFolderAsync(APPLICATIONFOLDERNAME, CreationCollisionOption.OpenIfExists); + var logsFolder = await baseFolder.CreateFolderAsync(LOGSFOLDERNAME, CreationCollisionOption.OpenIfExists); + Path = logsFolder.Path; + return logsFolder; + } + + private async Task GetMainSystemPath() + { + var removableDevices = KnownFolders.RemovableDevices; + var removableFolders = await removableDevices.GetFoldersAsync(); + var sdCard = removableFolders.FirstOrDefault(); + if (sdCard != null && sdCard.Attributes.HasFlag(FileAttributes.ReadOnly) == false) + { + var foldersOnSdCard = await sdCard.GetFoldersAsync(); + var documents = foldersOnSdCard.Where(x => x.DisplayName.Equals("Documents")).First(); + return documents; + } + return ApplicationData.Current.RoamingFolder; + } + } +} \ No newline at end of file diff --git a/BikeTouringGISApp/Services/NetworkService.cs b/BikeTouringGISApp/Services/NetworkService.cs new file mode 100644 index 0000000..30fa538 --- /dev/null +++ b/BikeTouringGISApp/Services/NetworkService.cs @@ -0,0 +1,18 @@ +using Microsoft.Toolkit.Uwp; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BikeTouringGISApp.Services +{ + internal class NetworkService + { + internal static async Task IsInternetConnectionAvailable() + { + return false; + // return NetworkHelper.Instance.ConnectionInformation.IsInternetAvailable; + } + } +} \ No newline at end of file diff --git a/BikeTouringGISApp/Services/SettingsService.cs b/BikeTouringGISApp/Services/SettingsService.cs new file mode 100644 index 0000000..c5235a4 --- /dev/null +++ b/BikeTouringGISApp/Services/SettingsService.cs @@ -0,0 +1,28 @@ +using GalaSoft.MvvmLight.Ioc; +using System; +using Template10.Common; +using Template10.Services.SettingsService; +using Template10.Utils; +using Windows.Devices.Geolocation; +using Windows.UI.Xaml; + +namespace BikeTouringGISApp.Services +{ + public class SettingsService + { + private ISettingsHelper _helper; + + private SettingsService() + { + _helper = new SettingsHelper(); + } + + public static SettingsService Instance { get; } = new SettingsService(); + + public GeolocationAccessStatus AllowUseGPSDevice + { + get { return _helper.Read("AllowUseGPSDevice", GeolocationAccessStatus.Unspecified, SettingsStrategies.Roam); } + set { _helper.Write("AllowUseGPSDevice", value, SettingsStrategies.Roam); } + } + } +} \ No newline at end of file diff --git a/BikeTouringGISApp/Services/SynchronizingDataService.cs b/BikeTouringGISApp/Services/SynchronizingDataService.cs new file mode 100644 index 0000000..f258554 --- /dev/null +++ b/BikeTouringGISApp/Services/SynchronizingDataService.cs @@ -0,0 +1,92 @@ +using BikeTouringGISApp.Library.Comparers; +using BikeTouringGISApp.Library.Enumerations; +using BikeTouringGISApp.Library.Interfaces; +using BikeTouringGISApp.Library.Model; +using BikeTouringGISApp.Repositories; +using GalaSoft.MvvmLight.Ioc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WinUX; + +namespace BikeTouringGISApp.Services +{ + internal class SynchronizingDataService + { + private IRepository _logBooksRepository; + private IRepository _logsRepository; + private OneDriveRepository _oneDriveRepository; + + public SynchronizingDataService() + { + _oneDriveRepository = new OneDriveRepository(); + _logBooksRepository = SimpleIoc.Default.GetInstance>(); + _logsRepository = SimpleIoc.Default.GetInstance>(); + } + + public void SaveToLocal(LogBook logbook) + { + _logBooksRepository.AddEntity(logbook); + } + + public void SaveToLocal(Log log) + { + _logsRepository.AddEntity(log); + } + + public void SaveToOneDrive(LogBook logbook) + { + _oneDriveRepository.SaveOrUpdateLogBook(logbook); + } + + public void SaveToOneDrive(Log log) + { + _oneDriveRepository.SaveOrUpdateLog(log); + } + + public async Task SynchronizeLogBooks() + { + await _logBooksRepository.LoadData(); + var itemsFromOneDrive = await _oneDriveRepository.GetLogBooks(); + var itemsLocal = _logBooksRepository.Entities; + SyncEntities(itemsLocal, itemsFromOneDrive, SaveToOneDrive, SaveToLocal); + } + + public async Task SynchronizeLogs() + { + await _logsRepository.LoadData(); + var itemsFromOneDrive = await _oneDriveRepository.GetLogs(); + var itemsLocal = _logsRepository.Entities; + SyncEntities(itemsLocal, itemsFromOneDrive, SaveToOneDrive, SaveToLocal); + } + + private async Task SyncEntities(IEnumerable localItems, IEnumerable oneDriveItems, Action saveToOneDrive, Action saveToLocal) where T : IEntity + { + var comparer = new EntityComparer(); + // vind de verschillen + var difference = localItems.Except(oneDriveItems, comparer).Concat(oneDriveItems.Except(localItems, comparer)); + difference.Where(y => y.Source == RepositorySource.Local).ForEach(x => saveToOneDrive(x)); + difference.Where(y => y.Source == RepositorySource.OneDrive).ForEach(x => saveToLocal(x)); + // items die zowel in OneDrive als lokaal voorkomen + var equalItems = localItems.Intersect(oneDriveItems, comparer); + foreach (var equalItem in equalItems) + { + T localItem = localItems.Where(x => x.Identifier == equalItem.Identifier).First(); + T oneDriveItem = oneDriveItems.Where(x => x.Identifier == equalItem.Identifier).First(); + var changeStatus = localItem.IsNewerThen(oneDriveItem); + switch (changeStatus) + { + case 1: + saveToOneDrive(localItem); + break; + + case -1: + saveToLocal(oneDriveItem); + break; + } + } + } + } +} \ No newline at end of file diff --git a/BikeTouringGISApp/Styles/Datatemplates.xaml b/BikeTouringGISApp/Styles/Datatemplates.xaml new file mode 100644 index 0000000..0ea3fdb --- /dev/null +++ b/BikeTouringGISApp/Styles/Datatemplates.xaml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + +