Forge
csharpdeeb25a2
1using Avalonia;
2using Avalonia.Controls;
3using Avalonia.Media;
4using CascadeIDE.Cockpit.PrimitivesKit;
5
6namespace CascadeIDE.Views;
7
8/// <summary>
9/// Лампа TOL (Take Off / Landing) для блокировки сплиттеров: тот же корпус и композиция, что у
10/// <see cref="CommandArmedStripLampCell"/> (ADR 0064), отрисовка через
11/// <see cref="WorkspaceSplittersTolLampFace"/>.
12/// </summary>
13public sealed class WorkspaceSplittersTolStripLampCell : Control
14{
15 public static readonly StyledProperty<bool> SplittersLockedProperty =
16 AvaloniaProperty.Register<WorkspaceSplittersTolStripLampCell, bool>(nameof(SplittersLocked));
17
18 static WorkspaceSplittersTolStripLampCell()
19 {
20 AffectsRender<WorkspaceSplittersTolStripLampCell>(SplittersLockedProperty);
21 FocusableProperty.OverrideDefaultValue<WorkspaceSplittersTolStripLampCell>(false);
22 }
23
24 public bool SplittersLocked
25 {
26 get => GetValue(SplittersLockedProperty);
27 set => SetValue(SplittersLockedProperty, value);
28 }
29
30 protected override Size MeasureOverride(Size availableSize) =>
31 new(
32 AnnunciatorLampMetrics.DefaultCellWidth + 4,
33 AnnunciatorLampMetrics.DefaultCellHeight + 4);
34
35 public override void Render(DrawingContext context)
36 {
37 base.Render(context);
38 var w = Bounds.Width;
39 var h = Bounds.Height;
40 if (w <= 0 || h <= 0)
41 return;
42
43 var cell = AnnunciatorLampMetrics.DefaultCellWidth;
44 var x = (w - cell) / 2;
45 var y = (h - cell) / 2;
46 var outer = new Rect(x, y, cell, cell);
47 new WorkspaceSplittersTolLampFace(SplittersLocked).Draw(context, outer);
48 }
49}
50
View only · write via MCP/CIDE