mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-09-01 09:37:03 +02:00
130 lines
3.8 KiB
C#
130 lines
3.8 KiB
C#
using System.Linq;
|
|
using Robust.Client.AutoGenerated;
|
|
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 DevWindowUITreeEntry : Control
|
|
{
|
|
private readonly DevWindowTabUI _tab;
|
|
public readonly Control VisControl;
|
|
|
|
public DevWindowUITreeEntry(DevWindowTabUI tab, Control visControl)
|
|
{
|
|
_tab = tab;
|
|
VisControl = visControl;
|
|
|
|
InitializeComponent();
|
|
|
|
var typeName = visControl.GetType().Name;
|
|
ControlName.Text = visControl.Name == null ? typeName : $"{visControl.Name} ({typeName})";
|
|
|
|
_tab.EntryAdded(this);
|
|
}
|
|
|
|
private void InitializeComponent()
|
|
{
|
|
RobustXamlLoader.Load(this);
|
|
|
|
ExpandButton.OnToggled += ExpandButtonOnOnToggled;
|
|
Header.OnKeyBindDown += HeaderOnOnKeyBindDown;
|
|
}
|
|
|
|
private void HeaderOnOnKeyBindDown(GUIBoundKeyEventArgs obj)
|
|
{
|
|
if (obj.Function != EngineKeyFunctions.UIClick)
|
|
return;
|
|
|
|
obj.Handle();
|
|
_tab.SelectControl(VisControl);
|
|
}
|
|
|
|
protected override void EnteredTree()
|
|
{
|
|
base.EnteredTree();
|
|
|
|
VisControl.OnChildAdded += VisControlOnChildAdded;
|
|
VisControl.OnChildRemoved += VisControlOnChildRemoved;
|
|
VisControl.OnChildMoved += VisControlOnChildMoved;
|
|
_tab.SelectedControlChanged += TabOnSelectedControlChanged;
|
|
}
|
|
|
|
protected override void ExitedTree()
|
|
{
|
|
base.ExitedTree();
|
|
|
|
VisControl.OnChildAdded -= VisControlOnChildAdded;
|
|
VisControl.OnChildRemoved -= VisControlOnChildRemoved;
|
|
VisControl.OnChildMoved -= VisControlOnChildMoved;
|
|
_tab.SelectedControlChanged -= TabOnSelectedControlChanged;
|
|
|
|
_tab.EntryRemoved(this);
|
|
}
|
|
|
|
private void TabOnSelectedControlChanged()
|
|
{
|
|
var isThis = VisControl == _tab.SelectedControl;
|
|
|
|
Header.PanelOverride = isThis ? new StyleBoxFlat { BackgroundColor = Color.Blue } : null;
|
|
}
|
|
|
|
private void VisControlOnChildAdded(Control child)
|
|
{
|
|
if (!ExpandButton.Pressed)
|
|
return;
|
|
|
|
ChildEntryContainer.AddChild(new DevWindowUITreeEntry(_tab, child));
|
|
}
|
|
|
|
private void VisControlOnChildRemoved(Control child)
|
|
{
|
|
if (!ExpandButton.Pressed)
|
|
return;
|
|
|
|
var entry = ChildEntryContainer.Children.OfType<DevWindowUITreeEntry>().Single(c => c.VisControl == child);
|
|
ChildEntryContainer.RemoveChild(entry);
|
|
}
|
|
|
|
private void VisControlOnChildMoved(ControlChildMovedEventArgs eventArgs)
|
|
{
|
|
if (!ExpandButton.Pressed)
|
|
return;
|
|
|
|
var entry = ChildEntryContainer.Children
|
|
.OfType<DevWindowUITreeEntry>()
|
|
.Single(c => c.VisControl == eventArgs.Control);
|
|
entry.SetPositionInParent(eventArgs.NewIndex);
|
|
}
|
|
|
|
internal void Open()
|
|
{
|
|
DebugTools.Assert(ChildEntryContainer.ChildCount == 0);
|
|
|
|
ExpandButton.Pressed = true;
|
|
|
|
foreach (var child in VisControl.Children)
|
|
{
|
|
ChildEntryContainer.AddChild(new DevWindowUITreeEntry(_tab, child));
|
|
}
|
|
}
|
|
|
|
private void ExpandButtonOnOnToggled(BaseButton.ButtonToggledEventArgs obj)
|
|
{
|
|
if (obj.Pressed)
|
|
{
|
|
Open();
|
|
}
|
|
else
|
|
{
|
|
ChildEntryContainer.RemoveAllChildren();
|
|
}
|
|
}
|
|
}
|
|
}
|