diff --git a/OpenDreamClient/Interface/Controls/ControlChild.cs b/OpenDreamClient/Interface/Controls/ControlChild.cs index 0f3b73ff44..d1d7024f9a 100644 --- a/OpenDreamClient/Interface/Controls/ControlChild.cs +++ b/OpenDreamClient/Interface/Controls/ControlChild.cs @@ -87,4 +87,14 @@ private void UpdateGrid() { _grid.SplitFraction = ChildDescriptor.Splitter / 100f; } + + public override bool TryGetProperty(string property, out string value) { + switch (property) { + case "splitter": + value = $"{_grid.SplitFraction * 100}"; + return true; + default: + return base.TryGetProperty(property, out value); + } + } } diff --git a/OpenDreamClient/Interface/Controls/ControlWindow.cs b/OpenDreamClient/Interface/Controls/ControlWindow.cs index bcce13d490..d10bd08268 100644 --- a/OpenDreamClient/Interface/Controls/ControlWindow.cs +++ b/OpenDreamClient/Interface/Controls/ControlWindow.cs @@ -272,4 +272,47 @@ protected override Control CreateUIElement() { private void CanvasOnResized() { UpdateAnchors(); } + + public override bool TryGetProperty(string property, out string value) { + switch (property) { + case "inner-size": + value = $"{_canvas.Width}x{_canvas.Height}"; + return true; + case "outer-size": + if(_myWindow.osWindow is not null){ + value = $"{_myWindow.osWindow.Width}x{_myWindow.osWindow.Height}"; + return true; + } else if(_myWindow.clydeWindow is not null){ + value = $"{_myWindow.clydeWindow.Size.X}x{_myWindow.clydeWindow.Size.Y}"; + return true; + } else { + value = $"{UIElement.Size.X}x{UIElement.Size.Y}"; + return true; + } + case "is-minimized": + if(_myWindow.osWindow?.ClydeWindow != null){ + value = _myWindow.osWindow.ClydeWindow.IsMinimized ? "true" : "false"; + return true; + } else if(_myWindow.clydeWindow is not null){ + value = _myWindow.clydeWindow.IsMinimized ? "true" : "false"; + return true; + } else { + value = "false"; + return true; + } + case "is-maximized": //TODO this is current "not isMinimised" because RT doesn't expose a maximised check + if(_myWindow.osWindow?.ClydeWindow != null){ + value = !_myWindow.osWindow.ClydeWindow.IsMinimized ? "true" : "false"; + return true; + } else if(_myWindow.clydeWindow is not null){ + value = !_myWindow.clydeWindow.IsMinimized ? "true" : "false"; + return true; + } else { + value = "false"; + return true; + } + default: + return base.TryGetProperty(property, out value); + } + } } diff --git a/OpenDreamClient/Interface/Controls/InterfaceControl.cs b/OpenDreamClient/Interface/Controls/InterfaceControl.cs index 01d595e6e2..79fe04f4fb 100644 --- a/OpenDreamClient/Interface/Controls/InterfaceControl.cs +++ b/OpenDreamClient/Interface/Controls/InterfaceControl.cs @@ -68,6 +68,9 @@ public override bool TryGetProperty(string property, out string value) { case "is-disabled": value = ControlDescriptor.IsDisabled.ToString(); return true; + case "pos": + value = $"{UIElement.Position.X},{UIElement.Position.Y}"; + return true; default: return base.TryGetProperty(property, out value); } diff --git a/OpenDreamClient/Interface/DreamInterfaceManager.cs b/OpenDreamClient/Interface/DreamInterfaceManager.cs index 17098ab18e..ffd50d57f8 100644 --- a/OpenDreamClient/Interface/DreamInterfaceManager.cs +++ b/OpenDreamClient/Interface/DreamInterfaceManager.cs @@ -565,10 +565,20 @@ string GetProperty(string elementId) { return string.Empty; } - if (!element.TryGetProperty(queryValue, out var value)) - _sawmill.Error($"Could not winget property {queryValue} on {element.Id}"); + var multiQuery = queryValue.Split(';', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); + if(multiQuery.Length > 1) { + var result = ""; + foreach(var query in multiQuery) { + if (!element.TryGetProperty(query, out var queryResult)) + _sawmill.Error($"Could not winget property {query} on {element.Id}"); + result += query+"="+queryResult + ";"; + } + return result.TrimEnd(';'); + } else if (element.TryGetProperty(queryValue, out var value)) + return value; - return value; + _sawmill.Error($"Could not winget property {queryValue} on {element.Id}"); + return string.Empty; } var elementIds = controlId.Split(';', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);