Files
Lattice/Lattice.Themes.Core/ThemePack.cs
2026-01-18 16:33:35 +03:00

111 lines
2.7 KiB
C#

using System.ComponentModel;
namespace Lattice.Themes;
/// <summary>
/// Базовый класс для пакетов тем.
/// </summary>
public abstract class ThemePack : INotifyPropertyChanged
{
private string _name;
private string _description = string.Empty;
private string _version = "1.0.0";
private bool _isDark;
public event PropertyChangedEventHandler? PropertyChanged;
protected ThemePack(string name)
{
_name = name ?? throw new ArgumentNullException(nameof(name));
}
/// <summary>
/// Название темы.
/// </summary>
public string Name
{
get => _name;
set
{
if (_name != value)
{
_name = value;
OnPropertyChanged(nameof(Name));
}
}
}
/// <summary>
/// Описание темы.
/// </summary>
public string Description
{
get => _description;
set
{
if (_description != value)
{
_description = value;
OnPropertyChanged(nameof(Description));
}
}
}
/// <summary>
/// Версия темы.
/// </summary>
public string Version
{
get => _version;
set
{
if (_version != value)
{
_version = value;
OnPropertyChanged(nameof(Version));
}
}
}
/// <summary>
/// Определяет, является ли тема тёмной.
/// </summary>
public bool IsDark
{
get => _isDark;
set
{
if (_isDark != value)
{
_isDark = value;
OnPropertyChanged(nameof(IsDark));
}
}
}
/// <summary>
/// Возвращает список словарей ресурсов, которые должны быть подключены.
/// </summary>
public abstract IReadOnlyList<Uri> GetResourceUris();
/// <summary>
/// Вызывается при применении темы.
/// </summary>
public virtual void OnApply()
{
// Может быть переопределено в производных классах
}
/// <summary>
/// Вызывается при удалении темы.
/// </summary>
public virtual void OnRemove()
{
// Может быть переопределено в производных классах
}
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}