180 lines
6.5 KiB
C#
180 lines
6.5 KiB
C#
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;
|
||
}
|
||
} |