Добавлен Core

This commit is contained in:
2026-01-07 21:31:57 +03:00
parent fc994edf71
commit b6de0543b7
4 changed files with 170 additions and 8 deletions

52
Lattice.Core/README.md Normal file
View File

@@ -0,0 +1,52 @@
# 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");
```