From 5bc0ef69ad6646c3a76be6be0f82a69b5cfac4df Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Tue, 17 May 2011 18:57:41 +1200 Subject: [PATCH] Pass WidgetArgs to Widget.Initialize. Use this to allow for custom substitutions. --- OpenRA.Game/Widgets/Widget.cs | 7 +++++-- OpenRA.Game/Widgets/WidgetLoader.cs | 2 +- OpenRA.Mods.Cnc/Widgets/CncSettingsLogic.cs | 9 +++++++-- OpenRA.Mods.RA/Widgets/RadarWidget.cs | 4 ++-- OpenRA.Mods.RA/Widgets/SpecialPowerBinWidget.cs | 4 ++-- mods/cnc/chrome/dropdowns.yaml | 2 +- 6 files changed, 18 insertions(+), 10 deletions(-) diff --git a/OpenRA.Game/Widgets/Widget.cs b/OpenRA.Game/Widgets/Widget.cs index f8302d823b..e83e9d4acd 100644 --- a/OpenRA.Game/Widgets/Widget.cs +++ b/OpenRA.Game/Widgets/Widget.cs @@ -95,14 +95,17 @@ namespace OpenRA.Widgets public virtual int2 ChildOrigin { get { return RenderOrigin; } } public virtual Rectangle RenderBounds { get { return new Rectangle(RenderOrigin.X, RenderOrigin.Y, Bounds.Width, Bounds.Height); } } - public virtual void Initialize() + public virtual void Initialize(WidgetArgs args) { // Parse the YAML equations to find the widget bounds var parentBounds = (Parent == null) ? new Rectangle(0, 0, Game.viewport.Width, Game.viewport.Height) : Parent.Bounds; - var substitutions = new Dictionary(); + var substitutions = args.ContainsKey("substitutions") ? + new Dictionary((Dictionary)args["substitutions"]) : + new Dictionary(); + substitutions.Add("WINDOW_RIGHT", Game.viewport.Width); substitutions.Add("WINDOW_BOTTOM", Game.viewport.Height); substitutions.Add("PARENT_RIGHT", parentBounds.Width); diff --git a/OpenRA.Game/Widgets/WidgetLoader.cs b/OpenRA.Game/Widgets/WidgetLoader.cs index 696ab684d6..1a17674f48 100644 --- a/OpenRA.Game/Widgets/WidgetLoader.cs +++ b/OpenRA.Game/Widgets/WidgetLoader.cs @@ -52,7 +52,7 @@ namespace OpenRA if (child.Key != "Children") FieldLoader.LoadField(widget, child.Key, child.Value.Value); - widget.Initialize(); + widget.Initialize(args); foreach (var child in node.Value.Nodes) if (child.Key == "Children") diff --git a/OpenRA.Mods.Cnc/Widgets/CncSettingsLogic.cs b/OpenRA.Mods.Cnc/Widgets/CncSettingsLogic.cs index 25856a7a7e..e7101ebafe 100755 --- a/OpenRA.Mods.Cnc/Widgets/CncSettingsLogic.cs +++ b/OpenRA.Mods.Cnc/Widgets/CncSettingsLogic.cs @@ -219,9 +219,14 @@ namespace OpenRA.Mods.Cnc.Widgets void ShowGroupModifierDropdown(CncDropDownButtonWidget dropdown) { - var panel = Game.LoadWidget(world, "LABEL_DROPDOWN_TEMPLATE", null, new WidgetArgs()) as ScrollPanelWidget; - var itemTemplate = panel.GetWidget("TEMPLATE"); + var substitutions = new Dictionary() {{ "DROPDOWN_WIDTH", dropdown.Bounds.Width }}; + var panel = (ScrollPanelWidget)Game.LoadWidget(world, "LABEL_DROPDOWN_TEMPLATE", null, new WidgetArgs() + { + { "substitutions", substitutions } + }); + + var itemTemplate = panel.GetWidget("TEMPLATE"); var options = new List>() { Pair.New("Ctrl", Modifiers.Ctrl), diff --git a/OpenRA.Mods.RA/Widgets/RadarWidget.cs b/OpenRA.Mods.RA/Widgets/RadarWidget.cs index e36da06ae1..dd6afb3425 100755 --- a/OpenRA.Mods.RA/Widgets/RadarWidget.cs +++ b/OpenRA.Mods.RA/Widgets/RadarWidget.cs @@ -42,9 +42,9 @@ namespace OpenRA.Mods.RA.Widgets this.world = world; } - public override void Initialize() + public override void Initialize(WidgetArgs args) { - base.Initialize(); + base.Initialize(args); var size = Math.Max(world.Map.Bounds.Width, world.Map.Bounds.Height); previewScale = Math.Min(RenderBounds.Width * 1f / world.Map.Bounds.Width, RenderBounds.Height * 1f / world.Map.Bounds.Height); diff --git a/OpenRA.Mods.RA/Widgets/SpecialPowerBinWidget.cs b/OpenRA.Mods.RA/Widgets/SpecialPowerBinWidget.cs index e3c664783f..26a9e04170 100755 --- a/OpenRA.Mods.RA/Widgets/SpecialPowerBinWidget.cs +++ b/OpenRA.Mods.RA/Widgets/SpecialPowerBinWidget.cs @@ -34,9 +34,9 @@ namespace OpenRA.Mods.RA.Widgets this.worldRenderer = worldRenderer; } - public override void Initialize() + public override void Initialize(WidgetArgs args) { - base.Initialize(); + base.Initialize(args); spsprites = Rules.Info.Values.SelectMany( u => u.Traits.WithInterface() ) .Select(u => u.Image).Distinct() diff --git a/mods/cnc/chrome/dropdowns.yaml b/mods/cnc/chrome/dropdowns.yaml index e103c50833..ca750aa5cb 100644 --- a/mods/cnc/chrome/dropdowns.yaml +++ b/mods/cnc/chrome/dropdowns.yaml @@ -74,7 +74,7 @@ Background@COLOR_CHOOSER: ScrollPanel@LABEL_DROPDOWN_TEMPLATE: Id:LABEL_DROPDOWN_TEMPLATE - Width:100 + Width:DROPDOWN_WIDTH Children: ScrollItem@TEMPLATE: Id:TEMPLATE