From b4469549bed38bd7a372c682276bc7c79d4b4542 Mon Sep 17 00:00:00 2001 From: stubbfel Date: Mon, 21 Oct 2013 13:35:11 +0200 Subject: [PATCH 1/6] refactor person models --- .../Model/Person/PersonListWp8Model.cs | 49 +-------------- .../Model/Person/PersonWp8Model.cs | 4 +- .../Pages/Person/PersonPage.xaml.cs | 11 ++-- .../SubmissionInfo/720p_lecture.png | Bin 55476 -> 59338 bytes .../CampusAppWPortalLib8.csproj | 2 - .../Model/Person/IPersonFunctionModel.cs | 23 ------- .../Model/Person/IPersonModel.cs | 30 --------- .../Model/Person/PersonFunctionModel.cs | 15 ++++- .../Model/Person/PersonListModel.cs | 57 ++++++++++++++---- .../Model/Person/PersonModel.cs | 16 ++--- 10 files changed, 75 insertions(+), 132 deletions(-) delete mode 100644 CampusAppWP8/CampusAppWPortalLib8/Model/Person/IPersonFunctionModel.cs delete mode 100644 CampusAppWP8/CampusAppWPortalLib8/Model/Person/IPersonModel.cs diff --git a/CampusAppWP8/CampusAppWP8/Model/Person/PersonListWp8Model.cs b/CampusAppWP8/CampusAppWP8/Model/Person/PersonListWp8Model.cs index 5e64ccdc..eb65095a 100644 --- a/CampusAppWP8/CampusAppWP8/Model/Person/PersonListWp8Model.cs +++ b/CampusAppWP8/CampusAppWP8/Model/Person/PersonListWp8Model.cs @@ -9,59 +9,12 @@ namespace CampusAppWP8.Model.Person { using System.Xml.Serialization; - using CampusAppWPortalLib8.Model.Person; - using System.Collections.Generic; /// Person list model. /// Stubbfel, 05.09.2013. /// [XmlRoot("Uebersicht")] - public class PersonListWp8Model : CampusAppWPortalLib8.Model.Person.PersonListModel + public class PersonListWp8Model : CampusAppWPortalLib8.Model.Person.PersonListModel { - /// Gets a person. - /// Stubbfel, 15.10.2013. - /// The identifier. - /// The person. - public override PersonWp8Model GetPerson(string id) - { - foreach (PersonWp8Model tmpPerson in this.Persons) - { - if (tmpPerson.ID.Equals(id)) - { - return tmpPerson; - } - } - - return null; - } - - /// Removes the non function person. - /// Stubbfel, 05.09.2013. - public override void RemoveNonFunctionPerson() - { - List removeList = new List(); - foreach (PersonWp8Model tmpPerson in this.Persons) - { - if (tmpPerson.Functions.Count < 1) - { - removeList.Add(tmpPerson); - } - } - - foreach (PersonWp8Model removePerson in removeList) - { - this.Persons.Remove(removePerson); - } - } - - /// Sets person identifier to function. - /// Stubbfel, 05.09.2013. - public override void SetPersonIdToFunction() - { - foreach (PersonWp8Model person in this.Persons) - { - person.SetPersonIdToFunction(); - } - } } } diff --git a/CampusAppWP8/CampusAppWP8/Model/Person/PersonWp8Model.cs b/CampusAppWP8/CampusAppWP8/Model/Person/PersonWp8Model.cs index ccc49410..a8de6168 100644 --- a/CampusAppWP8/CampusAppWP8/Model/Person/PersonWp8Model.cs +++ b/CampusAppWP8/CampusAppWP8/Model/Person/PersonWp8Model.cs @@ -11,8 +11,8 @@ namespace CampusAppWP8.Model.Person using System.Xml.Serialization; using CampusAppWP8.Utility; - /// Person model. - /// Stubbfel, 05.09.2013. + /// A data Model for the person . + /// Stubbfel, 21.10.2013. /// public class PersonWp8Model : CampusAppWPortalLib8.Model.Person.PersonModel { diff --git a/CampusAppWP8/CampusAppWP8/Pages/Person/PersonPage.xaml.cs b/CampusAppWP8/CampusAppWP8/Pages/Person/PersonPage.xaml.cs index 886c8239..6f23a2c7 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/Person/PersonPage.xaml.cs +++ b/CampusAppWP8/CampusAppWP8/Pages/Person/PersonPage.xaml.cs @@ -132,15 +132,16 @@ namespace CampusAppWP8.Pages.Person saveContactTask.FirstName = person.FirstName; saveContactTask.LastName = person.SurName; saveContactTask.Title = person.Akadgrad; - saveContactTask.JobTitle = person.Functions[functionIndex].Function; - saveContactTask.Company = Constants.Addr_CBMainCompanyName + " - " + person.Functions[functionIndex].Appointment; + PersonFunctionWp8Model personFunction = person.Functions[functionIndex]; + saveContactTask.JobTitle = personFunction.Function; + saveContactTask.Company = Constants.Addr_CBMainCompanyName + " - " + personFunction.Appointment; saveContactTask.WorkAddressCountry = Constants.Addr_CBMainCountry; saveContactTask.WorkAddressCity = Constants.Addr_CBMainCity; saveContactTask.WorkAddressState = Constants.Addr_CBMainState; saveContactTask.WorkAddressZipCode = Constants.Addr_CBMainZipCode; - saveContactTask.WorkAddressStreet = person.Functions[functionIndex].Building; - saveContactTask.WorkPhone = person.Functions[functionIndex].Tel1; - saveContactTask.WorkEmail = person.Functions[functionIndex].Mail; + saveContactTask.WorkAddressStreet = personFunction.Building; + saveContactTask.WorkPhone = personFunction.Tel; + saveContactTask.WorkEmail = personFunction.Mail; saveContactTask.Show(); } diff --git a/CampusAppWP8/CampusAppWP8/SubmissionInfo/720p_lecture.png b/CampusAppWP8/CampusAppWP8/SubmissionInfo/720p_lecture.png index 3bf8548b03df2adda3167379fb17e7def7acec0c..3be6b81561d501419e6b446112540726eb9ca6b8 100644 GIT binary patch literal 59338 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 @}x9wiuxPGBFcYWyUX`uBGRmyHXAC~#d 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 AbN~PV diff --git a/CampusAppWP8/CampusAppWPortalLib8/CampusAppWPortalLib8.csproj b/CampusAppWP8/CampusAppWPortalLib8/CampusAppWPortalLib8.csproj index dea60ce8..166b9581 100644 --- a/CampusAppWP8/CampusAppWPortalLib8/CampusAppWPortalLib8.csproj +++ b/CampusAppWP8/CampusAppWPortalLib8/CampusAppWPortalLib8.csproj @@ -53,8 +53,6 @@ - - diff --git a/CampusAppWP8/CampusAppWPortalLib8/Model/Person/IPersonFunctionModel.cs b/CampusAppWP8/CampusAppWPortalLib8/Model/Person/IPersonFunctionModel.cs deleted file mode 100644 index 243896e1..00000000 --- a/CampusAppWP8/CampusAppWPortalLib8/Model/Person/IPersonFunctionModel.cs +++ /dev/null @@ -1,23 +0,0 @@ -//----------------------------------------------------------------------- -// -// The MIT License (MIT). Copyright (c) 2013 BTU/IIT. -// -// Stubbfel -// 15.10.2013 -// Declares the IPersonFunctionModel interface -//----------------------------------------------------------------------- -namespace CampusAppWPortalLib8.Model.Person -{ - /// Interface for PersonFunctionModel classes. - /// Stubbfel, 15.10.2013. - public interface IPersonFunctionModel - { - /// Gets or sets the identifier of the person. - /// The identifier of the person. - string PersonID { get; set; } - - /// Gets or sets zero-based index of the function. - /// The function index. - int FunctionIndex { get; set; } - } -} diff --git a/CampusAppWP8/CampusAppWPortalLib8/Model/Person/IPersonModel.cs b/CampusAppWP8/CampusAppWPortalLib8/Model/Person/IPersonModel.cs deleted file mode 100644 index 0456bd45..00000000 --- a/CampusAppWP8/CampusAppWPortalLib8/Model/Person/IPersonModel.cs +++ /dev/null @@ -1,30 +0,0 @@ -//----------------------------------------------------------------------- -// -// The MIT License (MIT). Copyright (c) 2013 BTU/IIT. -// -// Stubbfel -// 15.10.2013 -// Declares the IPersonModel interface -//----------------------------------------------------------------------- -namespace CampusAppWPortalLib8.Model.Person -{ - using System.Collections.ObjectModel; - - /// Interface for PersonModel classes. - /// Stubbfel, 15.10.2013. - /// PersonFunctionModel template. - public interface IPersonModel where T : IPersonFunctionModel - { - /// Gets or sets the functions of a person. - /// The functions. - ObservableCollection Functions { get; set; } - - /// Gets or sets the identifier. - /// The identifier. - string ID { get; set; } - - /// Sets person identifier to function. - /// Stubbfel, 05.09.2013. - void SetPersonIdToFunction(); - } -} diff --git a/CampusAppWP8/CampusAppWPortalLib8/Model/Person/PersonFunctionModel.cs b/CampusAppWP8/CampusAppWPortalLib8/Model/Person/PersonFunctionModel.cs index 52163d12..2daef138 100644 --- a/CampusAppWP8/CampusAppWPortalLib8/Model/Person/PersonFunctionModel.cs +++ b/CampusAppWP8/CampusAppWPortalLib8/Model/Person/PersonFunctionModel.cs @@ -14,7 +14,7 @@ namespace CampusAppWPortalLib8.Model.Person /// Person function model. /// Stubbfel, 05.09.2013. /// - public class PersonFunctionModel : IPersonFunctionModel + public class PersonFunctionModel { #region Member @@ -62,6 +62,19 @@ namespace CampusAppWPortalLib8.Model.Person } } + public string Tel + { + get + { + return this.Tel1; + } + + set + { + this.Tel1 = value; + } + } + /// Gets or sets the tel 2. /// The tel 2. [XmlAttribute("telefon2")] diff --git a/CampusAppWP8/CampusAppWPortalLib8/Model/Person/PersonListModel.cs b/CampusAppWP8/CampusAppWPortalLib8/Model/Person/PersonListModel.cs index c42361fd..15ecb134 100644 --- a/CampusAppWP8/CampusAppWPortalLib8/Model/Person/PersonListModel.cs +++ b/CampusAppWP8/CampusAppWPortalLib8/Model/Person/PersonListModel.cs @@ -12,11 +12,14 @@ namespace CampusAppWPortalLib8.Model.Person using System.Collections.ObjectModel; using System.Xml.Serialization; - /// Person list model. - /// Stubbfel, 05.09.2013. - /// personModel template. + /// A data Model for the person list. + /// Stubbfel, 21.10.2013. + /// Generic type parameter (PersonModel). + /// Generic type parameter (PersonFunctionModel). [XmlRoot("Uebersicht")] - public abstract class PersonListModel + public abstract class PersonListModel + where V : PersonFunctionModel + where T : PersonModel { #region Property @@ -29,15 +32,22 @@ namespace CampusAppWPortalLib8.Model.Person #region Method - /// Sets person identifier to function. - /// Stubbfel, 05.09.2013. - public abstract void SetPersonIdToFunction(); - /// Gets a person. /// Stubbfel, 05.09.2013. /// The identifier. /// The person. - public abstract T GetPerson(string id); + public T GetPerson(string id) + { + foreach (T tmpPerson in this.Persons) + { + if (tmpPerson.ID.Equals(id)) + { + return tmpPerson; + } + } + + return default(T); + } /// Removes the non function and set identifiers person. /// Stubbfel, 05.09.2013. @@ -49,8 +59,33 @@ namespace CampusAppWPortalLib8.Model.Person /// Removes the non function person. /// Stubbfel, 05.09.2013. - public abstract void RemoveNonFunctionPerson(); - + public void RemoveNonFunctionPerson() + { + List removeList = new List(); + foreach (T tmpPerson in this.Persons) + { + if (tmpPerson.Functions.Count < 1) + { + removeList.Add(tmpPerson); + } + } + + foreach (T removePerson in removeList) + { + this.Persons.Remove(removePerson); + } + } + + /// Sets person identifier to function. + /// Stubbfel, 05.09.2013. + public void SetPersonIdToFunction() + { + foreach (T person in this.Persons) + { + person.SetPersonIdToFunction(); + } + } + #endregion } } diff --git a/CampusAppWP8/CampusAppWPortalLib8/Model/Person/PersonModel.cs b/CampusAppWP8/CampusAppWPortalLib8/Model/Person/PersonModel.cs index a7fa8f93..7aa164a9 100644 --- a/CampusAppWP8/CampusAppWPortalLib8/Model/Person/PersonModel.cs +++ b/CampusAppWP8/CampusAppWPortalLib8/Model/Person/PersonModel.cs @@ -12,9 +12,9 @@ namespace CampusAppWPortalLib8.Model.Person using System.Xml.Serialization; /// A data Model for the person. - /// Stubbfel, 15.10.2013. - /// - public class PersonModel : IPersonModel where T : IPersonFunctionModel + /// Stubbfel, 21.10.2013. + /// Generic type parameter (PersonFunctionModel). + public class PersonModel where T : PersonFunctionModel { #region Member @@ -158,14 +158,10 @@ namespace CampusAppWPortalLib8.Model.Person } int index = 0; - foreach (T item in this.functions) + foreach (PersonFunctionModel function in this.functions) { - IPersonFunctionModel function = item as IPersonFunctionModel; - if (function != null) - { - function.PersonID = this.ID; - function.FunctionIndex = index++; - } + function.PersonID = this.ID; + function.FunctionIndex = index++; } } From 12eb1de958bfa1a685f2393474d3f626790e0b0d Mon Sep 17 00:00:00 2001 From: stubbfel Date: Mon, 21 Oct 2013 15:03:34 +0200 Subject: [PATCH 2/6] mv geodb to plc --- .../CampusAppWP8/Api/GeoApi/CampusSpsApi.cs | 2 +- .../CampusAppWP8/Api/GeoApi/PisApi.cs | 2 +- .../CampusAppWP8/Api/GeoApi/PssApi.cs | 2 +- .../CampusAppWP8/Api/GeoApi/SpsApi.cs | 2 +- CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj | 10 ++- .../CampusAppWP8/File/Places/PlacesFile.cs | 6 +- .../Model/Campusmap/BuildingMapModel.cs | 4 +- .../Model/Campusmap/CBMainMapModel.cs | 2 +- .../Model/Campusmap/CampusMapModel.cs | 10 +-- .../Model/Campusmap/ClickAblePlacePinModel.cs | 2 +- .../CampusAppWP8/Model/Campusmap/MapModel.cs | 20 +++--- .../GeoDb/CampusBuildingLayerWp8Model.cs | 18 +++++ .../Model/GeoDb/CampusBuildingWp8Model.cs | 22 +++++++ .../CampusAppWP8/Model/GeoDb/PlaceWp8Model.cs | 65 +++++++++++++++++++ .../Pages/Campusmap/CampusMapPage.xaml.cs | 34 +++++----- .../Pages/Campusmap/RoomListPage.xaml.cs | 32 ++++----- .../CampusAppWP8/Pages/Dev/NFC.xaml.cs | 2 +- .../Pages/PlaceNews/PlaceNews.xaml.cs | 10 +-- .../Pages/PlaceNews/ShowPad.xaml.cs | 4 +- 19 files changed, 176 insertions(+), 73 deletions(-) create mode 100644 CampusAppWP8/CampusAppWP8/Model/GeoDb/CampusBuildingLayerWp8Model.cs create mode 100644 CampusAppWP8/CampusAppWP8/Model/GeoDb/CampusBuildingWp8Model.cs create mode 100644 CampusAppWP8/CampusAppWP8/Model/GeoDb/PlaceWp8Model.cs diff --git a/CampusAppWP8/CampusAppWP8/Api/GeoApi/CampusSpsApi.cs b/CampusAppWP8/CampusAppWP8/Api/GeoApi/CampusSpsApi.cs index 94ef65b8..578ebf8a 100644 --- a/CampusAppWP8/CampusAppWP8/Api/GeoApi/CampusSpsApi.cs +++ b/CampusAppWP8/CampusAppWP8/Api/GeoApi/CampusSpsApi.cs @@ -63,7 +63,7 @@ namespace CampusAppWP8.Api.GeoApi } CampusAppWPortalLib8.Model.Settings.Campus campus; - foreach (PlaceModel place in this.Model.Places) + foreach (PlaceWp8Model place in this.Model.Places) { if (Enum.TryParse(place.PlaceId, true, out campus)) { diff --git a/CampusAppWP8/CampusAppWP8/Api/GeoApi/PisApi.cs b/CampusAppWP8/CampusAppWP8/Api/GeoApi/PisApi.cs index 9d8b112d..70387d5d 100644 --- a/CampusAppWP8/CampusAppWP8/Api/GeoApi/PisApi.cs +++ b/CampusAppWP8/CampusAppWP8/Api/GeoApi/PisApi.cs @@ -18,7 +18,7 @@ namespace CampusAppWP8.Api.GeoApi /// Pis api. /// Stubbfel, 09.09.2013. /// - public class PisApi : XmlModel + public class PisApi : XmlModel { #region Constructor diff --git a/CampusAppWP8/CampusAppWP8/Api/GeoApi/PssApi.cs b/CampusAppWP8/CampusAppWP8/Api/GeoApi/PssApi.cs index 52e5afb3..550561ff 100644 --- a/CampusAppWP8/CampusAppWP8/Api/GeoApi/PssApi.cs +++ b/CampusAppWP8/CampusAppWP8/Api/GeoApi/PssApi.cs @@ -18,7 +18,7 @@ namespace CampusAppWP8.Api.GeoApi /// Pss api. /// Stubbfel, 09.09.2013. /// - public class PssApi : XmlModel + public class PssApi : XmlModel { #region Constructor diff --git a/CampusAppWP8/CampusAppWP8/Api/GeoApi/SpsApi.cs b/CampusAppWP8/CampusAppWP8/Api/GeoApi/SpsApi.cs index 806d1ca2..6e0959db 100644 --- a/CampusAppWP8/CampusAppWP8/Api/GeoApi/SpsApi.cs +++ b/CampusAppWP8/CampusAppWP8/Api/GeoApi/SpsApi.cs @@ -19,7 +19,7 @@ namespace CampusAppWP8.Api.GeoApi /// Class for SPSAPI. /// Stubbfel, 14.10.2013. /// - public class SpsApi : XmlModel + public class SpsApi : XmlModel { #region Constructor diff --git a/CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj b/CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj index 1f098b7d..2a862bee 100644 --- a/CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj +++ b/CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj @@ -128,12 +128,10 @@ - - - - - - + + + + diff --git a/CampusAppWP8/CampusAppWP8/File/Places/PlacesFile.cs b/CampusAppWP8/CampusAppWP8/File/Places/PlacesFile.cs index e39c9ad0..92d2235c 100644 --- a/CampusAppWP8/CampusAppWP8/File/Places/PlacesFile.cs +++ b/CampusAppWP8/CampusAppWP8/File/Places/PlacesFile.cs @@ -16,7 +16,7 @@ namespace CampusAppWP8.File.Places /// Places file. /// Stubbfel, 09.09.2013. /// - public class PlacesFile : XmlModel + public class PlacesFile : XmlModel { #region Constructor @@ -39,7 +39,7 @@ namespace CampusAppWP8.File.Places /// The model. /// Information describing the file. /// true if it succeeds, false if it fails. - private bool CheckIsFileUpToDate(SpsModel model, System.IO.FileInfo fileInfo) + private bool CheckIsFileUpToDate(SpsWp8Model model, System.IO.FileInfo fileInfo) { if (fileInfo == null || !fileInfo.Exists || fileInfo.Length < 1 || (model != null && model.HasChanged)) { @@ -53,7 +53,7 @@ namespace CampusAppWP8.File.Places /// Stubbfel, 14.10.2013. public void FallBackLoad() { - SpsModel fallBackModel = XmlManager.DeserializationFileToModel(Constants.FileMap_OfflineMap); + SpsWp8Model fallBackModel = XmlManager.DeserializationFileToModel(Constants.FileMap_OfflineMap); this.Model = fallBackModel; this.SaveData(); } diff --git a/CampusAppWP8/CampusAppWP8/Model/Campusmap/BuildingMapModel.cs b/CampusAppWP8/CampusAppWP8/Model/Campusmap/BuildingMapModel.cs index 9c9dc708..d24d18d4 100644 --- a/CampusAppWP8/CampusAppWP8/Model/Campusmap/BuildingMapModel.cs +++ b/CampusAppWP8/CampusAppWP8/Model/Campusmap/BuildingMapModel.cs @@ -25,8 +25,8 @@ namespace CampusAppWP8.Model.Campusmap /// The identifier. public BuildingMapModel(string id) { - SpsModel buildings = XmlManager.DeserializationFileToModel(Constants.FileMap_BuildingsMap); - PlaceModel building = buildings.GetPlaceById(id); + SpsWp8Model buildings = XmlManager.DeserializationFileToModel(Constants.FileMap_BuildingsMap); + PlaceWp8Model building = buildings.GetPlaceById(id); if (buildings == null) { return; diff --git a/CampusAppWP8/CampusAppWP8/Model/Campusmap/CBMainMapModel.cs b/CampusAppWP8/CampusAppWP8/Model/Campusmap/CBMainMapModel.cs index 2e2757c5..e92434e4 100644 --- a/CampusAppWP8/CampusAppWP8/Model/Campusmap/CBMainMapModel.cs +++ b/CampusAppWP8/CampusAppWP8/Model/Campusmap/CBMainMapModel.cs @@ -30,7 +30,7 @@ namespace CampusAppWP8.Model.Campusmap /// Initializes a new instance of the class. /// Stubbfel, 14.10.2013. /// List of places. - public CBMainMapModel(List placeList) + public CBMainMapModel(List placeList) : base(placeList, CBMainMapModel.Campus) { this.ImageSource = Constants.FileMap_CBMainMap; diff --git a/CampusAppWP8/CampusAppWP8/Model/Campusmap/CampusMapModel.cs b/CampusAppWP8/CampusAppWP8/Model/Campusmap/CampusMapModel.cs index 45a71407..3229f649 100644 --- a/CampusAppWP8/CampusAppWP8/Model/Campusmap/CampusMapModel.cs +++ b/CampusAppWP8/CampusAppWP8/Model/Campusmap/CampusMapModel.cs @@ -22,7 +22,7 @@ namespace CampusAppWP8.Model.Campusmap /// Stubbfel, 14.10.2013. /// list of places. /// id of the campus. - public CampusMapModel(List placeList, string campusId) + public CampusMapModel(List placeList, string campusId) { this.CampusId = campusId; this.LoadSpatials(placeList); @@ -50,12 +50,12 @@ namespace CampusAppWP8.Model.Campusmap /// Loads the spatial./. /// Stubbfel, 14.10.2013. /// - protected override void LoadSpatials(List placeList) + protected override void LoadSpatials(List placeList) { - List campusPlaces = new List(); - this.Spatial = new SpsModel(); + List campusPlaces = new List(); + this.Spatial = new SpsWp8Model(); - foreach (PlaceModel place in placeList) + foreach (PlaceWp8Model place in placeList) { if (place.ParentId.Equals(this.CampusId) || place.PlaceId.Equals(this.CampusId)) { diff --git a/CampusAppWP8/CampusAppWP8/Model/Campusmap/ClickAblePlacePinModel.cs b/CampusAppWP8/CampusAppWP8/Model/Campusmap/ClickAblePlacePinModel.cs index 9fc74d80..d8c245fc 100644 --- a/CampusAppWP8/CampusAppWP8/Model/Campusmap/ClickAblePlacePinModel.cs +++ b/CampusAppWP8/CampusAppWP8/Model/Campusmap/ClickAblePlacePinModel.cs @@ -24,7 +24,7 @@ namespace CampusAppWP8.Model.Campusmap /// Gets or sets place which are associative with this pin. /// The associated places. - public List AssocPlaces { get; set; } + public List AssocPlaces { get; set; } #endregion diff --git a/CampusAppWP8/CampusAppWP8/Model/Campusmap/MapModel.cs b/CampusAppWP8/CampusAppWP8/Model/Campusmap/MapModel.cs index 5e105c5d..e03d0a6d 100644 --- a/CampusAppWP8/CampusAppWP8/Model/Campusmap/MapModel.cs +++ b/CampusAppWP8/CampusAppWP8/Model/Campusmap/MapModel.cs @@ -32,7 +32,7 @@ namespace CampusAppWP8.Model.Campusmap /// Initializes a new instance of the class. /// Stubbfel, 14.10.2013. /// list of places. - public MapModel(List placeList) + public MapModel(List placeList) { this.IsReady = false; this.LoadSpatials(placeList); @@ -46,7 +46,7 @@ namespace CampusAppWP8.Model.Campusmap /// Delegate for MapInfo. /// Stubbfel, 14.10.2013. /// list of places. - public delegate void MapInfos(List places); + public delegate void MapInfos(List places); /// Event ShowMapInfo. public event MapInfos ShowMapInfos = null; @@ -100,7 +100,7 @@ namespace CampusAppWP8.Model.Campusmap /// Gets or sets the spatial of the map. /// The spatial. - public SpsModel Spatial { get; set; } + public SpsWp8Model Spatial { get; set; } #endregion @@ -137,7 +137,7 @@ namespace CampusAppWP8.Model.Campusmap /// The type. /// (Optional) list of places. /// image of the pin. - public Image AddPin(double x, double y, MapPinModel.PinType type, List places = null) + public Image AddPin(double x, double y, MapPinModel.PinType type, List places = null) { Point position = new Point(x, y); return this.AddPin(position, type, places); @@ -153,7 +153,7 @@ namespace CampusAppWP8.Model.Campusmap /// The type. /// (Optional) list of places. /// image of the pin. - public Image AddPinFromRefPoint(double x, double y, MapPinModel.PinType type, List places = null) + public Image AddPinFromRefPoint(double x, double y, MapPinModel.PinType type, List places = null) { Point position = new Point(this.RefPoint.X + x, this.RefPoint.Y - y); return this.AddPin(position, type, places); @@ -168,7 +168,7 @@ namespace CampusAppWP8.Model.Campusmap /// The type. /// (Optional) list of places. /// image of the pin. - public Image AddPinFromRefPoint(Point position, MapPinModel.PinType type, List places = null) + public Image AddPinFromRefPoint(Point position, MapPinModel.PinType type, List places = null) { return this.AddPinFromRefPoint(position.X, position.Y, type, places); } @@ -179,7 +179,7 @@ namespace CampusAppWP8.Model.Campusmap /// The type. /// (Optional) list of places. /// image of the pin. - public Image AddPin(Point position, MapPinModel.PinType type, List places = null) + public Image AddPin(Point position, MapPinModel.PinType type, List places = null) { Image pinImg = new Image(); MapPinModel pin = this.CreatePin(type, places, pinImg); @@ -243,9 +243,9 @@ namespace CampusAppWP8.Model.Campusmap /// Loads the spatial object /// Stubbfel, 19.08.2013. /// list of places. - protected virtual void LoadSpatials(List placeList) + protected virtual void LoadSpatials(List placeList) { - this.Spatial = new SpsModel(); + this.Spatial = new SpsWp8Model(); this.Spatial.AddPlaces(placeList); } @@ -259,7 +259,7 @@ namespace CampusAppWP8.Model.Campusmap /// list of places. /// image of the pin. /// The new pin. - private MapPinModel CreatePin(MapPinModel.PinType type, List places, Image pinImg) + private MapPinModel CreatePin(MapPinModel.PinType type, List places, Image pinImg) { MapPinModel pin; switch (type) diff --git a/CampusAppWP8/CampusAppWP8/Model/GeoDb/CampusBuildingLayerWp8Model.cs b/CampusAppWP8/CampusAppWP8/Model/GeoDb/CampusBuildingLayerWp8Model.cs new file mode 100644 index 00000000..94a5b0c3 --- /dev/null +++ b/CampusAppWP8/CampusAppWP8/Model/GeoDb/CampusBuildingLayerWp8Model.cs @@ -0,0 +1,18 @@ +//----------------------------------------------------------------------- +// +// The MIT License (MIT). Copyright (c) 2013 BTU/IIT. +// +// Stubbfel +// 15.10.2013 +// Implements the campus building layer model class +//----------------------------------------------------------------------- +namespace CampusAppWP8.Model.GeoDb +{ + + + /// Class is model for buildings of a campus. + /// Stubbfel, 15.10.2013. + public class CampusBuildingLayerWp8Model : CampusAppWPortalLib8.Model.GeoDb.CampusBuildingLayerModel + { + } +} diff --git a/CampusAppWP8/CampusAppWP8/Model/GeoDb/CampusBuildingWp8Model.cs b/CampusAppWP8/CampusAppWP8/Model/GeoDb/CampusBuildingWp8Model.cs new file mode 100644 index 00000000..6595b52c --- /dev/null +++ b/CampusAppWP8/CampusAppWP8/Model/GeoDb/CampusBuildingWp8Model.cs @@ -0,0 +1,22 @@ +//----------------------------------------------------------------------- +// +// The MIT License (MIT). Copyright (c) 2013 BTU/IIT. +// +// Stubbfel +// 15.10.2013 +// Implements the campus building model class +//----------------------------------------------------------------------- +namespace CampusAppWP8.Model.GeoDb +{ + using System.Collections.Generic; + + /// Class is model for buildings of a campus. + /// Stubbfel, 15.10.2013. + public class CampusBuildingWp8Model : CampusAppWPortalLib8.Model.GeoDb.CampusBuildingModel + { + public CampusBuildingWp8Model(string buildingId, List places) + : base(buildingId, places) + { + } + } +} diff --git a/CampusAppWP8/CampusAppWP8/Model/GeoDb/PlaceWp8Model.cs b/CampusAppWP8/CampusAppWP8/Model/GeoDb/PlaceWp8Model.cs new file mode 100644 index 00000000..3d3af099 --- /dev/null +++ b/CampusAppWP8/CampusAppWP8/Model/GeoDb/PlaceWp8Model.cs @@ -0,0 +1,65 @@ +//----------------------------------------------------------------------- +// +// The MIT License (MIT). Copyright (c) 2013 BTU/IIT. +// +// Stubbfel +// 15.10.2013 +// Implements the place model class +//----------------------------------------------------------------------- +namespace CampusAppWP8.Model.GeoDb +{ + using System; + using System.Collections.Generic; + using System.Collections.ObjectModel; + using System.Device.Location; + using System.Globalization; + using System.Text.RegularExpressions; + using System.Xml.Serialization; + using CampusAppWP8.Resources; + using CampusAppWPortalLib8.Utility; + using CampusAppWPortalLib8.Model.GeoDb; + + /// Model for a place of the SPSService. + /// Stubbfel, 15.10.2013. + /// + public class PlaceWp8Model : CampusAppWPortalLib8.Model.GeoDb.PlaceModel + { + #region Property + + /// Gets the geo reference point. + /// The geo reference point. + public GeoCoordinate GeoRefPoint + { + get + { + string refstring = this.RefPoint; + Regex rx = new Regex(Constants.Regex_Coordinate); + MatchCollection matches = rx.Matches(refstring); + if (matches.Count != 1) + { + return null; + } + + string[] values = matches[0].ToString().Split(' '); + + if (values.Length != 2) + { + return null; + } + + // create the GeoCoordirate + try + { + return new GeoCoordinate(double.Parse(values[1], CultureInfo.InvariantCulture), double.Parse(values[0], CultureInfo.InvariantCulture)); + } + catch (Exception ex) + { + Logger.LogException(ex); + return null; + } + } + } + + #endregion + } +} diff --git a/CampusAppWP8/CampusAppWP8/Pages/Campusmap/CampusMapPage.xaml.cs b/CampusAppWP8/CampusAppWP8/Pages/Campusmap/CampusMapPage.xaml.cs index f8e25a50..fce5730c 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/Campusmap/CampusMapPage.xaml.cs +++ b/CampusAppWP8/CampusAppWP8/Pages/Campusmap/CampusMapPage.xaml.cs @@ -138,7 +138,7 @@ namespace CampusAppWP8.Pages.Campusmap scroll = false; if (Utilities.IsRoomId(alias)) { - PlaceModel place = this.file.Model.GetPlaceById(alias); + PlaceWp8Model place = this.file.Model.GetPlaceById(alias); if (place != null) { this.GoToRoomList(place.ParentId, place.PlaceId); @@ -159,7 +159,7 @@ namespace CampusAppWP8.Pages.Campusmap App.SaveToIsolatedStorage(Constants.CampusMapApp_QRCodeSearchResultStorageKey, null); string searchPid = Wp8StringManager.FilterPlaceIdinQRResultString(qrcodeResult); - PlaceModel place = this.file.Model.GetPlaceById(searchPid); + PlaceWp8Model place = this.file.Model.GetPlaceById(searchPid); if (searchPid != null) { @@ -431,9 +431,9 @@ namespace CampusAppWP8.Pages.Campusmap return; } - List placeList = new List(); - PlaceModel tmpPlace; - SpsModel spatial; + List placeList = new List(); + PlaceWp8Model tmpPlace; + SpsWp8Model spatial; if (allPlaces) { spatial = this.file.Model; @@ -499,7 +499,7 @@ namespace CampusAppWP8.Pages.Campusmap // search for placeId string nfcContent = ndef.GetContent(); string searchPid = Wp8StringManager.FilterPlaceIdinNFCResultString(nfcContent.Trim()); - PlaceModel place = this.file.Model.GetPlaceById(searchPid); + PlaceWp8Model place = this.file.Model.GetPlaceById(searchPid); if (searchPid != null) { @@ -561,9 +561,9 @@ namespace CampusAppWP8.Pages.Campusmap /// (optional) if its true, search places in place file, otherwise in CampusMapModel. /// /// The found places. - private List SearchPlaces(string query, bool allPlaces = false) + private List SearchPlaces(string query, bool allPlaces = false) { - SpsModel spatial; + SpsWp8Model spatial; if (allPlaces) { spatial = this.file.Model; @@ -576,7 +576,7 @@ namespace CampusAppWP8.Pages.Campusmap // if query is an id if (Wp8StringManager.IsDigitsOnly(query)) { - return new List() { spatial.GetPlaceById(query) }; + return new List() { spatial.GetPlaceById(query) }; } if (this.informationsNames == null) @@ -595,9 +595,9 @@ namespace CampusAppWP8.Pages.Campusmap /// The places. /// The type. /// (Optional) the scroll. - private void AddPins(List places, MapPinModel.PinType type, bool scroll = true) + private void AddPins(List places, MapPinModel.PinType type, bool scroll = true) { - foreach (PlaceModel place in places) + foreach (PlaceWp8Model place in places) { if (place == null) { @@ -607,7 +607,7 @@ namespace CampusAppWP8.Pages.Campusmap GeoCoordinate coor = place.GeoRefPoint; if (coor != null) { - List assocPlaces = new List(); + List assocPlaces = new List(); assocPlaces.Add(place); this.AddPin(coor.Longitude, coor.Latitude, type, scroll, assocPlaces); } @@ -623,7 +623,7 @@ namespace CampusAppWP8.Pages.Campusmap /// /// (Optional) List of places, whose are associative with the pin. /// - private void AddPin(double x, double y, MapPinModel.PinType type, bool scroll = true, List assocPlaces = null) + private void AddPin(double x, double y, MapPinModel.PinType type, bool scroll = true, List assocPlaces = null) { Point scrollPoint = this.campusMap.GetScrollPoint(this.campusMap.ConverToPixelPoint(this.campusMap.ConverToMapPoint(x, y))); MapCanvas.Children.Add(this.campusMap.AddPinFromRefPoint(this.campusMap.ConverToPixelPoint(this.campusMap.ConverToMapPoint(x, y)), type, assocPlaces)); @@ -748,7 +748,7 @@ namespace CampusAppWP8.Pages.Campusmap /// Method show same PlaceInformation. /// Stubbfel, 15.10.2013. /// List of places. - private void ShowMapInfo(List places) + private void ShowMapInfo(List places) { if (places == null) { @@ -756,7 +756,7 @@ namespace CampusAppWP8.Pages.Campusmap } string msgText = string.Empty; - foreach (PlaceModel place in places) + foreach (PlaceWp8Model place in places) { msgText += AppResources.PlaceLabel_Name + ": "; msgText += place.GetInformationsValue(Constants.PisInformationName_Name); @@ -789,7 +789,7 @@ namespace CampusAppWP8.Pages.Campusmap MessageBoxes.ShowMainModelInfoMessageBox(msgText); - foreach (PlaceModel place in places) + foreach (PlaceWp8Model place in places) { if (place.ParentId.Equals(this.campusMap.CampusId) && this.HasRooms(place.PlaceId)) { @@ -827,7 +827,7 @@ namespace CampusAppWP8.Pages.Campusmap /// true, if the place has got rooms, otherwise false. private bool HasRooms(string placeId) { - foreach (PlaceModel place in this.file.Model.Places) + foreach (PlaceWp8Model place in this.file.Model.Places) { if (place.ParentId.Equals(placeId)) { diff --git a/CampusAppWP8/CampusAppWP8/Pages/Campusmap/RoomListPage.xaml.cs b/CampusAppWP8/CampusAppWP8/Pages/Campusmap/RoomListPage.xaml.cs index 70ca3d7b..ee51d2ad 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/Campusmap/RoomListPage.xaml.cs +++ b/CampusAppWP8/CampusAppWP8/Pages/Campusmap/RoomListPage.xaml.cs @@ -8,13 +8,6 @@ //----------------------------------------------------------------------- namespace CampusAppWP8.Pages.Campusmap { - using System.Collections.Generic; - using System.Linq; - using System.Windows; - using System.Windows.Controls; - using System.Windows.Input; - using System.Windows.Media; - using System.Windows.Navigation; using CampusAppWP8.File.Places; using CampusAppWP8.Model.Campusmap; using CampusAppWP8.Model.GeoDb; @@ -23,6 +16,13 @@ namespace CampusAppWP8.Pages.Campusmap using CampusAppWP8.Utility.Lui.MessageBoxes; using CampusAppWPortalLib8.Model.Utility; using Microsoft.Phone.Controls; + using System.Collections.Generic; + using System.Linq; + using System.Windows; + using System.Windows.Controls; + using System.Windows.Input; + using System.Windows.Media; + using System.Windows.Navigation; /// Class of the RoomListPage. /// Stubbfel, 14.10.2013. @@ -34,7 +34,7 @@ namespace CampusAppWP8.Pages.Campusmap private PlacesFile placeFile; /// Variable of building which is shown in the list. - private CampusBuildingModel building; + private CampusBuildingWp8Model building; /// Variable for the map model. private BuildingMapModel buildingMap; @@ -149,20 +149,20 @@ namespace CampusAppWP8.Pages.Campusmap this.ClearMap(new List() { MapPinModel.InfoPlacePinString }); - PlaceModel room = this.building.GetPlaceById(placeId); + PlaceWp8Model room = this.building.GetPlaceById(placeId); x = room.GeoRefPoint.Longitude; y = room.GeoRefPoint.Latitude; Point roompoint = this.buildingMap.GetScrollPoint(this.buildingMap.ConverToPixelPoint(this.buildingMap.ConverToMapPoint(x, y))); Point viewPoint = new Point(roompoint.X - this.mappoint.X + this.offsetPoint.X, roompoint.Y - this.mappoint.Y + this.offsetPoint.Y); - MapCanvas.Children.Add(this.buildingMap.AddPin(viewPoint, MapPinModel.PinType.InfoRedPlace, new List { room })); + MapCanvas.Children.Add(this.buildingMap.AddPin(viewPoint, MapPinModel.PinType.InfoRedPlace, new List { room })); } /// Shows the map information. /// Stubbfel, 14.10.2013. /// The places. - private void ShowMapInfo(List places) + private void ShowMapInfo(List places) { if (this.pinchRun) { @@ -175,7 +175,7 @@ namespace CampusAppWP8.Pages.Campusmap return; } - foreach (PlaceModel place in places) + foreach (PlaceWp8Model place in places) { msgText += AppResources.PlaceLabel_Name + ": "; msgText += place.GetInformationsValue(Constants.PisInformationName_Name); @@ -288,13 +288,13 @@ namespace CampusAppWP8.Pages.Campusmap layerKey = this.building.Layers.Keys.First(); } - CampusBuildingLayerModel layer = this.building.Layers[layerKey]; + CampusBuildingLayerWp8Model layer = this.building.Layers[layerKey]; double x; double y; this.ClearMap(new List() { MapPinModel.InfoPlacePinString }); - foreach (PlaceModel room in layer.Rooms.Places) + foreach (PlaceWp8Model room in layer.Rooms.Places) { x = room.GeoRefPoint.Longitude; y = room.GeoRefPoint.Latitude; @@ -321,7 +321,7 @@ namespace CampusAppWP8.Pages.Campusmap break; } - MapCanvas.Children.Add(this.buildingMap.AddPin(viewPoint, type, new List { room })); + MapCanvas.Children.Add(this.buildingMap.AddPin(viewPoint, type, new List { room })); } // MapCanvas.Children.Add(this.buildingMap.AddPin(offsetPoint, MapPinModel.PinType.SearchPlace)); @@ -341,7 +341,7 @@ namespace CampusAppWP8.Pages.Campusmap /// Identifier for the building. private void SetupCanvas(string buildingId) { - this.building = new CampusBuildingModel(buildingId, this.placeFile.Model.Places.ToList()); + this.building = new CampusBuildingWp8Model(buildingId, this.placeFile.Model.Places.ToList()); this.buildingMap = new BuildingMapModel(this.building.Building.PlaceId); this.buildingMap.ShowMapInfos += new CBMainMapModel.MapInfos(this.ShowMapInfo); diff --git a/CampusAppWP8/CampusAppWP8/Pages/Dev/NFC.xaml.cs b/CampusAppWP8/CampusAppWP8/Pages/Dev/NFC.xaml.cs index ca19f7d8..de581d45 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/Dev/NFC.xaml.cs +++ b/CampusAppWP8/CampusAppWP8/Pages/Dev/NFC.xaml.cs @@ -85,7 +85,7 @@ namespace CampusAppWP8.Pages.Dev this.ndefList = new List(); // MapModel map = new CBMainMapModel(this.file.Model.Places.ToList()); - foreach (PlaceModel place in this.file.Model.Places.ToList()) + foreach (PlaceWp8Model place in this.file.Model.Places.ToList()) { this.ndefList.Add(new NDEFMessage(place.ToNfcString(), NDEFMessage.TYPEVAL.TEXT)); } diff --git a/CampusAppWP8/CampusAppWP8/Pages/PlaceNews/PlaceNews.xaml.cs b/CampusAppWP8/CampusAppWP8/Pages/PlaceNews/PlaceNews.xaml.cs index 0bd1f127..5ef73703 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/PlaceNews/PlaceNews.xaml.cs +++ b/CampusAppWP8/CampusAppWP8/Pages/PlaceNews/PlaceNews.xaml.cs @@ -90,7 +90,7 @@ namespace CampusAppWP8.Pages.PlaceNews if (this.places == null) { this.places = new PlacesFile(); - this.places.Model = App.LoadFromIsolatedStorage(Constants.IsolatedStorage_AllPlaces); + this.places.Model = App.LoadFromIsolatedStorage(Constants.IsolatedStorage_AllPlaces); } if (this.qrScan) @@ -131,7 +131,7 @@ namespace CampusAppWP8.Pages.PlaceNews { if (NavigationMode.Back == e.NavigationMode) { - App.SaveToIsolatedStorage(Constants.IsolatedStorage_AllPlaces, null); + App.SaveToIsolatedStorage(Constants.IsolatedStorage_AllPlaces, null); } } @@ -199,7 +199,7 @@ namespace CampusAppWP8.Pages.PlaceNews /// Stubbfel, 09.09.2013. private void PlacesFileIsFail() { - this.places.Model = new SpsModel(); + this.places.Model = new SpsWp8Model(); if (this.spsApi == null) { this.spsApi = new SpsApi(); @@ -328,7 +328,7 @@ namespace CampusAppWP8.Pages.PlaceNews this.ResultBox.ItemsSource = this.places.Model.FilterByPid(this.searchPidList); this.ProgressBar.Visibility = Visibility.Collapsed; this.places.SaveData(); - App.SaveToIsolatedStorage(Constants.IsolatedStorage_AllPlaces, this.places.Model); + App.SaveToIsolatedStorage(Constants.IsolatedStorage_AllPlaces, this.places.Model); this.forceRequest = false; } @@ -412,7 +412,7 @@ namespace CampusAppWP8.Pages.PlaceNews return; } - PlaceModel place = this.places.Model.GetPlaceById(placeID); + PlaceWp8Model place = this.places.Model.GetPlaceById(placeID); txt.Text = place.GetInformationsValue(Constants.PisInformationName_Name); } diff --git a/CampusAppWP8/CampusAppWP8/Pages/PlaceNews/ShowPad.xaml.cs b/CampusAppWP8/CampusAppWP8/Pages/PlaceNews/ShowPad.xaml.cs index d26c4b46..0d0ce2df 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/PlaceNews/ShowPad.xaml.cs +++ b/CampusAppWP8/CampusAppWP8/Pages/PlaceNews/ShowPad.xaml.cs @@ -39,9 +39,9 @@ namespace CampusAppWP8.Pages.PlaceNews { if (NavigationContext.QueryString.ContainsKey(Constants.ParamPlaceID)) { - SpsModel model = App.LoadFromIsolatedStorage(Constants.IsolatedStorage_AllPlaces); + SpsWp8Model model = App.LoadFromIsolatedStorage(Constants.IsolatedStorage_AllPlaces); string placeId = NavigationContext.QueryString[Constants.ParamPlaceID]; - PlaceModel place = model.GetPlaceById(placeId); + PlaceWp8Model place = model.GetPlaceById(placeId); if (place != null && place.Services != null && place.Services.Count > 0 && place.Informations != null && place.Informations.Count > 0) { this.Room.Text += " - " + place.Informations[0].InformationValue; From d296fe25ea26839e47daa6960025d2bd9841b242 Mon Sep 17 00:00:00 2001 From: stubbfel Date: Mon, 21 Oct 2013 15:04:24 +0200 Subject: [PATCH 3/6] no message --- .../CampusAppWP8/Model/GeoDb/SpsWp8Model.cs | 23 ++++++ .../CampusAppWPortalLib8.csproj | 6 ++ .../Model/GeoDb/CampusBuildingLayerModel.cs | 49 +++++++---- .../Model/GeoDb/CampusBuildingModel.cs | 82 ++++++++++++------- .../Model/GeoDb/PlaceInformation.cs | 2 +- .../Model/GeoDb/PlaceModel.cs | 39 +-------- .../Model/GeoDb/PlaceService.cs | 2 +- .../Model/GeoDb/SpsModel.cs | 36 ++++---- .../Resources/Constants.resx | 3 + .../Resources/Constants1.Designer.cs | 9 ++ 10 files changed, 148 insertions(+), 103 deletions(-) create mode 100644 CampusAppWP8/CampusAppWP8/Model/GeoDb/SpsWp8Model.cs rename CampusAppWP8/{CampusAppWP8 => CampusAppWPortalLib8}/Model/GeoDb/CampusBuildingLayerModel.cs (66%) rename CampusAppWP8/{CampusAppWP8 => CampusAppWPortalLib8}/Model/GeoDb/CampusBuildingModel.cs (67%) rename CampusAppWP8/{CampusAppWP8 => CampusAppWPortalLib8}/Model/GeoDb/PlaceInformation.cs (97%) rename CampusAppWP8/{CampusAppWP8 => CampusAppWPortalLib8}/Model/GeoDb/PlaceModel.cs (85%) rename CampusAppWP8/{CampusAppWP8 => CampusAppWPortalLib8}/Model/GeoDb/PlaceService.cs (98%) rename CampusAppWP8/{CampusAppWP8 => CampusAppWPortalLib8}/Model/GeoDb/SpsModel.cs (85%) diff --git a/CampusAppWP8/CampusAppWP8/Model/GeoDb/SpsWp8Model.cs b/CampusAppWP8/CampusAppWP8/Model/GeoDb/SpsWp8Model.cs new file mode 100644 index 00000000..620e7c91 --- /dev/null +++ b/CampusAppWP8/CampusAppWP8/Model/GeoDb/SpsWp8Model.cs @@ -0,0 +1,23 @@ +//----------------------------------------------------------------------- +// +// The MIT License (MIT). Copyright (c) 2013 BTU/IIT. +// +// Stubbfel +// 15.10.2013 +// Implements the sps model class +//----------------------------------------------------------------------- +namespace CampusAppWP8.Model.GeoDb +{ + using CampusAppWPortalLib8.Model.GeoDb; + using System.Collections.Generic; + using System.Collections.ObjectModel; + using System.Linq; + using System.Xml.Serialization; + + /// Model for a xml-response of the SPSService. + /// Stubbfel, 15.10.2013. + [XmlRoot("root")] + public class SpsWp8Model : CampusAppWPortalLib8.Model.GeoDb.SpsModel + { + } +} diff --git a/CampusAppWP8/CampusAppWPortalLib8/CampusAppWPortalLib8.csproj b/CampusAppWP8/CampusAppWPortalLib8/CampusAppWPortalLib8.csproj index 166b9581..a492bf65 100644 --- a/CampusAppWP8/CampusAppWPortalLib8/CampusAppWPortalLib8.csproj +++ b/CampusAppWP8/CampusAppWPortalLib8/CampusAppWPortalLib8.csproj @@ -39,6 +39,12 @@ + + + + + + diff --git a/CampusAppWP8/CampusAppWP8/Model/GeoDb/CampusBuildingLayerModel.cs b/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/CampusBuildingLayerModel.cs similarity index 66% rename from CampusAppWP8/CampusAppWP8/Model/GeoDb/CampusBuildingLayerModel.cs rename to CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/CampusBuildingLayerModel.cs index d55db74c..78f84d22 100644 --- a/CampusAppWP8/CampusAppWP8/Model/GeoDb/CampusBuildingLayerModel.cs +++ b/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/CampusBuildingLayerModel.cs @@ -6,36 +6,31 @@ // 15.10.2013 // Implements the campus building layer model class //----------------------------------------------------------------------- -namespace CampusAppWP8.Model.GeoDb +namespace CampusAppWPortalLib8.Model.GeoDb { using System.Collections.Generic; - using CampusAppWP8.Resources; + using CampusAppWPortalLib8.Resources; /// Class is model for buildings of a campus. /// Stubbfel, 15.10.2013. - public class CampusBuildingLayerModel + public class CampusBuildingLayerModel where V : PlaceModel { #region Constructor + public CampusBuildingLayerModel() + { + } + /// /// Initializes a new instance of the class. /// /// Stubbfel, 15.10.2013. /// id of the layer. /// list of place which can be room of the layer. - public CampusBuildingLayerModel(string layerId, List places) + public CampusBuildingLayerModel(string layerId, List places) { this.LayerId = layerId; - this.Rooms = new SpsModel(); - - foreach (PlaceModel place in places) - { - string placeLayerId = place.GetInformationsValue(Constants.PisInformationName_Layer); - if (placeLayerId != null && placeLayerId.Equals(layerId)) - { - this.Rooms.Places.Add(place); - } - } + this.AddsRooms(places); } #endregion @@ -44,12 +39,36 @@ namespace CampusAppWP8.Model.GeoDb /// Gets or sets Rooms. /// The rooms. - public SpsModel Rooms { get; set; } + public SpsModel Rooms { get; set; } /// Gets or sets LayerId. /// The identifier of the layer. public string LayerId { get; set; } #endregion + + #region Method + + /// Adds rooms. + /// Stubbfel, 21.10.2013. + /// list of place which can be room of the layer. + public void AddsRooms(List places) + { + if (this.Rooms == null) + { + this.Rooms = new SpsModel(); + } + + foreach (V place in places) + { + string placeLayerId = place.GetInformationsValue(Constants.PisInformationName_Layer); + if (placeLayerId != null && placeLayerId.Equals(this.LayerId)) + { + this.Rooms.Places.Add(place); + } + } + } + + #endregion } } diff --git a/CampusAppWP8/CampusAppWP8/Model/GeoDb/CampusBuildingModel.cs b/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/CampusBuildingModel.cs similarity index 67% rename from CampusAppWP8/CampusAppWP8/Model/GeoDb/CampusBuildingModel.cs rename to CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/CampusBuildingModel.cs index 05da5f80..1f1381da 100644 --- a/CampusAppWP8/CampusAppWP8/Model/GeoDb/CampusBuildingModel.cs +++ b/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/CampusBuildingModel.cs @@ -6,30 +6,64 @@ // 15.10.2013 // Implements the campus building model class //----------------------------------------------------------------------- -namespace CampusAppWP8.Model.GeoDb +namespace CampusAppWPortalLib8.Model.GeoDb { using System.Collections.Generic; - using CampusAppWP8.Resources; + using CampusAppWPortalLib8.Resources; /// Class is model for buildings of a campus. /// Stubbfel, 15.10.2013. - public class CampusBuildingModel + public class CampusBuildingModel + where V : PlaceModel + where T : CampusBuildingLayerModel, new() { #region constructor + public CampusBuildingModel() + { + } + /// /// Initializes a new instance of the class. /// /// Stubbfel, 15.10.2013. /// id of the building. /// list of place which can be room of the buildings. - public CampusBuildingModel(string buildingId, List places) + public CampusBuildingModel(string buildingId, List places) { - this.Layers = new Dictionary(); + this.BuildingId = buildingId; - foreach (PlaceModel place in places) + this.AddLayers(places); + } + + #endregion + + #region Property + + /// Gets the Layer of the building. + /// The layers. + public Dictionary Layers { get; private set; } + + /// Gets or sets the Building V. + /// The building. + public V Building { get; set; } + + public string BuildingId { get; set; } + + #endregion + + #region method + + public void AddLayers(List places) + { + if (this.Layers == null) { - if (place.ParentId.Equals(buildingId)) + this.Layers = new Dictionary(); + } + + foreach (V place in places) + { + if (place.ParentId.Equals(this.BuildingId)) { string placeLayerId = place.GetInformationsValue(Constants.PisInformationName_Layer); if (placeLayerId == null) @@ -43,40 +77,26 @@ namespace CampusAppWP8.Model.GeoDb } else { - this.Layers.Add(placeLayerId, new CampusBuildingLayerModel(placeLayerId, new List() { place })); + T layer = new T() { LayerId = placeLayerId }; + layer.AddsRooms(new List { place }); + this.Layers.Add(placeLayerId, layer); } } - else if (place.PlaceId.Equals(buildingId)) + else if (place.PlaceId.Equals(this.BuildingId)) { this.Building = place; } } } - #endregion - - #region Property - - /// Gets the Layer of the building. - /// The layers. - public Dictionary Layers { get; private set; } - - /// Gets or sets the Building PlaceModel. - /// The building. - public PlaceModel Building { get; set; } - - #endregion - - #region method - /// Method gets a place by their placeID. /// Stubbfel, 15.10.2013. /// the placeId of the place. /// The place by identifier. - public PlaceModel GetPlaceById(string placeID) + public V GetPlaceById(string placeID) { - PlaceModel result = null; - foreach (CampusBuildingLayerModel layer in this.Layers.Values) + V result = null; + foreach (T layer in this.Layers.Values) { result = layer.Rooms.GetPlaceById(placeID); if (result != null) @@ -94,13 +114,13 @@ namespace CampusAppWP8.Model.GeoDb /// The layer key. public string GetLayerKey(string placeId) { - PlaceModel tmpPlace = null; - foreach (CampusBuildingLayerModel layer in this.Layers.Values) + V tmpPlace = null; + foreach (T layer in this.Layers.Values) { tmpPlace = layer.Rooms.GetPlaceById(placeId); if (tmpPlace != null) { - + return layer.LayerId; } } diff --git a/CampusAppWP8/CampusAppWP8/Model/GeoDb/PlaceInformation.cs b/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/PlaceInformation.cs similarity index 97% rename from CampusAppWP8/CampusAppWP8/Model/GeoDb/PlaceInformation.cs rename to CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/PlaceInformation.cs index 4882a456..e6d67498 100644 --- a/CampusAppWP8/CampusAppWP8/Model/GeoDb/PlaceInformation.cs +++ b/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/PlaceInformation.cs @@ -6,7 +6,7 @@ // 15.10.2013 // Implements the place information class //----------------------------------------------------------------------- -namespace CampusAppWP8.Model.GeoDb +namespace CampusAppWPortalLib8.Model.GeoDb { using System; using System.Xml.Serialization; diff --git a/CampusAppWP8/CampusAppWP8/Model/GeoDb/PlaceModel.cs b/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/PlaceModel.cs similarity index 85% rename from CampusAppWP8/CampusAppWP8/Model/GeoDb/PlaceModel.cs rename to CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/PlaceModel.cs index f6b29595..cdde8539 100644 --- a/CampusAppWP8/CampusAppWP8/Model/GeoDb/PlaceModel.cs +++ b/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/PlaceModel.cs @@ -6,16 +6,15 @@ // 15.10.2013 // Implements the place model class //----------------------------------------------------------------------- -namespace CampusAppWP8.Model.GeoDb +namespace CampusAppWPortalLib8.Model.GeoDb { using System; using System.Collections.Generic; using System.Collections.ObjectModel; - using System.Device.Location; using System.Globalization; using System.Text.RegularExpressions; using System.Xml.Serialization; - using CampusAppWP8.Resources; + using CampusAppWPortalLib8.Resources; using CampusAppWPortalLib8.Utility; /// Model for a place of the SPSService. @@ -40,40 +39,6 @@ namespace CampusAppWP8.Model.GeoDb [XmlAttribute("refpoint")] public string RefPoint { get; set; } - /// Gets the geo reference point. - /// The geo reference point. - public GeoCoordinate GeoRefPoint - { - get - { - string refstring = this.RefPoint; - Regex rx = new Regex(Constants.Regex_Coordinate); - MatchCollection matches = rx.Matches(refstring); - if (matches.Count != 1) - { - return null; - } - - string[] values = matches[0].ToString().Split(' '); - - if (values.Length != 2) - { - return null; - } - - // create the GeoCoordirate - try - { - return new GeoCoordinate(double.Parse(values[1], CultureInfo.InvariantCulture), double.Parse(values[0], CultureInfo.InvariantCulture)); - } - catch (Exception ex) - { - Logger.LogException(ex); - return null; - } - } - } - /// Gets or sets the information. /// The information. [XmlElement("placeInformation")] diff --git a/CampusAppWP8/CampusAppWP8/Model/GeoDb/PlaceService.cs b/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/PlaceService.cs similarity index 98% rename from CampusAppWP8/CampusAppWP8/Model/GeoDb/PlaceService.cs rename to CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/PlaceService.cs index a4d00deb..9fb5fc4f 100644 --- a/CampusAppWP8/CampusAppWP8/Model/GeoDb/PlaceService.cs +++ b/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/PlaceService.cs @@ -6,7 +6,7 @@ // 15.10.2013 // Implements the place service class //----------------------------------------------------------------------- -namespace CampusAppWP8.Model.GeoDb +namespace CampusAppWPortalLib8.Model.GeoDb { using System; using System.Xml.Serialization; diff --git a/CampusAppWP8/CampusAppWP8/Model/GeoDb/SpsModel.cs b/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/SpsModel.cs similarity index 85% rename from CampusAppWP8/CampusAppWP8/Model/GeoDb/SpsModel.cs rename to CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/SpsModel.cs index 00219adc..c30d03b2 100644 --- a/CampusAppWP8/CampusAppWP8/Model/GeoDb/SpsModel.cs +++ b/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/SpsModel.cs @@ -6,7 +6,7 @@ // 15.10.2013 // Implements the sps model class //----------------------------------------------------------------------- -namespace CampusAppWP8.Model.GeoDb +namespace CampusAppWPortalLib8.Model.GeoDb { using System.Collections.Generic; using System.Collections.ObjectModel; @@ -16,7 +16,7 @@ namespace CampusAppWP8.Model.GeoDb /// Model for a xml-response of the SPSService. /// Stubbfel, 15.10.2013. [XmlRoot("root")] - public class SpsModel + public class SpsModel where T : PlaceModel { #region Constructor @@ -25,7 +25,7 @@ namespace CampusAppWP8.Model.GeoDb public SpsModel() { this.HasChanged = false; - this.Places = new ObservableCollection(); + this.Places = new ObservableCollection(); } #endregion @@ -35,7 +35,7 @@ namespace CampusAppWP8.Model.GeoDb /// Gets or sets a list of places. /// The places. [XmlElement("place")] - public ObservableCollection Places { get; set; } + public ObservableCollection Places { get; set; } /// Gets or sets a value indicating whether this object has changed. /// true if this object has changed, false if not. @@ -53,12 +53,12 @@ namespace CampusAppWP8.Model.GeoDb /// (Optional) the ignore cases. /// (Optional) name of the information. /// The places by information. - public List GetPlacesByInformation(string query, bool ignoreCases = true, List informationNames = null) + public List GetPlacesByInformation(string query, bool ignoreCases = true, List informationNames = null) { string querryStr = string.Empty; - List resultplaces = new List(); + List resultplaces = new List(); - foreach (PlaceModel place in this.Places) + foreach (T place in this.Places) { if (this.IsPlaceQueryMatched(place, query, ignoreCases, informationNames)) { @@ -72,9 +72,9 @@ namespace CampusAppWP8.Model.GeoDb /// Adds the places. /// Stubbfel, 09.09.2013. /// A list of places. - public void AddPlaces(List places) + public void AddPlaces(List places) { - foreach (PlaceModel place in places) + foreach (T place in places) { if (this.Places.Contains(place)) { @@ -97,7 +97,7 @@ namespace CampusAppWP8.Model.GeoDb public List CreatePidList() { List pidList = new List(); - foreach (PlaceModel place in this.Places) + foreach (T place in this.Places) { pidList.Add(place.PlaceId); } @@ -109,9 +109,9 @@ namespace CampusAppWP8.Model.GeoDb /// Stubbfel, 09.09.2013. /// The identifier. /// The place by identifier. - public PlaceModel GetPlaceById(string id) + public T GetPlaceById(string id) { - foreach (PlaceModel place in this.Places) + foreach (T place in this.Places) { if (place.PlaceId.Equals(id)) { @@ -131,7 +131,7 @@ namespace CampusAppWP8.Model.GeoDb { foreach (string pid in pidList) { - PlaceModel place = this.GetPlaceById(pid); + T place = this.GetPlaceById(pid); if (!place.ContainsInformationNames(names)) { return false; @@ -150,7 +150,7 @@ namespace CampusAppWP8.Model.GeoDb { foreach (string pid in pidList) { - PlaceModel place = this.GetPlaceById(pid); + T place = this.GetPlaceById(pid); if (!place.ContainsServiceNames(names)) { return false; @@ -164,16 +164,16 @@ namespace CampusAppWP8.Model.GeoDb /// Stubbfel, 11.09.2013. /// List of pids. /// filtered list of places. - public List FilterByPid(List pidList) + public List FilterByPid(List pidList) { - List fitlerList = new List(); + List fitlerList = new List(); if (pidList == null || pidList.Count < 1) { return fitlerList; } - foreach (PlaceModel place in this.Places) + foreach (T place in this.Places) { if (pidList.Contains(place.PlaceId)) { @@ -195,7 +195,7 @@ namespace CampusAppWP8.Model.GeoDb /// (Optional) the ignore cases. /// (Optional) name of the information. /// true if it match otherwise false. - private bool IsPlaceQueryMatched(PlaceModel place, string query, bool ignoreCases = true, List informationNames = null) + private bool IsPlaceQueryMatched(T place, string query, bool ignoreCases = true, List informationNames = null) { string queryString = query; if (ignoreCases) diff --git a/CampusAppWP8/CampusAppWPortalLib8/Resources/Constants.resx b/CampusAppWP8/CampusAppWPortalLib8/Resources/Constants.resx index 80453741..76f77d12 100644 --- a/CampusAppWP8/CampusAppWPortalLib8/Resources/Constants.resx +++ b/CampusAppWP8/CampusAppWPortalLib8/Resources/Constants.resx @@ -129,6 +129,9 @@ /Pages/News/NewsIndexPage.xaml + + Ebene + 035569 diff --git a/CampusAppWP8/CampusAppWPortalLib8/Resources/Constants1.Designer.cs b/CampusAppWP8/CampusAppWPortalLib8/Resources/Constants1.Designer.cs index f9f35440..440ee001 100644 --- a/CampusAppWP8/CampusAppWPortalLib8/Resources/Constants1.Designer.cs +++ b/CampusAppWP8/CampusAppWPortalLib8/Resources/Constants1.Designer.cs @@ -97,6 +97,15 @@ namespace CampusAppWPortalLib8.Resources { } } + /// + /// Sucht eine lokalisierte Zeichenfolge, die Ebene ähnelt. + /// + public static string PisInformationName_Layer { + get { + return ResourceManager.GetString("PisInformationName_Layer", resourceCulture); + } + } + /// /// Sucht eine lokalisierte Zeichenfolge, die 035569 ähnelt. /// From dcff024136d8133efa9e0f9f694fa6770e51b345 Mon Sep 17 00:00:00 2001 From: stubbfel Date: Mon, 21 Oct 2013 15:14:18 +0200 Subject: [PATCH 4/6] fix docs --- .../GeoDb/CampusBuildingLayerWp8Model.cs | 13 +++++----- .../Model/GeoDb/CampusBuildingWp8Model.cs | 13 ++++++---- .../CampusAppWP8/Model/GeoDb/PlaceWp8Model.cs | 11 ++++----- .../CampusAppWP8/Model/GeoDb/SpsWp8Model.cs | 15 +++++------- .../Pages/Campusmap/CampusMapPage.xaml.cs | 24 +++++++++---------- .../Pages/Campusmap/RoomListPage.xaml.cs | 14 +++++------ .../Model/GeoDb/CampusBuildingLayerModel.cs | 15 ++++++------ .../Model/GeoDb/CampusBuildingModel.cs | 18 +++++++++----- .../Model/GeoDb/PlaceModel.cs | 4 ---- .../Model/GeoDb/SpsModel.cs | 1 + 10 files changed, 65 insertions(+), 63 deletions(-) diff --git a/CampusAppWP8/CampusAppWP8/Model/GeoDb/CampusBuildingLayerWp8Model.cs b/CampusAppWP8/CampusAppWP8/Model/GeoDb/CampusBuildingLayerWp8Model.cs index 94a5b0c3..531574a1 100644 --- a/CampusAppWP8/CampusAppWP8/Model/GeoDb/CampusBuildingLayerWp8Model.cs +++ b/CampusAppWP8/CampusAppWP8/Model/GeoDb/CampusBuildingLayerWp8Model.cs @@ -1,17 +1,16 @@ //----------------------------------------------------------------------- -// +// // The MIT License (MIT). Copyright (c) 2013 BTU/IIT. // // Stubbfel -// 15.10.2013 -// Implements the campus building layer model class +// 21.10.2013 +// Implements the campus building layer wp 8 model class //----------------------------------------------------------------------- namespace CampusAppWP8.Model.GeoDb { - - - /// Class is model for buildings of a campus. - /// Stubbfel, 15.10.2013. + /// A data Model for the campus building layer wp 8. + /// Stubbfel, 21.10.2013. + /// public class CampusBuildingLayerWp8Model : CampusAppWPortalLib8.Model.GeoDb.CampusBuildingLayerModel { } diff --git a/CampusAppWP8/CampusAppWP8/Model/GeoDb/CampusBuildingWp8Model.cs b/CampusAppWP8/CampusAppWP8/Model/GeoDb/CampusBuildingWp8Model.cs index 6595b52c..6ba4909f 100644 --- a/CampusAppWP8/CampusAppWP8/Model/GeoDb/CampusBuildingWp8Model.cs +++ b/CampusAppWP8/CampusAppWP8/Model/GeoDb/CampusBuildingWp8Model.cs @@ -1,19 +1,24 @@ //----------------------------------------------------------------------- -// +// // The MIT License (MIT). Copyright (c) 2013 BTU/IIT. // // Stubbfel -// 15.10.2013 +// 21.10.2013 // Implements the campus building model class //----------------------------------------------------------------------- namespace CampusAppWP8.Model.GeoDb { using System.Collections.Generic; - /// Class is model for buildings of a campus. - /// Stubbfel, 15.10.2013. + /// A data Model for the campus building. + /// Stubbfel, 21.10.2013. + /// public class CampusBuildingWp8Model : CampusAppWPortalLib8.Model.GeoDb.CampusBuildingModel { + /// Initializes a new instance of the CampusBuildingWp8Model class. + /// Stubbfel, 21.10.2013. + /// Identifier for the building. + /// The places. public CampusBuildingWp8Model(string buildingId, List places) : base(buildingId, places) { diff --git a/CampusAppWP8/CampusAppWP8/Model/GeoDb/PlaceWp8Model.cs b/CampusAppWP8/CampusAppWP8/Model/GeoDb/PlaceWp8Model.cs index 3d3af099..92113a00 100644 --- a/CampusAppWP8/CampusAppWP8/Model/GeoDb/PlaceWp8Model.cs +++ b/CampusAppWP8/CampusAppWP8/Model/GeoDb/PlaceWp8Model.cs @@ -1,26 +1,23 @@ //----------------------------------------------------------------------- -// +// // The MIT License (MIT). Copyright (c) 2013 BTU/IIT. // // Stubbfel -// 15.10.2013 -// Implements the place model class +// 21.10.2013 +// Implements the place wp 8 model class //----------------------------------------------------------------------- namespace CampusAppWP8.Model.GeoDb { using System; - using System.Collections.Generic; - using System.Collections.ObjectModel; using System.Device.Location; using System.Globalization; using System.Text.RegularExpressions; - using System.Xml.Serialization; using CampusAppWP8.Resources; using CampusAppWPortalLib8.Utility; - using CampusAppWPortalLib8.Model.GeoDb; /// Model for a place of the SPSService. /// Stubbfel, 15.10.2013. + /// /// public class PlaceWp8Model : CampusAppWPortalLib8.Model.GeoDb.PlaceModel { diff --git a/CampusAppWP8/CampusAppWP8/Model/GeoDb/SpsWp8Model.cs b/CampusAppWP8/CampusAppWP8/Model/GeoDb/SpsWp8Model.cs index 620e7c91..3ef6895c 100644 --- a/CampusAppWP8/CampusAppWP8/Model/GeoDb/SpsWp8Model.cs +++ b/CampusAppWP8/CampusAppWP8/Model/GeoDb/SpsWp8Model.cs @@ -1,21 +1,18 @@ //----------------------------------------------------------------------- -// +// // The MIT License (MIT). Copyright (c) 2013 BTU/IIT. // // Stubbfel -// 15.10.2013 -// Implements the sps model class +// 21.10.2013 +// Implements the sps wp 8 model class //----------------------------------------------------------------------- namespace CampusAppWP8.Model.GeoDb { - using CampusAppWPortalLib8.Model.GeoDb; - using System.Collections.Generic; - using System.Collections.ObjectModel; - using System.Linq; using System.Xml.Serialization; - /// Model for a xml-response of the SPSService. - /// Stubbfel, 15.10.2013. + /// A data Model for the sps wp 8. + /// Stubbfel, 21.10.2013. + /// [XmlRoot("root")] public class SpsWp8Model : CampusAppWPortalLib8.Model.GeoDb.SpsModel { diff --git a/CampusAppWP8/CampusAppWP8/Pages/Campusmap/CampusMapPage.xaml.cs b/CampusAppWP8/CampusAppWP8/Pages/Campusmap/CampusMapPage.xaml.cs index fce5730c..92281c60 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/Campusmap/CampusMapPage.xaml.cs +++ b/CampusAppWP8/CampusAppWP8/Pages/Campusmap/CampusMapPage.xaml.cs @@ -19,7 +19,6 @@ namespace CampusAppWP8.Pages.Campusmap using System.Windows.Controls; using System.Windows.Input; using System.Windows.Navigation; - using Windows.Networking.Proximity; using CampusAppWP8.File.Places; using CampusAppWP8.Model.Campusmap; using CampusAppWP8.Model.GeoDb; @@ -29,6 +28,7 @@ namespace CampusAppWP8.Pages.Campusmap using CampusAppWP8.Utility.NDEF; using Microsoft.Phone.Controls; using Microsoft.Phone.Shell; + using Windows.Networking.Proximity; /// Class for the campusMap page. /// Stubbfel, 19.08.2013. @@ -163,8 +163,7 @@ namespace CampusAppWP8.Pages.Campusmap if (searchPid != null) { - - //this.ShowAllPlacesByPlaceIdAsSearchPin(searchPid); + // this.ShowAllPlacesByPlaceIdAsSearchPin(searchPid); if (place.ParentId.Equals(this.campusMap.CampusId) || place.PlaceId.Equals(this.campusMap.CampusId)) { this.ShowAllPlacesByPlaceIdAsSearchPin(searchPid); @@ -176,7 +175,7 @@ namespace CampusAppWP8.Pages.Campusmap } } - ndefId = this.device.SubscribeForMessage(Constants.NCFMessageType_NDEF, this.NDEFHandler); + this.ndefId = this.device.SubscribeForMessage(Constants.NCFMessageType_NDEF, this.NDEFHandler); } /// Methods overrides the OnNavigatedFrom-Method. @@ -184,12 +183,11 @@ namespace CampusAppWP8.Pages.Campusmap /// protected override void OnNavigatedFrom(NavigationEventArgs e) { - this.device.StopSubscribingForMessage(ndefId); + this.device.StopSubscribingForMessage(this.ndefId); base.OnNavigatedFrom(e); } - #endregion #region private @@ -466,6 +464,7 @@ namespace CampusAppWP8.Pages.Campusmap private void SearchPlaceByNFC_Click(object sender, EventArgs e) { MessageBoxes.ShowMainModelInfoMessageBox(AppResources.ScarNfc_Search); + // this.DefHeader.ProgressVisibility = Visibility.Visible; // this.device.StopSubscribingForMessage(this.ndefId); // this.ndefId = this.device.SubscribeForMessage(Constants.NCFMessageType_NDEF, this.NDEFHandler); @@ -517,7 +516,7 @@ namespace CampusAppWP8.Pages.Campusmap } else { - //this.ShowAllPlacesByPlaceIdAsSearchPin(searchPid); + // this.ShowAllPlacesByPlaceIdAsSearchPin(searchPid); if (place.ParentId.Equals(this.campusMap.CampusId)) { this.ShowAllPlacesByPlaceIdAsSearchPin(searchPid); @@ -549,9 +548,8 @@ namespace CampusAppWP8.Pages.Campusmap { this.DefHeader.ProgressVisibility = Visibility.Collapsed; } - ndefId = this.device.SubscribeForMessage(Constants.NCFMessageType_NDEF, this.NDEFHandler); - - + + this.ndefId = this.device.SubscribeForMessage(Constants.NCFMessageType_NDEF, this.NDEFHandler); } /// Searches for the first places. @@ -648,6 +646,7 @@ namespace CampusAppWP8.Pages.Campusmap { scrollPoint.Y = 0; } + MapScroller.ScrollToVerticalOffset(scrollPoint.Y); MapScroller.ScrollToHorizontalOffset(scrollPoint.X); } @@ -817,6 +816,7 @@ namespace CampusAppWP8.Pages.Campusmap { urlString += "&" + Constants.ParamRoomId + "=" + roomId; } + Uri url = new Uri(urlString as string, UriKind.Relative); this.NavigationService.Navigate(url); } @@ -848,9 +848,9 @@ namespace CampusAppWP8.Pages.Campusmap { this.SearchByText(sender, e); this.MapScroller.Focus(); - } - + } } + #endregion #endregion diff --git a/CampusAppWP8/CampusAppWP8/Pages/Campusmap/RoomListPage.xaml.cs b/CampusAppWP8/CampusAppWP8/Pages/Campusmap/RoomListPage.xaml.cs index ee51d2ad..a6e3446f 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/Campusmap/RoomListPage.xaml.cs +++ b/CampusAppWP8/CampusAppWP8/Pages/Campusmap/RoomListPage.xaml.cs @@ -8,6 +8,13 @@ //----------------------------------------------------------------------- namespace CampusAppWP8.Pages.Campusmap { + using System.Collections.Generic; + using System.Linq; + using System.Windows; + using System.Windows.Controls; + using System.Windows.Input; + using System.Windows.Media; + using System.Windows.Navigation; using CampusAppWP8.File.Places; using CampusAppWP8.Model.Campusmap; using CampusAppWP8.Model.GeoDb; @@ -16,13 +23,6 @@ namespace CampusAppWP8.Pages.Campusmap using CampusAppWP8.Utility.Lui.MessageBoxes; using CampusAppWPortalLib8.Model.Utility; using Microsoft.Phone.Controls; - using System.Collections.Generic; - using System.Linq; - using System.Windows; - using System.Windows.Controls; - using System.Windows.Input; - using System.Windows.Media; - using System.Windows.Navigation; /// Class of the RoomListPage. /// Stubbfel, 14.10.2013. diff --git a/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/CampusBuildingLayerModel.cs b/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/CampusBuildingLayerModel.cs index 78f84d22..de69584a 100644 --- a/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/CampusBuildingLayerModel.cs +++ b/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/CampusBuildingLayerModel.cs @@ -11,21 +11,22 @@ namespace CampusAppWPortalLib8.Model.GeoDb using System.Collections.Generic; using CampusAppWPortalLib8.Resources; - /// Class is model for buildings of a campus. - /// Stubbfel, 15.10.2013. + /// A data Model for the campus building layer. + /// Stubbfel, 21.10.2013. + /// Generic type parameter. PlaceModel public class CampusBuildingLayerModel where V : PlaceModel { #region Constructor + /// Initializes a new instance of the CampusBuildingLayerModel class. + /// Stubbfel, 21.10.2013. public CampusBuildingLayerModel() { } - /// - /// Initializes a new instance of the class. - /// - /// Stubbfel, 15.10.2013. - /// id of the layer. + /// Initializes a new instance of the CampusBuildingLayerModel class. + /// Stubbfel, 21.10.2013. + /// The identifier of the layer. /// list of place which can be room of the layer. public CampusBuildingLayerModel(string layerId, List places) { diff --git a/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/CampusBuildingModel.cs b/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/CampusBuildingModel.cs index 1f1381da..44903867 100644 --- a/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/CampusBuildingModel.cs +++ b/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/CampusBuildingModel.cs @@ -13,21 +13,23 @@ namespace CampusAppWPortalLib8.Model.GeoDb /// Class is model for buildings of a campus. /// Stubbfel, 15.10.2013. + /// Generic type parameter. CampusBuildingLayerModel + /// Generic type parameter. PlaceModel public class CampusBuildingModel where V : PlaceModel where T : CampusBuildingLayerModel, new() { #region constructor + /// Initializes a new instance of the CampusBuildingModel class. + /// Stubbfel, 21.10.2013. public CampusBuildingModel() { } - /// - /// Initializes a new instance of the class. - /// - /// Stubbfel, 15.10.2013. - /// id of the building. + /// Initializes a new instance of the CampusBuildingModel class. + /// Stubbfel, 21.10.2013. + /// The identifier of the building. /// list of place which can be room of the buildings. public CampusBuildingModel(string buildingId, List places) { @@ -48,12 +50,17 @@ namespace CampusAppWPortalLib8.Model.GeoDb /// The building. public V Building { get; set; } + /// Gets or sets the identifier of the building. + /// The identifier of the building. public string BuildingId { get; set; } #endregion #region method + /// Adds the layers. + /// Stubbfel, 21.10.2013. + /// list of place which can be room of the buildings. public void AddLayers(List places) { if (this.Layers == null) @@ -120,7 +127,6 @@ namespace CampusAppWPortalLib8.Model.GeoDb tmpPlace = layer.Rooms.GetPlaceById(placeId); if (tmpPlace != null) { - return layer.LayerId; } } diff --git a/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/PlaceModel.cs b/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/PlaceModel.cs index cdde8539..a93a2737 100644 --- a/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/PlaceModel.cs +++ b/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/PlaceModel.cs @@ -11,11 +11,7 @@ namespace CampusAppWPortalLib8.Model.GeoDb using System; using System.Collections.Generic; using System.Collections.ObjectModel; - using System.Globalization; - using System.Text.RegularExpressions; using System.Xml.Serialization; - using CampusAppWPortalLib8.Resources; - using CampusAppWPortalLib8.Utility; /// Model for a place of the SPSService. /// Stubbfel, 15.10.2013. diff --git a/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/SpsModel.cs b/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/SpsModel.cs index c30d03b2..c10a4bb9 100644 --- a/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/SpsModel.cs +++ b/CampusAppWP8/CampusAppWPortalLib8/Model/GeoDb/SpsModel.cs @@ -15,6 +15,7 @@ namespace CampusAppWPortalLib8.Model.GeoDb /// Model for a xml-response of the SPSService. /// Stubbfel, 15.10.2013. + /// Generic type parameter. [XmlRoot("root")] public class SpsModel where T : PlaceModel { From e38f1134439cc3a903ed3f9c2a2768f3e41c225c Mon Sep 17 00:00:00 2001 From: Christian Fiedler Date: Mon, 21 Oct 2013 18:41:21 +0200 Subject: [PATCH 5/6] #262 --- .../CampusAppWP8/Pages/Events/EventPage.xaml | 5 +-- .../Pages/Events/EventPage.xaml.cs | 7 +--- .../CampusAppWP8/Pages/Exams/Exams.xaml | 5 +-- .../CampusAppWP8/Pages/Exams/Exams.xaml.cs | 24 +------------ .../CampusAppWP8/Pages/Links/LinkPage.xaml | 6 ++-- .../CampusAppWP8/Pages/Links/LinkPage.xaml.cs | 23 +----------- .../CampusAppWP8/Pages/Mensa/MensaPage.xaml | 6 ++-- .../Pages/Mensa/MensaPage.xaml.cs | 23 +----------- .../Pages/News/NewsIndexPage.xaml | 5 +-- .../Pages/News/NewsIndexPage.xaml.cs | 36 +------------------ .../CampusAppWP8/Pages/News/NewsPage.xaml | 5 +-- .../CampusAppWP8/Pages/News/NewsPage.xaml.cs | 25 +------------ .../Pages/Openinghours/OpeninghoursPage.xaml | 5 +-- .../Openinghours/OpeninghoursPage.xaml.cs | 27 +------------- .../Pages/PlaceNews/PlaceNews.xaml | 5 +-- .../Pages/PlaceNews/PlaceNews.xaml.cs | 2 +- .../CampusAppWP8/Pages/StartPage.xaml | 5 +-- .../CampusAppWP8/Pages/StartPage.xaml.cs | 2 +- .../StudentCouncil/StudentCouncilPage.xaml | 5 +-- .../StudentCouncil/StudentCouncilPage.xaml.cs | 26 +------------- 20 files changed, 40 insertions(+), 207 deletions(-) diff --git a/CampusAppWP8/CampusAppWP8/Pages/Events/EventPage.xaml b/CampusAppWP8/CampusAppWP8/Pages/Events/EventPage.xaml index 27d815f8..34ccfa0b 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/Events/EventPage.xaml +++ b/CampusAppWP8/CampusAppWP8/Pages/Events/EventPage.xaml @@ -1,4 +1,4 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/CampusAppWP8/CampusAppWP8/Pages/Events/EventPage.xaml.cs b/CampusAppWP8/CampusAppWP8/Pages/Events/EventPage.xaml.cs index c0fb6c68..f08e99b6 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/Events/EventPage.xaml.cs +++ b/CampusAppWP8/CampusAppWP8/Pages/Events/EventPage.xaml.cs @@ -25,7 +25,7 @@ namespace CampusAppWP8.Pages.Events /// /// EventPage, where every event feed has his own PivotItem. /// - public partial class EventPage : PhoneApplicationPage + public partial class EventPage : PortraitLandscapePage { #region Memeber @@ -90,11 +90,6 @@ namespace CampusAppWP8.Pages.Events { base.OnNavigatedTo(e); - if (this.Orientation.Equals(PageOrientation.Landscape) || this.Orientation.Equals(PageOrientation.LandscapeLeft) || this.Orientation.Equals(PageOrientation.LandscapeRight)) - { - ApplicationBar.Mode = Microsoft.Phone.Shell.ApplicationBarMode.Default; - } - this.DefHeader.ProgressVisibility = Visibility.Visible; if (this.isNewInstance) diff --git a/CampusAppWP8/CampusAppWP8/Pages/Exams/Exams.xaml b/CampusAppWP8/CampusAppWP8/Pages/Exams/Exams.xaml index dcb92263..255c15b9 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/Exams/Exams.xaml +++ b/CampusAppWP8/CampusAppWP8/Pages/Exams/Exams.xaml @@ -1,4 +1,4 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/CampusAppWP8/CampusAppWP8/Pages/Exams/Exams.xaml.cs b/CampusAppWP8/CampusAppWP8/Pages/Exams/Exams.xaml.cs index 3dfbda47..90241e14 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/Exams/Exams.xaml.cs +++ b/CampusAppWP8/CampusAppWP8/Pages/Exams/Exams.xaml.cs @@ -24,7 +24,7 @@ namespace CampusAppWP8.Pages.Exams /// class of ExamsPage. /// Stubbfel, 02.09.2013. /// - public partial class Exams : PhoneApplicationPage + public partial class Exams : PortraitLandscapePage { #region Member @@ -62,11 +62,6 @@ namespace CampusAppWP8.Pages.Exams { base.OnNavigatedTo(e); - if (this.Orientation.Equals(PageOrientation.Landscape) || this.Orientation.Equals(PageOrientation.LandscapeLeft) || this.Orientation.Equals(PageOrientation.LandscapeRight)) - { - ApplicationBar.Mode = Microsoft.Phone.Shell.ApplicationBarMode.Default; - } - if (this.feed == null) { this.InitializeFeed(); @@ -93,23 +88,6 @@ namespace CampusAppWP8.Pages.Exams } } - /// - /// On orientation changed. - /// - /// sender object - /// event args - protected override void OnOrientationChanged(OrientationChangedEventArgs e) - { - if (e.Orientation.Equals(PageOrientation.Landscape) || e.Orientation.Equals(PageOrientation.LandscapeLeft) || e.Orientation.Equals(PageOrientation.LandscapeRight)) - { - ApplicationBar.Mode = Microsoft.Phone.Shell.ApplicationBarMode.Default; - } - else - { - ApplicationBar.Mode = Microsoft.Phone.Shell.ApplicationBarMode.Minimized; - } - base.OnOrientationChanged(e); - } #endregion #region private diff --git a/CampusAppWP8/CampusAppWP8/Pages/Links/LinkPage.xaml b/CampusAppWP8/CampusAppWP8/Pages/Links/LinkPage.xaml index 72007c69..e0d44290 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/Links/LinkPage.xaml +++ b/CampusAppWP8/CampusAppWP8/Pages/Links/LinkPage.xaml @@ -1,4 +1,4 @@ - @@ -79,4 +79,4 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/CampusAppWP8/CampusAppWP8/Pages/Links/LinkPage.xaml.cs b/CampusAppWP8/CampusAppWP8/Pages/Links/LinkPage.xaml.cs index 0e3a5bac..558883df 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/Links/LinkPage.xaml.cs +++ b/CampusAppWP8/CampusAppWP8/Pages/Links/LinkPage.xaml.cs @@ -20,7 +20,7 @@ namespace CampusAppWP8.Pages.Links /// Class for the LinkPage. /// Stubbfel, 15.10.2013. /// - public partial class LinkPage : PhoneApplicationPage + public partial class LinkPage : PortraitLandscapePage { #region Members @@ -57,11 +57,6 @@ namespace CampusAppWP8.Pages.Links { base.OnNavigatedTo(e); - if (this.Orientation.Equals(PageOrientation.Landscape) || this.Orientation.Equals(PageOrientation.LandscapeLeft) || this.Orientation.Equals(PageOrientation.LandscapeRight)) - { - ApplicationBar.Mode = Microsoft.Phone.Shell.ApplicationBarMode.Default; - } - this.InitializeFeeds(); this.DefHeader.ProgressVisibility = Visibility.Visible; @@ -199,22 +194,6 @@ namespace CampusAppWP8.Pages.Links } } - /// Method handle OrientationPage. - /// Stubbfel, 15.10.2013. - /// Caller of the function. - /// some EventArgs. - private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e) - { - if (this.Orientation == PageOrientation.LandscapeLeft || this.Orientation == PageOrientation.LandscapeRight) - { - ApplicationBar.Mode = Microsoft.Phone.Shell.ApplicationBarMode.Default; - } - else - { - ApplicationBar.Mode = Microsoft.Phone.Shell.ApplicationBarMode.Minimized; - } - } - #endregion #endregion diff --git a/CampusAppWP8/CampusAppWP8/Pages/Mensa/MensaPage.xaml b/CampusAppWP8/CampusAppWP8/Pages/Mensa/MensaPage.xaml index 07850aa1..f15fe48e 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/Mensa/MensaPage.xaml +++ b/CampusAppWP8/CampusAppWP8/Pages/Mensa/MensaPage.xaml @@ -1,4 +1,4 @@ - @@ -82,4 +82,4 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/CampusAppWP8/CampusAppWP8/Pages/Mensa/MensaPage.xaml.cs b/CampusAppWP8/CampusAppWP8/Pages/Mensa/MensaPage.xaml.cs index ac8acaec..9538c82e 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/Mensa/MensaPage.xaml.cs +++ b/CampusAppWP8/CampusAppWP8/Pages/Mensa/MensaPage.xaml.cs @@ -24,7 +24,7 @@ namespace CampusAppWP8.Pages.Mensa /// Class for the MensaPage. /// Stubbfel, 15.10.2013. /// - public partial class MensaPage : PhoneApplicationPage + public partial class MensaPage : PortraitLandscapePage { #region Members @@ -92,11 +92,6 @@ namespace CampusAppWP8.Pages.Mensa { base.OnNavigatedTo(e); - if (this.Orientation.Equals(PageOrientation.Landscape) || this.Orientation.Equals(PageOrientation.LandscapeLeft) || this.Orientation.Equals(PageOrientation.LandscapeRight)) - { - ApplicationBar.Mode = Microsoft.Phone.Shell.ApplicationBarMode.Default; - } - this.InitializeFeed(); } @@ -370,22 +365,6 @@ namespace CampusAppWP8.Pages.Mensa this.InitializeFeed(CampusAppWPortalLib8.Model.Settings.Campus.SFB_MAIN); } - /// Method handle OrientationPage. - /// Stubbfel, 15.10.2013. - /// Caller of the function. - /// some EventArgs. - private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e) - { - if (this.Orientation == PageOrientation.LandscapeLeft || this.Orientation == PageOrientation.LandscapeRight) - { - ApplicationBar.Mode = Microsoft.Phone.Shell.ApplicationBarMode.Default; - } - else - { - ApplicationBar.Mode = Microsoft.Phone.Shell.ApplicationBarMode.Minimized; - } - } - /// Event handler. Called by MenuItem for click events. /// Stubbfel, 14.10.2013. /// button object. diff --git a/CampusAppWP8/CampusAppWP8/Pages/News/NewsIndexPage.xaml b/CampusAppWP8/CampusAppWP8/Pages/News/NewsIndexPage.xaml index e6d1517f..8102ef88 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/News/NewsIndexPage.xaml +++ b/CampusAppWP8/CampusAppWP8/Pages/News/NewsIndexPage.xaml @@ -1,4 +1,4 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/CampusAppWP8/CampusAppWP8/Pages/News/NewsIndexPage.xaml.cs b/CampusAppWP8/CampusAppWP8/Pages/News/NewsIndexPage.xaml.cs index 9939d43f..2a443de4 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/News/NewsIndexPage.xaml.cs +++ b/CampusAppWP8/CampusAppWP8/Pages/News/NewsIndexPage.xaml.cs @@ -21,7 +21,7 @@ namespace CampusAppWP8.Pages.News /// /// Overview page of all news. /// - public partial class NewsIndexPage : PhoneApplicationPage + public partial class NewsIndexPage : PortraitLandscapePage { #region Member @@ -97,20 +97,6 @@ namespace CampusAppWP8.Pages.News #region protected - /// - /// On navigation to this page, creates a FeedEventHandler and load the RSS feed data. - /// - /// event args - protected override void OnNavigatedTo(NavigationEventArgs e) - { - base.OnNavigatedTo(e); - - if (this.Orientation.Equals(PageOrientation.Landscape) || this.Orientation.Equals(PageOrientation.LandscapeLeft) || this.Orientation.Equals(PageOrientation.LandscapeRight)) - { - ApplicationBar.Mode = Microsoft.Phone.Shell.ApplicationBarMode.Default; - } - } - /// /// Methods overrides the OnNavigatedFrom-Method /// @@ -130,26 +116,6 @@ namespace CampusAppWP8.Pages.News #region private - /// - /// Methods overrides the OnOrientationChanged-Method. - /// - /// orientation changed event args. - protected override void OnOrientationChanged(OrientationChangedEventArgs e) - { - if (e.Orientation == PageOrientation.LandscapeRight - || e.Orientation == PageOrientation.LandscapeLeft - || e.Orientation == PageOrientation.Landscape) - { - ApplicationBar.Mode = ApplicationBarMode.Default; - } - else - { - ApplicationBar.Mode = ApplicationBarMode.Minimized; - } - - base.OnOrientationChanged(e); - } - /// /// Is called after the RSS feeds are loaded into the newsFeed model. /// If there was no feed information set to the UI, the feed list diff --git a/CampusAppWP8/CampusAppWP8/Pages/News/NewsPage.xaml b/CampusAppWP8/CampusAppWP8/Pages/News/NewsPage.xaml index 797ae08c..855ec90d 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/News/NewsPage.xaml +++ b/CampusAppWP8/CampusAppWP8/Pages/News/NewsPage.xaml @@ -1,4 +1,4 @@ - - + diff --git a/CampusAppWP8/CampusAppWP8/Pages/News/NewsPage.xaml.cs b/CampusAppWP8/CampusAppWP8/Pages/News/NewsPage.xaml.cs index b677cbe6..83100fba 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/News/NewsPage.xaml.cs +++ b/CampusAppWP8/CampusAppWP8/Pages/News/NewsPage.xaml.cs @@ -23,7 +23,7 @@ namespace CampusAppWP8.Pages.News /// /// EventPage, where every news fees has his own PivotItem. /// - public partial class NewsPage : PhoneApplicationPage + public partial class NewsPage : PortraitLandscapePage { /// /// for checking if the feed source is already set or not. @@ -76,11 +76,6 @@ namespace CampusAppWP8.Pages.News { base.OnNavigatedTo(e); - if (this.Orientation.Equals(PageOrientation.Landscape) || this.Orientation.Equals(PageOrientation.LandscapeLeft) || this.Orientation.Equals(PageOrientation.LandscapeRight)) - { - ApplicationBar.Mode = Microsoft.Phone.Shell.ApplicationBarMode.Default; - } - this.DefHeader.ProgressVisibility = Visibility.Visible; if (this.isNewInstance) @@ -151,24 +146,6 @@ namespace CampusAppWP8.Pages.News } } - /* - protected override void OnOrientationChanged(OrientationChangedEventArgs e) - { - if (e.Orientation == PageOrientation.Landscape - || e.Orientation == PageOrientation.LandscapeLeft - || e.Orientation == PageOrientation.LandscapeRight) - { - ApplicationBar.Mode = ApplicationBarMode.Default; - } - else - { - ApplicationBar.Mode = ApplicationBarMode.Minimized; - } - - base.OnOrientationChanged(e); - } - */ - /// /// Called when the index of the selected PivotItem is changed. /// Set the text Grid to visible and the WebBrowser to collapsed. diff --git a/CampusAppWP8/CampusAppWP8/Pages/Openinghours/OpeninghoursPage.xaml b/CampusAppWP8/CampusAppWP8/Pages/Openinghours/OpeninghoursPage.xaml index 67c5df8f..672f1be3 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/Openinghours/OpeninghoursPage.xaml +++ b/CampusAppWP8/CampusAppWP8/Pages/Openinghours/OpeninghoursPage.xaml @@ -1,4 +1,4 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/CampusAppWP8/CampusAppWP8/Pages/Openinghours/OpeninghoursPage.xaml.cs b/CampusAppWP8/CampusAppWP8/Pages/Openinghours/OpeninghoursPage.xaml.cs index 66aa0e24..68775ab2 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/Openinghours/OpeninghoursPage.xaml.cs +++ b/CampusAppWP8/CampusAppWP8/Pages/Openinghours/OpeninghoursPage.xaml.cs @@ -20,7 +20,7 @@ namespace CampusAppWP8.Pages.Openinghours /// /// Opening hours page. /// - public partial class OpeninghoursPage : PhoneApplicationPage + public partial class OpeninghoursPage : PortraitLandscapePage { #region Members @@ -72,11 +72,6 @@ namespace CampusAppWP8.Pages.Openinghours { base.OnNavigatedTo(e); - if (this.Orientation.Equals(PageOrientation.Landscape) || this.Orientation.Equals(PageOrientation.LandscapeLeft) || this.Orientation.Equals(PageOrientation.LandscapeRight)) - { - ApplicationBar.Mode = Microsoft.Phone.Shell.ApplicationBarMode.Default; - } - if (this.isNewInstance) { if ((this.feed == null) || (this.feed.Model == null)) @@ -113,26 +108,6 @@ namespace CampusAppWP8.Pages.Openinghours } - /// - /// Override the OnOrientationChanged method. - /// - /// orientation changed event args. - protected override void OnOrientationChanged(OrientationChangedEventArgs e) - { - if (e.Orientation == PageOrientation.Landscape - || e.Orientation == PageOrientation.LandscapeLeft - || e.Orientation == PageOrientation.LandscapeRight) - { - ApplicationBar.Mode = Microsoft.Phone.Shell.ApplicationBarMode.Default; - } - else - { - ApplicationBar.Mode = Microsoft.Phone.Shell.ApplicationBarMode.Minimized; - } - - base.OnOrientationChanged(e); - } - // protected #endregion diff --git a/CampusAppWP8/CampusAppWP8/Pages/PlaceNews/PlaceNews.xaml b/CampusAppWP8/CampusAppWP8/Pages/PlaceNews/PlaceNews.xaml index cf5ae132..c5cd9bdc 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/PlaceNews/PlaceNews.xaml +++ b/CampusAppWP8/CampusAppWP8/Pages/PlaceNews/PlaceNews.xaml @@ -1,4 +1,4 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/CampusAppWP8/CampusAppWP8/Pages/PlaceNews/PlaceNews.xaml.cs b/CampusAppWP8/CampusAppWP8/Pages/PlaceNews/PlaceNews.xaml.cs index 5ef73703..d0d1d672 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/PlaceNews/PlaceNews.xaml.cs +++ b/CampusAppWP8/CampusAppWP8/Pages/PlaceNews/PlaceNews.xaml.cs @@ -29,7 +29,7 @@ namespace CampusAppWP8.Pages.PlaceNews /// Place news. /// Stubbfel, 09.09.2013. /// - public partial class PlaceNews : PhoneApplicationPage + public partial class PlaceNews : PortraitLandscapePage { #region Member diff --git a/CampusAppWP8/CampusAppWP8/Pages/StartPage.xaml b/CampusAppWP8/CampusAppWP8/Pages/StartPage.xaml index c92da838..a022cd2e 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/StartPage.xaml +++ b/CampusAppWP8/CampusAppWP8/Pages/StartPage.xaml @@ -1,4 +1,4 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/CampusAppWP8/CampusAppWP8/Pages/StartPage.xaml.cs b/CampusAppWP8/CampusAppWP8/Pages/StartPage.xaml.cs index 80f8532a..bed4dfcf 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/StartPage.xaml.cs +++ b/CampusAppWP8/CampusAppWP8/Pages/StartPage.xaml.cs @@ -29,7 +29,7 @@ namespace CampusAppWP8.Pages /// Class for the StartPage. /// Stubbfel, 15.10.2013. /// - public partial class StartPage : PhoneApplicationPage + public partial class StartPage : PortraitLandscapePage { #region Member diff --git a/CampusAppWP8/CampusAppWP8/Pages/StudentCouncil/StudentCouncilPage.xaml b/CampusAppWP8/CampusAppWP8/Pages/StudentCouncil/StudentCouncilPage.xaml index 25db516a..a731c3fc 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/StudentCouncil/StudentCouncilPage.xaml +++ b/CampusAppWP8/CampusAppWP8/Pages/StudentCouncil/StudentCouncilPage.xaml @@ -1,4 +1,4 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/CampusAppWP8/CampusAppWP8/Pages/StudentCouncil/StudentCouncilPage.xaml.cs b/CampusAppWP8/CampusAppWP8/Pages/StudentCouncil/StudentCouncilPage.xaml.cs index 81615043..5be5c0f6 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/StudentCouncil/StudentCouncilPage.xaml.cs +++ b/CampusAppWP8/CampusAppWP8/Pages/StudentCouncil/StudentCouncilPage.xaml.cs @@ -20,7 +20,7 @@ namespace CampusAppWP8.Pages.StudentCouncil /// Class for the StudentCouncilPage. /// Stubbfel, 15.10.2013. /// - public partial class StudentCouncilPage : PhoneApplicationPage + public partial class StudentCouncilPage : PortraitLandscapePage { #region Members @@ -52,11 +52,6 @@ namespace CampusAppWP8.Pages.StudentCouncil { base.OnNavigatedTo(e); - if (this.Orientation.Equals(PageOrientation.Landscape) || this.Orientation.Equals(PageOrientation.LandscapeLeft) || this.Orientation.Equals(PageOrientation.LandscapeRight)) - { - ApplicationBar.Mode = Microsoft.Phone.Shell.ApplicationBarMode.Default; - } - if (this.feed == null) { this.InitializeFeed(); @@ -74,25 +69,6 @@ namespace CampusAppWP8.Pages.StudentCouncil this.feed.SaveData(); } - /// Override the OnOrientationChanged method. - /// Stubbfel, 15.10.2013. - /// - protected override void OnOrientationChanged(OrientationChangedEventArgs e) - { - if (e.Orientation == PageOrientation.Landscape - || e.Orientation == PageOrientation.LandscapeLeft - || e.Orientation == PageOrientation.LandscapeRight) - { - ApplicationBar.Mode = Microsoft.Phone.Shell.ApplicationBarMode.Default; - } - else - { - ApplicationBar.Mode = Microsoft.Phone.Shell.ApplicationBarMode.Minimized; - } - - base.OnOrientationChanged(e); - } - #endregion #region private From b6df184f04025d3a0cc70f135dd47d382cb435b3 Mon Sep 17 00:00:00 2001 From: stubbfel Date: Mon, 21 Oct 2013 18:51:09 +0200 Subject: [PATCH 6/6] add mapoint --- CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj | 30 ++- .../File/Campusmap/BuildingsMaps.xml | 4 +- .../Model/Campusmap/CBMainMapRoomModel.cs | 25 --- .../Campusmap/{ => Maps}/BuildingMapModel.cs | 37 ++-- .../Campusmap/{ => Maps}/CBMainMapModel.cs | 20 +- .../Campusmap/{ => Maps}/CampusMapModel.cs | 4 +- .../{MapModel.cs => Maps/MapWp8Model.cs} | 148 ++------------- .../{ => Pins}/ClickAblePlacePinModel.cs | 6 +- .../{ => Pins}/CurrentPositionPinModel.cs | 7 +- .../{ => Pins}/HiddenPinPlaceModel.cs | 3 +- .../{ => Pins}/InfoLabPlacePinModel.cs | 6 +- .../{ => Pins}/InfoPlaceAccessPinModel.cs | 6 +- .../Campusmap/{ => Pins}/InfoPlacePinModel.cs | 7 +- .../{ => Pins}/InfoPlaceRedPinModel.cs | 7 +- .../{ => Pins}/InfoPlaceWCPinModel.cs | 6 +- .../{ => Pins}/SearchPlacePinModel.cs | 7 +- .../Pages/Campusmap/CampusMapPage.xaml.cs | 23 ++- .../Pages/Campusmap/RoomListPage.xaml.cs | 20 +- .../CampusAppWP8/Resources/Constants.resx | 3 - .../Resources/Constants1.Designer.cs | 9 - .../CampusAppWP8/Utility/Utilities.cs | 48 ++--- .../CampusAppWPortalLib8.csproj | 5 + .../Model/Campusmap/Maps/CampusMapPoints.cs | 52 ++++++ .../Model/Campusmap/Maps/MapModel.cs | 174 ++++++++++++++++++ .../Model/Campusmap/Pins}/MapPinModel.cs | 42 ++--- .../Model/Utility/MapPoint.cs | 78 ++++++++ .../Resources/Constants.resx | 24 +++ .../Resources/Constants1.Designer.cs | 72 ++++++++ 28 files changed, 544 insertions(+), 329 deletions(-) delete mode 100644 CampusAppWP8/CampusAppWP8/Model/Campusmap/CBMainMapRoomModel.cs rename CampusAppWP8/CampusAppWP8/Model/Campusmap/{ => Maps}/BuildingMapModel.cs (78%) rename CampusAppWP8/CampusAppWP8/Model/Campusmap/{ => Maps}/CBMainMapModel.cs (76%) rename CampusAppWP8/CampusAppWP8/Model/Campusmap/{ => Maps}/CampusMapModel.cs (96%) rename CampusAppWP8/CampusAppWP8/Model/Campusmap/{MapModel.cs => Maps/MapWp8Model.cs} (57%) rename CampusAppWP8/CampusAppWP8/Model/Campusmap/{ => Pins}/ClickAblePlacePinModel.cs (89%) rename CampusAppWP8/CampusAppWP8/Model/Campusmap/{ => Pins}/CurrentPositionPinModel.cs (85%) rename CampusAppWP8/CampusAppWP8/Model/Campusmap/{ => Pins}/HiddenPinPlaceModel.cs (91%) rename CampusAppWP8/CampusAppWP8/Model/Campusmap/{ => Pins}/InfoLabPlacePinModel.cs (88%) rename CampusAppWP8/CampusAppWP8/Model/Campusmap/{ => Pins}/InfoPlaceAccessPinModel.cs (87%) rename CampusAppWP8/CampusAppWP8/Model/Campusmap/{ => Pins}/InfoPlacePinModel.cs (85%) rename CampusAppWP8/CampusAppWP8/Model/Campusmap/{ => Pins}/InfoPlaceRedPinModel.cs (85%) rename CampusAppWP8/CampusAppWP8/Model/Campusmap/{ => Pins}/InfoPlaceWCPinModel.cs (88%) rename CampusAppWP8/CampusAppWP8/Model/Campusmap/{ => Pins}/SearchPlacePinModel.cs (85%) create mode 100644 CampusAppWP8/CampusAppWPortalLib8/Model/Campusmap/Maps/CampusMapPoints.cs create mode 100644 CampusAppWP8/CampusAppWPortalLib8/Model/Campusmap/Maps/MapModel.cs rename CampusAppWP8/{CampusAppWP8/Model/Campusmap => CampusAppWPortalLib8/Model/Campusmap/Pins}/MapPinModel.cs (89%) create mode 100644 CampusAppWP8/CampusAppWPortalLib8/Model/Utility/MapPoint.cs diff --git a/CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj b/CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj index 2a862bee..37189984 100644 --- a/CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj +++ b/CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj @@ -113,19 +113,18 @@ - - - - - - - - - - - - - + + + + + + + + + + + + @@ -198,10 +197,7 @@ - - - False - + diff --git a/CampusAppWP8/CampusAppWP8/File/Campusmap/BuildingsMaps.xml b/CampusAppWP8/CampusAppWP8/File/Campusmap/BuildingsMaps.xml index b8ab9ab9..a7f1afea 100644 --- a/CampusAppWP8/CampusAppWP8/File/Campusmap/BuildingsMaps.xml +++ b/CampusAppWP8/CampusAppWP8/File/Campusmap/BuildingsMaps.xml @@ -10,7 +10,7 @@ 800 -288 -390 - Point(430 500) + Point(410, 480) 650000 1200000 @@ -24,7 +24,7 @@ 800 -252 -390 - Point(235 380) + Point(215, 355) 300000 500000 diff --git a/CampusAppWP8/CampusAppWP8/Model/Campusmap/CBMainMapRoomModel.cs b/CampusAppWP8/CampusAppWP8/Model/Campusmap/CBMainMapRoomModel.cs deleted file mode 100644 index a98fb364..00000000 --- a/CampusAppWP8/CampusAppWP8/Model/Campusmap/CBMainMapRoomModel.cs +++ /dev/null @@ -1,25 +0,0 @@ -//----------------------------------------------------------------------- -// -// The MIT License (MIT). Copyright (c) 2013 BTU/IIT. -// -// Stubbfel -// 14.10.2013 -// Implements the main map room model class -//----------------------------------------------------------------------- -namespace CampusAppWP8.Model.Campusmap -{ - /// Class for the MapModel of the mainCampus of cottbus. - /// Stubbfel, 14.10.2013. - public class CBMainMapRoomModel - { - #region Constructor - - /// Initializes a new instance of the CBMainMapRoomModel class. - /// Stubbfel, 14.10.2013. - public CBMainMapRoomModel() - { - } - - #endregion - } -} diff --git a/CampusAppWP8/CampusAppWP8/Model/Campusmap/BuildingMapModel.cs b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Maps/BuildingMapModel.cs similarity index 78% rename from CampusAppWP8/CampusAppWP8/Model/Campusmap/BuildingMapModel.cs rename to CampusAppWP8/CampusAppWP8/Model/Campusmap/Maps/BuildingMapModel.cs index d24d18d4..0aa09ac9 100644 --- a/CampusAppWP8/CampusAppWP8/Model/Campusmap/BuildingMapModel.cs +++ b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Maps/BuildingMapModel.cs @@ -6,7 +6,7 @@ // 14.10.2013 // Implements the building map model class //----------------------------------------------------------------------- -namespace CampusAppWP8.Model.Campusmap +namespace CampusAppWP8.Model.Campusmap.Map { using System.Globalization; using System.Linq; @@ -14,11 +14,12 @@ namespace CampusAppWP8.Model.Campusmap using CampusAppWP8.Model.GeoDb; using CampusAppWP8.Resources; using CampusAppWPortalLib8.Utility; + using CampusAppWPortalLib8.Model.Utility; /// A data Model for the building map. /// Stubbfel, 14.10.2013. /// - public class BuildingMapModel : MapModel + public class BuildingMapModel : MapWp8Model { /// Initializes a new instance of the BuildingMapModel class. /// Stubbfel, 14.10.2013. @@ -34,6 +35,7 @@ namespace CampusAppWP8.Model.Campusmap this.ImageSource = building.GetInformationsValue("ImageSource"); double tmpVal; + if (double.TryParse(building.GetInformationsValue("ImageWidth"), NumberStyles.Number, CultureInfo.InvariantCulture, out tmpVal)) { this.ImageWidth = tmpVal; @@ -44,16 +46,6 @@ namespace CampusAppWP8.Model.Campusmap this.ImageHeight = tmpVal; } - if (double.TryParse(building.GetInformationsValue("MapImageOffsetX"), NumberStyles.Number, CultureInfo.InvariantCulture, out tmpVal)) - { - this.MapImageOffsetX = tmpVal; - } - - if (double.TryParse(building.GetInformationsValue("MapImageOffsetY"), NumberStyles.Number, CultureInfo.InvariantCulture, out tmpVal)) - { - this.MapImageOffsetY = tmpVal; - } - string pointString = building.GetInformationsValue("MapRefPoint"); pointString = pointString.TrimStart("Point(".ToArray()); pointString = pointString.TrimEnd(')'); @@ -66,25 +58,26 @@ namespace CampusAppWP8.Model.Campusmap double x; double y; + if (double.TryParse(building.GetInformationsValue("MapImageOffsetX"), NumberStyles.Number, CultureInfo.InvariantCulture, out x) + && double.TryParse(building.GetInformationsValue("MapImageOffsetY"), NumberStyles.Number, CultureInfo.InvariantCulture, out y)) + { + this.MapImageOffsetPoint = new MapPoint(x, y); + } + if (!double.TryParse(coord[0], NumberStyles.Number, CultureInfo.InvariantCulture, out x) || !double.TryParse(coord[1], NumberStyles.Number, CultureInfo.InvariantCulture, out y)) { return; } - this.RefPoint = new Point(x, y); + this.RefPoint = new MapPoint(x, y); - if (double.TryParse(building.GetInformationsValue("ScaleX"), NumberStyles.Number, CultureInfo.InvariantCulture, out tmpVal)) + if (double.TryParse(building.GetInformationsValue("ScaleX"), NumberStyles.Number, CultureInfo.InvariantCulture, out x) + && double.TryParse(building.GetInformationsValue("ScaleY"), NumberStyles.Number, CultureInfo.InvariantCulture, out y)) { - this.ScaleX = tmpVal; + this.ScalePoint = new MapPoint(x, y); } - if (double.TryParse(building.GetInformationsValue("ScaleY"), NumberStyles.Number, CultureInfo.InvariantCulture, out tmpVal)) - { - this.ScaleY = tmpVal; - } - - this.GeoOffsetX = building.GeoRefPoint.Longitude; - this.GeoOffsetY = building.GeoRefPoint.Latitude; + this.GeoOffsetPoint = new MapPoint(building.GeoRefPoint.Longitude, building.GeoRefPoint.Latitude); } } } diff --git a/CampusAppWP8/CampusAppWP8/Model/Campusmap/CBMainMapModel.cs b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Maps/CBMainMapModel.cs similarity index 76% rename from CampusAppWP8/CampusAppWP8/Model/Campusmap/CBMainMapModel.cs rename to CampusAppWP8/CampusAppWP8/Model/Campusmap/Maps/CBMainMapModel.cs index e92434e4..4d9c1e87 100644 --- a/CampusAppWP8/CampusAppWP8/Model/Campusmap/CBMainMapModel.cs +++ b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Maps/CBMainMapModel.cs @@ -6,12 +6,13 @@ // 14.10.2013 // Implements the main map model class //----------------------------------------------------------------------- -namespace CampusAppWP8.Model.Campusmap +namespace CampusAppWP8.Model.Campusmap.Map { - using System.Collections.Generic; - using System.Windows; + using System.Collections.Generic; + using System.Windows; using CampusAppWP8.Model.GeoDb; - using CampusAppWP8.Resources; + using CampusAppWP8.Resources; + using CampusAppWPortalLib8.Model.Utility; /// Class for the MapModel of the mainCampus of cottbus. /// Stubbfel, 14.10.2013. @@ -36,13 +37,10 @@ namespace CampusAppWP8.Model.Campusmap this.ImageSource = Constants.FileMap_CBMainMap; this.ImageWidth = 2000; this.ImageHeight = 1425; - this.MapImageOffsetX = -228; - this.MapImageOffsetY = -300; - this.RefPoint = new Point(1365, 800); - this.ScaleX = 129483.4123222749; - this.ScaleY = 197648.8919266073; - this.GeoOffsetX = 14.327159; - this.GeoOffsetY = 51.766548; + this.MapImageOffsetPoint = new MapPoint(-228, -300); + this.RefPoint = new MapPoint(1335, 775); + this.ScalePoint = new MapPoint(129483.4123222749, 197648.8919266073); + this.GeoOffsetPoint = new MapPoint(14.327159, 51.766548); } #endregion diff --git a/CampusAppWP8/CampusAppWP8/Model/Campusmap/CampusMapModel.cs b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Maps/CampusMapModel.cs similarity index 96% rename from CampusAppWP8/CampusAppWP8/Model/Campusmap/CampusMapModel.cs rename to CampusAppWP8/CampusAppWP8/Model/Campusmap/Maps/CampusMapModel.cs index 3229f649..9d66fa9e 100644 --- a/CampusAppWP8/CampusAppWP8/Model/Campusmap/CampusMapModel.cs +++ b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Maps/CampusMapModel.cs @@ -6,7 +6,7 @@ // 14.10.2013 // Implements the campus map model class //----------------------------------------------------------------------- -namespace CampusAppWP8.Model.Campusmap +namespace CampusAppWP8.Model.Campusmap.Map { using System.Collections.Generic; using CampusAppWP8.Model.GeoDb; @@ -14,7 +14,7 @@ namespace CampusAppWP8.Model.Campusmap /// Class for the CampusMapModel. /// Stubbfel, 14.10.2013. /// - public class CampusMapModel : MapModel + public class CampusMapModel : MapWp8Model { #region constructor diff --git a/CampusAppWP8/CampusAppWP8/Model/Campusmap/MapModel.cs b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Maps/MapWp8Model.cs similarity index 57% rename from CampusAppWP8/CampusAppWP8/Model/Campusmap/MapModel.cs rename to CampusAppWP8/CampusAppWP8/Model/Campusmap/Maps/MapWp8Model.cs index e03d0a6d..3bb05881 100644 --- a/CampusAppWP8/CampusAppWP8/Model/Campusmap/MapModel.cs +++ b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Maps/MapWp8Model.cs @@ -6,7 +6,7 @@ // 14.10.2013 // Implements the map model class //----------------------------------------------------------------------- -namespace CampusAppWP8.Model.Campusmap +namespace CampusAppWP8.Model.Campusmap.Map { using System; using System.Collections.Generic; @@ -15,24 +15,27 @@ namespace CampusAppWP8.Model.Campusmap using System.Windows.Input; using System.Windows.Media.Imaging; using CampusAppWP8.Model.GeoDb; + using CampusAppWP8.Model.Campusmap.Pin; + using CampusAppWPortalLib8.Model.Utility; + using CampusAppWPortalLib8.Model.Campusmap.Pin; /// This Class manage the properties of a Map. /// Stubbfel, 14.10.2013. - public class MapModel + public class MapWp8Model : CampusAppWPortalLib8.Model.Campusmap.Map.MapModel { #region Constructors - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// Stubbfel, 14.10.2013. - public MapModel() + public MapWp8Model() { this.IsReady = false; } - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// Stubbfel, 14.10.2013. /// list of places. - public MapModel(List placeList) + public MapWp8Model(List placeList) { this.IsReady = false; this.LoadSpatials(placeList); @@ -51,85 +54,12 @@ namespace CampusAppWP8.Model.Campusmap /// Event ShowMapInfo. public event MapInfos ShowMapInfos = null; - #endregion - #region Property - - /// Gets or sets a value indicating whether the map is ready or not. - /// true if this object is ready, false if not. - public bool IsReady { get; protected set; } - - /// Gets or sets the ImageSource of the map. - /// The image source. - public string ImageSource { get; set; } - - /// Gets or sets the ImageWidth of the map. - /// The width of the image. - public double ImageWidth { get; set; } - - /// Gets or sets the ImageHeight of the map. - /// The height of the image. - public double ImageHeight { get; set; } - - /// Gets or sets the ImageOffsetX of the map. - /// The map image offset x coordinate. - public double MapImageOffsetX { get; set; } - - /// Gets or sets the ImageOffsetY of the map. - /// The map image offset y coordinate. - public double MapImageOffsetY { get; set; } - - /// Gets or sets the GeoOffsetX of the map. - /// The geo offset x coordinate. - public double GeoOffsetX { get; set; } - - /// Gets or sets the GeoOffsetY of the map. - /// The geo offset y coordinate. - public double GeoOffsetY { get; set; } - - /// Gets or sets the Scale (to pixel) of the map. - /// The scale x coordinate. - public double ScaleX { get; set; } - - /// Gets or sets the Scale (to pixel) of the map. - /// The scale y coordinate. - public double ScaleY { get; set; } - - /// Gets or sets the reference point. - /// The reference point. - public Point RefPoint { get; set; } - - /// Gets or sets the spatial of the map. - /// The spatial. - public SpsWp8Model Spatial { get; set; } - #endregion #region Methods #region public - /// Method calculate the coordinates of ScrollToOffsets point. - /// Stubbfel, 14.10.2013. - /// input point. - /// point (in pixel) - public Point GetScrollPoint(Point point) - { - return this.GetScrollPoint(point.X, point.Y); - } - - /// Method calculate the coordinates of ScrollToOffsets point. - /// the input-point will be shown in the center. - /// x - coordinate. - /// y - coordinate. - /// point (in pixel) - public Point GetScrollPoint(double x, double y) - { - x = this.RefPoint.X + this.MapImageOffsetX + x; - y = this.RefPoint.Y + this.MapImageOffsetY - y; - - return new Point(x, y); - } - /// Method create in image, which can show at a certain position. /// Stubbfel, 27.08.2013. /// the x- coordinate. @@ -139,7 +69,7 @@ namespace CampusAppWP8.Model.Campusmap /// image of the pin. public Image AddPin(double x, double y, MapPinModel.PinType type, List places = null) { - Point position = new Point(x, y); + MapPoint position = new MapPoint(x, y); return this.AddPin(position, type, places); } @@ -155,7 +85,7 @@ namespace CampusAppWP8.Model.Campusmap /// image of the pin. public Image AddPinFromRefPoint(double x, double y, MapPinModel.PinType type, List places = null) { - Point position = new Point(this.RefPoint.X + x, this.RefPoint.Y - y); + MapPoint position = new MapPoint(this.RefPoint.X + x, this.RefPoint.Y - y); return this.AddPin(position, type, places); } @@ -168,7 +98,7 @@ namespace CampusAppWP8.Model.Campusmap /// The type. /// (Optional) list of places. /// image of the pin. - public Image AddPinFromRefPoint(Point position, MapPinModel.PinType type, List places = null) + public Image AddPinFromRefPoint(MapPoint position, MapPinModel.PinType type, List places = null) { return this.AddPinFromRefPoint(position.X, position.Y, type, places); } @@ -179,7 +109,7 @@ namespace CampusAppWP8.Model.Campusmap /// The type. /// (Optional) list of places. /// image of the pin. - public Image AddPin(Point position, MapPinModel.PinType type, List places = null) + public Image AddPin(MapPoint position, MapPinModel.PinType type, List places = null) { Image pinImg = new Image(); MapPinModel pin = this.CreatePin(type, places, pinImg); @@ -197,58 +127,6 @@ namespace CampusAppWP8.Model.Campusmap return pinImg; } - /// Convert a coordinates to coordinates which address pixels. - /// Stubbfel, 27.08.2013. - /// the x-coordinate. - /// the y-coordinate. - /// Point in pixel-size. - public Point ConverToPixelPoint(double x, double y) - { - Point p = new Point { X = this.ScaleX * x, Y = this.ScaleY * y }; - return p; - } - - /// Convert a coordinates to coordinates which address pixels. - /// Stubbfel, 14.10.2013. - /// not scaled point. - /// Point in pixel-size. - public Point ConverToPixelPoint(Point point) - { - return this.ConverToPixelPoint(point.X, point.Y); - } - - /// Convert a coordinates to coordinates which address mapPoint. - /// Stubbfel, 14.10.2013. - /// the x-coordinate. - /// the y-coordinate. - /// Point in pixel-size. - public Point ConverToMapPoint(double x, double y) - { - return new Point { X = x - this.GeoOffsetX, Y = y - this.GeoOffsetY }; - } - - /// Convert a coordinates to coordinates which address mapPoint. - /// Stubbfel, 14.10.2013. - /// not scaled point. - /// Point in pixel-size. - public Point ConverToMapPoint(Point point) - { - return this.ConverToMapPoint(point.X, point.Y); - } - - #endregion - - #region protected - - /// Loads the spatial object - /// Stubbfel, 19.08.2013. - /// list of places. - protected virtual void LoadSpatials(List placeList) - { - this.Spatial = new SpsWp8Model(); - this.Spatial.AddPlaces(placeList); - } - #endregion #region private diff --git a/CampusAppWP8/CampusAppWP8/Model/Campusmap/ClickAblePlacePinModel.cs b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/ClickAblePlacePinModel.cs similarity index 89% rename from CampusAppWP8/CampusAppWP8/Model/Campusmap/ClickAblePlacePinModel.cs rename to CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/ClickAblePlacePinModel.cs index d8c245fc..2a314373 100644 --- a/CampusAppWP8/CampusAppWP8/Model/Campusmap/ClickAblePlacePinModel.cs +++ b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/ClickAblePlacePinModel.cs @@ -6,10 +6,12 @@ // 14.10.2013 // Implements the click able place pin model class //----------------------------------------------------------------------- -namespace CampusAppWP8.Model.Campusmap +namespace CampusAppWP8.Model.Campusmap.Pin { using System.Collections.Generic; using CampusAppWP8.Model.GeoDb; + using CampusAppWP8.Model.Campusmap.Map; + using CampusAppWPortalLib8.Model.Campusmap.Pin; /// abstract class for click abel bins. /// Stubbfel, 14.10.2013. @@ -20,7 +22,7 @@ namespace CampusAppWP8.Model.Campusmap /// Gets or sets Callback Function, to show place information of the Pin. /// The call back. - public MapModel.MapInfos CallBack { get; set; } + public MapWp8Model.MapInfos CallBack { get; set; } /// Gets or sets place which are associative with this pin. /// The associated places. diff --git a/CampusAppWP8/CampusAppWP8/Model/Campusmap/CurrentPositionPinModel.cs b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/CurrentPositionPinModel.cs similarity index 85% rename from CampusAppWP8/CampusAppWP8/Model/Campusmap/CurrentPositionPinModel.cs rename to CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/CurrentPositionPinModel.cs index 78d17ad9..7e3d0ed4 100644 --- a/CampusAppWP8/CampusAppWP8/Model/Campusmap/CurrentPositionPinModel.cs +++ b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/CurrentPositionPinModel.cs @@ -6,10 +6,12 @@ // 14.10.2013 // Implements the current position pin model class //----------------------------------------------------------------------- -namespace CampusAppWP8.Model.Campusmap +namespace CampusAppWP8.Model.Campusmap.Pin { using System.Windows; using CampusAppWP8.Resources; + using CampusAppWPortalLib8.Model.Utility; + using CampusAppWPortalLib8.Model.Campusmap.Pin; /// Current position pin model. /// Stubbfel, 27.08.2013. @@ -25,8 +27,7 @@ namespace CampusAppWP8.Model.Campusmap this.ImageSource = Icons.CurrentPosition; this.ImageWidth = 60; this.ImageHeight = 60; - this.PinImageOffsetX = -25; - this.PinImageOffsetY = -34; + this.PinImageOffsetPoint = new MapPoint(-25, -34); this.Tag = MapPinModel.CurrentPositionPlacePinString; this.ZIndex = 3; } diff --git a/CampusAppWP8/CampusAppWP8/Model/Campusmap/HiddenPinPlaceModel.cs b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/HiddenPinPlaceModel.cs similarity index 91% rename from CampusAppWP8/CampusAppWP8/Model/Campusmap/HiddenPinPlaceModel.cs rename to CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/HiddenPinPlaceModel.cs index 57290f3a..cfe0fe7a 100644 --- a/CampusAppWP8/CampusAppWP8/Model/Campusmap/HiddenPinPlaceModel.cs +++ b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/HiddenPinPlaceModel.cs @@ -6,7 +6,8 @@ // 14.10.2013 // Implements the hidden pin place model class //----------------------------------------------------------------------- -namespace CampusAppWP8.Model.Campusmap +using CampusAppWPortalLib8.Model.Campusmap.Pin; +namespace CampusAppWP8.Model.Campusmap.Pin { /// Hidden pin place model. /// Stubbfel, 27.08.2013. diff --git a/CampusAppWP8/CampusAppWP8/Model/Campusmap/InfoLabPlacePinModel.cs b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/InfoLabPlacePinModel.cs similarity index 88% rename from CampusAppWP8/CampusAppWP8/Model/Campusmap/InfoLabPlacePinModel.cs rename to CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/InfoLabPlacePinModel.cs index 2d63a436..98f55e55 100644 --- a/CampusAppWP8/CampusAppWP8/Model/Campusmap/InfoLabPlacePinModel.cs +++ b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/InfoLabPlacePinModel.cs @@ -6,9 +6,10 @@ // 14.10.2013 // Implements the information lab place pin model class //----------------------------------------------------------------------- -namespace CampusAppWP8.Model.Campusmap +namespace CampusAppWP8.Model.Campusmap.Pin { using CampusAppWP8.Resources; + using CampusAppWPortalLib8.Model.Utility; /// Search pin place model. /// Stubbfel, 27.08.2013. @@ -24,8 +25,7 @@ namespace CampusAppWP8.Model.Campusmap this.ImageSource = Icons.PlaceLab; this.ImageWidth = 40; this.ImageHeight = 40; - this.PinImageOffsetX = -20; - this.PinImageOffsetY = -15; + this.PinImageOffsetPoint = new MapPoint(-10, -15); this.ZIndex += 1; } diff --git a/CampusAppWP8/CampusAppWP8/Model/Campusmap/InfoPlaceAccessPinModel.cs b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/InfoPlaceAccessPinModel.cs similarity index 87% rename from CampusAppWP8/CampusAppWP8/Model/Campusmap/InfoPlaceAccessPinModel.cs rename to CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/InfoPlaceAccessPinModel.cs index 0c5e5d2e..63f162db 100644 --- a/CampusAppWP8/CampusAppWP8/Model/Campusmap/InfoPlaceAccessPinModel.cs +++ b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/InfoPlaceAccessPinModel.cs @@ -6,9 +6,10 @@ // 14.10.2013 // Implements the information place access pin model class //----------------------------------------------------------------------- -namespace CampusAppWP8.Model.Campusmap +namespace CampusAppWP8.Model.Campusmap.Pin { using CampusAppWP8.Resources; + using CampusAppWPortalLib8.Model.Utility; /// Search pin place model. /// Stubbfel, 27.08.2013. @@ -24,8 +25,7 @@ namespace CampusAppWP8.Model.Campusmap this.ImageSource = Icons.PlaceInfoAccess; this.ImageWidth = 40; this.ImageHeight = 40; - this.PinImageOffsetX = -10; - this.PinImageOffsetY = -35; + this.PinImageOffsetPoint = new MapPoint(-10, -15); } #endregion diff --git a/CampusAppWP8/CampusAppWP8/Model/Campusmap/InfoPlacePinModel.cs b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/InfoPlacePinModel.cs similarity index 85% rename from CampusAppWP8/CampusAppWP8/Model/Campusmap/InfoPlacePinModel.cs rename to CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/InfoPlacePinModel.cs index 1111da33..30b20977 100644 --- a/CampusAppWP8/CampusAppWP8/Model/Campusmap/InfoPlacePinModel.cs +++ b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/InfoPlacePinModel.cs @@ -6,9 +6,11 @@ // 14.10.2013 // Implements the information place pin model class //----------------------------------------------------------------------- -namespace CampusAppWP8.Model.Campusmap +namespace CampusAppWP8.Model.Campusmap.Pin { using CampusAppWP8.Resources; + using CampusAppWPortalLib8.Model.Campusmap.Pin; + using CampusAppWPortalLib8.Model.Utility; /// Search pin place model. /// Stubbfel, 27.08.2013. @@ -24,8 +26,7 @@ namespace CampusAppWP8.Model.Campusmap this.ImageSource = Icons.PlaceInfo; this.ImageWidth = 60; this.ImageHeight = 60; - this.PinImageOffsetX = -25; - this.PinImageOffsetY = -27; + this.PinImageOffsetPoint = new MapPoint(-25, -27); this.Tag = MapPinModel.PinTypeToString(PinType.InfoPlace); this.ZIndex = 1; } diff --git a/CampusAppWP8/CampusAppWP8/Model/Campusmap/InfoPlaceRedPinModel.cs b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/InfoPlaceRedPinModel.cs similarity index 85% rename from CampusAppWP8/CampusAppWP8/Model/Campusmap/InfoPlaceRedPinModel.cs rename to CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/InfoPlaceRedPinModel.cs index 4696f932..c18b72b0 100644 --- a/CampusAppWP8/CampusAppWP8/Model/Campusmap/InfoPlaceRedPinModel.cs +++ b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/InfoPlaceRedPinModel.cs @@ -6,9 +6,11 @@ // 14.10.2013 // Implements the information place red pin model class //----------------------------------------------------------------------- -namespace CampusAppWP8.Model.Campusmap +namespace CampusAppWP8.Model.Campusmap.Pin { using CampusAppWP8.Resources; + using CampusAppWPortalLib8.Model.Campusmap.Pin; + using CampusAppWPortalLib8.Model.Utility; /// A data Model for the information place red pin. /// Stubbfel, 14.10.2013. @@ -24,8 +26,7 @@ namespace CampusAppWP8.Model.Campusmap this.ImageSource = Icons.PlaceRearchRed; this.ImageWidth = 60; this.ImageHeight = 60; - this.PinImageOffsetX = -25; - this.PinImageOffsetY = -27; + this.PinImageOffsetPoint = new MapPoint(-25, -27); this.ZIndex += 1; this.Tag = MapPinModel.InfoRedPlacePinString; } diff --git a/CampusAppWP8/CampusAppWP8/Model/Campusmap/InfoPlaceWCPinModel.cs b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/InfoPlaceWCPinModel.cs similarity index 88% rename from CampusAppWP8/CampusAppWP8/Model/Campusmap/InfoPlaceWCPinModel.cs rename to CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/InfoPlaceWCPinModel.cs index e070250f..77d3d23a 100644 --- a/CampusAppWP8/CampusAppWP8/Model/Campusmap/InfoPlaceWCPinModel.cs +++ b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/InfoPlaceWCPinModel.cs @@ -6,9 +6,10 @@ // 14.10.2013 // Implements the information place wc pin model class //----------------------------------------------------------------------- -namespace CampusAppWP8.Model.Campusmap +namespace CampusAppWP8.Model.Campusmap.Pin { using CampusAppWP8.Resources; + using CampusAppWPortalLib8.Model.Utility; /// Search pin place model. /// Stubbfel, 27.08.2013. @@ -24,8 +25,7 @@ namespace CampusAppWP8.Model.Campusmap this.ImageSource = Icons.PlaceInfoWc; this.ImageWidth = 40; this.ImageHeight = 40; - this.PinImageOffsetX = 0; - this.PinImageOffsetY = -10; + this.PinImageOffsetPoint = new MapPoint(0, -10); this.ZIndex += 1; } diff --git a/CampusAppWP8/CampusAppWP8/Model/Campusmap/SearchPlacePinModel.cs b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/SearchPlacePinModel.cs similarity index 85% rename from CampusAppWP8/CampusAppWP8/Model/Campusmap/SearchPlacePinModel.cs rename to CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/SearchPlacePinModel.cs index 252be325..a15f8b68 100644 --- a/CampusAppWP8/CampusAppWP8/Model/Campusmap/SearchPlacePinModel.cs +++ b/CampusAppWP8/CampusAppWP8/Model/Campusmap/Pins/SearchPlacePinModel.cs @@ -6,9 +6,11 @@ // 14.10.2013 // Implements the search place pin model class //----------------------------------------------------------------------- -namespace CampusAppWP8.Model.Campusmap +namespace CampusAppWP8.Model.Campusmap.Pin { using CampusAppWP8.Resources; + using CampusAppWPortalLib8.Model.Campusmap.Pin; + using CampusAppWPortalLib8.Model.Utility; /// Search pin place model. /// Stubbfel, 27.08.2013. @@ -26,8 +28,7 @@ namespace CampusAppWP8.Model.Campusmap this.ImageSource = Icons.SearchPlace; this.ImageWidth = 60; this.ImageHeight = 60; - this.PinImageOffsetX = -25; - this.PinImageOffsetY = -27; + this.PinImageOffsetPoint = new MapPoint(-25, -27); this.Tag = MapPinModel.SearchPlacePinString; this.ZIndex = 4; } diff --git a/CampusAppWP8/CampusAppWP8/Pages/Campusmap/CampusMapPage.xaml.cs b/CampusAppWP8/CampusAppWP8/Pages/Campusmap/CampusMapPage.xaml.cs index 92281c60..7a61db9c 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/Campusmap/CampusMapPage.xaml.cs +++ b/CampusAppWP8/CampusAppWP8/Pages/Campusmap/CampusMapPage.xaml.cs @@ -8,6 +8,18 @@ //----------------------------------------------------------------------- namespace CampusAppWP8.Pages.Campusmap { + using CampusAppWP8.File.Places; + using CampusAppWP8.Model.Campusmap.Map; + using CampusAppWP8.Model.Campusmap.Pin; + using CampusAppWP8.Model.GeoDb; + using CampusAppWP8.Resources; + using CampusAppWP8.Utility; + using CampusAppWP8.Utility.Lui.MessageBoxes; + using CampusAppWP8.Utility.NDEF; + using CampusAppWPortalLib8.Model.Campusmap.Pin; + using CampusAppWPortalLib8.Model.Utility; + using Microsoft.Phone.Controls; + using Microsoft.Phone.Shell; using System; using System.Collections.Generic; using System.Device.Location; @@ -19,15 +31,6 @@ namespace CampusAppWP8.Pages.Campusmap using System.Windows.Controls; using System.Windows.Input; using System.Windows.Navigation; - using CampusAppWP8.File.Places; - using CampusAppWP8.Model.Campusmap; - using CampusAppWP8.Model.GeoDb; - using CampusAppWP8.Resources; - using CampusAppWP8.Utility; - using CampusAppWP8.Utility.Lui.MessageBoxes; - using CampusAppWP8.Utility.NDEF; - using Microsoft.Phone.Controls; - using Microsoft.Phone.Shell; using Windows.Networking.Proximity; /// Class for the campusMap page. @@ -623,7 +626,7 @@ namespace CampusAppWP8.Pages.Campusmap /// private void AddPin(double x, double y, MapPinModel.PinType type, bool scroll = true, List assocPlaces = null) { - Point scrollPoint = this.campusMap.GetScrollPoint(this.campusMap.ConverToPixelPoint(this.campusMap.ConverToMapPoint(x, y))); + MapPoint scrollPoint = this.campusMap.GetScrollPoint(this.campusMap.ConverToPixelPoint(this.campusMap.ConverToMapPoint(x, y))); MapCanvas.Children.Add(this.campusMap.AddPinFromRefPoint(this.campusMap.ConverToPixelPoint(this.campusMap.ConverToMapPoint(x, y)), type, assocPlaces)); MapScroller.UpdateLayout(); diff --git a/CampusAppWP8/CampusAppWP8/Pages/Campusmap/RoomListPage.xaml.cs b/CampusAppWP8/CampusAppWP8/Pages/Campusmap/RoomListPage.xaml.cs index a6e3446f..c49774cb 100644 --- a/CampusAppWP8/CampusAppWP8/Pages/Campusmap/RoomListPage.xaml.cs +++ b/CampusAppWP8/CampusAppWP8/Pages/Campusmap/RoomListPage.xaml.cs @@ -23,6 +23,9 @@ namespace CampusAppWP8.Pages.Campusmap using CampusAppWP8.Utility.Lui.MessageBoxes; using CampusAppWPortalLib8.Model.Utility; using Microsoft.Phone.Controls; + using CampusAppWP8.Model.Campusmap.Map; + using CampusAppWP8.Model.Campusmap.Pin; + using CampusAppWPortalLib8.Model.Campusmap.Pin; /// Class of the RoomListPage. /// Stubbfel, 14.10.2013. @@ -43,10 +46,10 @@ namespace CampusAppWP8.Pages.Campusmap private bool pinchRun = false; /// The MapPoint. - private Point mappoint; + private MapPoint mappoint; /// The offset point. - private Point offsetPoint; + private MapPoint offsetPoint; /// The layer list picker. private ListPickerItemListModel layerListPicker; @@ -153,8 +156,9 @@ namespace CampusAppWP8.Pages.Campusmap x = room.GeoRefPoint.Longitude; y = room.GeoRefPoint.Latitude; - Point roompoint = this.buildingMap.GetScrollPoint(this.buildingMap.ConverToPixelPoint(this.buildingMap.ConverToMapPoint(x, y))); - Point viewPoint = new Point(roompoint.X - this.mappoint.X + this.offsetPoint.X, roompoint.Y - this.mappoint.Y + this.offsetPoint.Y); + MapPoint roompoint = this.buildingMap.GetScrollPoint(this.buildingMap.ConverToPixelPoint(this.buildingMap.ConverToMapPoint(x, y))); + MapPoint viewPoint = roompoint - mappoint + offsetPoint; + MapCanvas.Children.Add(this.buildingMap.AddPin(viewPoint, MapPinModel.PinType.InfoRedPlace, new List { room })); } @@ -298,8 +302,8 @@ namespace CampusAppWP8.Pages.Campusmap { x = room.GeoRefPoint.Longitude; y = room.GeoRefPoint.Latitude; - Point roompoint = this.buildingMap.GetScrollPoint(this.buildingMap.ConverToPixelPoint(this.buildingMap.ConverToMapPoint(x, y))); - Point viewPoint = new Point(roompoint.X - this.mappoint.X + this.offsetPoint.X, roompoint.Y - this.mappoint.Y + this.offsetPoint.Y); + MapPoint roompoint = this.buildingMap.GetScrollPoint(this.buildingMap.ConverToPixelPoint(this.buildingMap.ConverToMapPoint(x, y))); + MapPoint viewPoint = roompoint - mappoint + offsetPoint; MapPinModel.PinType type; @@ -324,7 +328,7 @@ namespace CampusAppWP8.Pages.Campusmap MapCanvas.Children.Add(this.buildingMap.AddPin(viewPoint, type, new List { room })); } - // MapCanvas.Children.Add(this.buildingMap.AddPin(offsetPoint, MapPinModel.PinType.SearchPlace)); + // MapCanvas.Children.Add(this.buildingMap.AddPin(offsetPoint, MapPinModel.PinType.SearchPlace)); } /// Shows the layer places. @@ -350,7 +354,7 @@ namespace CampusAppWP8.Pages.Campusmap double y = this.building.Building.GeoRefPoint.Latitude; double x = this.building.Building.GeoRefPoint.Longitude; this.mappoint = this.buildingMap.GetScrollPoint(this.buildingMap.ConverToPixelPoint(this.buildingMap.ConverToMapPoint(x, y))); - this.offsetPoint = new Point(-this.buildingMap.MapImageOffsetX, -this.buildingMap.MapImageOffsetY); + this.offsetPoint = -this.buildingMap.MapImageOffsetPoint;// new Point(-this.buildingMap.MapImageOffsetX, -this.buildingMap.MapImageOffsetY); this.MapCanvas.DataContext = this.buildingMap; diff --git a/CampusAppWP8/CampusAppWP8/Resources/Constants.resx b/CampusAppWP8/CampusAppWP8/Resources/Constants.resx index ab3dd3e0..98f32ee9 100644 --- a/CampusAppWP8/CampusAppWP8/Resources/Constants.resx +++ b/CampusAppWP8/CampusAppWP8/Resources/Constants.resx @@ -528,9 +528,6 @@ /Pages/Campusmap/RoomListPage.xaml - - Ebene - Barrierefreiheit diff --git a/CampusAppWP8/CampusAppWP8/Resources/Constants1.Designer.cs b/CampusAppWP8/CampusAppWP8/Resources/Constants1.Designer.cs index c193b4a1..2da9f39b 100644 --- a/CampusAppWP8/CampusAppWP8/Resources/Constants1.Designer.cs +++ b/CampusAppWP8/CampusAppWP8/Resources/Constants1.Designer.cs @@ -1131,15 +1131,6 @@ namespace CampusAppWP8.Resources { } } - /// - /// Sucht eine lokalisierte Zeichenfolge, die Ebene ähnelt. - /// - public static string PisInformationName_Layer { - get { - return ResourceManager.GetString("PisInformationName_Layer", resourceCulture); - } - } - /// /// Sucht eine lokalisierte Zeichenfolge, die Name ähnelt. /// diff --git a/CampusAppWP8/CampusAppWP8/Utility/Utilities.cs b/CampusAppWP8/CampusAppWP8/Utility/Utilities.cs index da03d882..87d42f83 100644 --- a/CampusAppWP8/CampusAppWP8/Utility/Utilities.cs +++ b/CampusAppWP8/CampusAppWP8/Utility/Utilities.cs @@ -18,28 +18,15 @@ namespace CampusAppWP8.Utility using CampusAppWP8.Resources; using CampusAppWPortalLib8.Model; using CampusAppWPortalLib8.Model.Settings; + using CampusAppWPortalLib8.Model.Utility; using CampusAppWPortalLib8.Utility; using Microsoft.Phone.Net.NetworkInformation; + using CampusAppWPortalLib8.Model.Campusmap.Map; /// Collection of utility functions. /// Stubbfel, 14.10.2013. public static class Utilities { - #region member - - /// The north campus of cottbus. - private static GeoCoordinate northCB = new GeoCoordinate(51.77670359509875,14.293908825617); - - /// The middle campus of cottbus. - private static GeoCoordinate midCB = new GeoCoordinate(51.76737987049448,14.324056352976152); - - /// The south campus of cottbus. - private static GeoCoordinate southCB = new GeoCoordinate(51.72668339740452,14.319497377197282); - - /// The middle campus of senftenberg. - private static GeoCoordinate midSFB = new GeoCoordinate(51.522217168257356,13.986618441187698); - - #endregion #region Enums /// Comparison types. @@ -416,16 +403,18 @@ namespace CampusAppWP8.Utility return result; } - Point currentPoint = new Point(log, lat); - + MapPoint currentPoint = new MapPoint(log, lat); + MapPoint tmpCampus = CampusMapPoints.NorthCB; - double minDistance = Utilities.CalcDistance(currentPoint, new Point(Utilities.northCB.Longitude, Utilities.northCB.Latitude)); + double minDistance = MapPoint.CalcDistance(currentPoint, tmpCampus); if (minDistance < 0.01) { result = Campus.CB_NORTH; } - double tmpDistance = Utilities.CalcDistance(currentPoint, new Point(Utilities.midCB.Longitude, Utilities.midCB.Latitude)); + + tmpCampus = CampusMapPoints.MidCB; + double tmpDistance = MapPoint.CalcDistance(currentPoint, tmpCampus); if (tmpDistance < 0.01 && tmpDistance < minDistance) { @@ -433,16 +422,16 @@ namespace CampusAppWP8.Utility result = Campus.CB_MAIN; } - tmpDistance = Utilities.CalcDistance(currentPoint, new Point(Utilities.southCB.Longitude, Utilities.southCB.Latitude)); - + tmpCampus = CampusMapPoints.SouthCB; + tmpDistance = MapPoint.CalcDistance(currentPoint, tmpCampus); if (tmpDistance < 0.01 && tmpDistance < minDistance) { minDistance = tmpDistance; result = Campus.CB_SOUTH; } - tmpDistance = Utilities.CalcDistance(currentPoint, new Point(Utilities.midSFB.Longitude, Utilities.midSFB.Latitude)); - + tmpCampus = CampusMapPoints.MidSFB; + tmpDistance = MapPoint.CalcDistance(currentPoint, tmpCampus); if (tmpDistance < 0.01 && tmpDistance < minDistance) { minDistance = tmpDistance; @@ -452,19 +441,6 @@ namespace CampusAppWP8.Utility return result; } - /// Calculates the distance. - /// Stubbfel, 14.10.2013. - /// the source point. - /// the destination Point. - /// The calculated distance. - public static double CalcDistance(Point src, Point dst) - { - double xPow = Math.Pow(dst.X - src.X, 2); - double yPow = Math.Pow(dst.Y - src.Y, 2); - double result = Math.Sqrt(xPow + yPow); - return Math.Sqrt(Math.Pow(dst.X - src.X, 2) + Math.Pow(dst.Y - src.Y, 2)); - } - #endregion } } \ No newline at end of file diff --git a/CampusAppWP8/CampusAppWPortalLib8/CampusAppWPortalLib8.csproj b/CampusAppWP8/CampusAppWPortalLib8/CampusAppWPortalLib8.csproj index a492bf65..52ea7f04 100644 --- a/CampusAppWP8/CampusAppWPortalLib8/CampusAppWPortalLib8.csproj +++ b/CampusAppWP8/CampusAppWPortalLib8/CampusAppWPortalLib8.csproj @@ -33,6 +33,9 @@ 4 + + + @@ -80,6 +83,7 @@ + True @@ -119,6 +123,7 @@ Designer +