OverviewFilesCommitsIssuesDocsReleasesPeers

ifsrenderer-linux / WpfDisplay / ViewModels / PaletteManagerViewModel.cs

61 lines · csharp ref:
using System;
using System.Threading.Tasks;

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;

using IFSEngine.Model;
using WpfDisplay.Services;

namespace WpfDisplay.ViewModels;

/// <summary>
/// Main viewmodel for the Palette Manager window.
/// Manages page switching (browser ↔ editor) and provides the library service.
/// </summary>
public partial class PaletteManagerViewModel : ObservableObject
{
    public PaletteBrowserViewModel BrowserViewModel { get; }
    public PaletteEditorViewModel? EditorViewModel { get; private set; }

    [ObservableProperty]
    public partial bool IsEditorPage { get; set; }

    public PaletteManagerViewModel(PaletteLibraryService library, MainViewModel mainVm)
    {
        BrowserViewModel = new PaletteBrowserViewModel(library, mainVm);
    }

    public async Task InitializeAsync()
    {
        await BrowserViewModel.LoadAsync();
    }

    [RelayCommand]
    private void NavigateToBrowser()
    {
        IsEditorPage = false;
    }

    public void NavigateToEditor(ColorPalette palette, PaletteCollection? collection, bool isNew = false)
    {
        EditorViewModel = new PaletteEditorViewModel(BrowserViewModel.Library, BrowserViewModel.MainVm, palette, collection, isNew);
        EditorViewModel.OnReturnToBrowser = async () =>
        {
            // After returning, reload browser to reflect changes
            await BrowserViewModel.ReloadAsync();
            // Navigation back to browser is handled by the window
            OnReturnToBrowser?.Invoke();
        };

        // Build collection palette list for left column
        if (collection != null)
        {
            foreach (var p in collection.Palettes)
                EditorViewModel.CollectionPalettes.Add(new ColorPaletteViewModel(p));
        }
    }

    public event Action? OnReturnToBrowser;
}