XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
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规划时同步到游戏,并切换游戏星图为恒星类别显示。";
    }
}