115 lines
3.2 KiB
C#
115 lines
3.2 KiB
C#
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
|
|
}
|
|
} |