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; 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>(); protected IEnumerable<MapMenuItem> ParentMenuItems => ((ItemsControl)Parent).Items.OfType<MapMenuItem>();

View file

@ -35,8 +35,10 @@ namespace MapControl.UiTools
{ {
Click += async (s, e) => 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>()) foreach (var item in ParentMenuItems.OfType<MapLayerMenuItem>())
{ {
item.IsChecked = map.Children.Contains(item.MapLayer); 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()); 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 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()); var layer = MapLayer ?? (MapLayer = await MapLayerFactory.Invoke());
if (layer == null) if (layer != null)
{ {
return false; if (map.Children.Contains(layer))
}
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 (itemLayer == layer) map.Children.Remove(layer);
{ }
map.Children.Insert(index, itemLayer); else
break; {
} 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) => 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>()) foreach (var item in ParentMenuItems.OfType<MapProjectionMenuItem>())
{ {
item.IsChecked = map.MapProjection.CrsId == item.MapProjection; 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; 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; DataContext = Map;
if (Items.Count > 0 && if (Items.Count > 0 && Items[0] is MapMenuItem item)
Items[0] is MapMenuItem item &&
await item.Execute(Map))
{ {
item.IsChecked = true; await item.Execute(Map);
} }
} }
} }

View file

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