Files
Lattice/Lattice.Core/README.md
2026-01-07 21:31:57 +03:00

52 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Lattice.Core
[![Framework](img.shields.io)](#)
[![Author](img.shields.io)](git.frigat.duckdns.org)
[![Platform](img.shields.io)](#)
**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/` — Базовые сущности дерева (узлы, направления, ориентация).
* `Engine/``LayoutManager`, реализующий логику трансформации дерева.
* `Context/` — Сервисы управления активными состояниями и командами.
* `Persistence/` — Логика сохранения макета в JSON.
## 🛠 Использование
### Создание базового макета
```csharp
var layoutManager = new LayoutManager();
// Создаем контентные узлы
var explorer = new ContentNode(new MyToolComponent("Solution Explorer", "Explorer"));
var editor = new ContentNode(new MyDocumentComponent("Main.cs", "CodeEditor"));
// Устанавливаем редактор как корень
layoutManager.SetRoot(editor);
// Прикрепляем проводник слева от редактора
layoutManager.Dock(explorer, editor, DockDirection.Left);
//Переключение контекста
var contextService = new ContextManager();
// Вызывается при активации вкладки в UI
contextService.SetContext("CodeEditor");
// Проверка видимости команд в текущем контексте
bool isDebugVisible = contextService.IsCommandVisible("btnDebug", "CodeEditor");
```