diff --git a/MapUiTools/Shared/MapLayerMenuItem.cs b/MapUiTools/Shared/MapLayerMenuItem.cs index 592cfc7e..11acf835 100644 --- a/MapUiTools/Shared/MapLayerMenuItem.cs +++ b/MapUiTools/Shared/MapLayerMenuItem.cs @@ -1,4 +1,4 @@ -using System; +using System.IO; using System.Linq; using System.Threading.Tasks; #if WPF @@ -24,40 +24,39 @@ namespace MapControl.UiTools #endif public partial class MapLayerMenuItem : MapMenuItem { - public static Func> MapLayerFactory { get; set; } = - async sourcePath => sourcePath.EndsWith(".kmz") || sourcePath.EndsWith(".kml") - ? (FrameworkElement)await GroundOverlay.CreateAsync(sourcePath) - : (FrameworkElement)await GeoImage.CreateAsync(sourcePath); #if AVALONIA [Content] #endif public FrameworkElement MapLayer { get; set; } - public string SourcePath { get; set; } - public override bool GetIsChecked(MapBase map) { return MapLayer != null && map.Children.Contains(MapLayer); } - public override async Task ExecuteAsync(MapBase map) + public override Task ExecuteAsync(MapBase map) { - MapLayer ??= await MapLayerFactory?.Invoke(SourcePath); - if (MapLayer != null) { map.MapLayer = MapLayer; } + + return Task.CompletedTask; } } public partial class MapOverlayMenuItem : MapLayerMenuItem { + public string SourcePath { get; set; } + public int InsertOrder { get; set; } public override async Task ExecuteAsync(MapBase map) { - MapLayer ??= await MapLayerFactory?.Invoke(SourcePath); + if (MapLayer == null) + { + await CreateMapLayer(); + } if (MapLayer != null) { @@ -81,5 +80,19 @@ namespace MapControl.UiTools } } } + + protected virtual async Task CreateMapLayer() + { + var ext = Path.GetExtension(SourcePath).ToLower(); + + if (ext == ".kmz" || ext == ".kml") + { + MapLayer = await GroundOverlay.CreateAsync(SourcePath); + } + else + { + MapLayer = await GeoImage.CreateAsync(SourcePath); + } + } } }