using System.Collections.Generic; using System.Collections.ObjectModel; using System.Windows; using System.Windows.Media; using InABox.WPF; using net.sf.mpxj; using Syncfusion.UI.Xaml.Maps; namespace PRSDesktop; public enum MapViewType { Current, History } public class MapViewModel : DependencyObject { private readonly List _markers = new(); private readonly List _waypoints = new(); private MapMarker? _selected; public MapViewModel() { Markers = new ObservableCollection(); WayPoints = new ObservableCollection(); } public ObservableCollection Markers { get; } public ObservableCollection WayPoints { get; } static readonly DependencyProperty ViewProperty = DependencyProperty.Register( nameof(View), typeof(MapViewType), typeof(MapViewModel)); public MapViewType View { get => (MapViewType)GetValue(ViewProperty); set { SetValue(ViewProperty, value); Refresh(); } } public MapMarker Selected { get => _selected; set { _selected = value; Refresh(); } } public void AddWayPoint(MapMarker waypoint) { _waypoints.Add(waypoint); } public void AddMarker(MapMarker marker, bool refresh = false) { _markers.Add(marker); if (refresh) Refresh(); } public void Clear() { _selected = null; _markers.Clear(); _waypoints.Clear(); Refresh(); } public void Refresh() { Markers.Clear(); WayPoints.Clear(); if (View == MapViewType.Current) { foreach (var marker in _markers) { marker.Background = new SolidColorBrush(marker == _selected ? Colors.Yellow : Colors.Orange); if (marker != _selected) Markers.Add(marker); } if (_selected != null) Markers.Add(_selected); } else if (_selected != null) { foreach (var waypoint in _waypoints) { Markers.Add(waypoint); WayPoints.Add(new Point(double.Parse(waypoint.Longitude), double.Parse(waypoint.Latitude))); } } } }