Доработан Docking
This commit is contained in:
@@ -1,8 +1,23 @@
|
||||
namespace Lattice.Core.Docking.Abstractions;
|
||||
|
||||
/// <summary>
|
||||
/// Определяет контракт для команды в системе докинга.
|
||||
/// Команды представляют действия, которые могут быть выполнены над элементами док-системы.
|
||||
/// </summary>
|
||||
public interface IDockCommand : System.Windows.Input.ICommand
|
||||
{
|
||||
/// <summary>
|
||||
/// Получает отображаемое имя команды.
|
||||
/// </summary>
|
||||
string Name { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Получает идентификатор ресурса для иконки команды.
|
||||
/// </summary>
|
||||
string Icon { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Получает текстовое представление жеста (горячей клавиши) для команды.
|
||||
/// </summary>
|
||||
string GestureText { get; }
|
||||
}
|
||||
}
|
||||
@@ -3,22 +3,36 @@
|
||||
namespace Lattice.Core.Docking.Abstractions;
|
||||
|
||||
/// <summary>
|
||||
/// Интерфейс для элементов (листьев дерева), которые физически содержат внутри себя коллекцию вкладок.
|
||||
/// Определяет контракт для контейнеров, содержащих коллекцию вкладок.
|
||||
/// Контейнеры являются листьями дерева компоновки и непосредственно отображают содержимое.
|
||||
/// </summary>
|
||||
public interface IDockContainer : IDockElement
|
||||
{
|
||||
/// <summary> Список вкладок, находящихся в данном контейнере. </summary>
|
||||
/// <summary>
|
||||
/// Получает список вкладок, находящихся в данном контейнере.
|
||||
/// </summary>
|
||||
IList<IDockContent> Children { get; }
|
||||
|
||||
/// <summary> Ссылка на текущую выбранную и отображаемую вкладку. </summary>
|
||||
/// <summary>
|
||||
/// Получает или задает текущую активную (выбранную) вкладку.
|
||||
/// </summary>
|
||||
IDockContent? ActiveContent { get; set; }
|
||||
|
||||
/// <summary> Добавляет контент в контейнер и делает его активным. </summary>
|
||||
/// <summary>
|
||||
/// Добавляет контент в контейнер и делает его активным.
|
||||
/// </summary>
|
||||
/// <param name="content">Контент для добавления.</param>
|
||||
void AddContent(IDockContent content);
|
||||
|
||||
/// <summary> Удаляет контент. Если Children становится пустым, контейнер может быть удален из дерева макета. </summary>
|
||||
/// <summary>
|
||||
/// Удаляет контент из контейнера. Если коллекция становится пустой,
|
||||
/// контейнер может быть удален из дерева макета.
|
||||
/// </summary>
|
||||
/// <param name="content">Контент для удаления.</param>
|
||||
void RemoveContent(IDockContent content);
|
||||
|
||||
/// <summary> Положение вкладок в интерфейсе. </summary>
|
||||
/// <summary>
|
||||
/// Получает или задает положение панели вкладок в интерфейсе.
|
||||
/// </summary>
|
||||
TabPlacement TabPlacement { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,25 +1,37 @@
|
||||
namespace Lattice.Core.Docking.Abstractions;
|
||||
|
||||
/// <summary>
|
||||
/// Описывает объект содержимого (вкладку), который может быть размещен внутри IDockContainer.
|
||||
/// Определяет контракт для содержимого (вкладки), которое может быть размещено внутри контейнера.
|
||||
/// </summary>
|
||||
public interface IDockContent
|
||||
{
|
||||
/// <summary> Уникальный идентификатор контента (например, путь к файлу или ID инструмента). </summary>
|
||||
/// <summary>
|
||||
/// Получает уникальный идентификатор контента.
|
||||
/// Используется для идентификации вкладки в системе.
|
||||
/// </summary>
|
||||
string Id { get; }
|
||||
|
||||
/// <summary> Заголовок, отображаемый пользователю в интерфейсе (на вкладке). </summary>
|
||||
/// <summary>
|
||||
/// Получает заголовок, отображаемый пользователю на вкладке.
|
||||
/// </summary>
|
||||
string Title { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Сам визуальный элемент (например, Microsoft.UI.Xaml.UIElement).
|
||||
/// Lattice просто отображает этот объект в теле вкладки.
|
||||
/// <summary>
|
||||
/// Получает или задает визуальный элемент для отображения в теле вкладки.
|
||||
/// </summary>
|
||||
object View { get; set; }
|
||||
|
||||
/// <summary> Флаг, определяющий доступность кнопки закрытия для пользователя. </summary>
|
||||
/// <summary>
|
||||
/// Получает значение, указывающее, можно ли закрыть вкладку.
|
||||
/// </summary>
|
||||
bool CanClose { get; }
|
||||
|
||||
/// <summary> Вызывается системой при попытке закрытия контента. Возвращает true, если закрытие разрешено. </summary>
|
||||
/// <summary>
|
||||
/// Вызывается системой при попытке закрытия контента.
|
||||
/// Позволяет выполнить дополнительные проверки или сохранить состояние.
|
||||
/// </summary>
|
||||
/// <returns>
|
||||
/// true, если закрытие разрешено; в противном случае false.
|
||||
/// </returns>
|
||||
bool OnClosing();
|
||||
}
|
||||
}
|
||||
@@ -1,25 +1,91 @@
|
||||
namespace Lattice.Core.Docking.Abstractions;
|
||||
|
||||
/// <summary>
|
||||
/// Базовый интерфейс для любого элемента, который может быть частью дерева компоновки Lattice.
|
||||
/// Базовый интерфейс для любого элемента, являющегося частью дерева компоновки.
|
||||
/// Определяет общие свойства и методы для всех элементов док-системы.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Элементы док-системы образуют древовидную структуру, где каждый элемент может иметь
|
||||
/// родителя и дочерние элементы. Эта иерархия используется для организации пространства
|
||||
/// главного окна и плавающих окон в IDE-подобных приложениях.
|
||||
/// </remarks>
|
||||
public interface IDockElement
|
||||
{
|
||||
/// <summary> Уникальный идентификатор элемента. </summary>
|
||||
/// <summary>
|
||||
/// Получает уникальный идентификатор элемента.
|
||||
/// Используется для поиска элементов, сериализации состояния и отслеживания изменений.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// Строковый идентификатор, гарантированно уникальный в пределах дерева компоновки.
|
||||
/// Обычно представляет собой GUID в строковом формате.
|
||||
/// </value>
|
||||
string Id { get; }
|
||||
|
||||
/// <summary> Родительский элемент в иерархии. Если null — элемент является корневым. </summary>
|
||||
/// <summary>
|
||||
/// Получает или задает родительский элемент в иерархии дерева компоновки.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// Родительский элемент или null, если элемент является корневым.
|
||||
/// Это свойство управляется системой компоновки при добавлении или удалении элементов.
|
||||
/// </value>
|
||||
/// <remarks>
|
||||
/// Изменение этого свойства вручную может привести к нарушению целостности дерева.
|
||||
/// Для манипуляции структурой дерева следует использовать методы <see cref="DockOperations"/>.
|
||||
/// </remarks>
|
||||
IDockElement? Parent { get; set; }
|
||||
|
||||
/// <summary> Желаемая ширина элемента в относительных или абсолютных единицах. </summary>
|
||||
/// <summary>
|
||||
/// Получает или задает желаемую ширину элемента.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// Ширина элемента в пикселях или относительных единицах.
|
||||
/// Может быть выражена как абсолютное значение (в пикселях) или как пропорция
|
||||
/// (например, 0.5 для 50% доступного пространства).
|
||||
/// </value>
|
||||
/// <remarks>
|
||||
/// Фактическая ширина элемента определяется родительским контейнером с учетом
|
||||
/// минимальных размеров и соотношений разделения.
|
||||
/// </remarks>
|
||||
double Width { get; set; }
|
||||
|
||||
/// <summary> Желаемая высота элемента в относительных или абсолютных единицах. </summary>
|
||||
/// <summary>
|
||||
/// Получает или задает желаемую высоту элемента.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// Высота элемента в пикселях или относительных единицах.
|
||||
/// Может быть выражена как абсолютное значение (в пикселях) или как пропорция.
|
||||
/// </value>
|
||||
/// <remarks>
|
||||
/// Фактическая высота элемента определяется родительским контейнером с учетом
|
||||
/// минимальных размеров и соотношений разделения.
|
||||
/// </remarks>
|
||||
double Height { get; set; }
|
||||
|
||||
/// <summary> Минимально допустимая ширина, при которой элемент сохраняет функциональность. </summary>
|
||||
/// <summary>
|
||||
/// Получает минимально допустимую ширину элемента.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// Минимальная ширина элемента в пикселях, при которой элемент сохраняет
|
||||
/// базовую функциональность и читаемость содержимого.
|
||||
/// </value>
|
||||
/// <remarks>
|
||||
/// Система компоновки не позволит уменьшить элемент ниже этого значения.
|
||||
/// Для групп разделения минимальная ширина вычисляется рекурсивно на основе
|
||||
/// минимальных размеров дочерних элементов.
|
||||
/// </remarks>
|
||||
double MinWidth { get; }
|
||||
|
||||
/// <summary> Минимально допустимая высота, при которой элемент сохраняет функциональность. </summary>
|
||||
/// <summary>
|
||||
/// Получает минимально допустимую высоту элемента.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// Минимальная высота элемента в пикселях, при которой элемент сохраняет
|
||||
/// базовую функциональность и читаемость содержимого.
|
||||
/// </value>
|
||||
/// <remarks>
|
||||
/// Система компоновки не позволит уменьшить элемент ниже этого значения.
|
||||
/// Для групп разделения минимальная высота вычисляется рекурсивно на основе
|
||||
/// минимальных размеров дочерних элементов.
|
||||
/// </remarks>
|
||||
double MinHeight { get; }
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
using Lattice.Core.DragDrop.Abstractions;
|
||||
|
||||
namespace Lattice.Core.Docking.Abstractions;
|
||||
|
||||
/// <summary>
|
||||
/// Расширяет интерфейс элемента док-системы для поддержки операций перетаскивания.
|
||||
/// </summary>
|
||||
public interface IDockElementDragSource : IDockElement, IDragSource
|
||||
{
|
||||
/// <summary>
|
||||
/// Получает или устанавливает признак того, что элемент можно перетаскивать.
|
||||
/// </summary>
|
||||
bool CanDrag { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Получает тип данных для перетаскивания этого элемента.
|
||||
/// </summary>
|
||||
string DragDataType { get; }
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
using Lattice.Core.DragDrop.Abstractions;
|
||||
|
||||
namespace Lattice.Core.Docking.Abstractions;
|
||||
|
||||
/// <summary>
|
||||
/// Расширяет интерфейс элемента док-системы для возможности быть целью сброса.
|
||||
/// </summary>
|
||||
public interface IDockElementDropTarget : IDockElement, IDropTarget
|
||||
{
|
||||
/// <summary>
|
||||
/// Получает или устанавливает признак того, что элемент может принимать сброс.
|
||||
/// </summary>
|
||||
bool CanDrop { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Получает типы данных, которые может принимать элемент.
|
||||
/// </summary>
|
||||
IEnumerable<string> AcceptableDropTypes { get; }
|
||||
}
|
||||
@@ -1,76 +0,0 @@
|
||||
using Lattice.Core.Docking.Models;
|
||||
using Lattice.Core.Geometry;
|
||||
|
||||
namespace Lattice.Core.Docking.Abstractions;
|
||||
|
||||
/// <summary>
|
||||
/// Предоставляет абстракцию для операции перетаскивания в док-системе.
|
||||
/// Эта абстракция позволяет отделить логику перетаскивания от конкретной UI-платформы.
|
||||
/// </summary>
|
||||
public interface IDragService
|
||||
{
|
||||
/// <summary>
|
||||
/// Начинает операцию перетаскивания указанного элемента.
|
||||
/// </summary>
|
||||
/// <param name="element">Элемент для перетаскивания.</param>
|
||||
/// <param name="visualFeedback">Визуальная обратная связь (зависит от платформы).</param>
|
||||
void StartDrag(IDockElement element, object? visualFeedback = null);
|
||||
|
||||
/// <summary>
|
||||
/// Обновляет позицию перетаскивания.
|
||||
/// </summary>
|
||||
/// <param name="x">Координата X.</param>
|
||||
/// <param name="y">Координата Y.</param>
|
||||
void UpdateDrag(double x, double y);
|
||||
|
||||
/// <summary>
|
||||
/// Завершает операцию перетаскивания.
|
||||
/// </summary>
|
||||
/// <param name="x">Координата X завершения.</param>
|
||||
/// <param name="y">Координата Y завершения.</param>
|
||||
void EndDrag(double x, double y);
|
||||
|
||||
/// <summary>
|
||||
/// Отменяет операцию перетаскивания.
|
||||
/// </summary>
|
||||
void CancelDrag();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Представляет область для сброса при операции перетаскивания.
|
||||
/// </summary>
|
||||
public class DropArea
|
||||
{
|
||||
/// <summary>
|
||||
/// Целевой элемент для сброса.
|
||||
/// </summary>
|
||||
public IDockElement Target { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Позиция сброса относительно цели.
|
||||
/// </summary>
|
||||
public DockPosition Position { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Границы области в экранных координатах.
|
||||
/// </summary>
|
||||
public Rect Bounds { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Видимость области (для анимации).
|
||||
/// </summary>
|
||||
public double Visibility { get; set; } = 0.0;
|
||||
|
||||
/// <summary>
|
||||
/// Инициализирует новый экземпляр области сброса.
|
||||
/// </summary>
|
||||
/// <param name="target">Целевой элемент.</param>
|
||||
/// <param name="position">Позиция сброса.</param>
|
||||
/// <param name="bounds">Границы области.</param>
|
||||
public DropArea(IDockElement target, DockPosition position, Rect bounds)
|
||||
{
|
||||
Target = target;
|
||||
Position = position;
|
||||
Bounds = bounds;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user