111 lines
2.7 KiB
C#
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));
|
|
}
|
|
} |