From 5b185f93a14fd82a251ceddb86d3ebfa74f88212 Mon Sep 17 00:00:00 2001 From: Pavel Penev Date: Fri, 13 Nov 2015 03:18:30 +0200 Subject: [PATCH 1/2] Pass subnodes of the widget Logic node to the corresponding ChromeLogic class --- OpenRA.Game/Widgets/WidgetLoader.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/OpenRA.Game/Widgets/WidgetLoader.cs b/OpenRA.Game/Widgets/WidgetLoader.cs index d10f7747da..6c79da7ed9 100644 --- a/OpenRA.Game/Widgets/WidgetLoader.cs +++ b/OpenRA.Game/Widgets/WidgetLoader.cs @@ -67,7 +67,14 @@ namespace OpenRA foreach (var c in child.Value.Nodes) LoadWidget(args, widget, c); + var logicNode = node.Value.Nodes.FirstOrDefault(n => n.Key == "Logic"); + var logic = logicNode == null ? null : logicNode.Value.ToDictionary(); + args.Add("logicArgs", logic); + widget.PostInit(args); + + args.Remove("logicArgs"); + return widget; } From 8f85794a528d008fd53a43baa736c88e83c780bc Mon Sep 17 00:00:00 2001 From: Pavel Penev Date: Fri, 13 Nov 2015 03:26:39 +0200 Subject: [PATCH 2/2] Allow AssetBrowserLogic's allowed extentions to be loaded from YAML Keep the default list of file formats as a fallback for thirdparty mods, but still add it to YAML to show off the functionality and to make it more transparent what formats are supported. --- OpenRA.Mods.Common/Widgets/Logic/AssetBrowserLogic.cs | 11 ++++++++--- mods/cnc/chrome/assetbrowser.yaml | 1 + mods/ra/chrome/assetbrowser.yaml | 1 + 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/OpenRA.Mods.Common/Widgets/Logic/AssetBrowserLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/AssetBrowserLogic.cs index df48c8a3c0..8b27509659 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/AssetBrowserLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/AssetBrowserLogic.cs @@ -22,7 +22,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic { public class AssetBrowserLogic : ChromeLogic { - static readonly string[] AllowedExtensions = { ".shp", ".r8", "tmp", ".tem", ".des", ".sno", ".int", ".jun", ".vqa" }; + static string[] allowedExtensions; readonly World world; @@ -45,7 +45,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic int currentFrame; [ObjectCreator.UseCtor] - public AssetBrowserLogic(Widget widget, Action onExit, World world) + public AssetBrowserLogic(Widget widget, Action onExit, World world, Dictionary logicArgs) { this.world = world; @@ -212,6 +212,11 @@ namespace OpenRA.Mods.Common.Widgets.Logic prevButton.IsVisible = () => !isVideoLoaded; } + if (logicArgs.ContainsKey("SupportedFormats")) + allowedExtensions = FieldLoader.GetValue("SupportedFormats", logicArgs["SupportedFormats"].Value); + else + allowedExtensions = new string[0]; + assetList = panel.Get("ASSET_LIST"); template = panel.Get("ASSET_TEMPLATE"); PopulateAssetList(); @@ -359,7 +364,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic var files = assetSource.AllFileNames().OrderBy(s => s); foreach (var file in files) { - if (AllowedExtensions.Any(ext => file.EndsWith(ext, true, CultureInfo.InvariantCulture))) + if (allowedExtensions.Any(ext => file.EndsWith(ext, true, CultureInfo.InvariantCulture))) { AddAsset(assetList, file, template); availableShps.Add(file); diff --git a/mods/cnc/chrome/assetbrowser.yaml b/mods/cnc/chrome/assetbrowser.yaml index 52532c8dd9..c1f4da65eb 100644 --- a/mods/cnc/chrome/assetbrowser.yaml +++ b/mods/cnc/chrome/assetbrowser.yaml @@ -1,5 +1,6 @@ Container@ASSETBROWSER_PANEL: Logic: AssetBrowserLogic + SupportedFormats: .shp, .tem, .des, .sno, .jun, .vqa X: (WINDOW_RIGHT - WIDTH)/2 Y: (WINDOW_BOTTOM - HEIGHT)/2 Width: 695 diff --git a/mods/ra/chrome/assetbrowser.yaml b/mods/ra/chrome/assetbrowser.yaml index f206ff7c7b..820221865c 100644 --- a/mods/ra/chrome/assetbrowser.yaml +++ b/mods/ra/chrome/assetbrowser.yaml @@ -1,5 +1,6 @@ Background@ASSETBROWSER_PANEL: Logic: AssetBrowserLogic + SupportedFormats: .shp, .r8, .tmp, .tem, .des, .sno, .int, .vqa X: (WINDOW_RIGHT - WIDTH)/2 Y: (WINDOW_BOTTOM - HEIGHT)/2 Width: 700