54 lines
3.1 KiB
Markdown
54 lines
3.1 KiB
Markdown
# Lattice.Core
|
||
|
||
[](#)
|
||
[](git.frigat.duckdns.org)
|
||
[](#)
|
||
|
||
**Lattice.Core** — это платформонезависимое ядро (Layout Engine) для построения сложных интерфейсов с системой докинга в стиле Visual Studio 2026.
|
||
|
||
Библиотека является частью экосистемы **Lattice** и отвечает исключительно за математику макета, управление деревом узлов и контекстное состояние, не имея зависимостей от конкретных UI-фреймворков.
|
||
|
||
## 🚀 Особенности
|
||
|
||
- **Агностическая архитектура**: Полная совместимость с .NET 8+, WinUI 3 и Uno Platform.
|
||
- **Древовидная компоновка**: Управление интерфейсом через узлы (`Split` и `Content`).
|
||
- **Context-Aware System**: Встроенный сервис отслеживания контекста для динамического переключения панелей инструментов.
|
||
- **Smart Docking**: Алгоритмы автоматического разделения зон и схлопывания пустых контейнеров.
|
||
- **JSON Persistence**: Полиморфная сериализация макетов для сохранения и загрузки состояний пользователя.
|
||
|
||
## 📁 Структура проекта
|
||
|
||
* `Abstractions/` — Интерфейсы для расширения системы.
|
||
* `Models/` — Базовые сущности дерева (узлы, направления, ориентация).
|
||
* `Services/` - Сервисы управления интерфейсом
|
||
* `ContextService` - Сервис управления контекстом приложения.
|
||
* `LayoutService` - Сервис управления макетом.
|
||
* `NotificationService` - Сервис уведомлений.
|
||
* `Persistence/` — Логика сохранения макета в JSON.
|
||
|
||
## 🛠 Использование
|
||
|
||
### Создание базового макета
|
||
|
||
```csharp
|
||
var layoutService = new LayoutService();
|
||
|
||
// Создаем контентные узлы
|
||
var explorer = new ContentNode(new MyToolComponent("Solution Explorer", "Explorer"));
|
||
var editor = new ContentNode(new MyDocumentComponent("Main.cs", "CodeEditor"));
|
||
|
||
// Устанавливаем редактор как корень
|
||
layoutService.SetRoot(editor);
|
||
|
||
// Прикрепляем проводник слева от редактора
|
||
layoutService.Dock(explorer, editor, DockDirection.Left);
|
||
|
||
//Переключение контекста
|
||
var contextService = new ContextService();
|
||
|
||
// Вызывается при активации вкладки в UI
|
||
contextService.SetContext("CodeEditor");
|
||
|
||
// Проверка видимости команд в текущем контексте
|
||
bool isDebugVisible = contextService.IsCommandVisible("btnDebug", "CodeEditor");
|
||
``` |