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