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)); } }