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