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

XFEToolBox

【WPF】XFE工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using XFEToolBox.Client.Utilities;
using XFEToolBox.Client.ViewModel.Pages;
using XFEToolBox.Client.Model;
using XFEToolBox.Client.Views.Pages.Popups;
using XFEToolBox.Client.Views.Windows;

namespace XFEToolBox.Client.Views.Pages;

/// <summary>
/// MainPage.xaml 的交互逻辑
/// </summary>
public partial class MainPage : Page
{
    public static MainPage? Current { get; set; } = new();
    public MainPageViewModel ViewModel { get; set; }

    public MainPage()
    {
        Current = this;
        InitializeComponent();
        ViewModel = new(this);
        DataContext = ViewModel;
    }

    private async void MainCarousel_RetryRequested(object? sender, EventArgs e) =>
        await ViewModel.ReloadAsync();

    private async void RecentItem_Click(object sender, RoutedEventArgs e)
    {
        if (sender is Button { CommandParameter: RecentUsageCardViewModel card })
            await ViewModel.OpenRecentItemAsync(card);
    }

    private void RemoveRecentItem_Click(object sender, RoutedEventArgs e)
    {
        e.Handled = true;
        if (sender is Button { CommandParameter: RecentUsageCardViewModel card })
            ViewModel.RemoveRecentItem(card);
    }

    private void ClearRecentUsage_Click(object sender, RoutedEventArgs e)
    {
        if (ViewModel.RecentItems.Count == 0) return;
        if (PopupHelper.ShowConfirmDialog("确定清空全部最近使用记录吗?", true, "清空记录") == MessageBoxResult.OK)
            ViewModel.ClearRecentUsage();
    }

    private void OpenToolBox_Click(object sender, RoutedEventArgs e) => ViewModel.OpenToolBox();

    private void OpenCommandPalette_Click(object sender, RoutedEventArgs e) =>
        ViewModel.OpenCommandPalette(HomeSearchBox.Text);

    private void HomeSearchBox_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key != Key.Enter) return;
        ViewModel.OpenCommandPalette(HomeSearchBox.Text);
        e.Handled = true;
    }

    private async void LauncherItem_Click(object sender, RoutedEventArgs e)
    {
        if (sender is Button { CommandParameter: LauncherItemViewModel item })
            await ViewModel.ExecuteLauncherItemAsync(item);
    }

    private void TogglePin_Click(object sender, RoutedEventArgs e)
    {
        e.Handled = true;
        if (sender is not Button { CommandParameter: LauncherItemViewModel item }) return;
        if (!ViewModel.TogglePinned(item))
            PopupHelper.ShowConfirmDialog($"最多只能固定 {PinnedItemService.MaximumPinnedItems} 项。", confirmText: "知道了");
    }

    private void AdminServerPanel_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) =>
        MainWindow.Current?.ViewModel.NavigateToPageCommand.Execute("serverOverview");

    private void ManagePinnedItems_Click(object sender, RoutedEventArgs e) =>
        PopupHelper.ShowDialog(new PinnedItemsPopupPage(), new PopupWindowOptions
        {
            Title = "快速访问",
            Subtitle = "管理主页固定项",
            Width = 560,
            Height = 520,
            ContentMargin = new Thickness(0)
        });
}