/// Version 1.0.0 /// Last modified 24.5.2014 /// /// Copyright (C) 2014 Atte Söderlund /// /// Halyri-system is a prototype emergency call system. Its purpose is to /// demonstrate the use of the advanced capabilities available in the current /// generation smartphones in facilitating the emergency service dispatcher's /// capability to determine the nature of the emergency and to dispatch help. /// /// For more information, see the README file of this package. /// /// The MIT License (MIT) /// /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to /// deal in the Software without restriction, including without limitation the /// rights to use, copy, modify, merge, publish, distribute, sublicense, /// and/or sell copies of the Software, and to permit persons to whom the /// Software is furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in /// all copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING /// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS /// IN THE SOFTWARE. /// using Microsoft.Maps.MapControl.WPF; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Hake_WPF { /// Atte Söderlund /// /// The class controls the maps. A User can add a specific pushpin to the maps or /// add all pushpins to the map again. The user can add maps and also center the maps. /// It also handles closing the maps. /// class MapController { private MapWindow mapWindow; private ObservableCollection pushpins = new ObservableCollection(); private ObservableCollection maps = new ObservableCollection(); /// /// Invoked when MapWindow is closing. It is used to tell that map window is closed. /// public delegate void MapWindowClosing(); /// /// This event is sent when MapWindow is closing. /// public event MapWindowClosing MapWindowClosingEvent; /// /// The function is constructor. It does nothing. /// public MapController() { } /// /// The function removes all pushpins from the given map and then adds pushins from /// the given collection to the map. /// /// The given map. /// The collection that contains Assigments. private void AddPushPinsToMap(Map map, ObservableCollection collection) { map.Children.Clear(); for (int i = 0; i < collection.Count; i++) foreach (Pushpin pushpin in collection[i].Pushpins) if (pushpin != null) map.Children.Add(new Pushpin() { Location = pushpin.Location, Background = pushpin.Background }); } /// /// The function adds the given map to the maps collection. /// /// The given map. public void AddMap(Map map) { maps.Add(map); } /// /// The function makes a new map window and adds that map to the maps collections. /// Then it adds pushpins to the maps and adds event handler for the map window closing. /// /// The list of assignments for puhspins to be added. public void MapToOwnWindow(ObservableCollection assignments) { mapWindow = new MapWindow(maps[0].Center, (int)maps[0].ZoomLevel); mapWindow.Show(); maps.Add(mapWindow.Map); AddPushPinsToMap(maps.Last(), assignments); mapWindow.Closing += mapWindow_Closing; } /// /// The function removes the given map and then removes the event handler for map window closing. /// void mapWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e) { maps.Remove(mapWindow.Map); if (MapWindowClosingEvent != null) MapWindowClosingEvent(); } /// /// The function closes the map window if it is open. /// public void Close() { if (mapWindow != null) mapWindow.Close(); } /// /// The function adds puhspins to all maps. /// /// The list of assignmets that contains pushpins. public void AddAllPushpins(ObservableCollection assignments) { foreach (Map map in maps) AddPushPinsToMap(map, assignments); } /// /// The function centers all maps to the assignments location. /// /// The assignment that contains location. public void CenterMaps(Assignment assignment) { foreach (Map map in maps) if (assignment.Location != null) map.Center = new Location() { Latitude = assignment.Location.Latitude, Longitude = assignment.Location.Longitude }; } } }