using Lattice.Core.Docking.Abstractions;
using Lattice.Core.Docking.Models;
namespace Lattice.UI.Docking.Abstractions;
///
/// Определяет контракт для UI-контрола, который отображает контейнер вкладок (DockLeaf).
/// Этот контрол управляет отображением коллекции вкладок с содержимым.
///
///
/// Реализации этого интерфейса должны обеспечивать навигацию между вкладками,
/// закрытие вкладок, изменение порядка вкладок и поддержку различных положений
/// панели вкладок (сверху, снизу, слева, справа).
///
public interface IDockLeafControl : IDockControl
{
///
/// Получает или задает положение панели вкладок.
///
///
/// Положение панели вкладок относительно содержимого.
///
TabPlacement TabPlacement { get; set; }
///
/// Получает или задает признак отображения кнопки закрытия на вкладках.
///
///
/// true, если кнопки закрытия отображаются; в противном случае false.
///
bool ShowCloseButtons { get; set; }
///
/// Получает или задает признак возможности изменения порядка вкладок.
///
///
/// true, если порядок вкладок можно изменять; в противном случае false.
///
bool CanReorderTabs { get; set; }
///
/// Получает или задает активную вкладку.
///
///
/// Активная вкладка или null, если вкладок нет.
///
IDockContent? ActiveContent { get; set; }
///
/// Добавляет вкладку в контрол.
///
/// Контент для добавления.
///
/// Выбрасывается, если равен null.
///
void AddContent(IDockContent content);
///
/// Удаляет вкладку из контрола.
///
/// Контент для удаления.
///
/// Выбрасывается, если равен null.
///
void RemoveContent(IDockContent content);
///
/// Закрывает указанную вкладку.
///
/// Контент для закрытия.
///
/// true, если вкладка была закрыта; в противном случае false.
///
///
/// Выбрасывается, если равен null.
///
bool CloseContent(IDockContent content);
///
/// Закрывает все вкладки, кроме указанной.
///
/// Вкладка, которую нужно оставить открытой.
///
/// Выбрасывается, если равен null.
///
void CloseAllExcept(IDockContent exceptContent);
///
/// Закрывает все вкладки.
///
void CloseAll();
///
/// Происходит при изменении активной вкладки.
///
event EventHandler ActiveContentChanged;
///
/// Происходит при запросе закрытия вкладки.
///
event EventHandler ContentClosing;
///
/// Происходит при изменении порядка вкладок.
///
event EventHandler TabsReordered;
}
///
/// Предоставляет данные для события изменения активного контента.
///
public class ActiveContentChangedEventArgs : EventArgs
{
///
/// Получает предыдущий активный контент.
///
public IDockContent? OldContent { get; }
///
/// Получает новый активный контент.
///
public IDockContent? NewContent { get; }
///
/// Инициализирует новый экземпляр класса .
///
/// Предыдущий активный контент.
/// Новый активный контент.
public ActiveContentChangedEventArgs(IDockContent? oldContent, IDockContent? newContent)
{
OldContent = oldContent;
NewContent = newContent;
}
}
///
/// Предоставляет данные для события закрытия контента.
///
public class ContentClosingEventArgs : EventArgs
{
///
/// Получает контент, который закрывается.
///
public IDockContent Content { get; }
///
/// Получает или задает значение, указывающее, можно ли отменить закрытие.
///
///
/// true, если закрытие можно отменить; в противном случае false.
///
public bool CanCancel { get; set; }
///
/// Получает или задает признак отмены закрытия.
///
///
/// true, если закрытие отменено; в противном случае false.
///
public bool Cancel { get; set; }
///
/// Инициализирует новый экземпляр класса .
///
/// Контент, который закрывается.
///
/// Выбрасывается, если равен null.
///
public ContentClosingEventArgs(IDockContent content)
{
Content = content ?? throw new ArgumentNullException(nameof(content));
CanCancel = true;
Cancel = false;
}
}
///
/// Предоставляет данные для события изменения порядка вкладок.
///
public class TabsReorderedEventArgs : EventArgs
{
///
/// Получает старый индекс вкладки.
///
public int OldIndex { get; }
///
/// Получает новый индекс вкладки.
///
public int NewIndex { get; }
///
/// Получает перемещаемый контент.
///
public IDockContent Content { get; }
///
/// Инициализирует новый экземпляр класса .
///
/// Старый индекс вкладки.
/// Новый индекс вкладки.
/// Перемещаемый контент.
///
/// Выбрасывается, если равен null.
///
public TabsReorderedEventArgs(int oldIndex, int newIndex, IDockContent content)
{
OldIndex = oldIndex;
NewIndex = newIndex;
Content = content ?? throw new ArgumentNullException(nameof(content));
}
}