Forge
csharpdeeb25a2
1#nullable enable
2
3using Avalonia.Media;
4using CascadeIDE.Cockpit.Channels.Eicas;
5using CascadeIDE.Models;
6
7namespace CascadeIDE.Cockpit.PrimitivesKit;
8
9/// <summary>
10/// Единый слой ARGB для примитивов кабины (визуальный язык, ADR 0064).
11/// Правки палитры — здесь; отрисовка и конвертеры только ссылаются на эти значения.
12/// </summary>
13public static class CockpitPrimitivesPalette
14{
15 /// <summary>
16 /// Канал EICAS / CAS: три уровня W/C/A (ADR 0021 §5). Канон для текста полосы, бейджей и сопоставимых уровней ламп.
17 /// Значения совпадают с прежними hex в <c>EicasSeverityToBrushConverter</c>.
18 /// Соответствие бытовым словам (Error / Warning / Information) и <see cref="AnnunciatorLampLevel"/> — таблица в ADR 0021 §5.
19 /// </summary>
20 public static class Eicas
21 {
22 public static readonly Color Warning = Color.Parse("#C02828");
23 public static readonly Color Caution = Color.Parse("#B8860B");
24 public static readonly Color Advisory = Color.Parse("#1565C0");
25
26 public static Color Foreground(EicasSeverity severity) =>
27 severity switch
28 {
29 EicasSeverity.Warning => Warning,
30 EicasSeverity.Caution => Caution,
31 _ => Advisory,
32 };
33 }
34
35 /// <summary>Annunciator / Korry: корпус, линзы, акценты списка. Маппинг уровней — ADR 0021 §5, таблица.</summary>
36 public static class Annunciator
37 {
38 public static readonly Color BezelOuter = Color.Parse("#3A3A3A");
39 public static readonly Color BezelInner = Color.Parse("#1E1E1E");
40 public static readonly Color Housing = Color.Parse("#080808");
41 public static readonly Color PanelBackground = Color.Parse("#0C0C0C");
42 public static readonly Color BevelHighlight = Color.Parse("#4A4A4A");
43 public static readonly Color BevelShadow = Color.Parse("#0A0A0A");
44
45 public static readonly Color OffLensTop = Color.Parse("#101010");
46 public static readonly Color OffLensBottom = Color.Parse("#1C1C1C");
47 public static readonly Color OffLensBorder = Color.Parse("#050505");
48 public static readonly Color OffLabelFill = Color.Parse("#5C5C5C");
49 public static readonly Color OutlinedTextStrokeDim = Color.Parse("#121212");
50 public static readonly Color OutlinedTextStrokeLit = Color.Parse("#0A0A0A");
51
52 /// <summary>Подсвеченная линза (не <see cref="AnnunciatorLampLevel.Ok"/>).</summary>
53 public static readonly Color LitLensCaution = Eicas.Caution;
54 public static readonly Color LitLensAdvisory = Eicas.Advisory;
55 public static readonly Color LitLensCritical = Eicas.Warning;
56 public static readonly Color LitLensUnknown = Color.Parse("#888888");
57
58 /// <summary>Акцент строки таблицы / списка по уровню (иконка, заголовок; Ok = «норма», не линза).</summary>
59 public static readonly Color RowAccentOk = Color.Parse("#2D8A5A");
60 public static readonly Color RowAccentCaution = Eicas.Caution;
61 public static readonly Color RowAccentAdvisory = Eicas.Advisory;
62 public static readonly Color RowAccentCritical = Eicas.Warning;
63 public static readonly Color RowAccentUnknown = Color.Parse("#888888");
64
65 public static readonly Color TooltipDetailForeground = Color.Parse("#D0D0D0");
66
67 /// <summary>CascadeChord toolbar: лампа «CMD + полоса» в armed (ADR 0060/0064), не EICAS W/C/A.</summary>
68 public static readonly Color CommandArmedLabelAmber = Color.Parse("#FFB000");
69
70 /// <summary>Нижняя полоса активности (armed) — зелёный индикатор «вкл».</summary>
71 public static readonly Color CommandArmedStripGreen = Color.Parse("#00E676");
72
73 public static Color LitLens(AnnunciatorLampLevel level) =>
74 level switch
75 {
76 AnnunciatorLampLevel.Caution => LitLensCaution,
77 AnnunciatorLampLevel.Advisory => LitLensAdvisory,
78 AnnunciatorLampLevel.Critical => LitLensCritical,
79 AnnunciatorLampLevel.Ok => throw new InvalidOperationException("Ok is drawn as off; no lit fill color."),
80 _ => LitLensUnknown,
81 };
82
83 public static Color RowAccent(AnnunciatorLampLevel level) =>
84 level switch
85 {
86 AnnunciatorLampLevel.Ok => RowAccentOk,
87 AnnunciatorLampLevel.Caution => RowAccentCaution,
88 AnnunciatorLampLevel.Advisory => RowAccentAdvisory,
89 AnnunciatorLampLevel.Critical => RowAccentCritical,
90 _ => RowAccentUnknown,
91 };
92 }
93
94 /// <summary>Мини-карта навигации по коду (control flow / звезда) — узлы, рёбра, подписи; в UI — «Карта намерений».</summary>
95 public static class CodeNavigationMap
96 {
97 public static readonly Color AnchorFill = Color.Parse("#7CC9FF");
98 public static readonly Color ConditionFill = Color.FromArgb(240, 255, 210, 120);
99 public static readonly Color ExitFill = Color.FromArgb(230, 165, 175, 190);
100 public static readonly Color CallFill = Color.Parse("#9B8CFF");
101 /// <summary>Обработчик исключений (catch) / «защищённый» участок (ADR 0053).</summary>
102 public static readonly Color HandlerFill = Color.FromArgb(235, 70, 175, 155);
103 public static readonly Color SideLabel = Color.FromArgb(220, 225, 235, 255);
104 public static readonly Color BaseEdge = Color.FromArgb(180, 140, 140, 160);
105 public static readonly Color ConditionalEdge = Color.FromArgb(220, 255, 210, 120);
106 public static readonly Color MultiBranchEdge = Color.FromArgb(200, 110, 195, 255);
107 public static readonly Color LoopEdge = Color.FromArgb(235, 120, 230, 255);
108 public static readonly Color HighlightedEdge = Color.FromArgb(245, 255, 255, 190);
109 public static readonly Color HighlightedLoopEdge = Color.FromArgb(250, 255, 255, 200);
110 public static readonly Color HighlightedNode = Color.FromArgb(230, 255, 255, 200);
111 public static readonly Color NodeStroke = Color.Parse("#22000000");
112 }
113
114 /// <summary>
115 /// Мини-карта в режиме «связанные файлы» — отдельный акцент от CFG (тот же примитивный рендер, другая палитра; ADR 0067).
116 /// </summary>
117 public static class CodeNavigationMapWorkspace
118 {
119 public static readonly Color AnchorFill = Color.Parse("#4A9FD8");
120 public static readonly Color ConditionFill = Color.FromArgb(235, 230, 195, 130);
121 public static readonly Color ExitFill = Color.FromArgb(225, 150, 165, 185);
122 public static readonly Color PeerFill = Color.FromArgb(235, 130, 175, 210);
123 public static readonly Color HandlerFill = Color.FromArgb(230, 55, 165, 145);
124 public static readonly Color SideLabel = Color.FromArgb(215, 210, 225, 240);
125 public static readonly Color BaseEdge = Color.FromArgb(175, 100, 140, 175);
126 public static readonly Color ConditionalEdge = Color.FromArgb(215, 220, 195, 130);
127 public static readonly Color MultiBranchEdge = Color.FromArgb(195, 95, 175, 220);
128 public static readonly Color LoopEdge = Color.FromArgb(225, 110, 200, 235);
129 public static readonly Color HighlightedEdge = Color.FromArgb(240, 255, 250, 185);
130 public static readonly Color HighlightedLoopEdge = Color.FromArgb(245, 255, 252, 195);
131 public static readonly Color HighlightedNode = Color.FromArgb(225, 255, 252, 200);
132 public static readonly Color NodeStroke = Color.Parse("#22000000");
133 }
134}
135
View only · write via MCP/CIDE