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; } /// /// Добавляет вкладку в контрол. /// /// Контент для добавления. void AddContent(IDockContent content); /// /// Удаляет вкладку из контрола. /// /// Контент для удаления. void RemoveContent(IDockContent content); /// /// Закрывает указанную вкладку. /// /// Контент для закрытия. /// true, если вкладка была закрыта; в противном случае — false. bool CloseContent(IDockContent content); /// /// Закрывает все вкладки, кроме указанной. /// /// Вкладка, которую нужно оставить открытой. 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; } /// /// Показывает, можно ли отменить закрытие. /// public bool CanCancel { get; set; } /// /// Получает или задает признак отмены закрытия. /// public bool Cancel { get; set; } /// /// Инициализирует новый экземпляр класса . /// public ContentClosingEventArgs(IDockContent content) { Content = content; CanCancel = true; Cancel = false; } } /// /// Аргументы события изменения порядка вкладок. /// public class TabsReorderedEventArgs : EventArgs { /// /// Старый индекс вкладки. /// public int OldIndex { get; } /// /// Новый индекс вкладки. /// public int NewIndex { get; } /// /// Перемещаемый контент. /// public IDockContent Content { get; } /// /// Инициализирует новый экземпляр класса . /// public TabsReorderedEventArgs(int oldIndex, int newIndex, IDockContent content) { OldIndex = oldIndex; NewIndex = newIndex; Content = content; } }