37 lines
2.2 KiB
C#
37 lines
2.2 KiB
C#
namespace PRecAnnot.Application;
|
|
|
|
public sealed record PRecAnnotCommandDescriptor
|
|
{
|
|
public required string CommandName { get; init; }
|
|
public required string DisplayName { get; init; }
|
|
public required string UseCaseId { get; init; }
|
|
public required string RibbonPanel { get; init; }
|
|
public bool RequiresPlantProject { get; init; }
|
|
public bool RequiresOrthoDrawing { get; init; }
|
|
public bool RequiresSelection { get; init; }
|
|
public string Status { get; init; } = "BLOCKED_WITH_REASON";
|
|
}
|
|
|
|
public sealed class CommandRegistry
|
|
{
|
|
private readonly IReadOnlyDictionary<string, PRecAnnotCommandDescriptor> _commands;
|
|
|
|
public CommandRegistry(IEnumerable<PRecAnnotCommandDescriptor> commands)
|
|
{
|
|
var list = commands.ToList();
|
|
if (list.GroupBy(x => x.CommandName, StringComparer.OrdinalIgnoreCase).Any(x => x.Count() > 1))
|
|
throw new ArgumentException("Command names must be unique.", nameof(commands));
|
|
_commands = list.ToDictionary(x => x.CommandName, StringComparer.OrdinalIgnoreCase);
|
|
}
|
|
|
|
public IReadOnlyCollection<PRecAnnotCommandDescriptor> Commands => _commands.Values.ToArray();
|
|
public bool TryGet(string name, out PRecAnnotCommandDescriptor? descriptor) => _commands.TryGetValue(name, out descriptor);
|
|
|
|
public static CommandRegistry Foundation() => new(new[]
|
|
{
|
|
new PRecAnnotCommandDescriptor { CommandName = "PHP_REC_ANNOT", DisplayName = "Аннотировать", UseCaseId = "ortho-annotation", RibbonPanel = "Аннотации", RequiresPlantProject = true, RequiresOrthoDrawing = true, Status = "BLOCKED_WITH_REASON" },
|
|
new PRecAnnotCommandDescriptor { CommandName = "PXP-AAV", DisplayName = "Разместить аннотации автоматически", UseCaseId = "auto-annotate-view", RibbonPanel = "Аннотации", RequiresPlantProject = true, RequiresOrthoDrawing = true, Status = "BLOCKED_WITH_REASON" },
|
|
new PRecAnnotCommandDescriptor { CommandName = "PXP-OA", DisplayName = "Разместить осевые линии и опоры", UseCaseId = "ortho-axes-supports", RibbonPanel = "Осевые линии и опоры", RequiresPlantProject = true, RequiresOrthoDrawing = true, Status = "BLOCKED_WITH_REASON" }
|
|
});
|
|
}
|