using Lattice.Core.Docking.Abstractions; using Lattice.Core.Docking.Engine; using System.ComponentModel; namespace Lattice.UI.Docking.Abstractions; /// /// Определяет базовый контракт для всех UI-контролов, участвующих в системе докинга. /// Этот интерфейс предоставляет общие свойства и методы, необходимые для интеграции /// с менеджером макета и UI-сервисами. /// /// /// Реализации этого интерфейса должны отображать элементы док-системы (DockGroup, DockLeaf) /// и обеспечивать взаимодействие пользователя с ними через жесты мыши, клавиатуру и сенсорный ввод. /// Интерфейс обеспечивает двухстороннюю связь между визуальными элементами и их моделями данных. /// public interface IDockControl : INotifyPropertyChanged { /// /// Получает или задает модель данных, связанную с этим контролом. /// /// /// Экземпляр класса, реализующего , который представляет /// состояние и структуру отображаемого элемента док-системы. /// /// /// Изменение модели должно приводить к обновлению визуального представления. /// Свойство используется для привязки данных между UI-слоем и слоем бизнес-логики. /// IDockElement? Model { get; set; } /// /// Получает или задает менеджер макета, к которому принадлежит этот контрол. /// /// /// Экземпляр , управляющий структурой док-системы. /// /// /// Менеджер макета предоставляет доступ к дереву компоновки, плавающим окнам /// и автоскрываемым панелям, а также методы для манипуляции структурой. /// LayoutManager? LayoutManager { get; set; } /// /// Получает или задает контекстный менеджер для этого контрола. /// /// /// Экземпляр , управляющий контекстными меню и действиями. /// /// /// Контекстный менеджер используется для отображения контекстно-зависимых команд /// при щелчке правой кнопкой мыши или других пользовательских действиях. /// IDockContextManager? ContextManager { get; set; } /// /// Получает или задает признак того, что контрол выбран. /// /// /// true, если контрол выбран; в противном случае false. /// /// /// Выделение контрола обычно визуально выделяет его границы или фон, /// чтобы указать пользователю на активный элемент. В каждый момент времени /// может быть выбран только один контрол в пределах контейнера. /// bool IsSelected { get; set; } /// /// Получает или задает признак того, что контрол активен. /// /// /// true, если контрол активен; в противном случае false. /// /// /// Активный контрол получает фокус ввода и может обрабатывать команды клавиатуры. /// Обычно соответствует активной вкладке в контейнере или активному окну. /// bool IsActive { get; set; } /// /// Обновляет внешний вид контрола в соответствии с текущим состоянием модели. /// /// /// Этот метод должен вызываться при изменении свойств модели или при необходимости /// принудительного обновления UI (например, после изменения темы или масштаба). /// Реализация должна обеспечить синхронизацию всех визуальных аспектов контрола /// с текущими значениями свойств модели. /// void Refresh(); /// /// Применяет указанную тему к контролу. /// /// Тема для применения. /// /// Выбрасывается, если равен null. /// /// /// Метод должен обновить все стили, цвета и параметры отображения контрола /// в соответствии с переданной темой. Изменения должны применяться немедленно. /// void ApplyTheme(IDockTheme theme); /// /// Вызывается при изменении состояния модели для обновления UI. /// /// Имя изменившегося свойства модели. /// /// Этот метод предназначен для уведомления UI о конкретных изменениях в модели, /// что позволяет выполнять точечные обновления вместо полного перестроения. /// Должен вызываться из обработчиков событий изменения свойств модели. /// void OnModelPropertyChanged(string propertyName); }