Remove legacy settings panel.

This commit is contained in:
Paul Chote
2013-10-23 20:09:46 +13:00
parent b278880ef6
commit 131583a1e9
8 changed files with 405 additions and 697 deletions

View File

@@ -94,7 +94,6 @@
<Compile Include="Widgets\Logic\CncIngameMenuLogic.cs" /> <Compile Include="Widgets\Logic\CncIngameMenuLogic.cs" />
<Compile Include="Widgets\Logic\CncInstallFromCDLogic.cs" /> <Compile Include="Widgets\Logic\CncInstallFromCDLogic.cs" />
<Compile Include="Widgets\Logic\CncMenuLogic.cs" /> <Compile Include="Widgets\Logic\CncMenuLogic.cs" />
<Compile Include="Widgets\Logic\CncSettingsLogic.cs" />
<Compile Include="Widgets\Logic\ProductionTooltipLogic.cs" /> <Compile Include="Widgets\Logic\ProductionTooltipLogic.cs" />
<Compile Include="Widgets\Logic\SupportPowerTooltipLogic.cs" /> <Compile Include="Widgets\Logic\SupportPowerTooltipLogic.cs" />
<Compile Include="Widgets\ProductionPaletteWidget.cs" /> <Compile Include="Widgets\ProductionPaletteWidget.cs" />

View File

@@ -403,7 +403,6 @@
<Compile Include="Widgets\Logic\ReplayBrowserLogic.cs" /> <Compile Include="Widgets\Logic\ReplayBrowserLogic.cs" />
<Compile Include="Widgets\Logic\ServerBrowserLogic.cs" /> <Compile Include="Widgets\Logic\ServerBrowserLogic.cs" />
<Compile Include="Widgets\Logic\ServerCreationLogic.cs" /> <Compile Include="Widgets\Logic\ServerCreationLogic.cs" />
<Compile Include="Widgets\Logic\SettingsMenuLogic.cs" />
<Compile Include="Widgets\MoneyBinWidget.cs" /> <Compile Include="Widgets\MoneyBinWidget.cs" />
<Compile Include="Widgets\ObserverProductionIconsWidget.cs" /> <Compile Include="Widgets\ObserverProductionIconsWidget.cs" />
<Compile Include="Widgets\ObserverSupportPowerIconsWidget.cs" /> <Compile Include="Widgets\ObserverSupportPowerIconsWidget.cs" />
@@ -472,6 +471,7 @@
<Compile Include="CombatDebugOverlay.cs" /> <Compile Include="CombatDebugOverlay.cs" />
<Compile Include="World\PathfinderDebugOverlay.cs" /> <Compile Include="World\PathfinderDebugOverlay.cs" />
<Compile Include="Effects\ContrailFader.cs" /> <Compile Include="Effects\ContrailFader.cs" />
<Compile Include="Widgets\Logic\SettingsLogic.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\OpenRA.FileFormats\OpenRA.FileFormats.csproj"> <ProjectReference Include="..\OpenRA.FileFormats\OpenRA.FileFormats.csproj">

View File

