using System.ComponentModel;
namespace Lattice.Themes;
///
/// Базовый класс для пакетов тем.
///
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));
}
///
/// Название темы.
///
public string Name
{
get => _name;
set
{
if (_name != value)
{
_name = value;
OnPropertyChanged(nameof(Name));
}
}
}
///
/// Описание темы.
///
public string Description
{
get => _description;
set
{
if (_description != value)
{
_description = value;
OnPropertyChanged(nameof(Description));
}
}
}
///
/// Версия темы.
///
public string Version
{
get => _version;
set
{
if (_version != value)
{
_version = value;
OnPropertyChanged(nameof(Version));
}
}
}
///
/// Определяет, является ли тема тёмной.
///
public bool IsDark
{
get => _isDark;
set
{
if (_isDark != value)
{
_isDark = value;
OnPropertyChanged(nameof(IsDark));
}
}
}
///
/// Возвращает список словарей ресурсов, которые должны быть подключены.
///
public abstract IReadOnlyList GetResourceUris();
///
/// Вызывается при применении темы.
///
public virtual void OnApply()
{
// Может быть переопределено в производных классах
}
///
/// Вызывается при удалении темы.
///
public virtual void OnRemove()
{
// Может быть переопределено в производных классах
}
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}