| 1 | using Avalonia; |
| 2 | using Avalonia.Media; |
| 3 | using static CascadeIDE.Cockpit.PrimitivesKit.CockpitPrimitivesPalette.Annunciator; |
| 4 | |
| 5 | namespace CascadeIDE.Cockpit.PrimitivesKit; |
| 6 | |
| 7 | /// <summary> |
| 8 | /// Размеры и раскладка полосы annunciator (ADR 0063): константы, <see cref="MeasureStrip"/>, фон панели. |
| 9 | /// Отрисовка конкретной ячейки — у типов вроде <see cref="LabeledAnnunciatorLampFace"/>. |
| 10 | /// </summary> |
| 11 | public static class AnnunciatorLampMetrics |
| 12 | { |
| 13 | public const double DefaultCellWidth = 40; |
| 14 | public const double DefaultCellHeight = 40; |
| 15 | public const double DefaultGap = 4; |
| 16 | public const double DefaultPanelPadding = 6; |
| 17 | /// <summary>Ламп в одной строке полосы (напр. 4 для готовности окружения).</summary> |
| 18 | public const int DefaultStripColumns = 4; |
| 19 | public const double LabelFontSize = 9; |
| 20 | /// <summary>Две строки подписи в линзе (короткий кегль).</summary> |
| 21 | public const double TwoLineLabelFontSize = 7.0; |
| 22 | |
| 23 | /// <summary>Размер прямоугольника полосы (с паддингом панели) для заданного числа ячеек.</summary> |
| 24 | public static Size MeasureStrip( |
| 25 | int itemCount, |
| 26 | int columnsPerRow = DefaultStripColumns, |
| 27 | double cellW = DefaultCellWidth, |
| 28 | double cellH = DefaultCellHeight, |
| 29 | double gap = DefaultGap, |
| 30 | double panelPadding = DefaultPanelPadding) |
| 31 | { |
| 32 | if (itemCount <= 0 || columnsPerRow <= 0) |
| 33 | return new Size(0, 0); |
| 34 | |
| 35 | var rowCount = (itemCount + columnsPerRow - 1) / columnsPerRow; |
| 36 | var w = panelPadding * 2 + columnsPerRow * cellW + (columnsPerRow - 1) * gap; |
| 37 | var h = panelPadding * 2 + rowCount * cellH + (rowCount - 1) * gap; |
| 38 | return new Size(w, h); |
| 39 | } |
| 40 | |
| 41 | /// <summary>Фон панели под полосой ламп (рамка «корпуса»).</summary> |
| 42 | public static void DrawPanelBackground(DrawingContext context, Rect bounds) => |
| 43 | context.DrawRectangle(new SolidColorBrush(PanelBackground), new Pen(new SolidColorBrush(BezelOuter), 1), bounds); |
| 44 | } |
| 45 | |