mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-09-03 10:37:05 +02:00
107 lines
2.9 KiB
C#
107 lines
2.9 KiB
C#
using System;
|
|
using Robust.Client.AutoGenerated;
|
|
using Robust.Client.Console.Commands;
|
|
using Robust.Client.Graphics;
|
|
using Robust.Client.UserInterface.Controls;
|
|
using Robust.Client.UserInterface.XAML;
|
|
using Robust.Shared.Input;
|
|
using Robust.Shared.Maths;
|
|
using Robust.Shared.Utility;
|
|
|
|
namespace Robust.Client.UserInterface
|
|
{
|
|
[GenerateTypedNameReferences]
|
|
public sealed partial class DevWindowTabUI : Control
|
|
{
|
|
public Control? SelectedControl { get; private set; }
|
|
|
|
public event Action? SelectedControlChanged;
|
|
|
|
public DevWindowTabUI()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
private void InitializeComponent()
|
|
{
|
|
RobustXamlLoader.Load(this);
|
|
|
|
ControlTreeRoot.OnKeyBindDown += ControlTreeRootOnOnKeyBindDown;
|
|
RefreshPropertiesButton.OnPressed += _ => Refresh();
|
|
}
|
|
|
|
private void ControlTreeRootOnOnKeyBindDown(GUIBoundKeyEventArgs obj)
|
|
{
|
|
if (obj.Function != EngineKeyFunctions.UIClick)
|
|
return;
|
|
|
|
obj.Handle();
|
|
SelectControl(null);
|
|
}
|
|
|
|
protected override void EnteredTree()
|
|
{
|
|
base.EnteredTree();
|
|
|
|
// Load tree roots.
|
|
foreach (var root in UserInterfaceManager.AllRoots)
|
|
{
|
|
var entry = new DevWindowUITreeEntry(this, root);
|
|
|
|
ControlTreeRoot.AddChild(entry);
|
|
}
|
|
|
|
UserInterfaceManager.OnPostDrawUIRoot += OnPostDrawUIRoot;
|
|
}
|
|
|
|
protected override void ExitedTree()
|
|
{
|
|
base.ExitedTree();
|
|
|
|
// Clear tree children.
|
|
ControlTreeRoot.RemoveAllChildren();
|
|
UserInterfaceManager.OnPostDrawUIRoot -= OnPostDrawUIRoot;
|
|
}
|
|
|
|
private void OnPostDrawUIRoot(PostDrawUIRootEventArgs eventArgs)
|
|
{
|
|
if (SelectedControl == null || eventArgs.Root != SelectedControl.Root)
|
|
return;
|
|
|
|
var rect = UIBox2i.FromDimensions(SelectedControl.GlobalPixelPosition, SelectedControl.PixelSize);
|
|
eventArgs.DrawingHandle.DrawRect(rect, Color.Cyan.WithAlpha(0.35f));
|
|
}
|
|
|
|
public void EntryRemoved(DevWindowUITreeEntry entry)
|
|
{
|
|
if (SelectedControl == entry.VisControl)
|
|
SelectControl(null);
|
|
}
|
|
|
|
public void SelectControl(Control? control)
|
|
{
|
|
SelectedControl = control;
|
|
|
|
SelectedControlChanged?.Invoke();
|
|
|
|
Refresh();
|
|
}
|
|
|
|
|
|
private void Refresh()
|
|
{
|
|
ControlProperties.RemoveAllChildren();
|
|
|
|
if (SelectedControl == null)
|
|
return;
|
|
|
|
var props = GuiDumpCommand.PropertyValuesFor(SelectedControl);
|
|
foreach (var (prop, value) in props)
|
|
{
|
|
ControlProperties.AddChild(new Label { Text = prop });
|
|
ControlProperties.AddChild(new Label { Text = value });
|
|
}
|
|
}
|
|
}
|
|
}
|