DragAndDrop core

This commit is contained in:
FrigaT
2026-01-18 16:33:35 +03:00
parent 9ea82af329
commit 79bdd8bc62
229 changed files with 21214 additions and 2494 deletions

View File

@@ -0,0 +1,115 @@
using Lattice.UI.Docking.Abstractions;
namespace Lattice.UI.Docking.Commands;
/// <summary>
/// Базовая реализация команды док-системы.
/// </summary>
public abstract class DockCommandBase : IDockCommand
{
private bool _canExecute = true;
/// <inheritdoc/>
public abstract string Id { get; }
/// <inheritdoc/>
public abstract string Name { get; }
/// <inheritdoc/>
public virtual string Description => string.Empty;
/// <inheritdoc/>
public virtual string Icon => string.Empty;
/// <inheritdoc/>
public virtual string Shortcut => string.Empty;
/// <summary>
/// Получает или задает признак возможности выполнения команды.
/// </summary>
public bool CanExecute
{
get => _canExecute;
set
{
if (_canExecute != value)
{
_canExecute = value;
OnCanExecuteChanged();
}
}
}
/// <inheritdoc/>
public event EventHandler? CanExecuteChanged;
/// <inheritdoc/>
public virtual bool CanExecute(object? parameter)
{
return _canExecute;
}
/// <inheritdoc/>
public abstract void Execute(object? parameter);
/// <summary>
/// Вызывает событие изменения возможности выполнения команды.
/// </summary>
protected virtual void OnCanExecuteChanged()
{
CanExecuteChanged?.Invoke(this, EventArgs.Empty);
}
}
/// <summary>
/// Базовая команда для закрытия контента.
/// </summary>
public class CloseContentCommand : DockCommandBase
{
public override string Id => "CloseContent";
public override string Name => "Close";
public override string Description => "Close the current tab";
public override string Icon => "Close";
public override string Shortcut => "Ctrl+F4";
public override void Execute(object? parameter)
{
if (parameter is Abstractions.IDockLeafControl leafControl &&
leafControl.ActiveContent != null)
{
leafControl.CloseContent(leafControl.ActiveContent);
}
}
}
/// <summary>
/// Базовая команда для создания плавающего окна.
/// </summary>
public class FloatWindowCommand : DockCommandBase
{
public override string Id => "FloatWindow";
public override string Name => "Float";
public override string Description => "Float the window as a separate window";
public override string Icon => "Float";
public override void Execute(object? parameter)
{
// Реализация зависит от конкретного UI
}
}
/// <summary>
/// Базовая команда для закрепления окна.
/// </summary>
public class DockWindowCommand : DockCommandBase
{
public override string Id => "DockWindow";
public override string Name => "Dock";
public override string Description => "Dock the window to the main window";
public override string Icon => "Dock";
public override void Execute(object? parameter)
{
// Реализация зависит от конкретного UI
}
}