using XFEEDToolBox.ViewModels;
namespace XFEEDToolBox.Views;
public sealed partial class SystemMapCataloguePage:Page
{
public ToolboxViewModel ViewModel=>App.ViewModel;
private bool choosing;
public SystemMapCataloguePage()
{
InitializeComponent();NavigationCacheMode=Microsoft.UI.Xaml.Navigation.NavigationCacheMode.Required;
Loaded+=(_,_)=>{ViewModel.RemoteMapChanged+=RefreshScene;ViewModel.PropertyChanged+=ModelChanged;RefreshScene();Resize();};
Unloaded+=(_,_)=>{ViewModel.RemoteMapChanged-=RefreshScene;ViewModel.PropertyChanged-=ModelChanged;};
SizeChanged+=(_,_)=>Resize();
SystemMap.LocationSelected+=(_,location)=>
{
var row=ViewModel.RemoteMapLocations.FirstOrDefault(value=>value.Record.Identity==location.Identity);if(row is null)return;
choosing=true;try{ViewModel.RemoteMapSelection=row;LocationsList.ScrollIntoView(row);}finally{choosing=false;}
};
}
private void Resize()
{
var compact=ActualWidth<1000;CatalogueColumn.Width=new(compact?210:285);DetailsColumn.Width=new(compact?210:250);
Overlay.ColumnSpacing=compact?8:14;SystemMap.SetOverlayInsets(CatalogueColumn.Width.Value+32,DetailsColumn.Width.Value+32);
}
private void RefreshScene(){SystemMap.SetSnapshot(ViewModel.RemoteMapSnapshot,ViewModel.RemoteMapLocations.Select(row=>row.Record).ToArray());SystemMap.SetSelection(ViewModel.RemoteMapSelection?.Record.Identity);}
private void ModelChanged(object? sender,System.ComponentModel.PropertyChangedEventArgs args)
{if(args.PropertyName==nameof(ViewModel.RemoteMapSelection))SystemMap.SetSelection(ViewModel.RemoteMapSelection?.Record.Identity);}
private void LocationSelectionChanged(object sender,SelectionChangedEventArgs args)
{SystemMap.SetSelection(ViewModel.RemoteMapSelection?.Record.Identity);if(!choosing&&args.AddedItems.Count>0)SystemMap.FocusSelection();}
private void BackClicked(object sender,RoutedEventArgs args)=>AppShellPage.Current?.Navigate(typeof(NavigationPage));
private void OverviewClicked(object sender,RoutedEventArgs args)=>SystemMap.ResetCamera();
private void FocusClicked(object sender,RoutedEventArgs args)=>SystemMap.FocusSelection();
private void ZoomInClicked(object sender,RoutedEventArgs args)=>SystemMap.Zoom(1);
private void ZoomOutClicked(object sender,RoutedEventArgs args)=>SystemMap.Zoom(-1);
internal Controls.LocalSystemMapView MapForProbe=>SystemMap;
}
using XFEEDToolBox.ViewModels;
namespace XFEEDToolBox.Views;
public sealed partial class SystemMapCataloguePage:Page
{
public ToolboxViewModel ViewModel=>App.ViewModel;
private bool choosing;
public SystemMapCataloguePage()
{
InitializeComponent();NavigationCacheMode=Microsoft.UI.Xaml.Navigation.NavigationCacheMode.Required;
Loaded+=(_,_)=>{ViewModel.RemoteMapChanged+=RefreshScene;ViewModel.PropertyChanged+=ModelChanged;RefreshScene();Resize();};
Unloaded+=(_,_)=>{ViewModel.RemoteMapChanged-=RefreshScene;ViewModel.PropertyChanged-=ModelChanged;};
SizeChanged+=(_,_)=>Resize();
SystemMap.LocationSelected+=(_,location)=>
{
var row=ViewModel.RemoteMapLocations.FirstOrDefault(value=>value.Record.Identity==location.Identity);if(row is null)return;
choosing=true;try{ViewModel.RemoteMapSelection=row;LocationsList.ScrollIntoView(row);}finally{choosing=false;}
};
}
private void Resize()
{
var compact=ActualWidth<1000;CatalogueColumn.Width=new(compact?210:285);DetailsColumn.Width=new(compact?210:250);
Overlay.ColumnSpacing=compact?8:14;SystemMap.SetOverlayInsets(CatalogueColumn.Width.Value+32,DetailsColumn.Width.Value+32);
}
private void RefreshScene(){SystemMap.SetSnapshot(ViewModel.RemoteMapSnapshot,ViewModel.RemoteMapLocations.Select(row=>row.Record).ToArray());SystemMap.SetSelection(ViewModel.RemoteMapSelection?.Record.Identity);}
private void ModelChanged(object? sender,System.ComponentModel.PropertyChangedEventArgs args)
{if(args.PropertyName==nameof(ViewModel.RemoteMapSelection))SystemMap.SetSelection(ViewModel.RemoteMapSelection?.Record.Identity);}
private void LocationSelectionChanged(object sender,SelectionChangedEventArgs args)
{SystemMap.SetSelection(ViewModel.RemoteMapSelection?.Record.Identity);if(!choosing&&args.AddedItems.Count>0)SystemMap.FocusSelection();}
private void BackClicked(object sender,RoutedEventArgs args)=>AppShellPage.Current?.Navigate(typeof(NavigationPage));
private void OverviewClicked(object sender,RoutedEventArgs args)=>SystemMap.ResetCamera();
private void FocusClicked(object sender,RoutedEventArgs args)=>SystemMap.FocusSelection();
private void ZoomInClicked(object sender,RoutedEventArgs args)=>SystemMap.Zoom(1);
private void ZoomOutClicked(object sender,RoutedEventArgs args)=>SystemMap.Zoom(-1);
internal Controls.LocalSystemMapView MapForProbe=>SystemMap;
}