50 lines
2.2 KiB
C#
50 lines
2.2 KiB
C#
using Lattice.Core.Models;
|
|
using Lattice.UI.Primitives; // Для доступа к LatticeIcon
|
|
using Microsoft.UI.Xaml.Controls;
|
|
|
|
namespace Lattice.UI.Controls;
|
|
|
|
/// <summary>
|
|
/// Панель инструментов, автоматически фильтрующая команды на основе текущего контекста Core.
|
|
/// </summary>
|
|
public class LatticeContextualToolbar : CommandBar
|
|
{
|
|
/// <summary>
|
|
/// Обновляет список команд на основе предоставленных определений и текущего контекста.
|
|
/// </summary>
|
|
/// <param name="actions">Полный список доступных действий.</param>
|
|
/// <param name="currentContext">Строковый идентификатор активного контекста (например, "CodeEditor").</param>
|
|
public void UpdateItems(IEnumerable<ActionDefinition> actions, string currentContext)
|
|
{
|
|
// Очищаем текущие команды
|
|
PrimaryCommands.Clear();
|
|
|
|
if (actions == null) return;
|
|
|
|
foreach (var action in actions)
|
|
{
|
|
// Логика 2026: показываем Common (общие), Global или специфичные для контекста команды
|
|
if (action.TargetContext == "Common" ||
|
|
action.TargetContext == "Global" ||
|
|
action.TargetContext == currentContext)
|
|
{
|
|
var button = new AppBarButton
|
|
{
|
|
Label = action.Label,
|
|
// Используем наш хелпер LatticeIcon для создания иконки из шрифта Segoe Fluent Icons
|
|
Icon = LatticeIcon.GetIcon(action.IconKey),
|
|
IsEnabled = action.IsEnabled
|
|
};
|
|
|
|
// Добавляем всплывающую подсказку (Tooltip)
|
|
if (!string.IsNullOrEmpty(action.Tooltip))
|
|
{
|
|
ToolTipService.SetToolTip(button, action.Tooltip);
|
|
}
|
|
|
|
PrimaryCommands.Add(button);
|
|
}
|
|
}
|
|
}
|
|
}
|