Execute method implementation

This commit is contained in:
ClemensFischer 2025-03-21 18:48:33 +01:00
parent 45ab678d5b
commit 388e446b96
6 changed files with 43 additions and 43 deletions

View file

@ -26,7 +26,7 @@ namespace MapControl.UiTools
set => Header = value;
}
public abstract Task<bool> Execute(MapBase map);
public abstract Task Execute(MapBase map);
protected IEnumerable<MapMenuItem> ParentMenuItems => ((ItemsControl)Parent).Items.OfType<MapMenuItem>();

View file

@ -35,8 +35,10 @@ namespace MapControl.UiTools
{
Click += async (s, e) =>
{
if (DataContext is MapBase map && await Execute(map))
if (DataContext is MapBase map)
{
await Execute(map);
foreach (var item in ParentMenuItems.OfType<MapLayerMenuItem>())
{
item.IsChecked = map.Children.Contains(item.MapLayer);
@ -45,58 +47,54 @@ namespace MapControl.UiTools
};
}
public override async Task<bool> Execute(MapBase map)
public override async Task Execute(MapBase map)
{
var layer = MapLayer ?? (MapLayer = await MapLayerFactory.Invoke());
if (layer == null)
if (layer != null)
{
return false;
map.MapLayer = layer;
IsChecked = true;
}
map.MapLayer = layer;
return true;
}
}
public class MapOverlayMenuItem : MapLayerMenuItem
{
public override async Task<bool> Execute(MapBase map)
public override async Task Execute(MapBase map)
{
var layer = MapLayer ?? (MapLayer = await MapLayerFactory.Invoke());
if (layer == null)
if (layer != null)
{
return false;
}
if (map.Children.Contains(layer))
{
map.Children.Remove(layer);
}
else
{
var index = 1;
foreach (var itemLayer in ParentMenuItems?
.OfType<MapOverlayMenuItem>()
.Select(item => item.MapLayer)
.Where(itemLayer => itemLayer != null))
if (map.Children.Contains(layer))
{
if (itemLayer == layer)
{
map.Children.Insert(index, itemLayer);
break;
}
map.Children.Remove(layer);
}
else
{
var index = 1;
if (map.Children.Contains(itemLayer))
foreach (var itemLayer in ParentMenuItems?
.OfType<MapOverlayMenuItem>()
.Select(item => item.MapLayer)
.Where(itemLayer => itemLayer != null))
{
index++;
if (itemLayer == layer)
{
map.Children.Insert(index, itemLayer);
break;
}
if (map.Children.Contains(itemLayer))
{
index++;
}
}
}
}
return true;
IsChecked = true;
}
}
}
}

View file

@ -30,8 +30,10 @@ namespace MapControl.UiTools
{
Click += async (s, e) =>
{
if (DataContext is MapBase map && await Execute(map))
if (DataContext is MapBase map)
{
await Execute(map);
foreach (var item in ParentMenuItems.OfType<MapProjectionMenuItem>())
{
item.IsChecked = map.MapProjection.CrsId == item.MapProjection;
@ -40,7 +42,7 @@ namespace MapControl.UiTools
};
}
public override Task<bool> Execute(MapBase map)
public override Task Execute(MapBase map)
{
bool success = true;
@ -57,7 +59,9 @@ namespace MapControl.UiTools
}
}
return Task.FromResult(success);
IsChecked = success;
return Task.CompletedTask;
}
}
}

View file

@ -33,11 +33,9 @@ namespace MapControl.UiTools
{
DataContext = Map;
if (Items.Count > 0 &&
Items[0] is MapMenuItem item &&
await item.Execute(Map))
if (Items.Count > 0 && Items[0] is MapMenuItem item)
{
item.IsChecked = true;
await item.Execute(Map);
}
}
}

View file

@ -13,7 +13,7 @@ namespace MapControl.UiTools
set => Header = value;
}
public abstract Task<bool> Execute(MapBase map);
public abstract Task Execute(MapBase map);
protected IEnumerable<MapMenuItem> ParentMenuItems => ((ItemsControl)Parent).Items.OfType<MapMenuItem>();
}

View file

@ -13,7 +13,7 @@ namespace MapControl.UiTools
{
public abstract class MapMenuItem : ToggleMenuFlyoutItem
{
public abstract Task<bool> Execute(MapBase map);
public abstract Task Execute(MapBase map);
protected IEnumerable<MapMenuItem> ParentMenuItems
=> ((Panel)VisualTreeHelper.GetParent(this)).Children.OfType<MapMenuItem>();