Files
gregExtractor/GUI/ViewModels/MainViewModel.cs
T

108 lines
3.4 KiB
C#

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
namespace gregExtractor.GUI.ViewModels;
public sealed class MainViewModel : ObservableObject
{
private NavigationItemViewModel? _selectedNavigationItem;
private object? _currentPageViewModel;
private bool _isMaximized;
public MainViewModel()
{
Extractor = new ExtractorViewModel();
Coverage = new CoverageViewModel();
Sync = new SyncViewModel();
Create = new CreateViewModel();
Hooks = new HookBrowserViewModel();
Settings = new SettingsViewModel();
NavigationItems.Add(new NavigationItemViewModel("extractor", "Extractor", "🔍"));
NavigationItems.Add(new NavigationItemViewModel("coverage", "Coverage", "📊"));
NavigationItems.Add(new NavigationItemViewModel("sync", "Sync", "🔄"));
NavigationItems.Add(new NavigationItemViewModel("create", "Create", "⚡"));
NavigationItems.Add(new NavigationItemViewModel("hooks", "Hooks", "📋"));
NavigationItems.Add(new NavigationItemViewModel("settings", "Settings", "⚙"));
SelectNavItemCommand = new RelayCommand<NavigationItemViewModel?>(SelectNavItem);
SelectNavItem(NavigationItems.FirstOrDefault());
_ = Hooks.RefreshAsync();
}
public ExtractorViewModel Extractor { get; }
public CoverageViewModel Coverage { get; }
public SyncViewModel Sync { get; }
public CreateViewModel Create { get; }
public HookBrowserViewModel Hooks { get; }
public SettingsViewModel Settings { get; }
public ObservableCollection<NavigationItemViewModel> NavigationItems { get; } = new();
public NavigationItemViewModel? SelectedNavigationItem
{
get => _selectedNavigationItem;
set => SetProperty(ref _selectedNavigationItem, value);
}
public object? CurrentPageViewModel
{
get => _currentPageViewModel;
set => SetProperty(ref _currentPageViewModel, value);
}
public string GamePathHint => string.IsNullOrWhiteSpace(Extractor.GamePath) ? "Kein Spiel gefunden" : Extractor.GamePath;
public bool IsGameDetected => !string.IsNullOrWhiteSpace(Extractor.GamePath);
public string VersionText => "v1.0.0";
public bool IsMaximized
{
get => _isMaximized;
set => SetProperty(ref _isMaximized, value);
}
public IRelayCommand<NavigationItemViewModel?> SelectNavItemCommand { get; }
public void WireBrowseHandler(Func<string?, Task<string?>> browseHandler)
{
Extractor.BrowseFolderHandler = browseHandler;
Coverage.BrowseFolderHandler = browseHandler;
Sync.BrowseFolderHandler = browseHandler;
Create.BrowseFolderHandler = browseHandler;
Settings.BrowseFolderHandler = browseHandler;
}
private void SelectNavItem(NavigationItemViewModel? item)
{
if (item is null)
return;
foreach (NavigationItemViewModel navItem in NavigationItems)
navItem.IsSelected = ReferenceEquals(navItem, item);
SelectedNavigationItem = item;
CurrentPageViewModel = item.Key switch
{
"extractor" => Extractor,
"coverage" => Coverage,
"sync" => Sync,
"create" => Create,
"hooks" => Hooks,
"settings" => Settings,
_ => Extractor,
};
OnPropertyChanged(nameof(GamePathHint));
OnPropertyChanged(nameof(IsGameDetected));
}
}