Files
RobustToolbox/Robust.Client/UserInterface/DevWindow/DevWindowTabUI.xaml.cs
T

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 });
}
}
}
}