2026-06-03 00:50:52 +08:00
|
|
|
using CommunityToolkit.Mvvm.ComponentModel;
|
2026-06-03 12:32:56 +08:00
|
|
|
using FluentIcons.Common;
|
2026-06-03 00:50:52 +08:00
|
|
|
using LanDesktopPLONDS.Installer.Models;
|
|
|
|
|
|
|
|
|
|
namespace LanDesktopPLONDS.Installer.ViewModels;
|
|
|
|
|
|
|
|
|
|
public sealed partial class InstallerStepViewModel(
|
|
|
|
|
InstallerStepId stepId,
|
|
|
|
|
string title,
|
2026-06-03 12:32:56 +08:00
|
|
|
Icon icon) : ObservableObject
|
2026-06-03 00:50:52 +08:00
|
|
|
{
|
|
|
|
|
[ObservableProperty]
|
|
|
|
|
private bool _isUnlocked;
|
|
|
|
|
|
|
|
|
|
[ObservableProperty]
|
|
|
|
|
private bool _isSelected;
|
|
|
|
|
|
2026-06-03 12:32:56 +08:00
|
|
|
[ObservableProperty]
|
|
|
|
|
private bool _isCompleted;
|
|
|
|
|
|
2026-06-03 00:50:52 +08:00
|
|
|
public InstallerStepId StepId { get; } = stepId;
|
|
|
|
|
|
|
|
|
|
public string Title { get; } = title;
|
|
|
|
|
|
2026-06-03 12:32:56 +08:00
|
|
|
public Icon Icon { get; } = icon;
|
|
|
|
|
|
|
|
|
|
public bool IsLocked => !IsUnlocked;
|
|
|
|
|
|
|
|
|
|
public Icon DisplayIcon => IsLocked
|
|
|
|
|
? Icon.LockClosed
|
|
|
|
|
: IsCompleted
|
|
|
|
|
? Icon.CheckmarkCircle
|
|
|
|
|
: Icon;
|
|
|
|
|
|
|
|
|
|
public bool IsAvailable => IsUnlocked && !IsSelected && !IsCompleted;
|
|
|
|
|
|
|
|
|
|
partial void OnIsUnlockedChanged(bool value)
|
|
|
|
|
{
|
|
|
|
|
_ = value;
|
|
|
|
|
OnPropertyChanged(nameof(IsLocked));
|
|
|
|
|
OnPropertyChanged(nameof(IsAvailable));
|
|
|
|
|
OnPropertyChanged(nameof(DisplayIcon));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
partial void OnIsSelectedChanged(bool value)
|
|
|
|
|
{
|
|
|
|
|
_ = value;
|
|
|
|
|
OnPropertyChanged(nameof(IsAvailable));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
partial void OnIsCompletedChanged(bool value)
|
|
|
|
|
{
|
|
|
|
|
_ = value;
|
|
|
|
|
OnPropertyChanged(nameof(DisplayIcon));
|
|
|
|
|
OnPropertyChanged(nameof(IsAvailable));
|
|
|
|
|
}
|
2026-06-03 00:50:52 +08:00
|
|
|
}
|