@@ -28,7 +28,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
widget.Get<ButtonWidget>("SETTINGS").OnClick = () => widget.Get<ButtonWidget>("SETTINGS").OnClick = () =>
{ {
widget.Visible = false; widget.Visible = false;
Ui.OpenWindow("SETTINGS_MENU", new WidgetArgs() Ui.OpenWindow("SETTINGS_PANEL", new WidgetArgs()
{ {
{ "onExit", () => widget.Visible = true }, { "onExit", () => widget.Visible = true },
{ "worldRenderer", worldRenderer }, { "worldRenderer", worldRenderer },

View File

@@ -36,7 +36,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
widget.Get<ButtonWidget>("MAINMENU_BUTTON_SETTINGS").OnClick = () => widget.Get<ButtonWidget>("MAINMENU_BUTTON_SETTINGS").OnClick = () =>
{ {
Menu = MenuType.None; Menu = MenuType.None;
Game.OpenWindow("SETTINGS_MENU", new WidgetArgs() Game.OpenWindow("SETTINGS_PANEL", new WidgetArgs()
{ {
{ "onExit", () => Menu = MenuType.Main } { "onExit", () => Menu = MenuType.Main }
}); });

View File

@@ -18,12 +18,11 @@ using OpenRA.GameRules;
using OpenRA.Graphics; using OpenRA.Graphics;
using OpenRA.Mods.RA; using OpenRA.Mods.RA;
using OpenRA.Mods.RA.Widgets; using OpenRA.Mods.RA.Widgets;
using OpenRA.Mods.RA.Widgets.Logic;
using OpenRA.Widgets; 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 } enum PanelType { Display, Audio, Input, Advanced }
Dictionary<PanelType, Action> leavePanelActions = new Dictionary<PanelType, Action>(); Dictionary<PanelType, Action> leavePanelActions = new Dictionary<PanelType, Action>();
@@ -35,12 +34,12 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic
SoundDevice soundDevice; SoundDevice soundDevice;
[ObjectCreator.UseCtor] [ObjectCreator.UseCtor]
public CncSettingsLogic(Widget widget, Action onExit, WorldRenderer worldRenderer) public SettingsLogic(Widget widget, Action onExit, WorldRenderer worldRenderer)
{ {
this.worldRenderer = worldRenderer; this.worldRenderer = worldRenderer;
panelContainer = widget.Get("SETTINGS_PANEL"); panelContainer = widget.Get("SETTINGS_PANEL");
tabContainer = panelContainer; tabContainer = widget.Get("TAB_CONTAINER");
RegisterSettingsPanel(PanelType.Display, InitDisplayPanel, ResetDisplayPanel, "DISPLAY_PANEL", "DISPLAY_TAB"); RegisterSettingsPanel(PanelType.Display, InitDisplayPanel, ResetDisplayPanel, "DISPLAY_PANEL", "DISPLAY_TAB");
RegisterSettingsPanel(PanelType.Audio, InitAudioPanel, ResetAudioPanel, "AUDIO_PANEL", "AUDIO_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"); BindCheckboxPref(panel, "SHOW_SHELLMAP", gs, "ShowShellmap");
var languageDropDownButton = panel.Get<DropDownButtonWidget>("LANGUAGE_DROPDOWNBUTTON"); var languageDropDownButton = panel.Get<DropDownButtonWidget>("LANGUAGE_DROPDOWNBUTTON");
languageDropDownButton.OnMouseDown = _ => SettingsMenuLogic.ShowLanguageDropdown(languageDropDownButton); languageDropDownButton.OnMouseDown = _ => ShowLanguageDropdown(languageDropDownButton);
languageDropDownButton.GetText = () => FieldLoader.Translate(ds.Language); languageDropDownButton.GetText = () => FieldLoader.Translate(ds.Language);
var windowModeDropdown = panel.Get<DropDownButtonWidget>("MODE_DROPDOWN"); var windowModeDropdown = panel.Get<DropDownButtonWidget>("MODE_DROPDOWN");
windowModeDropdown.OnMouseDown = _ => SettingsMenuLogic.ShowWindowModeDropdown(windowModeDropdown, ds); windowModeDropdown.OnMouseDown = _ => ShowWindowModeDropdown(windowModeDropdown, ds);
windowModeDropdown.GetText = () => ds.Mode == WindowMode.Windowed ? windowModeDropdown.GetText = () => ds.Mode == WindowMode.Windowed ?
"Windowed" : ds.Mode == WindowMode.Fullscreen ? "Fullscreen" : "Pseudo-Fullscreen"; "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); dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, setupItem);
return true; return true;
} }
bool ShowWindowModeDropdown(DropDownButtonWidget dropdown, GraphicSettings s)
{
var options = new Dictionary<string, WindowMode>()
{
{ "Pseudo-Fullscreen", WindowMode.PseudoFullscreen },
{ "Fullscreen", WindowMode.Fullscreen },
{ "Windowed", WindowMode.Windowed },
};
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
{
var item = ScrollItemWidget.Setup(itemTemplate,
() => s.Mode == options[o],
() => s.Mode = options[o]);
item.Get<LabelWidget>("LABEL").GetText = () => o;
return item;
};
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, setupItem);
return true;
}
bool ShowLanguageDropdown(DropDownButtonWidget dropdown)
{
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
{
var item = ScrollItemWidget.Setup(itemTemplate,
() => Game.Settings.Graphics.Language == o,
() => Game.Settings.Graphics.Language = o);
item.Get<LabelWidget>("LABEL").GetText = () => FieldLoader.Translate(o);
return item;
};
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, Game.modData.Languages, setupItem);
return true;
}
} }
} }

View File

@@ -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<BackgroundWidget>("SETTINGS_MENU");
var tabs = bg.Get<ContainerWidget>("TAB_CONTAINER");
//Tabs
tabs.Get<ButtonWidget>("GENERAL").OnClick = () => FlipToTab("GENERAL_PANE");
tabs.Get<ButtonWidget>("AUDIO").OnClick = () => FlipToTab("AUDIO_PANE");
tabs.Get<ButtonWidget>("DISPLAY").OnClick = () => FlipToTab("DISPLAY_PANE");
tabs.Get<ButtonWidget>("KEYS").OnClick = () => FlipToTab("KEYS_PANE");
tabs.Get<ButtonWidget>("DEBUG").OnClick = () => FlipToTab("DEBUG_PANE");
FlipToTab("GENERAL_PANE");
//General
var general = bg.Get("GENERAL_PANE");
var name = general.Get<TextFieldWidget>("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<CheckboxWidget>("EDGE_SCROLL");
edgescrollCheckbox.IsChecked = () => Game.Settings.Game.ViewportEdgeScroll;
edgescrollCheckbox.OnClick = () => Game.Settings.Game.ViewportEdgeScroll ^= true;
var edgeScrollSlider = general.Get<SliderWidget>("EDGE_SCROLL_AMOUNT");
edgeScrollSlider.Value = Game.Settings.Game.ViewportEdgeScrollStep;
edgeScrollSlider.OnChange += x => Game.Settings.Game.ViewportEdgeScrollStep = x;
var inversescroll = general.Get<CheckboxWidget>("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<CheckboxWidget>("SHOW_SHELLMAP");
showShellmapCheckbox.IsChecked = () => Game.Settings.Game.ShowShellmap;
showShellmapCheckbox.OnClick = () => Game.Settings.Game.ShowShellmap ^= true;
var useClassicMouseStyleCheckbox = general.Get<CheckboxWidget>("USE_CLASSIC_MOUSE_STYLE_CHECKBOX");
useClassicMouseStyleCheckbox.IsChecked = () => Game.Settings.Game.UseClassicMouseStyle;
useClassicMouseStyleCheckbox.OnClick = () => Game.Settings.Game.UseClassicMouseStyle ^= true;
var allowNatDiscoveryCheckbox = general.Get<CheckboxWidget>("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<SliderWidget>("SOUND_VOLUME");
soundslider.OnChange += x => Sound.SoundVolume = x;
soundslider.Value = Sound.SoundVolume;
var musicslider = audio.Get<SliderWidget>("MUSIC_VOLUME");
musicslider.OnChange += x => Sound.MusicVolume = x;
musicslider.Value = Sound.MusicVolume;
var videoslider = audio.Get<SliderWidget>("VIDEO_VOLUME");
videoslider.OnChange += x => Sound.VideoVolume = x;
videoslider.Value = Sound.VideoVolume;
var cashTicksCheckbox = audio.Get<CheckboxWidget>("CASHTICK_CHECKBOX");
cashTicksCheckbox.IsChecked = () => Game.Settings.Sound.CashTicks;
cashTicksCheckbox.OnClick = () => Game.Settings.Sound.CashTicks ^= true;
var mapMusicCheckbox = audio.Get<CheckboxWidget>("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<DropDownButtonWidget>("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<DropDownButtonWidget>("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<TextFieldWidget>("WINDOW_WIDTH");
windowWidth.Text = gs.WindowedSize.X.ToString();
var windowHeight = display.Get<TextFieldWidget>("WINDOW_HEIGHT");
windowHeight.Text = gs.WindowedSize.Y.ToString();
var pixelDoubleCheckbox = display.Get<CheckboxWidget>("PIXELDOUBLE_CHECKBOX");
pixelDoubleCheckbox.IsChecked = () => gs.PixelDouble;
pixelDoubleCheckbox.OnClick = () =>
{
gs.PixelDouble ^= true;
worldRenderer.Viewport.Zoom = gs.PixelDouble ? 2 : 1;
};
var capFrameRateCheckbox = display.Get<CheckboxWidget>("CAPFRAMERATE_CHECKBOX");
capFrameRateCheckbox.IsChecked = () => gs.CapFramerate;
capFrameRateCheckbox.OnClick = () => gs.CapFramerate ^= true;
var maxFrameRate = display.Get<TextFieldWidget>("MAX_FRAMERATE");
maxFrameRate.Text = gs.MaxFramerate.ToString();
var languageDropDownButton = display.Get<DropDownButtonWidget>("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<ScrollPanelWidget>("SPECIALHOTKEY_LIST");
var specialHotkeyTemplate = specialHotkeyList.Get<ScrollItemWidget>("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<ScrollPanelWidget>("UNITCOMMANDHOTKEY_LIST");
var unitCommandHotkeyTemplate = unitCommandHotkeyList.Get<ScrollItemWidget>("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<CheckboxWidget>("PERFGRAPH_CHECKBOX");
perfgraphCheckbox.IsChecked = () => Game.Settings.Debug.PerfGraph;
perfgraphCheckbox.OnClick = () => Game.Settings.Debug.PerfGraph ^= true;
var perftextCheckbox = debug.Get<CheckboxWidget>("PERFTEXT_CHECKBOX");
perftextCheckbox.IsChecked = () => Game.Settings.Debug.PerfText;
perftextCheckbox.OnClick = () => Game.Settings.Debug.PerfText ^= true;
var sampleSlider = debug.Get<SliderWidget>("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<CheckboxWidget>("CHECKUNSYNCED_CHECKBOX");
checkunsyncedCheckbox.IsChecked = () => Game.Settings.Debug.SanityCheckUnsyncedCode;
checkunsyncedCheckbox.OnClick = () => Game.Settings.Debug.SanityCheckUnsyncedCode ^= true;
var botdebugCheckbox = debug.Get<CheckboxWidget>("BOTDEBUG_CHECKBOX");
botdebugCheckbox.IsChecked = () => Game.Settings.Debug.BotDebug;
botdebugCheckbox.OnClick = () => Game.Settings.Debug.BotDebug ^= true;
var verboseNatDiscoveryCheckbox = debug.Get<CheckboxWidget>("VERBOSE_NAT_DISCOVERY_CHECKBOX");
verboseNatDiscoveryCheckbox.IsChecked = () => Game.Settings.Server.VerboseNatDiscovery;
verboseNatDiscoveryCheckbox.OnClick = () => Game.Settings.Server.VerboseNatDiscovery ^= true;
var developerMenuCheckbox = debug.Get<CheckboxWidget>("DEVELOPER_MENU_CHECKBOX");
developerMenuCheckbox.IsChecked = () => Game.Settings.Debug.DeveloperMenu;
developerMenuCheckbox.OnClick = () => Game.Settings.Debug.DeveloperMenu ^= true;
var showFatalErrorDialog = debug.Get<CheckboxWidget>("SHOW_FATAL_ERROR_DIALOG_CHECKBOX");
showFatalErrorDialog.IsChecked = () => Game.Settings.Debug.ShowFatalErrorDialog;
showFatalErrorDialog.OnClick = () => Game.Settings.Debug.ShowFatalErrorDialog ^= true;
bg.Get<ButtonWidget>("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<string, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
{
var item = ScrollItemWidget.Setup(itemTemplate,
() => Game.Settings.Graphics.Language == o,
() => Game.Settings.Graphics.Language = o);
item.Get<LabelWidget>("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<string, WindowMode>()
{
{ "Pseudo-Fullscreen", WindowMode.PseudoFullscreen },
{ "Fullscreen", WindowMode.Fullscreen },
{ "Windowed", WindowMode.Windowed },
};
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
{
var item = ScrollItemWidget.Setup(itemTemplate,
() => s.Mode == options[o],
() => s.Mode = options[o]);
item.Get<LabelWidget>("LABEL").GetText = () => o;
return item;
};
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, setupItem);
return true;
}
void SetupKeyBinding(ScrollItemWidget keyWidget, string description, Func<Hotkey> getValue, Action<Hotkey> setValue)
{
keyWidget.Get<LabelWidget>("FUNCTION").GetText = () => description;
var keyEntry = keyWidget.Get<HotkeyEntryWidget>("HOTKEY");
keyEntry.Key = getValue();
keyEntry.OnLoseFocus = () => setValue(keyEntry.Key);
}
static bool ShowRendererDropdown(DropDownButtonWidget dropdown, GraphicSettings s)
{
var options = new Dictionary<string, string>()
{
{ "OpenGL", "Gl" },
{ "Cg Toolkit", "Cg" },
};
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
{
var item = ScrollItemWidget.Setup(itemTemplate,
() => s.Renderer == options[o],
() => s.Renderer = options[o]);
item.Get<LabelWidget>("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<string, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
{
var item = ScrollItemWidget.Setup(itemTemplate,
() => soundDevice == options[o],
() => soundDevice = options[o]);
item.Get<LabelWidget>("LABEL").GetText = () => options[o].Label;
return item;
};
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys, setupItem);
return true;
}
}
}

View File

@@ -1,5 +1,5 @@
Container@SETTINGS_PANEL: Container@SETTINGS_PANEL:
Logic:CncSettingsLogic Logic:SettingsLogic
X:(WINDOW_RIGHT - WIDTH)/2 X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM - HEIGHT)/2 Y:(WINDOW_BOTTOM - HEIGHT)/2
Width:590 Width:590
@@ -12,25 +12,27 @@ Container@SETTINGS_PANEL:
Contrast:true Contrast:true
Align:Center Align:Center
Text:Settings Text:Settings
Button@DISPLAY_TAB: Container@TAB_CONTAINER:
Width:140 Children:
Height:35 Button@DISPLAY_TAB:
Text:Display Width:140
Button@AUDIO_TAB: Height:35
X:150 Text:Display
Width:140 Button@AUDIO_TAB:
Height:35 X:150
Text:Audio Width:140
Button@INPUT_TAB: Height:35
X:300 Text:Audio
Width:140 Button@INPUT_TAB:
Height:35 X:300
Text:Input Width:140
Button@ADVANCED_TAB: Height:35
X:450 Text:Input
Width:140 Button@ADVANCED_TAB:
Height:35 X:450
Text:Advanced Width:140
Height:35
Text:Advanced
Button@RESET_BUTTON: Button@RESET_BUTTON:
Y:293 Y:293
Width:140 Width:140

View File

@@ -1,217 +1,83 @@
Background@SETTINGS_MENU: Background@SETTINGS_PANEL:
Logic:SettingsMenuLogic Logic:SettingsLogic
X:(WINDOW_RIGHT - WIDTH)/2 X:(WINDOW_RIGHT - WIDTH)/2
Y:(WINDOW_BOTTOM- HEIGHT)/2 Y:(WINDOW_BOTTOM- HEIGHT)/2
Width: 540 Width:600
Height: 400 Height:351
Children: Children:
Label@SETTINGS_LABEL_TITLE: Label@SETTINGS_LABEL_TITLE:
X:0
Y:20 Y:20
Width:540 Width:PARENT_RIGHT
Height:25 Height:25
Text:Settings Text:Settings
Align:Center Align:Center
Font:Bold 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 X:PARENT_RIGHT - 180
Y:PARENT_BOTTOM - 45 Y:PARENT_BOTTOM - 45
Width:160 Width:160
Height:25 Height:25
Text:Close Text:Back
Font:Bold Font:Bold
Key:escape
Container@TAB_CONTAINER: Container@TAB_CONTAINER:
X:0
Y:50 Y:50
Width:PARENT_RIGHT Width:PARENT_RIGHT
Height:25 Height:25
Children: Children:
Button@GENERAL: Button@DISPLAY_TAB:
X:45 X:115
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
Width:90 Width:90
Height:25 Height:25
Text:Display Text:Display
Font:Bold Font:Bold
Button@KEYS: Button@AUDIO_TAB:
X:315 X:205
Y:0
Width:90 Width:90
Height:25 Height:25
Text:Keys Text:Audio
Font:Bold Font:Bold
Button@DEBUG: Button@INPUT_TAB:
X:405 X:295
Y:0
Width:90 Width:90
Height:25 Height:25
Text:Debug Text:Input
Font:Bold Font:Bold
Container@GENERAL_PANE: Button@ADVANCED_TAB:
X:37 X:385
Y:100 Width:90
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
Height:25 Height:25
X:90 Text:Advanced
Y:0 Font:Bold
MaxLength:16 Container@DISPLAY_PANEL:
Checkbox@EDGE_SCROLL: X:5
X:0 Y:50
Y:30 Width:PARENT_RIGHT - 10
Width:200 Height:PARENT_BOTTOM
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
Children: Children:
Label@MODE_LABEL: Label@MODE_LABEL:
X:0 X:120
Y:0 Y:39
Width:45 Width:45
Height:25 Height:25
Align:Right
Text:Mode: Text:Mode:
DropDownButton@MODE_DROPDOWN: DropDownButton@MODE_DROPDOWN:
X:50 X:170
Y:0 Y:40
Width:170 Width:170
Height:25 Height:25
Font:Regular Font:Regular
Text:Windowed Text:Windowed
Container@WINDOW_RESOLUTION: Container@WINDOW_RESOLUTION:
X:225 X:340
Y:0 Y:40
Children: Children:
Label@At: Label@At:
Text:@ Text:@
@@ -239,165 +105,328 @@ Background@SETTINGS_MENU:
Height:25 Height:25
MaxLength:5 MaxLength:5
Label@VIDEO_DESC: Label@VIDEO_DESC:
Y:30 Y:60
Width:PARENT_RIGHT Width:PARENT_RIGHT
Height:25 Height:25
Font:Tiny Font:Tiny
Align:Center 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: Checkbox@PIXELDOUBLE_CHECKBOX:
Y:60 X:310
Y:105
Width:200 Width:200
Height:20 Height:20
Font:Regular Font:Regular
Text:Enable Pixel Doubling Text:Enable Pixel Doubling
Checkbox@CAPFRAMERATE_CHECKBOX: Label@FRAME_LIMIT_DESC_A:
Y:90 X:45
Width:200 Y:132
Height:20 Width:50
Font:Regular Height:25
Text:Cap Framerate @ Text:Limit to
TextField@MAX_FRAMERATE: Align:Right
X:150 TextField@FRAME_LIMIT_TEXTFIELD:
Y:90 X:100
Y:133
Width:45 Width:45
Height:25 Height:25
MaxLength:3 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: Label@LANGUAGE_LABEL:
X:0 X:230 - WIDTH - 5
Y:130 Y:194
Width:75 Width:75
Height:25 Height:25
Align:Right
Text:Language: Text:Language:
DropDownButton@LANGUAGE_DROPDOWNBUTTON: DropDownButton@LANGUAGE_DROPDOWNBUTTON:
X:80 X:230
Y:130 Y:195
Width:140 Width:200
Height:25 Height:25
Label@LANGUAGE_DESC: Label@VIDEO_DESC_A:
Y:160 Y:215
Width:PARENT_RIGHT Width:PARENT_RIGHT
Height:25 Height:25
Font:Tiny Font:Tiny
Align:Center Align:Center
Text:Language changes will be applied after the game is restarted. Text:Language changes will be applied after the game is restarted
Container@KEYS_PANE: Label@VIDEO_DESC_B:
X:37 Y:230
Y:100 Width:PARENT_RIGHT
Width:PARENT_RIGHT - 37 Height:25
Height:PARENT_BOTTOM - 100 Font:Tiny
Visible: false 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: Children:
Label@KEYS_SPECIALHOTKEYSHEADLINE: Checkbox@SHELLMAP_MUSIC:
X:0 X:15
Y:0 Y:40
Text: Special Hotkeys: Width:200
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
Height:20 Height:20
Text:Show Performance Graph Font:Regular
Checkbox@PERFTEXT_CHECKBOX: Text:Shellmap / Mission Music
X:0 Label@SOUND_LABEL:
Y:30 X:PARENT_RIGHT - WIDTH - 270
Width:300 Y:37
Height:20 Width:95
Text:Show Performance Text Height:25
Label@PERFTEXT_SAMPLE_LABEL: Align:Right
X:30 Text:Sound Volume:
Y:70 Slider@SOUND_VOLUME:
Text:Update Rate X:PARENT_RIGHT - WIDTH - 15
Slider@PERFTEXT_SAMPLE_AMOUNT: Y:43
X:130
Y:60
Width:250 Width:250
Height:20 Height:20
Ticks:5 Ticks:5
MinimumValue: 1 Checkbox@CASH_TICKS:
MaximumValue: 50 X:15
Checkbox@CHECKUNSYNCED_CHECKBOX: Y:70
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
Width:200 Width:200
Height:20 Height:20
Text:Show Fatal Error dialog 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