using XFEEDToolBox.Core.Galaxy;
using XFEEDToolBox.Core.Navigation;
namespace XFEEDToolBox.Controls;
public sealed partial class GalaxyRouteSettingsPanel
{
private readonly CheckBox starRoute=new(){Content="将恒星类别筛选用于路线",IsThreeState=true};
private readonly TextBlock starSummary=new(){FontSize=11,TextWrapping=TextWrapping.Wrap};
private readonly Dictionary<GameRouteStarClassGroup,CheckBox> starGroups=[];
private void AddStarClassControls(StackPanel root)
{
var grid=new Grid{ColumnSpacing=8};for(var i=0;i<3;i++)grid.ColumnDefinitions.Add(new());
grid.Resources[typeof(CheckBox)]=GalaxyFilterPanel.CreateStaticCheckBoxStyle();
var names=new[]{"O","B","A","F","G","K","M","L","T","Y","原恒星","碳星","沃尔夫–拉叶星","白矮星","非主序星"};
foreach(var group in Enum.GetValues<GameRouteStarClassGroup>())
{
var index=(int)group;if(index%3==0)grid.RowDefinitions.Add(new(){Height=GridLength.Auto});
var item=new CheckBox{Content=names[index],MinWidth=0,FontSize=11};starGroups[group]=item;
Grid.SetRow(item,index/3);Grid.SetColumn(item,index%3);grid.Children.Add(item);
item.Click+=(_,_)=>
{
if(updating)return;
var current=Options.StarClassFilter??new();
Options=Options with{StarClassFilter=current with{SelectedGroups=starGroups.Where(pair=>pair.Value.IsChecked==true).Select(pair=>pair.Key).ToArray()}};
};
}
var choose=new Button{Content="选择恒星类别…",HorizontalAlignment=HorizontalAlignment.Stretch};
choose.Flyout=new Flyout{Content=grid};
var copy=new Button{Content="采用星图所选类别",HorizontalAlignment=HorizontalAlignment.Stretch};
copy.Click+=(_,_)=>
{
if(CurrentFilter?.Category!=GalaxyFilterCategory.StarClass)
{starSummary.Text="请先在星图中选择恒星类别筛选。";return;}
if(!GameRouteStarClassFilter.TryFromStarClasses(CurrentFilter.Values,starRoute.IsChecked??true,out var filter,out var reason))
{starSummary.Text=reason;return;}
Options=Options with{StarClassFilter=filter};
};
starRoute.Click+=(_,_)=>
{
if(updating)return;
Options=Options with{StarClassFilter=starRoute.IsChecked is{} enabled?(Options.StarClassFilter??new()) with{AffectsRoutePlotting=enabled}:null};
};
root.Children.Add(starRoute);root.Children.Add(choose);root.Children.Add(copy);root.Children.Add(starSummary);
}
private void RefreshStarClassControls(GameRouteStarClassFilter? filter)
{
starRoute.IsChecked=filter?.AffectsRoutePlotting;
foreach(var (group,item) in starGroups)item.IsChecked=filter?.SelectedGroups.Contains(group)??true;
starSummary.Text=filter is null?"横线:沿用游戏恒星类别筛选。":$"已选 {filter.SelectedGroups.Count} / 15 类 · {(filter.AffectsRoutePlotting?"用于路线":"路线不限类别")}\n规划时同步到游戏,并切换游戏星图为恒星类别显示。";
}
}
using XFEEDToolBox.Core.Galaxy;
using XFEEDToolBox.Core.Navigation;
namespace XFEEDToolBox.Controls;
public sealed partial class GalaxyRouteSettingsPanel
{
private readonly CheckBox starRoute=new(){Content="将恒星类别筛选用于路线",IsThreeState=true};
private readonly TextBlock starSummary=new(){FontSize=11,TextWrapping=TextWrapping.Wrap};
private readonly Dictionary<GameRouteStarClassGroup,CheckBox> starGroups=[];
private void AddStarClassControls(StackPanel root)
{
var grid=new Grid{ColumnSpacing=8};for(var i=0;i<3;i++)grid.ColumnDefinitions.Add(new());
grid.Resources[typeof(CheckBox)]=GalaxyFilterPanel.CreateStaticCheckBoxStyle();
var names=new[]{"O","B","A","F","G","K","M","L","T","Y","原恒星","碳星","沃尔夫–拉叶星","白矮星","非主序星"};
foreach(var group in Enum.GetValues<GameRouteStarClassGroup>())
{
var index=(int)group;if(index%3==0)grid.RowDefinitions.Add(new(){Height=GridLength.Auto});
var item=new CheckBox{Content=names[index],MinWidth=0,FontSize=11};starGroups[group]=item;
Grid.SetRow(item,index/3);Grid.SetColumn(item,index%3);grid.Children.Add(item);
item.Click+=(_,_)=>
{
if(updating)return;
var current=Options.StarClassFilter??new();
Options=Options with{StarClassFilter=current with{SelectedGroups=starGroups.Where(pair=>pair.Value.IsChecked==true).Select(pair=>pair.Key).ToArray()}};
};
}
var choose=new Button{Content="选择恒星类别…",HorizontalAlignment=HorizontalAlignment.Stretch};
choose.Flyout=new Flyout{Content=grid};
var copy=new Button{Content="采用星图所选类别",HorizontalAlignment=HorizontalAlignment.Stretch};
copy.Click+=(_,_)=>
{
if(CurrentFilter?.Category!=GalaxyFilterCategory.StarClass)
{starSummary.Text="请先在星图中选择恒星类别筛选。";return;}
if(!GameRouteStarClassFilter.TryFromStarClasses(CurrentFilter.Values,starRoute.IsChecked??true,out var filter,out var reason))
{starSummary.Text=reason;return;}
Options=Options with{StarClassFilter=filter};
};
starRoute.Click+=(_,_)=>
{
if(updating)return;
Options=Options with{StarClassFilter=starRoute.IsChecked is{} enabled?(Options.StarClassFilter??new()) with{AffectsRoutePlotting=enabled}:null};
};
root.Children.Add(starRoute);root.Children.Add(choose);root.Children.Add(copy);root.Children.Add(starSummary);
}
private void RefreshStarClassControls(GameRouteStarClassFilter? filter)
{
starRoute.IsChecked=filter?.AffectsRoutePlotting;
foreach(var (group,item) in starGroups)item.IsChecked=filter?.SelectedGroups.Contains(group)??true;
starSummary.Text=filter is null?"横线:沿用游戏恒星类别筛选。":$"已选 {filter.SelectedGroups.Count} / 15 类 · {(filter.AffectsRoutePlotting?"用于路线":"路线不限类别")}\n规划时同步到游戏,并切换游戏星图为恒星类别显示。";
}
}