Files
Lattice/Lattice.UI.Docking/Abstractions/IDockLeafControl.cs
2026-01-18 16:33:35 +03:00

180 lines
6.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Lattice.Core.Docking.Abstractions;
using Lattice.Core.Docking.Models;
namespace Lattice.UI.Docking.Abstractions;
/// <summary>
/// Определяет контракт для UI-контрола, который отображает контейнер вкладок (DockLeaf).
/// Этот контрол управляет отображением коллекции вкладок с содержимым.
/// </summary>
/// <remarks>
/// Реализации этого интерфейса должны обеспечивать навигацию между вкладками,
/// закрытие вкладок, изменение порядка вкладок и поддержку различных положений
/// панели вкладок (сверху, снизу, слева, справа).
/// </remarks>
public interface IDockLeafControl : IDockControl
{
/// <summary>
/// Получает или задает положение панели вкладок.
/// </summary>
/// <value>
/// Положение панели вкладок относительно содержимого.
/// </value>
TabPlacement TabPlacement { get; set; }
/// <summary>
/// Получает или задает признак отображения кнопки закрытия на вкладках.
/// </summary>
/// <value>
/// true, если кнопки закрытия отображаются; в противном случае — false.
/// </value>
bool ShowCloseButtons { get; set; }
/// <summary>
/// Получает или задает признак возможности изменения порядка вкладок.
/// </summary>
/// <value>
/// true, если порядок вкладок можно изменять; в противном случае — false.
/// </value>
bool CanReorderTabs { get; set; }
/// <summary>
/// Получает или задает активную вкладку.
/// </summary>
/// <value>
/// Активная вкладка или null, если вкладок нет.
/// </value>
IDockContent? ActiveContent { get; set; }
/// <summary>
/// Добавляет вкладку в контрол.
/// </summary>
/// <param name="content">Контент для добавления.</param>
void AddContent(IDockContent content);
/// <summary>
/// Удаляет вкладку из контрола.
/// </summary>
/// <param name="content">Контент для удаления.</param>
void RemoveContent(IDockContent content);
/// <summary>
/// Закрывает указанную вкладку.
/// </summary>
/// <param name="content">Контент для закрытия.</param>
/// <returns>true, если вкладка была закрыта; в противном случае — false.</returns>
bool CloseContent(IDockContent content);
/// <summary>
/// Закрывает все вкладки, кроме указанной.
/// </summary>
/// <param name="exceptContent">Вкладка, которую нужно оставить открытой.</param>
void CloseAllExcept(IDockContent exceptContent);
/// <summary>
/// Закрывает все вкладки.
/// </summary>
void CloseAll();
/// <summary>
/// Событие, возникающее при изменении активной вкладки.
/// </summary>
event EventHandler<ActiveContentChangedEventArgs> ActiveContentChanged;
/// <summary>
/// Событие, возникающее при запросе закрытия вкладки.
/// </summary>
event EventHandler<ContentClosingEventArgs> ContentClosing;
/// <summary>
/// Событие, возникающее при изменении порядка вкладок.
/// </summary>
event EventHandler<TabsReorderedEventArgs> TabsReordered;
}
/// <summary>
/// Аргументы события изменения активного контента.
/// </summary>
public class ActiveContentChangedEventArgs : EventArgs
{
/// <summary>
/// Предыдущий активный контент.
/// </summary>
public IDockContent? OldContent { get; }
/// <summary>
/// Новый активный контент.
/// </summary>
public IDockContent? NewContent { get; }
/// <summary>
/// Инициализирует новый экземпляр класса <see cref="ActiveContentChangedEventArgs"/>.
/// </summary>
public ActiveContentChangedEventArgs(IDockContent? oldContent, IDockContent? newContent)
{
OldContent = oldContent;
NewContent = newContent;
}
}
/// <summary>
/// Аргументы события закрытия контента.
/// </summary>
public class ContentClosingEventArgs : EventArgs
{
/// <summary>
/// Контент, который закрывается.
/// </summary>
public IDockContent Content { get; }
/// <summary>
/// Показывает, можно ли отменить закрытие.
/// </summary>
public bool CanCancel { get; set; }
/// <summary>
/// Получает или задает признак отмены закрытия.
/// </summary>
public bool Cancel { get; set; }
/// <summary>
/// Инициализирует новый экземпляр класса <see cref="ContentClosingEventArgs"/>.
/// </summary>
public ContentClosingEventArgs(IDockContent content)
{
Content = content;
CanCancel = true;
Cancel = false;
}
}
/// <summary>
/// Аргументы события изменения порядка вкладок.
/// </summary>
public class TabsReorderedEventArgs : EventArgs
{
/// <summary>
/// Старый индекс вкладки.
/// </summary>
public int OldIndex { get; }
/// <summary>
/// Новый индекс вкладки.
/// </summary>
public int NewIndex { get; }
/// <summary>
/// Перемещаемый контент.
/// </summary>
public IDockContent Content { get; }
/// <summary>
/// Инициализирует новый экземпляр класса <see cref="TabsReorderedEventArgs"/>.
/// </summary>
public TabsReorderedEventArgs(int oldIndex, int newIndex, IDockContent content)
{
OldIndex = oldIndex;
NewIndex = newIndex;
Content = content;
}
}