Доработан winui
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using Lattice.Core.Docking.Abstractions;
|
||||
using Lattice.Core.Docking.Engine;
|
||||
using Lattice.Core.Docking.Models;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace Lattice.UI.Docking.Abstractions;
|
||||
@@ -78,6 +79,26 @@ public interface IDockControl : INotifyPropertyChanged
|
||||
/// </remarks>
|
||||
bool IsActive { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Получает признак того, что элемент можно перетаскивать.
|
||||
/// </summary>
|
||||
bool CanDrag { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Получает признак того, что на элемент можно сбрасывать.
|
||||
/// </summary>
|
||||
bool CanDrop { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Подготавливает данные для перетаскивания.
|
||||
/// </summary>
|
||||
object? PrepareDragData();
|
||||
|
||||
/// <summary>
|
||||
/// Обрабатывает сброс данных.
|
||||
/// </summary>
|
||||
bool HandleDrop(object data, DockPosition position);
|
||||
|
||||
/// <summary>
|
||||
/// Обновляет внешний вид контрола в соответствии с текущим состоянием модели.
|
||||
/// </summary>
|
||||
|
||||
@@ -1,113 +0,0 @@
|
||||
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));
|
||||
}
|
||||
}
|
||||
@@ -7,15 +7,6 @@ namespace Lattice.UI.Docking.Services;
|
||||
/// </summary>
|
||||
public abstract class DockContextManagerBase : IDockContextManager
|
||||
{
|
||||
private readonly Dictionary<string, IDockCommand> _commands = new();
|
||||
private IDockControl? _currentContextTarget;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public event EventHandler<ContextMenuShownEventArgs>? ContextMenuShown;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public event EventHandler? ContextMenuHidden;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public abstract void ShowContextMenu(IDockControl element, double x, double y);
|
||||
|
||||
@@ -25,25 +16,22 @@ public abstract class DockContextManagerBase : IDockContextManager
|
||||
/// <inheritdoc/>
|
||||
public virtual void RegisterCommand(string commandId, IDockCommand command)
|
||||
{
|
||||
if (string.IsNullOrEmpty(commandId))
|
||||
throw new ArgumentNullException(nameof(commandId));
|
||||
|
||||
_commands[commandId] = command ?? throw new ArgumentNullException(nameof(command));
|
||||
// Базовая реализация, должна быть переопределена в производных классах
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public virtual void UnregisterCommand(string commandId)
|
||||
{
|
||||
_commands.Remove(commandId);
|
||||
// Базовая реализация, должна быть переопределена в производных классах
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получает команду по идентификатору.
|
||||
/// </summary>
|
||||
public IDockCommand? GetCommand(string commandId)
|
||||
protected virtual IDockCommand? GetCommand(string commandId)
|
||||
{
|
||||
_commands.TryGetValue(commandId, out var command);
|
||||
return command;
|
||||
// Базовая реализация, должна быть переопределена в производных классах
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -52,7 +40,7 @@ public abstract class DockContextManagerBase : IDockContextManager
|
||||
protected virtual IEnumerable<IDockCommand> GetCommandsForElement(IDockControl element)
|
||||
{
|
||||
// Фильтрация команд по типу элемента и его состоянию
|
||||
return _commands.Values.Where(c => CanExecuteCommand(c, element));
|
||||
yield break;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -76,7 +64,6 @@ public abstract class DockContextManagerBase : IDockContextManager
|
||||
/// </summary>
|
||||
protected virtual void OnContextMenuShown(IDockControl target, double x, double y)
|
||||
{
|
||||
_currentContextTarget = target;
|
||||
ContextMenuShown?.Invoke(this, new ContextMenuShownEventArgs(target, x, y));
|
||||
}
|
||||
|
||||
@@ -85,12 +72,12 @@ public abstract class DockContextManagerBase : IDockContextManager
|
||||
/// </summary>
|
||||
protected virtual void OnContextMenuHidden()
|
||||
{
|
||||
_currentContextTarget = null;
|
||||
ContextMenuHidden?.Invoke(this, EventArgs.Empty);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получает текущий целевой элемент контекстного меню.
|
||||
/// </summary>
|
||||
protected IDockControl? CurrentContextTarget => _currentContextTarget;
|
||||
/// <inheritdoc/>
|
||||
public event EventHandler<ContextMenuShownEventArgs>? ContextMenuShown;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public event EventHandler? ContextMenuHidden;
|
||||
}
|
||||
Reference in New Issue
Block a user