Files
Lattice/Lattice.UI.Docking/Implementations/DockControlBase.cs
2026-01-27 06:07:15 +03:00

113 lines
2.7 KiB
C#

using Lattice.Core.Docking.Abstractions;
using Lattice.Core.Docking.Engine;
using Lattice.UI.Docking.Abstractions;
using System.ComponentModel;
namespace Lattice.UI.Docking.Implementations;
/// <summary>
/// Базовая реализация контрола док-системы.
/// </summary>
public abstract class DockControlBase : IDockControl, INotifyPropertyChanged
{
/// <inheritdoc/>
public event PropertyChangedEventHandler? PropertyChanged;
private IDockElement? _model;
private LayoutManager? _layoutManager;
private IDockContextManager? _contextManager;
private bool _isSelected;
private bool _isActive;
/// <inheritdoc/>
public IDockElement? Model
{
get => _model;
set
{
if (_model != value)
{
_model = value;
OnPropertyChanged(nameof(Model));
}
}
}
/// <inheritdoc/>
public LayoutManager? LayoutManager
{
get => _layoutManager;
set
{
if (_layoutManager != value)
{
_layoutManager = value;
OnPropertyChanged(nameof(LayoutManager));
}
}
}
/// <inheritdoc/>
public IDockContextManager? ContextManager
{
get => _contextManager;
set
{
if (_contextManager != value)
{
_contextManager = value;
OnPropertyChanged(nameof(ContextManager));
}
}
}
/// <inheritdoc/>
public bool IsSelected
{
get => _isSelected;
set
{
if (_isSelected != value)
{
_isSelected = value;
OnPropertyChanged(nameof(IsSelected));
}
}
}
/// <inheritdoc/>
public bool IsActive
{
get => _isActive;
set
{
if (_isActive != value)
{
_isActive = value;
OnPropertyChanged(nameof(IsActive));
}
}
}
/// <inheritdoc/>
public abstract void Refresh();
/// <inheritdoc/>
public abstract void ApplyTheme(IDockTheme theme);
/// <inheritdoc/>
public virtual void OnModelPropertyChanged(string propertyName)
{
// Базовая реализация просто обновляет весь контрол
Refresh();
}
/// <summary>
/// Вызывает событие <see cref="PropertyChanged"/>.
/// </summary>
/// <param name="propertyName">Имя измененного свойства.</param>
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}