using Lattice.Core.Docking.Abstractions; using Lattice.Core.Docking.Models; namespace Lattice.UI.Docking.Abstractions; /// /// Определяет контракт для главного контейнера док-системы, который служит корневым элементом /// для всего пользовательского интерфейса системы докинга. Управляет размещением и состоянием /// всех дочерних элементов, включая плавающие окна и автоскрываемые панели. /// /// /// Реализации этого интерфейса представляют собой центральный координатор UI-слоя, /// который интегрирует функциональность менеджера макета и контекстных меню в единый визуальный компонент. /// public interface IDockHost : IDockControl { /// /// Получает коллекцию контролов плавающих окон, связанных с этим хостом. /// /// /// Коллекция объектов, реализующих , /// представляющих все активные плавающие окна в системе. /// /// /// Плавающие окна могут быть созданы пользователем или программно через методы API. /// IEnumerable FloatingWindows { get; } /// /// Получает коллекцию контролов автоскрываемых панелей, прикрепленных к краям окна. /// /// /// Коллекция объектов, реализующих , /// представляющих автоскрываемые панели на разных сторонах окна. /// /// /// Автоскрываемые панели скрываются, оставляя видимой только полоску-заголовок, /// и разворачиваются при наведении курсора или клике. /// IEnumerable AutoHidePanels { get; } /// /// Получает или задает значение, указывающее, отображается ли панель инструментов (Toolbox). /// /// /// true, если панель инструментов видима; в противном случае false. /// Значение по умолчанию зависит от реализации. /// /// /// Панель инструментов обычно содержит элементы для быстрого доступа к командам /// или создания новых компонентов в приложении. /// bool ShowToolbox { get; set; } /// /// Получает или задает значение, указывающее, отображается ли строка состояния. /// /// /// true, если строка состояния видима; в противном случае false. /// Значение по умолчанию зависит от реализации. /// /// /// Строка состояния обычно отображает текущий статус приложения, /// информацию о выбранном элементе или прогресс выполнения операций. /// bool ShowStatusBar { get; set; } /// /// Получает или задает значение, указывающее, отображается ли главное меню приложения. /// /// /// true, если главное меню видимо; в противном случае false. /// Значение по умолчанию зависит от реализации. /// bool ShowMenu { get; set; } /// /// Создает новое плавающее окно для размещения указанного элемента док-системы. /// /// /// Элемент док-системы (группа или лист), который будет размещен в плавающем окне. /// /// Заголовок создаваемого окна. /// /// Экземпляр , представляющий созданное плавающее окно. /// /// /// Выбрасывается, если равен null. /// /// /// Созданное окно может быть перемещено пользователем в любое место экрана, /// изменено в размерах и обычно содержит стандартные элементы управления окном /// (заголовок, кнопки закрытия/сворачивания). /// IFloatingWindowControl CreateFloatingWindow(IDockElement element, string title); /// /// Закрывает указанное плавающее окно и возвращает его содержимое в основной макет. /// /// /// Плавающее окно, которое необходимо закрыть. /// /// /// Выбрасывается, если равен null. /// /// /// При закрытии плавающего окна его содержимое обычно возвращается в то место /// в основном макете, откуда оно было извлечено, или в ближайшую допустимую позицию. /// void CloseFloatingWindow(IFloatingWindowControl window); /// /// Добавляет автоскрываемую панель с указанным содержимым к заданной стороне окна. /// /// /// Контент, который будет отображаться в автоскрываемой панели. /// /// /// Сторона окна, к которой будет прикреплена панель. /// /// /// Экземпляр , представляющий созданную панель. /// /// /// Выбрасывается, если равен null. /// /// /// Автоскрываемые панели полезны для инструментов, к которым нужен частый, /// но не постоянный доступ, так как они экономят пространство экрана. /// IAutoHidePanelControl AddAutoHidePanel(Core.Docking.Abstractions.IDockContent content, DockSide side); /// /// Удаляет автоскрываемую панель из интерфейса. /// /// /// Автоскрываемая панель, которую необходимо удалить. /// /// /// Выбрасывается, если равен null. /// /// /// После удаления панели её содержимое обычно либо закрывается полностью, /// либо преобразуется в обычную закрепленную панель, в зависимости от настроек. /// void RemoveAutoHidePanel(IAutoHidePanelControl panel); /// /// Происходит при изменении структуры макета док-системы. /// /// /// Может вызываться при добавлении/удалении элементов, изменении размеров, /// создании/закрытии плавающих окон и других операциях, влияющих на компоновку. /// event EventHandler LayoutChanged; /// /// Происходит при создании нового плавающего окна. /// event EventHandler FloatingWindowCreated; /// /// Происходит при закрытии плавающего окна. /// event EventHandler FloatingWindowClosed; } /// /// Предоставляет данные для события создания плавающего окна. /// Содержит ссылку на созданное окно и информацию о его содержимом. /// public class FloatingWindowCreatedEventArgs : EventArgs { /// /// Получает созданное плавающее окно. /// /// /// Экземпляр , представляющий новое окно. /// public IFloatingWindowControl Window { get; } /// /// Инициализирует новый экземпляр класса . /// /// Созданное плавающее окно. /// /// Выбрасывается, если равен null. /// public FloatingWindowCreatedEventArgs(IFloatingWindowControl window) { Window = window ?? throw new ArgumentNullException(nameof(window)); } } /// /// Предоставляет данные для события закрытия плавающего окна. /// Содержит ссылку на закрываемое окно и информацию о причине закрытия. /// public class FloatingWindowClosedEventArgs : EventArgs { /// /// Получает закрытое плавающее окно. /// /// /// Экземпляр , представляющее закрытое окно. /// public IFloatingWindowControl Window { get; } /// /// Получает значение, указывающее, было ли окно закрыто пользователем. /// /// /// true, если окно было закрыто действием пользователя (клик на крестик); /// false, если закрытие было инициировано программно. /// public bool IsUserInitiated { get; } /// /// Инициализирует новый экземпляр класса . /// /// Закрытое плавающее окно. /// /// Признак того, что закрытие было инициировано пользователем. /// /// /// Выбрасывается, если равен null. /// public FloatingWindowClosedEventArgs(IFloatingWindowControl window, bool isUserInitiated = true) { Window = window ?? throw new ArgumentNullException(nameof(window)); IsUserInitiated = isUserInitiated; } }