Добавьте файлы проекта.

This commit is contained in:
2026-01-07 21:28:32 +03:00
parent 02603e60ad
commit fc994edf71
15 changed files with 531 additions and 0 deletions

View File

@@ -0,0 +1,27 @@
namespace Lattice.Core.Abstractions;
/// <summary>
/// Сервис управления контекстом приложения и связанными командами.
/// </summary>
public interface IContextService
{
/// <summary>
/// Имя текущего активного контекста.
/// </summary>
string CurrentContext { get; }
/// <summary>
/// Возникает при смене фокуса между вкладками с разными ContextGroup.
/// </summary>
event EventHandler<string>? ContextChanged;
/// <summary>
/// Устанавливает активный контекст. Вызывается UI-слоем при активации вкладки.
/// </summary>
void SetContext(string contextGroup);
/// <summary>
/// Проверяет, должна ли команда быть видимой в текущем контексте.
/// </summary>
bool IsCommandVisible(string commandId, string commandContext);
}

View File

@@ -0,0 +1,33 @@
namespace Lattice.Core.Abstractions;
/// <summary>
/// Описывает компонент, который может быть размещен внутри узла компоновки Lattice.
/// </summary>
public interface IDockableComponent
{
/// <summary>
/// Уникальный строковый идентификатор компонента (например, "SolutionExplorer").
/// </summary>
string UniqueId { get; }
/// <summary>
/// Заголовок, отображаемый на вкладке или в заголовке панели.
/// </summary>
string DisplayName { get; }
/// <summary>
/// Ключ иконки (для Segoe Fluent Icons или путей к ресурсам).
/// </summary>
string? IconKey { get; }
/// <summary>
/// Группа контекста (например, "CodeEditor", "Debugger").
/// Определяет, какие панели инструментов будут активны.
/// </summary>
string ContextGroup { get; }
/// <summary>
/// Указывает, разрешено ли закрывать данный компонент пользователем.
/// </summary>
bool CanClose { get; }
}

View File

@@ -0,0 +1,42 @@
namespace Lattice.Core.Abstractions;
/// <summary>
/// Представляет базовый элемент иерархии компоновки Lattice.
/// </summary>
public interface ILayoutElement
{
/// <summary>
/// Уникальный идентификатор элемента.
/// </summary>
Guid Id { get; }
/// <summary>
/// Имя элемента для отображения или идентификации в логах.
/// </summary>
string Name { get; set; }
/// <summary>
/// Значение ширины (в пикселях или долях "star").
/// </summary>
double WidthValue { get; set; }
/// <summary>
/// Указывает, является ли ширина пропорциональной (star).
/// </summary>
bool IsWidthStar { get; set; }
/// <summary>
/// Значение высоты (в пикселях или долях "star").
/// </summary>
double HeightValue { get; set; }
/// <summary>
/// Указывает, является ли высота пропорциональной (star).
/// </summary>
bool IsHeightStar { get; set; }
/// <summary>
/// Родительский элемент в дереве компоновки.
/// </summary>
ILayoutElement? Parent { get; set; }
}

View File

@@ -0,0 +1,40 @@
using Lattice.Core.Models;
using Lattice.Core.Models.Enums;
namespace Lattice.Core.Abstractions;
/// <summary>
/// Сервис управления жизненным циклом макета приложения.
/// </summary>
public interface ILayoutService
{
/// <summary>
/// Текущий корневой узел всей структуры окон.
/// </summary>
LayoutNode? Root { get; }
/// <summary>
/// Событие, возникающее при любом изменении структуры (докинг, закрытие, изменение размеров).
/// </summary>
event EventHandler? LayoutUpdated;
/// <summary>
/// Перемещает узел в указанную позицию относительно целевого узла.
/// </summary>
void Dock(LayoutNode source, LayoutNode target, DockDirection direction);
/// <summary>
/// Удаляет узел из макета (например, при закрытии вкладки).
/// </summary>
void Remove(LayoutNode node);
/// <summary>
/// Импортирует структуру макета из снапшота.
/// </summary>
void LoadLayout(string jsonData);
/// <summary>
/// Экспортирует текущую структуру в строку для сохранения.
/// </summary>
string SaveLayout();
}