diff --git a/OpenRA.Game/Widgets/Widget.cs b/OpenRA.Game/Widgets/Widget.cs index ade8fb12ce..fed0ff88ca 100644 --- a/OpenRA.Game/Widgets/Widget.cs +++ b/OpenRA.Game/Widgets/Widget.cs @@ -19,7 +19,89 @@ namespace OpenRA.Widgets { public abstract class Widget { - // Info defined in YAML + public static Widget RootWidget + { + get { return rootWidget; } + set { rootWidget = value; } + } + + static Widget rootWidget = new ContainerWidget(); + static Stack WindowList = new Stack(); + public static Widget SelectedWidget; + + public static bool HandleInput(MouseInput mi) + { + bool handled = false; + if (SelectedWidget != null && SelectedWidget.HandleMouseInputOuter(mi)) + handled = true; + + if (!handled && RootWidget.HandleMouseInputOuter(mi)) + handled = true; + + if (mi.Event == MouseInputEvent.Move) + { + Viewport.LastMousePos = mi.Location; + Viewport.TicksSinceLastMove = 0; + } + return handled; + } + + public static bool HandleKeyPress(KeyInput e) + { + if (SelectedWidget != null) + return SelectedWidget.HandleKeyPressOuter(e); + + if (RootWidget.HandleKeyPressOuter(e)) + return true; + return false; + } + + public static void CloseWindow() + { + if (WindowList.Count > 0) + RootWidget.RemoveChild(WindowList.Pop()); + if (WindowList.Count > 0) + rootWidget.AddChild(WindowList.Peek()); + } + + public static Widget OpenWindow(string id) + { + return OpenWindow(id, new WidgetArgs()); + } + + public static Widget OpenWindow(string id, WidgetArgs args) + { + var window = Game.modData.WidgetLoader.LoadWidget(args, rootWidget, id); + if (WindowList.Count > 0) + rootWidget.RemoveChild(WindowList.Peek()); + WindowList.Push(window); + return window; + } + + public static Widget LoadWidget(string id, Widget parent, WidgetArgs args) + { + return Game.modData.WidgetLoader.LoadWidget(args, parent, id); + } + + public static void DoTick() + { + RootWidget.Tick(); + } + + public static void DoDraw() + { + RootWidget.Draw(); + } + + public static void ResetAll() + { + RootWidget.RemoveChildren(); + + while (Widget.WindowList.Count > 0) + Widget.CloseWindow(); + } + + // Info defined in YAML public string Id = null; public string X = "0"; public string Y = "0"; @@ -29,27 +111,13 @@ namespace OpenRA.Widgets public object LogicObject { get; private set; } public bool Visible = true; - protected readonly List Children = new List(); - // Calculated internally public Rectangle Bounds; public Widget Parent = null; - - static Stack WindowList = new Stack(); - - // Common Funcs that most widgets will want - public Func OnMouseUp = mi => false; - - public Func IsVisible; - + public Func IsVisible; public Widget() { IsVisible = () => Visible; } - - public static Widget RootWidget - { - get { return rootWidget; } - set { rootWidget = value; } - } - static Widget rootWidget = new ContainerWidget(); + protected readonly List Children = new List(); + public Func OnMouseUp = _ => false; public Widget(Widget widget) { @@ -142,7 +210,6 @@ namespace OpenRA.Widgets .Aggregate(EventBounds, Rectangle.Union); } - public static Widget SelectedWidget; public bool Focused { get { return SelectedWidget == this; } } public virtual bool TakeFocus(MouseInput mi) { @@ -188,23 +255,6 @@ namespace OpenRA.Widgets return EventBounds.Contains(pos) ? GetCursor(pos) : null; } - public static bool HandleInput(MouseInput mi) - { - bool handled = false; - if (SelectedWidget != null && SelectedWidget.HandleMouseInputOuter(mi)) - handled = true; - - if (!handled && RootWidget.HandleMouseInputOuter(mi)) - handled = true; - - if (mi.Event == MouseInputEvent.Move) - { - Viewport.LastMousePos = mi.Location; - Viewport.TicksSinceLastMove = 0; - } - return handled; - } - public bool HandleMouseInputOuter(MouseInput mi) { // Are we able to handle this event? @@ -246,16 +296,6 @@ namespace OpenRA.Widgets return handled; } - public static bool HandleKeyPress(KeyInput e) - { - if (SelectedWidget != null) - return SelectedWidget.HandleKeyPressOuter(e); - - if (RootWidget.HandleKeyPressOuter(e)) - return true; - return false; - } - public abstract void DrawInner(); public virtual void Draw() @@ -318,51 +358,6 @@ namespace OpenRA.Widgets var widget = GetWidget(id); return (widget != null) ? (T)widget : null; } - - public static void CloseWindow() - { - if (WindowList.Count > 0) - RootWidget.RemoveChild(WindowList.Pop()); - if (WindowList.Count > 0) - rootWidget.AddChild(WindowList.Peek()); - } - - public static Widget OpenWindow(string id) - { - return OpenWindow(id, new WidgetArgs()); - } - - public static Widget OpenWindow(string id, WidgetArgs args) - { - var window = Game.modData.WidgetLoader.LoadWidget(args, rootWidget, id); - if (WindowList.Count > 0) - rootWidget.RemoveChild(WindowList.Peek()); - WindowList.Push(window); - return window; - } - - public static Widget LoadWidget(string id, Widget parent, WidgetArgs args) - { - return Game.modData.WidgetLoader.LoadWidget(args, parent, id); - } - - public static void DoTick() - { - RootWidget.Tick(); - } - - public static void DoDraw() - { - RootWidget.Draw(); - } - - public static void ResetAll() - { - RootWidget.RemoveChildren(); - - while (Widget.WindowList.Count > 0) - Widget.CloseWindow(); - } } public class ContainerWidget : Widget