MapOverlayMenuItem InsertOrder

This commit is contained in:
ClemensFischer 2025-09-08 17:47:57 +02:00
parent 2cb6049f72
commit 24a5ba565f
5 changed files with 23 additions and 28 deletions

View file

@ -33,7 +33,7 @@ namespace MapControl.UiTools
protected override bool GetIsChecked(MapBase map)
{
return map.Children.Contains(MapLayer);
return MapLayer != null && map.Children.Contains(MapLayer);
}
public override async Task Execute(MapBase map)
@ -52,6 +52,8 @@ namespace MapControl.UiTools
public class MapOverlayMenuItem : MapLayerMenuItem
{
public int InsertOrder { get; set; }
public override async Task Execute(MapBase map)
{
if (MapLayer == null)
@ -67,24 +69,17 @@ namespace MapControl.UiTools
}
else
{
var index = 1;
foreach (var mapLayer in ParentMenuItems
var insertIndex = ParentMenuItems
.OfType<MapOverlayMenuItem>()
.Select(item => item.MapLayer)
.Where(mapLayer => mapLayer != null))
{
if (mapLayer == MapLayer)
{
map.Children.Insert(index, mapLayer);
break;
}
.Where(item => item.InsertOrder <= InsertOrder && item.GetIsChecked(map))
.Count();
if (map.Children.Contains(mapLayer))
{
index++;
}
if (map.MapLayer != null)
{
insertIndex++;
}
map.Children.Insert(insertIndex, MapLayer);
}
}
}

View file

@ -187,16 +187,16 @@
map:MapPanel.BoundingBox="53.54031,8.08594,53.74871,8.43750"/>
</tools:MapOverlayMenuItem>
<tools:MapOverlayMenuItem x:Name="sampleOverlayMenuItem" Text="Mount Etna KML"/>
<tools:MapOverlayMenuItem Text="Seamarks">
<tools:MapOverlayMenuItem Text="Seamarks" InsertOrder="1">
<map:MapTileLayer
TileSource="http://tiles.openseamap.org/seamark/{z}/{x}/{y}.png"
SourceName="Seamarks"
MinZoomLevel="9" MaxZoomLevel="18"/>
</tools:MapOverlayMenuItem>
<tools:MapOverlayMenuItem Text="Graticule">
<tools:MapOverlayMenuItem Text="Graticule" InsertOrder="2">
<map:MapGraticule Opacity="0.7" StrokeThickness="0.3"/>
</tools:MapOverlayMenuItem>
<tools:MapOverlayMenuItem Text="Scale">
<tools:MapOverlayMenuItem Text="Scale" InsertOrder="2">
<map:MapScale HorizontalAlignment="Center" VerticalAlignment="Bottom"/>
</tools:MapOverlayMenuItem>
</tools:MenuButton>

View file

@ -234,16 +234,16 @@
map:MapPanel.BoundingBox="53.54031,8.08594,53.74871,8.43750"/>
</tools:MapOverlayMenuItem>
<tools:MapOverlayMenuItem x:Name="sampleOverlayMenuItem" Text="Mount Etna KML"/>
<tools:MapOverlayMenuItem Text="Seamarks">
<tools:MapOverlayMenuItem Text="Seamarks" InsertOrder="1">
<map:MapTileLayer
TileSource="http://tiles.openseamap.org/seamark/{z}/{x}/{y}.png"
SourceName="Seamarks"
MinZoomLevel="9" MaxZoomLevel="18"/>
</tools:MapOverlayMenuItem>
<tools:MapOverlayMenuItem Text="Graticule">
<tools:MapOverlayMenuItem Text="Graticule" InsertOrder="2">
<map:MapGraticule Opacity="0.7"/>
</tools:MapOverlayMenuItem>
<tools:MapOverlayMenuItem Text="Scale">
<tools:MapOverlayMenuItem Text="Scale" InsertOrder="2">
<map:MapScale HorizontalAlignment="Center" VerticalAlignment="Bottom"/>
</tools:MapOverlayMenuItem>
</tools:MenuButton>

View file

@ -260,16 +260,16 @@
map:MapPanel.BoundingBox="53.54031,8.08594,53.74871,8.43750"/>
</tools:MapOverlayMenuItem>
<tools:MapOverlayMenuItem x:Name="sampleOverlayMenuItem" Text="Mount Etna KML"/>
<tools:MapOverlayMenuItem Text="Seamarks">
<tools:MapOverlayMenuItem Text="Seamarks" InsertOrder="1">
<map:MapTileLayer
TileSource="http://tiles.openseamap.org/seamark/{z}/{x}/{y}.png"
SourceName="Seamarks"
MinZoomLevel="9" MaxZoomLevel="18"/>
</tools:MapOverlayMenuItem>
<tools:MapOverlayMenuItem Text="Graticule">
<tools:MapOverlayMenuItem Text="Graticule" InsertOrder="2">
<map:MapGraticule Opacity="0.7"/>
</tools:MapOverlayMenuItem>
<tools:MapOverlayMenuItem Text="Scale">
<tools:MapOverlayMenuItem Text="Scale" InsertOrder="2">
<map:MapScale HorizontalAlignment="Center" VerticalAlignment="Bottom"/>
</tools:MapOverlayMenuItem>
</tools:MenuButton>

View file

@ -239,16 +239,16 @@
map:MapPanel.BoundingBox="53.54031,8.08594,53.74871,8.43750"/>
</tools:MapOverlayMenuItem>
<tools:MapOverlayMenuItem x:Name="sampleOverlayMenuItem" Text="Mount Etna KML"/>
<tools:MapOverlayMenuItem Text="Seamarks">
<tools:MapOverlayMenuItem Text="Seamarks" InsertOrder="1">
<map:MapTileLayer
TileSource="http://tiles.openseamap.org/seamark/{z}/{x}/{y}.png"
SourceName="Seamarks"
MinZoomLevel="9" MaxZoomLevel="18"/>
</tools:MapOverlayMenuItem>
<tools:MapOverlayMenuItem Text="Graticule">
<tools:MapOverlayMenuItem Text="Graticule" InsertOrder="2">
<map:MapGraticule Opacity="0.7"/>
</tools:MapOverlayMenuItem>
<tools:MapOverlayMenuItem Text="Scale">
<tools:MapOverlayMenuItem Text="Scale" InsertOrder="2">
<map:MapScale HorizontalAlignment="Center" VerticalAlignment="Bottom"/>
</tools:MapOverlayMenuItem>
</tools:MenuButton>