| 1 | using Avalonia; |
| 2 | using Avalonia.Controls; |
| 3 | using Avalonia.Media; |
| 4 | using CascadeIDE.Cockpit.PrimitivesKit; |
| 5 | |
| 6 | namespace CascadeIDE.Views; |
| 7 | |
| 8 | /// <summary> |
| 9 | /// Лампа TOL (Take Off / Landing) для блокировки сплиттеров: тот же корпус и композиция, что у |
| 10 | /// <see cref="CommandArmedStripLampCell"/> (ADR 0064), отрисовка через |
| 11 | /// <see cref="WorkspaceSplittersTolLampFace"/>. |
| 12 | /// </summary> |
| 13 | public 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 | |