diff --git a/OpenRA.Game/Widgets/ButtonWidget.cs b/OpenRA.Game/Widgets/ButtonWidget.cs index 9f9c4e574b..b1f4f04139 100644 --- a/OpenRA.Game/Widgets/ButtonWidget.cs +++ b/OpenRA.Game/Widgets/ButtonWidget.cs @@ -141,8 +141,8 @@ namespace OpenRA.Widgets Action HideDropDown = () => { - Widget.RootWidget.Children.Remove(fullscreenMask); - Widget.RootWidget.Children.Remove(panel); + Widget.RootWidget.RemoveChild(fullscreenMask); + Widget.RootWidget.RemoveChild(panel); }; HideDropDown += () => Game.BeforeGameStart -= HideDropDown; diff --git a/OpenRA.Game/Widgets/ScrollPanelWidget.cs b/OpenRA.Game/Widgets/ScrollPanelWidget.cs index d515a84dd6..16b1a0295e 100644 --- a/OpenRA.Game/Widgets/ScrollPanelWidget.cs +++ b/OpenRA.Game/Widgets/ScrollPanelWidget.cs @@ -39,10 +39,10 @@ namespace OpenRA.Widgets throw new NotImplementedException(); } - public void ClearChildren() + public override void RemoveChildren() { - Children.Clear(); ContentHeight = 0; + base.RemoveChildren(); } public override void AddChild(Widget child) diff --git a/OpenRA.Game/Widgets/Widget.cs b/OpenRA.Game/Widgets/Widget.cs index a504467259..d283c1f2fa 100644 --- a/OpenRA.Game/Widgets/Widget.cs +++ b/OpenRA.Game/Widgets/Widget.cs @@ -28,13 +28,13 @@ namespace OpenRA.Widgets public string Delegate = null; public string EventHandler = null; public bool Visible = true; + public readonly List Children = new List(); // Calculated internally public Rectangle Bounds; public Widget Parent = null; - static List Delegates = new List(); public static Stack WindowList = new Stack(); // Common Funcs that most widgets will want @@ -121,22 +121,16 @@ namespace OpenRA.Widgets height); } - public void PostInit( Dictionary args ) + public void PostInit(Dictionary args) { if( Delegate != null ) { - args[ "widget" ] = this; - Game.modData.ObjectCreator.CreateObject( Delegate, args ); - args.Remove( "widget" ); + args["widget"] = this; + Game.modData.ObjectCreator.CreateObject(Delegate, args); + args.Remove("widget"); } } - public void InitDelegates() - { - foreach(var d in Delegates) - Game.CreateObject(d); - } - public virtual Rectangle EventBounds { get { return RenderBounds; } } public virtual Rectangle GetEventBounds() { @@ -290,6 +284,8 @@ namespace OpenRA.Widgets child.Parent = this; Children.Add( child ); } + public virtual void RemoveChild(Widget child) { Children.Remove(child); } + public virtual void RemoveChildren() { Children.Clear(); } public Widget GetWidget(string id) { diff --git a/OpenRA.Mods.RA/Widgets/Delegates/LobbyDelegate.cs b/OpenRA.Mods.RA/Widgets/Delegates/LobbyDelegate.cs index b979c88e90..0cc51f4ef8 100755 --- a/OpenRA.Mods.RA/Widgets/Delegates/LobbyDelegate.cs +++ b/OpenRA.Mods.RA/Widgets/Delegates/LobbyDelegate.cs @@ -301,7 +301,7 @@ namespace OpenRA.Mods.RA.Widgets.Delegates { // This causes problems for people who are in the process of editing their names (the widgets vanish from beneath them) // Todo: handle this nicer - Players.ClearChildren(); + Players.RemoveChildren(); foreach (var slot in orderManager.LobbyInfo.Slots) { diff --git a/OpenRA.Mods.RA/Widgets/Delegates/ReplayBrowserDelegate.cs b/OpenRA.Mods.RA/Widgets/Delegates/ReplayBrowserDelegate.cs index 249a87aac7..c74fc62d8a 100644 --- a/OpenRA.Mods.RA/Widgets/Delegates/ReplayBrowserDelegate.cs +++ b/OpenRA.Mods.RA/Widgets/Delegates/ReplayBrowserDelegate.cs @@ -40,7 +40,7 @@ namespace OpenRA.Mods.RA.Widgets.Delegates var template = widget.GetWidget("REPLAY_TEMPLATE"); CurrentReplay = null; - rl.ClearChildren(); + rl.RemoveChildren(); foreach (var replayFile in Directory.GetFiles(replayDir, "*.rep").Reverse()) AddReplay(rl, replayFile, template); diff --git a/OpenRA.Mods.RA/Widgets/Delegates/ServerBrowserDelegate.cs b/OpenRA.Mods.RA/Widgets/Delegates/ServerBrowserDelegate.cs index 8c7f14b61a..03fd85828c 100644 --- a/OpenRA.Mods.RA/Widgets/Delegates/ServerBrowserDelegate.cs +++ b/OpenRA.Mods.RA/Widgets/Delegates/ServerBrowserDelegate.cs @@ -123,7 +123,7 @@ namespace OpenRA.Mods.RA.Widgets.Delegates var sl = bg.GetWidget("SERVER_LIST"); - sl.ClearChildren(); + sl.RemoveChildren(); currentServer = null; if (games == null)