diff --git a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj
index b49c2f8320..7899ed9238 100644
--- a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj
+++ b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj
@@ -94,7 +94,6 @@
-
diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
index 5e6203c3b0..5e8643fe0c 100644
--- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
+++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
@@ -403,7 +403,6 @@
-
@@ -472,6 +471,7 @@
+
diff --git a/OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs
index aebc308fe8..d2e44b17fe 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs
+++ b/OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs
@@ -28,7 +28,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
widget.Get("SETTINGS").OnClick = () =>
{
widget.Visible = false;
- Ui.OpenWindow("SETTINGS_MENU", new WidgetArgs()
+ Ui.OpenWindow("SETTINGS_PANEL", new WidgetArgs()
{
{ "onExit", () => widget.Visible = true },
{ "worldRenderer", worldRenderer },
diff --git a/OpenRA.Mods.RA/Widgets/Logic/MainMenuButtonsLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/MainMenuButtonsLogic.cs
index 456d7fe4ce..3c6d4a7f32 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/MainMenuButtonsLogic.cs
+++ b/OpenRA.Mods.RA/Widgets/Logic/MainMenuButtonsLogic.cs
@@ -36,7 +36,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
widget.Get("MAINMENU_BUTTON_SETTINGS").OnClick = () =>
{
Menu = MenuType.None;
- Game.OpenWindow("SETTINGS_MENU", new WidgetArgs()
+ Game.OpenWindow("SETTINGS_PANEL", new WidgetArgs()
{
{ "onExit", () => Menu = MenuType.Main }
});
diff --git a/OpenRA.Mods.Cnc/Widgets/Logic/CncSettingsLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/SettingsLogic.cs
similarity index 89%
rename from OpenRA.Mods.Cnc/Widgets/Logic/CncSettingsLogic.cs
rename to OpenRA.Mods.RA/Widgets/Logic/SettingsLogic.cs
index b1d15b834c..bc96b5ae55 100644
--- a/OpenRA.Mods.Cnc/Widgets/Logic/CncSettingsLogic.cs
+++ b/OpenRA.Mods.RA/Widgets/Logic/SettingsLogic.cs
@@ -18,12 +18,11 @@ using OpenRA.GameRules;
using OpenRA.Graphics;
using OpenRA.Mods.RA;
using OpenRA.Mods.RA.Widgets;
-using OpenRA.Mods.RA.Widgets.Logic;
using OpenRA.Widgets;
-namespace OpenRA.Mods.Cnc.Widgets.Logic
+namespace OpenRA.Mods.Ra.Widgets.Logic
{
- public class CncSettingsLogic
+ public class SettingsLogic
{
enum PanelType { Display, Audio, Input, Advanced }
Dictionary leavePanelActions = new Dictionary();
@@ -35,12 +34,12 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
SoundDevice soundDevice;
[ObjectCreator.UseCtor]
- public CncSettingsLogic(Widget widget, Action onExit, WorldRenderer worldRenderer)
+ public SettingsLogic(Widget widget, Action onExit, WorldRenderer worldRenderer)
{
this.worldRenderer = worldRenderer;
panelContainer = widget.Get("SETTINGS_PANEL");
- tabContainer = panelContainer;
+ tabContainer = widget.Get("TAB_CONTAINER");
RegisterSettingsPanel(PanelType.Display, InitDisplayPanel, ResetDisplayPanel, "DISPLAY_PANEL", "DISPLAY_TAB");
RegisterSettingsPanel(PanelType.Audio, InitAudioPanel, ResetAudioPanel, "AUDIO_PANEL", "AUDIO_TAB");
@@ -125,11 +124,11 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
BindCheckboxPref(panel, "SHOW_SHELLMAP", gs, "ShowShellmap");
var languageDropDownButton = panel.Get("LANGUAGE_DROPDOWNBUTTON");
- languageDropDownButton.OnMouseDown = _ => SettingsMenuLogic.ShowLanguageDropdown(languageDropDownButton);
+ languageDropDownButton.OnMouseDown = _ => ShowLanguageDropdown(languageDropDownButton);
languageDropDownButton.GetText = () => FieldLoader.Translate(ds.Language);
var windowModeDropdown = panel.Get("MODE_DROPDOWN");
- windowModeDropdown.OnMouseDown = _ => SettingsMenuLogic.ShowWindowModeDropdown(windowModeDropdown, ds);
+ windowModeDropdown.OnMouseDown = _ => ShowWindowModeDropdown(windowModeDropdown, ds);
windowModeDropdown.GetText = () => ds.Mode == WindowMode.Windowed ?
"Windowed" : ds.Mode == WindowMode.Fullscreen ? "Fullscreen" : "Pseudo-Fullscreen";
@@ -406,5 +405,44 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, setupItem);
return true;
}
+
+ bool ShowWindowModeDropdown(DropDownButtonWidget dropdown, GraphicSettings s)
+ {
+ var options = new Dictionary()
+ {
+ { "Pseudo-Fullscreen", WindowMode.PseudoFullscreen },
+ { "Fullscreen", WindowMode.Fullscreen },
+ { "Windowed", WindowMode.Windowed },
+ };
+
+ Func setupItem = (o, itemTemplate) =>
+ {
+ var item = ScrollItemWidget.Setup(itemTemplate,
+ () => s.Mode == options[o],
+ () => s.Mode = options[o]);
+
+ item.Get("LABEL").GetText = () => o;
+ return item;
+ };
+
+ dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, setupItem);
+ return true;
+ }
+
+ bool ShowLanguageDropdown(DropDownButtonWidget dropdown)
+ {
+ Func setupItem = (o, itemTemplate) =>
+ {
+ var item = ScrollItemWidget.Setup(itemTemplate,
+ () => Game.Settings.Graphics.Language == o,
+ () => Game.Settings.Graphics.Language = o);
+
+ item.Get("LABEL").GetText = () => FieldLoader.Translate(o);
+ return item;
+ };
+
+ dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, Game.modData.Languages, setupItem);
+ return true;
+ }
}
}
diff --git a/OpenRA.Mods.RA/Widgets/Logic/SettingsMenuLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/SettingsMenuLogic.cs
deleted file mode 100644
index e24d0cc975..0000000000
--- a/OpenRA.Mods.RA/Widgets/Logic/SettingsMenuLogic.cs
+++ /dev/null
@@ -1,360 +0,0 @@
-#region Copyright & License Information
-/*
- * Copyright 2007-2013 The OpenRA Developers (see AUTHORS)
- * This file is part of OpenRA, which is free software. It is made
- * available to you under the terms of the GNU General Public License
- * as published by the Free Software Foundation. For more information,
- * see COPYING.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using OpenRA.FileFormats;
-using OpenRA.FileFormats.Graphics;
-using OpenRA.GameRules;
-using OpenRA.Graphics;
-using OpenRA.Widgets;
-
-namespace OpenRA.Mods.RA.Widgets.Logic
-{
- public class SettingsMenuLogic
- {
- Widget bg;
- SoundDevice soundDevice;
-
- [ObjectCreator.UseCtor]
- public SettingsMenuLogic(Action onExit, WorldRenderer worldRenderer)
- {
- bg = Ui.Root.Get("SETTINGS_MENU");
- var tabs = bg.Get("TAB_CONTAINER");
-
- //Tabs
- tabs.Get("GENERAL").OnClick = () => FlipToTab("GENERAL_PANE");
- tabs.Get("AUDIO").OnClick = () => FlipToTab("AUDIO_PANE");
- tabs.Get("DISPLAY").OnClick = () => FlipToTab("DISPLAY_PANE");
- tabs.Get("KEYS").OnClick = () => FlipToTab("KEYS_PANE");
- tabs.Get("DEBUG").OnClick = () => FlipToTab("DEBUG_PANE");
- FlipToTab("GENERAL_PANE");
-
- //General
- var general = bg.Get("GENERAL_PANE");
-
- var name = general.Get("NAME");
- name.Text = Game.Settings.Player.Name;
- name.OnLoseFocus = () =>
- {
- name.Text = name.Text.Trim();
- if (name.Text.Length == 0)
- name.Text = Game.Settings.Player.Name;
- else
- Game.Settings.Player.Name = name.Text;
- };
- name.OnEnterKey = () => { name.YieldKeyboardFocus(); return true; };
-
- var edgescrollCheckbox = general.Get("EDGE_SCROLL");
- edgescrollCheckbox.IsChecked = () => Game.Settings.Game.ViewportEdgeScroll;
- edgescrollCheckbox.OnClick = () => Game.Settings.Game.ViewportEdgeScroll ^= true;
-
- var edgeScrollSlider = general.Get("EDGE_SCROLL_AMOUNT");
- edgeScrollSlider.Value = Game.Settings.Game.ViewportEdgeScrollStep;
- edgeScrollSlider.OnChange += x => Game.Settings.Game.ViewportEdgeScrollStep = x;
-
- var inversescroll = general.Get("INVERSE_SCROLL");
- inversescroll.IsChecked = () => Game.Settings.Game.MouseScroll == MouseScrollType.Inverted;
- inversescroll.OnClick = () => Game.Settings.Game.MouseScroll = (Game.Settings.Game.MouseScroll == MouseScrollType.Inverted) ? MouseScrollType.Standard : MouseScrollType.Inverted;
-
- var showShellmapCheckbox = general.Get("SHOW_SHELLMAP");
- showShellmapCheckbox.IsChecked = () => Game.Settings.Game.ShowShellmap;
- showShellmapCheckbox.OnClick = () => Game.Settings.Game.ShowShellmap ^= true;
-
- var useClassicMouseStyleCheckbox = general.Get("USE_CLASSIC_MOUSE_STYLE_CHECKBOX");
- useClassicMouseStyleCheckbox.IsChecked = () => Game.Settings.Game.UseClassicMouseStyle;
- useClassicMouseStyleCheckbox.OnClick = () => Game.Settings.Game.UseClassicMouseStyle ^= true;
-
- var allowNatDiscoveryCheckbox = general.Get("ALLOW_NAT_DISCOVERY_CHECKBOX");
- allowNatDiscoveryCheckbox.IsChecked = () => Game.Settings.Server.DiscoverNatDevices;
- allowNatDiscoveryCheckbox.OnClick = () => Game.Settings.Server.DiscoverNatDevices ^= true;
-
- // Audio
- var audio = bg.Get("AUDIO_PANE");
- var soundSettings = Game.Settings.Sound;
-
- var soundslider = audio.Get("SOUND_VOLUME");
- soundslider.OnChange += x => Sound.SoundVolume = x;
- soundslider.Value = Sound.SoundVolume;
-
- var musicslider = audio.Get("MUSIC_VOLUME");
- musicslider.OnChange += x => Sound.MusicVolume = x;
- musicslider.Value = Sound.MusicVolume;
-
- var videoslider = audio.Get("VIDEO_VOLUME");
- videoslider.OnChange += x => Sound.VideoVolume = x;
- videoslider.Value = Sound.VideoVolume;
-
- var cashTicksCheckbox = audio.Get("CASHTICK_CHECKBOX");
- cashTicksCheckbox.IsChecked = () => Game.Settings.Sound.CashTicks;
- cashTicksCheckbox.OnClick = () => Game.Settings.Sound.CashTicks ^= true;
-
- var mapMusicCheckbox = audio.Get("MAP_MUSIC_CHECKBOX");
- mapMusicCheckbox.IsChecked = () => Game.Settings.Sound.MapMusic;
- mapMusicCheckbox.OnClick = () => Game.Settings.Sound.MapMusic ^= true;
-
- var devices = Sound.AvailableDevices();
- soundDevice = devices.FirstOrDefault(d => d.Engine == soundSettings.Engine && d.Device == soundSettings.Device) ?? devices.First();
-
- var audioDeviceDropdown = audio.Get("AUDIO_DEVICE");
- audioDeviceDropdown.OnMouseDown = _ => ShowAudioDeviceDropdown(audioDeviceDropdown, soundSettings, devices);
- audioDeviceDropdown.GetText = () => soundDevice.Label;
-
- // Display
- var display = bg.Get("DISPLAY_PANE");
- var gs = Game.Settings.Graphics;
-
- var windowModeDropdown = display.Get("MODE_DROPDOWN");
- windowModeDropdown.OnMouseDown = _ => ShowWindowModeDropdown(windowModeDropdown, gs);
- windowModeDropdown.GetText = () => gs.Mode == WindowMode.Windowed ?
- "Windowed" : gs.Mode == WindowMode.Fullscreen ? "Fullscreen" : "Pseudo-Fullscreen";
-
- display.Get("WINDOW_RESOLUTION").IsVisible = () => gs.Mode == WindowMode.Windowed;
- var windowWidth = display.Get("WINDOW_WIDTH");
- windowWidth.Text = gs.WindowedSize.X.ToString();
-
- var windowHeight = display.Get("WINDOW_HEIGHT");
- windowHeight.Text = gs.WindowedSize.Y.ToString();
-
- var pixelDoubleCheckbox = display.Get("PIXELDOUBLE_CHECKBOX");
- pixelDoubleCheckbox.IsChecked = () => gs.PixelDouble;
- pixelDoubleCheckbox.OnClick = () =>
- {
- gs.PixelDouble ^= true;
- worldRenderer.Viewport.Zoom = gs.PixelDouble ? 2 : 1;
- };
-
- var capFrameRateCheckbox = display.Get("CAPFRAMERATE_CHECKBOX");
- capFrameRateCheckbox.IsChecked = () => gs.CapFramerate;
- capFrameRateCheckbox.OnClick = () => gs.CapFramerate ^= true;
-
- var maxFrameRate = display.Get("MAX_FRAMERATE");
- maxFrameRate.Text = gs.MaxFramerate.ToString();
-
- var languageDropDownButton = display.Get("LANGUAGE_DROPDOWNBUTTON");
- languageDropDownButton.OnMouseDown = _ => ShowLanguageDropdown(languageDropDownButton);
- languageDropDownButton.GetText = () => FieldLoader.Translate(Game.Settings.Graphics.Language);
-
- // Keys
- var keys = bg.Get("KEYS_PANE");
- var keyConfig = Game.Settings.Keys;
-
- var specialHotkeyList = keys.Get("SPECIALHOTKEY_LIST");
- var specialHotkeyTemplate = specialHotkeyList.Get("SPECIALHOTKEY_TEMPLATE");
-
- var pauseKey = ScrollItemWidget.Setup(specialHotkeyTemplate, () => false, () => {});
- SetupKeyBinding(pauseKey, "Pause the game:", () => keyConfig.PauseKey, k => keyConfig.PauseKey = k);
- specialHotkeyList.AddChild(pauseKey);
-
- var viewportToBase = ScrollItemWidget.Setup(specialHotkeyTemplate, () => false, () => {});
- SetupKeyBinding(viewportToBase, "Move Viewport to Base:", () => keyConfig.CycleBaseKey, k => keyConfig.CycleBaseKey = k);
- specialHotkeyList.AddChild(viewportToBase);
-
- var lastEventKey = ScrollItemWidget.Setup(specialHotkeyTemplate, () => false, () => {});
- SetupKeyBinding(lastEventKey, "Move Viewport to Last Event:", () => keyConfig.ToLastEventKey, k => keyConfig.ToLastEventKey = k);
- specialHotkeyList.AddChild(lastEventKey);
-
- var viewportToSelectionKey = ScrollItemWidget.Setup(specialHotkeyTemplate, () => false, () => {});
- SetupKeyBinding(viewportToSelectionKey, "Move Viewport to Selection:", () => keyConfig.ToSelectionKey, k => keyConfig.ToSelectionKey = k);
- specialHotkeyList.AddChild(viewportToSelectionKey);
-
- var sellKey = ScrollItemWidget.Setup(specialHotkeyTemplate, () => false, () => {});
- SetupKeyBinding(sellKey, "Switch to Sell-Cursor:", () => keyConfig.SellKey, k => keyConfig.SellKey = k);
- specialHotkeyList.AddChild(sellKey);
-
- var powerDownKey = ScrollItemWidget.Setup(specialHotkeyTemplate, () => false, () => {});
- SetupKeyBinding(powerDownKey, "Switch to Power-Down-Cursor:", () => keyConfig.PowerDownKey, k => keyConfig.PowerDownKey = k);
- specialHotkeyList.AddChild(powerDownKey);
-
- var repairKey = ScrollItemWidget.Setup(specialHotkeyTemplate, () => false, () => {});
- SetupKeyBinding(repairKey, "Switch to Repair-Cursor:", () => keyConfig.RepairKey, k => keyConfig.RepairKey = k);
- specialHotkeyList.AddChild(repairKey);
-
- var tabCycleKey = ScrollItemWidget.Setup(specialHotkeyTemplate, () => false, () => {});
- SetupKeyBinding(tabCycleKey, "Cycle Tabs (+Shift to Reverse):", () => keyConfig.CycleTabsKey, k => keyConfig.CycleTabsKey = k);
- specialHotkeyList.AddChild(tabCycleKey);
-
- var unitCommandHotkeyList = keys.Get("UNITCOMMANDHOTKEY_LIST");
- var unitCommandHotkeyTemplate = unitCommandHotkeyList.Get("UNITCOMMANDHOTKEY_TEMPLATE");
-
- var attackKey = ScrollItemWidget.Setup(unitCommandHotkeyTemplate, () => false, () => {});
- SetupKeyBinding(attackKey, "Attack Move:", () => keyConfig.AttackMoveKey, k => keyConfig.AttackMoveKey = k);
- unitCommandHotkeyList.AddChild(attackKey);
-
- var stopKey = ScrollItemWidget.Setup(unitCommandHotkeyTemplate, () => false, () => {});
- SetupKeyBinding(stopKey, "Stop:", () => keyConfig.StopKey, k => keyConfig.StopKey = k);
- unitCommandHotkeyList.AddChild(stopKey);
-
- var scatterKey = ScrollItemWidget.Setup(unitCommandHotkeyTemplate, () => false, () => {});
- SetupKeyBinding(scatterKey, "Scatter:", () => keyConfig.ScatterKey, k => keyConfig.ScatterKey = k);
- unitCommandHotkeyList.AddChild(scatterKey);
-
- var stanceCycleKey = ScrollItemWidget.Setup(unitCommandHotkeyTemplate, () => false, () => {});
- SetupKeyBinding(stanceCycleKey, "Cycle Stance:", () => keyConfig.StanceCycleKey, k => keyConfig.StanceCycleKey = k);
- unitCommandHotkeyList.AddChild(stanceCycleKey);
-
- var deployKey = ScrollItemWidget.Setup(unitCommandHotkeyTemplate, () => false, () => {});
- SetupKeyBinding(deployKey, "Deploy:", () => keyConfig.DeployKey, k => keyConfig.DeployKey = k);
- unitCommandHotkeyList.AddChild(deployKey);
-
- var guardKey = ScrollItemWidget.Setup(unitCommandHotkeyTemplate, () => false, () => { });
- SetupKeyBinding(guardKey, "Guard: ", () => keyConfig.GuardKey, k => keyConfig.GuardKey = k);
- unitCommandHotkeyList.AddChild(guardKey);
-
- // Debug
- var debug = bg.Get("DEBUG_PANE");
-
- var perfgraphCheckbox = debug.Get("PERFGRAPH_CHECKBOX");
- perfgraphCheckbox.IsChecked = () => Game.Settings.Debug.PerfGraph;
- perfgraphCheckbox.OnClick = () => Game.Settings.Debug.PerfGraph ^= true;
-
- var perftextCheckbox = debug.Get("PERFTEXT_CHECKBOX");
- perftextCheckbox.IsChecked = () => Game.Settings.Debug.PerfText;
- perftextCheckbox.OnClick = () => Game.Settings.Debug.PerfText ^= true;
-
- var sampleSlider = debug.Get("PERFTEXT_SAMPLE_AMOUNT");
- sampleSlider.Value = sampleSlider.MaximumValue-Game.Settings.Debug.Samples;
- sampleSlider.OnChange += x => Game.Settings.Debug.Samples = (int)sampleSlider.MaximumValue-(int)Math.Round(x);
-
- var checkunsyncedCheckbox = debug.Get("CHECKUNSYNCED_CHECKBOX");
- checkunsyncedCheckbox.IsChecked = () => Game.Settings.Debug.SanityCheckUnsyncedCode;
- checkunsyncedCheckbox.OnClick = () => Game.Settings.Debug.SanityCheckUnsyncedCode ^= true;
-
- var botdebugCheckbox = debug.Get("BOTDEBUG_CHECKBOX");
- botdebugCheckbox.IsChecked = () => Game.Settings.Debug.BotDebug;
- botdebugCheckbox.OnClick = () => Game.Settings.Debug.BotDebug ^= true;
-
- var verboseNatDiscoveryCheckbox = debug.Get("VERBOSE_NAT_DISCOVERY_CHECKBOX");
- verboseNatDiscoveryCheckbox.IsChecked = () => Game.Settings.Server.VerboseNatDiscovery;
- verboseNatDiscoveryCheckbox.OnClick = () => Game.Settings.Server.VerboseNatDiscovery ^= true;
-
- var developerMenuCheckbox = debug.Get("DEVELOPER_MENU_CHECKBOX");
- developerMenuCheckbox.IsChecked = () => Game.Settings.Debug.DeveloperMenu;
- developerMenuCheckbox.OnClick = () => Game.Settings.Debug.DeveloperMenu ^= true;
-
- var showFatalErrorDialog = debug.Get("SHOW_FATAL_ERROR_DIALOG_CHECKBOX");
- showFatalErrorDialog.IsChecked = () => Game.Settings.Debug.ShowFatalErrorDialog;
- showFatalErrorDialog.OnClick = () => Game.Settings.Debug.ShowFatalErrorDialog ^= true;
-
- bg.Get("BUTTON_CLOSE").OnClick = () =>
- {
- int x, y;
- int.TryParse(windowWidth.Text, out x);
- int.TryParse(windowHeight.Text, out y);
- gs.WindowedSize = new int2(x,y);
- int.TryParse(maxFrameRate.Text, out gs.MaxFramerate);
- soundSettings.Device = soundDevice.Device;
- soundSettings.Engine = soundDevice.Engine;
- Game.Settings.Save();
- Ui.CloseWindow();
- onExit();
- };
- }
-
- string open = null;
-
- bool FlipToTab(string id)
- {
- if (open != null)
- bg.Get(open).Visible = false;
-
- open = id;
- bg.Get(open).Visible = true;
- return true;
- }
-
- public static bool ShowLanguageDropdown(DropDownButtonWidget dropdown)
- {
- Func setupItem = (o, itemTemplate) =>
- {
- var item = ScrollItemWidget.Setup(itemTemplate,
- () => Game.Settings.Graphics.Language == o,
- () => Game.Settings.Graphics.Language = o);
- item.Get("LABEL").GetText = () => FieldLoader.Translate(o);
- return item;
- };
-
- dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, Game.modData.Languages, setupItem);
- return true;
- }
-
- public static bool ShowWindowModeDropdown(DropDownButtonWidget dropdown, GraphicSettings s)
- {
- var options = new Dictionary()
- {
- { "Pseudo-Fullscreen", WindowMode.PseudoFullscreen },
- { "Fullscreen", WindowMode.Fullscreen },
- { "Windowed", WindowMode.Windowed },
- };
-
- Func setupItem = (o, itemTemplate) =>
- {
- var item = ScrollItemWidget.Setup(itemTemplate,
- () => s.Mode == options[o],
- () => s.Mode = options[o]);
- item.Get("LABEL").GetText = () => o;
- return item;
- };
-
- dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, setupItem);
- return true;
- }
-
- void SetupKeyBinding(ScrollItemWidget keyWidget, string description, Func getValue, Action setValue)
- {
- keyWidget.Get("FUNCTION").GetText = () => description;
-
- var keyEntry = keyWidget.Get("HOTKEY");
- keyEntry.Key = getValue();
- keyEntry.OnLoseFocus = () => setValue(keyEntry.Key);
- }
-
- static bool ShowRendererDropdown(DropDownButtonWidget dropdown, GraphicSettings s)
- {
- var options = new Dictionary()
- {
- { "OpenGL", "Gl" },
- { "Cg Toolkit", "Cg" },
- };
-
- Func setupItem = (o, itemTemplate) =>
- {
- var item = ScrollItemWidget.Setup(itemTemplate,
- () => s.Renderer == options[o],
- () => s.Renderer = options[o]);
- item.Get("LABEL").GetText = () => o;
- return item;
- };
-
- dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, setupItem);
- return true;
- }
-
- bool ShowAudioDeviceDropdown(DropDownButtonWidget dropdown, SoundSettings s, SoundDevice[] devices)
- {
- var i = 0;
- var options = devices.ToDictionary(d => (i++).ToString(), d => d);
-
- Func setupItem = (o, itemTemplate) =>
- {
- var item = ScrollItemWidget.Setup(itemTemplate,
- () => soundDevice == options[o],
- () => soundDevice = options[o]);
-
- item.Get("LABEL").GetText = () => options[o].Label;
- return item;
- };
-
- dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, setupItem);
- return true;
- }
- }
-}
diff --git a/mods/cnc/chrome/settings.yaml b/mods/cnc/chrome/settings.yaml
index 6a9bf9a893..23866996a5 100644
--- a/mods/cnc/chrome/settings.yaml
+++ b/mods/cnc/chrome/settings.yaml
@@ -1,5 +1,5 @@
Container@SETTINGS_PANEL:
- Logic:CncSettingsLogic
+ Logic:SettingsLogic
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:590
@@ -12,25 +12,27 @@ Container@SETTINGS_PANEL:
Contrast:true
Align:Center
Text:Settings
- Button@DISPLAY_TAB:
- Width:140
- Height:35
- Text:Display
- Button@AUDIO_TAB:
- X:150
- Width:140
- Height:35
- Text:Audio
- Button@INPUT_TAB:
- X:300
- Width:140
- Height:35
- Text:Input
- Button@ADVANCED_TAB:
- X:450
- Width:140
- Height:35
- Text:Advanced
+ Container@TAB_CONTAINER:
+ Children:
+ Button@DISPLAY_TAB:
+ Width:140
+ Height:35
+ Text:Display
+ Button@AUDIO_TAB:
+ X:150
+ Width:140
+ Height:35
+ Text:Audio
+ Button@INPUT_TAB:
+ X:300
+ Width:140
+ Height:35
+ Text:Input
+ Button@ADVANCED_TAB:
+ X:450
+ Width:140
+ Height:35
+ Text:Advanced
Button@RESET_BUTTON:
Y:293
Width:140
diff --git a/mods/ra/chrome/settings.yaml b/mods/ra/chrome/settings.yaml
index 90e404c518..e7dee6f810 100644
--- a/mods/ra/chrome/settings.yaml
+++ b/mods/ra/chrome/settings.yaml
@@ -1,217 +1,83 @@
-Background@SETTINGS_MENU:
- Logic:SettingsMenuLogic
+Background@SETTINGS_PANEL:
+ Logic:SettingsLogic
X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM- HEIGHT)/2
- Width: 540
- Height: 400
+ Width:600
+ Height:351
Children:
Label@SETTINGS_LABEL_TITLE:
- X:0
Y:20
- Width:540
+ Width:PARENT_RIGHT
Height:25
Text:Settings
Align:Center
Font:Bold
- Button@BUTTON_CLOSE:
+ Button@RESET_BUTTON:
+ X:20
+ Y:PARENT_BOTTOM - 45
+ Width:160
+ Height:25
+ Text:Reset
+ Button@BACK_BUTTON:
+ Key:escape
X:PARENT_RIGHT - 180
Y:PARENT_BOTTOM - 45
Width:160
Height:25
- Text:Close
+ Text:Back
Font:Bold
- Key:escape
Container@TAB_CONTAINER:
- X:0
Y:50
Width:PARENT_RIGHT
Height:25
Children:
- Button@GENERAL:
- X:45
- Y:0
- Width:90
- Height:25
- Text:General
- Font:Bold
- Button@AUDIO:
- X:135
- Y:0
- Width:90
- Height:25
- Text:Audio
- Font:Bold
- Button@DISPLAY:
- X:225
- Y:0
+ Button@DISPLAY_TAB:
+ X:115
Width:90
Height:25
Text:Display
Font:Bold
- Button@KEYS:
- X:315
- Y:0
+ Button@AUDIO_TAB:
+ X:205
Width:90
Height:25
- Text:Keys
+ Text:Audio
Font:Bold
- Button@DEBUG:
- X:405
- Y:0
+ Button@INPUT_TAB:
+ X:295
Width:90
Height:25
- Text:Debug
+ Text:Input
Font:Bold
- Container@GENERAL_PANE:
- X:37
- Y:100
- Width:PARENT_RIGHT - 37
- Height:PARENT_BOTTOM - 100
- Visible: true
- Children:
- Label@SETTINGS_PLAYER_NAME:
- X:0
- Y:10
- Text: Player Name:
- TextField@NAME:
- Text:Name
- Width:139
+ Button@ADVANCED_TAB:
+ X:385
+ Width:90
Height:25
- X:90
- Y:0
- MaxLength:16
- Checkbox@EDGE_SCROLL:
- X:0
- Y:30
- Width:200
- Height:20
- Text: Enable Edge Scrolling
- Label@EDGE_SCROLL_AMOUNT_LABEL:
- X:0
- Y:70
- Text: Scroll Speed
- Slider@EDGE_SCROLL_AMOUNT:
- X:130
- Y:60
- Width:250
- Height:20
- Ticks:5
- MinimumValue: 10
- MaximumValue: 50
- Checkbox@INVERSE_SCROLL:
- X:0
- Y:90
- Width:200
- Height:20
- Text: Invert Mouse Drag Scrolling
- Checkbox@SHOW_SHELLMAP:
- X:0
- Y:150
- Width:200
- Height:20
- Text: Show Shellmap
- Checkbox@USE_CLASSIC_MOUSE_STYLE_CHECKBOX:
- X:0
- Y:180
- Width:200
- Height:20
- Text: Left-Click Orders
- Checkbox@ALLOW_NAT_DISCOVERY_CHECKBOX:
- X:0
- Y:210
- Width:200
- Height:20
- Text: Enable Network Discovery (UPnP)
- Container@AUDIO_PANE:
- X:37
- Y:100
- Width:PARENT_RIGHT - 37
- Height:PARENT_BOTTOM - 100
- Visible: false
- Children:
- Label@SOUND_VOLUME_LABEL:
- X:0
- Y:10
- Text: Sound Volume
- Slider@SOUND_VOLUME:
- X:100
- Y:0
- Width:250
- Height:20
- Ticks:5
- Label@MUSIC_VOLUME_LABEL:
- X:0
- Y:40
- Text: Music Volume
- Slider@MUSIC_VOLUME:
- X:100
- Y:30
- Width:250
- Height:20
- Ticks:5
- Label@VIDEO_VOLUME_LABEL:
- X:0
- Y:70
- Text: Video Volume
- Slider@VIDEO_VOLUME:
- X:100
- Y:60
- Width:250
- Height:20
- Ticks:5
- Checkbox@CASHTICK_CHECKBOX:
- X:0
- Y:90
- Width:200
- Height:20
- Text:Cash Ticks
- Checkbox@MAP_MUSIC_CHECKBOX:
- X:0
- Y:120
- Width:200
- Height:20
- Text: Autoplay Music After Map Load
- Label@AUDIO_DEVICE_LABEL:
- X:0
- Y:150
- Width:75
- Height:25
- Text:Audio Device:
- DropDownButton@AUDIO_DEVICE:
- X:100
- Y:150
- Width:250
- Height:25
- Font:Regular
- Label@AUDIO_DESC:
- Y:175
- Width:200
- Height:25
- Font:Tiny
- Text:Device changes will be applied after the game is restarted.
- Container@DISPLAY_PANE:
- X:37
- Y:100
- Width:PARENT_RIGHT - 37
- Height:PARENT_BOTTOM - 100
- Visible: false
+ Text:Advanced
+ Font:Bold
+ Container@DISPLAY_PANEL:
+ X:5
+ Y:50
+ Width:PARENT_RIGHT - 10
+ Height:PARENT_BOTTOM
Children:
Label@MODE_LABEL:
- X:0
- Y:0
+ X:120
+ Y:39
Width:45
Height:25
+ Align:Right
Text:Mode:
DropDownButton@MODE_DROPDOWN:
- X:50
- Y:0
+ X:170
+ Y:40
Width:170
Height:25
Font:Regular
Text:Windowed
Container@WINDOW_RESOLUTION:
- X:225
- Y:0
+ X:340
+ Y:40
Children:
Label@At:
Text:@
@@ -239,165 +105,328 @@ Background@SETTINGS_MENU:
Height:25
MaxLength:5
Label@VIDEO_DESC:
- Y:30
+ Y:60
Width:PARENT_RIGHT
Height:25
Font:Tiny
Align:Center
- Text:Mode/Resolution changes will be applied after the game is restarted.
+ Text:Mode/Resolution changes will be applied after the game is restarted
+ Checkbox@FRAME_LIMIT_CHECKBOX:
+ X:15
+ Y:100
+ Width:200
+ Height:20
+ Font:Regular
+ Text:Enable Frame Limiter
Checkbox@PIXELDOUBLE_CHECKBOX:
- Y:60
+ X:310
+ Y:105
Width:200
Height:20
Font:Regular
Text:Enable Pixel Doubling
- Checkbox@CAPFRAMERATE_CHECKBOX:
- Y:90
- Width:200
- Height:20
- Font:Regular
- Text:Cap Framerate @
- TextField@MAX_FRAMERATE:
- X:150
- Y:90
+ Label@FRAME_LIMIT_DESC_A:
+ X:45
+ Y:132
+ Width:50
+ Height:25
+ Text:Limit to
+ Align:Right
+ TextField@FRAME_LIMIT_TEXTFIELD:
+ X:100
+ Y:133
Width:45
Height:25
MaxLength:3
+ Label@FRAME_LIMIT_DESC_B:
+ X:150
+ Y:132
+ Height:25
+ Text: FPS
+ Checkbox@SHOW_SHELLMAP:
+ X:310
+ Y:135
+ Width:200
+ Height:20
+ Font:Regular
+ Text:Show Shellmap
+ Label@VIDEO_TITLE:
+ Y:175
+ Width:PARENT_RIGHT
+ Font:Bold
+ Text:Localization
+ Align:Center
Label@LANGUAGE_LABEL:
- X:0
- Y:130
+ X:230 - WIDTH - 5
+ Y:194
Width:75
Height:25
+ Align:Right
Text:Language:
DropDownButton@LANGUAGE_DROPDOWNBUTTON:
- X:80
- Y:130
- Width:140
+ X:230
+ Y:195
+ Width:200
Height:25
- Label@LANGUAGE_DESC:
- Y:160
+ Label@VIDEO_DESC_A:
+ Y:215
Width:PARENT_RIGHT
Height:25
Font:Tiny
Align:Center
- Text:Language changes will be applied after the game is restarted.
- Container@KEYS_PANE:
- X:37
- Y:100
- Width:PARENT_RIGHT - 37
- Height:PARENT_BOTTOM - 100
- Visible: false
+ Text:Language changes will be applied after the game is restarted
+ Label@VIDEO_DESC_B:
+ Y:230
+ Width:PARENT_RIGHT
+ Height:25
+ Font:Tiny
+ Align:Center
+ Text:Translations apply to text strings only; Speech and build icons will remain in English
+ Container@AUDIO_PANEL:
+ X:5
+ Y:50
+ Width:PARENT_RIGHT - 10
+ Height:PARENT_BOTTOM
Children:
- Label@KEYS_SPECIALHOTKEYSHEADLINE:
- X:0
- Y:0
- Text: Special Hotkeys:
- Font:Bold
- ScrollPanel@SPECIALHOTKEY_LIST:
- X:0
- Y:20
- Width:449
- Height:85
- Children:
- ScrollItem@SPECIALHOTKEY_TEMPLATE:
- Width:PARENT_RIGHT-27
- Height:25
- X:2
- Y:0
- Visible:false
- Children:
- Label@FUNCTION:
- X:10
- Width:200
- Height:25
- HotkeyEntry@HOTKEY:
- X:250
- Width:139
- Height:25
- Label@KEYS_UNITCOMMANDSHEADLINE:
- X:0
- Y:130
- Text: Hotkeys for Unit Commands:
- Font:Bold
- ScrollPanel@UNITCOMMANDHOTKEY_LIST:
- X:0
- Y:150
- Width:449
- Height:85
- Children:
- ScrollItem@UNITCOMMANDHOTKEY_TEMPLATE:
- Width:PARENT_RIGHT-27
- Height:25
- X:2
- Y:0
- Visible:false
- Children:
- Label@FUNCTION:
- X:10
- Width:200
- Height:25
- HotkeyEntry@HOTKEY:
- X:250
- Width:139
- Height:25
- Container@DEBUG_PANE:
- X:37
- Y:100
- Width:PARENT_RIGHT - 37
- Height:PARENT_BOTTOM - 100
- Visible: false
- Children:
- Checkbox@PERFGRAPH_CHECKBOX:
- X:0
- Y:0
- Width:300
+ Checkbox@SHELLMAP_MUSIC:
+ X:15
+ Y:40
+ Width:200
Height:20
- Text:Show Performance Graph
- Checkbox@PERFTEXT_CHECKBOX:
- X:0
- Y:30
- Width:300
- Height:20
- Text:Show Performance Text
- Label@PERFTEXT_SAMPLE_LABEL:
- X:30
- Y:70
- Text:Update Rate
- Slider@PERFTEXT_SAMPLE_AMOUNT:
- X:130
- Y:60
+ Font:Regular
+ Text:Shellmap / Mission Music
+ Label@SOUND_LABEL:
+ X:PARENT_RIGHT - WIDTH - 270
+ Y:37
+ Width:95
+ Height:25
+ Align:Right
+ Text:Sound Volume:
+ Slider@SOUND_VOLUME:
+ X:PARENT_RIGHT - WIDTH - 15
+ Y:43
Width:250
Height:20
Ticks:5
- MinimumValue: 1
- MaximumValue: 50
- Checkbox@CHECKUNSYNCED_CHECKBOX:
- X:0
- Y:90
- Width:300
- Height:20
- Text:Check Sync around Unsynced Code
- Checkbox@BOTDEBUG_CHECKBOX:
- X:0
- Y:120
- Width:300
- Height:20
- Text:Show Bot Debug Messages
- Checkbox@VERBOSE_NAT_DISCOVERY_CHECKBOX:
- X:0
- Y:150
- Width:300
- Height:20
- Text:Detailed NAT logging
- Checkbox@DEVELOPER_MENU_CHECKBOX:
- X:0
- Y:180
- Width:300
- Height:20
- Text:Enable Asset Browser (requires restart)
- Checkbox@SHOW_FATAL_ERROR_DIALOG_CHECKBOX:
- X:0
- Y:210
+ Checkbox@CASH_TICKS:
+ X:15
+ Y:70
Width:200
Height:20
- Text:Show Fatal Error dialog
\ No newline at end of file
+ Font:Regular
+ Text:Cash Ticks
+ Label@MUSIC_LABEL:
+ X:PARENT_RIGHT - WIDTH - 270
+ Y:67
+ Width:95
+ Height:25
+ Align:Right
+ Text:Music Volume:
+ Slider@VIDEO_VOLUME:
+ X:PARENT_RIGHT - WIDTH - 15
+ Y:73
+ Width:250
+ Height:20
+ Ticks:5
+ Label@VIDEO_LABEL:
+ X:PARENT_RIGHT - WIDTH - 270
+ Y:97
+ Width:95
+ Height:25
+ Align:Right
+ Text:Video Volume:
+ Slider@MUSIC_VOLUME:
+ X:PARENT_RIGHT - WIDTH - 15
+ Y:103
+ Width:250
+ Height:20
+ Ticks:5
+ Label@AUDIO_DEVICE_LABEL:
+ X:190 - WIDTH - 5
+ Y:194
+ Width:75
+ Height:25
+ Align:Right
+ Text:Audio Device:
+ DropDownButton@AUDIO_DEVICE:
+ X:190
+ Y:195
+ Width:300
+ Height:25
+ Label@AUDIO_DEVICE_DESC:
+ Y:215
+ Width:PARENT_RIGHT
+ Height:25
+ Font:Tiny
+ Align:Center
+ Text:Device changes will be applied after the game is restarted
+ Container@INPUT_PANEL:
+ X:5
+ Y:50
+ Width:PARENT_RIGHT - 10
+ Height:PARENT_BOTTOM
+ Children:
+ Checkbox@CLASSICORDERS_CHECKBOX:
+ X:15
+ Y:40
+ Width:250
+ Height:20
+ Font:Regular
+ Text:Left-Click Orders
+ Label@MOUSE_SCROLL_LABEL:
+ X:PARENT_RIGHT - WIDTH - 120
+ Y:39
+ Width:160
+ Height:20
+ Font:Regular
+ Text:Middle-Mouse Scrolling:
+ Align:Right
+ DropDownButton@MOUSE_SCROLL:
+ X:PARENT_RIGHT - WIDTH - 15
+ Y:38
+ Width:100
+ Height:25
+ Font:Regular
+ Text:Enabled
+ Checkbox@EDGESCROLL_CHECKBOX:
+ X:15
+ Y:70
+ Width:130
+ Height:20
+ Font:Regular
+ Text:Edge Scrolling
+ Label@SCROLL_SPEED_LABEL:
+ X:PARENT_RIGHT - WIDTH - 270
+ Y:67
+ Width:95
+ Height:25
+ Text:Scroll Speed:
+ Align:Right
+ Slider@SCROLLSPEED_SLIDER:
+ X:PARENT_RIGHT - WIDTH - 15
+ Y:73
+ Width:250
+ Height:20
+ Ticks:5
+ MinimumValue: 10
+ MaximumValue: 50
+ Label@HOTKEY_TITLE:
+ Y:115
+ Width:PARENT_RIGHT
+ Font:Bold
+ Text:Hotkeys
+ Align:Center
+ ScrollPanel@HOTKEY_LIST:
+ X:15
+ Y:135
+ Width:560
+ ItemSpacing:4
+ Height:110
+ Children:
+ ScrollItem@HEADER:
+ BaseName:scrollheader
+ Width:528
+ Height:13
+ Visible:false
+ Children:
+ Label@LABEL:
+ Font:TinyBold
+ Width:PARENT_RIGHT
+ Height:10
+ Align:Center
+ Container@GLOBAL_TEMPLATE:
+ Width:262
+ Height:25
+ Visible:false
+ Children:
+ Label@FUNCTION:
+ Y:0-1
+ Width:PARENT_RIGHT - 85
+ Height:25
+ Align:Right
+ HotkeyEntry@HOTKEY:
+ X:PARENT_RIGHT-WIDTH
+ Width:80
+ Height:25
+ Container@UNIT_TEMPLATE:
+ Width:173
+ Height:25
+ Visible:false
+ Children:
+ Label@FUNCTION:
+ Y:0-1
+ Width:PARENT_RIGHT - 84
+ Height:25
+ Align:Right
+ HotkeyEntry@HOTKEY:
+ X:PARENT_RIGHT-WIDTH+1
+ Width:80
+ Height:25
+ Container@ADVANCED_PANEL:
+ X:5
+ Y:50
+ Width:PARENT_RIGHT - 10
+ Height:PARENT_BOTTOM
+ Children:
+ Checkbox@NAT_DISCOVERY:
+ X:15
+ Y:40
+ Width:200
+ Height:20
+ Font:Regular
+ Text: Enable Network Discovery (UPnP)
+ Checkbox@CRASH_DIALOG_CHECKBOX:
+ X:310
+ Y:40
+ Width:300
+ Height:20
+ Font:Regular
+ Text:Show Fatal Error dialog
+ Checkbox@PERFTEXT_CHECKBOX:
+ X:15
+ Y:70
+ Width:300
+ Height:20
+ Font:Regular
+ Text:Show Performance Text
+ Checkbox@PERFGRAPH_CHECKBOX:
+ X:310
+ Y:70
+ Width:300
+ Height:20
+ Font:Regular
+ Text:Show Performance Graph
+ Checkbox@DEVELOPER_MENU_CHECKBOX:
+ X:15
+ Y:100
+ Width:300
+ Height:20
+ Font:Regular
+ Text:Enable Asset Browser (requires restart)
+ Label@HOTKEY_TITLE:
+ Y:140
+ Width:PARENT_RIGHT
+ Font:Bold
+ Text:Debug
+ Align:Center
+ Checkbox@BOTDEBUG_CHECKBOX:
+ X:15
+ Y:160
+ Width:300
+ Height:20
+ Font:Regular
+ Text:Show Bot Debug Messages
+ Checkbox@VERBOSE_NAT_CHECKBOX:
+ X:310
+ Y:160
+ Width:300
+ Height:20
+ Font:Regular
+ Text:Detailed NAT logging
+ Checkbox@CHECKUNSYNCED_CHECKBOX:
+ X:15
+ Y:190
+ Width:300
+ Height:20
+ Font:Regular
+ Text:Check Sync around Unsynced Code
\ No newline at end of file