Add hotkey settings panel with a hotkey remap dialog

* Add HotkeyDialogLogic.cs
* Add dialog-hotkey.yaml to all mods
* Add `GetFirstDuplicate` method to HotkeyManager to aid in validation
* Add "Player" and/or "Spectator" type to all hotkeys to allow for
validation based on overlapping types
* Change settings.yaml and SettingsLogic.cs to work with the new dialog
This commit is contained in:
Ivaylo Draganov
2019-05-10 13:51:23 +03:00
committed by abcdefg30
parent 9783fdaf78
commit c9ff54bfd5
23 changed files with 619 additions and 156 deletions

View File

@@ -67,6 +67,20 @@ namespace OpenRA
settings.Remove(name); settings.Remove(name);
} }
public HotkeyDefinition GetFirstDuplicate(string name, Hotkey value, HotkeyDefinition definition)
{
foreach (var kv in keys)
{
if (kv.Key == name)
continue;
if (kv.Value == value && definitions[kv.Key].Types.Overlaps(definition.Types))
return definitions[kv.Key];
}
return null;
}
public HotkeyReference this[string name] public HotkeyReference this[string name]
{ {
get get

View File

@@ -24,12 +24,17 @@ namespace OpenRA.Mods.Common.Widgets
public int LeftMargin = 5; public int LeftMargin = 5;
public int RightMargin = 5; public int RightMargin = 5;
public Action OnTakeFocus = () => { };
public Action OnLoseFocus = () => { }; public Action OnLoseFocus = () => { };
public Action OnEscape = () => { };
public Action OnReturn = () => { };
public Func<bool> IsDisabled = () => false; public Func<bool> IsDisabled = () => false;
public Func<bool> IsValid = () => false;
public string Font = ChromeMetrics.Get<string>("HotkeyFont"); public string Font = ChromeMetrics.Get<string>("HotkeyFont");
public Color TextColor = ChromeMetrics.Get<Color>("HotkeyColor"); public Color TextColor = ChromeMetrics.Get<Color>("HotkeyColor");
public Color TextColorDisabled = ChromeMetrics.Get<Color>("HotkeyColorDisabled"); public Color TextColorDisabled = ChromeMetrics.Get<Color>("HotkeyColorDisabled");
public Color TextColorInvalid = ChromeMetrics.Get<Color>("HotkeyColorInvalid");
public HotkeyEntryWidget() { } public HotkeyEntryWidget() { }
protected HotkeyEntryWidget(HotkeyEntryWidget widget) protected HotkeyEntryWidget(HotkeyEntryWidget widget)
@@ -38,12 +43,22 @@ namespace OpenRA.Mods.Common.Widgets
Font = widget.Font; Font = widget.Font;
TextColor = widget.TextColor; TextColor = widget.TextColor;
TextColorDisabled = widget.TextColorDisabled; TextColorDisabled = widget.TextColorDisabled;
TextColorInvalid = widget.TextColorInvalid;
VisualHeight = widget.VisualHeight; VisualHeight = widget.VisualHeight;
} }
public override bool TakeKeyboardFocus()
{
OnTakeFocus();
return base.TakeKeyboardFocus();
}
public override bool YieldKeyboardFocus() public override bool YieldKeyboardFocus()
{ {
OnLoseFocus(); OnLoseFocus();
if (!IsValid())
return false;
return base.YieldKeyboardFocus(); return base.YieldKeyboardFocus();
} }
@@ -80,8 +95,15 @@ namespace OpenRA.Mods.Common.Widgets
if (!HasKeyboardFocus || IgnoreKeys.Contains(e.Key)) if (!HasKeyboardFocus || IgnoreKeys.Contains(e.Key))
return false; return false;
if (e.Key != Keycode.ESCAPE && e.Key != Keycode.RETURN)
Key = Hotkey.FromKeyInput(e); Key = Hotkey.FromKeyInput(e);
if (e.Key == Keycode.ESCAPE)
OnEscape();
if (e.Key == Keycode.RETURN)
OnReturn();
YieldKeyboardFocus(); YieldKeyboardFocus();
return true; return true;
@@ -109,6 +131,7 @@ namespace OpenRA.Mods.Common.Widgets
var textSize = font.Measure(apparentText); var textSize = font.Measure(apparentText);
var disabled = IsDisabled(); var disabled = IsDisabled();
var valid = IsValid();
var state = disabled ? "textfield-disabled" : var state = disabled ? "textfield-disabled" :
HasKeyboardFocus ? "textfield-focused" : HasKeyboardFocus ? "textfield-focused" :
Ui.MouseOverWidget == this ? "textfield-hover" : Ui.MouseOverWidget == this ? "textfield-hover" :
@@ -131,7 +154,7 @@ namespace OpenRA.Mods.Common.Widgets
Bounds.Width - LeftMargin - RightMargin, Bounds.Bottom)); Bounds.Width - LeftMargin - RightMargin, Bounds.Bottom));
} }
var color = disabled ? TextColorDisabled : TextColor; var color = disabled ? TextColorDisabled : !valid ? TextColorInvalid : TextColor;
font.DrawText(apparentText, textPos, color); font.DrawText(apparentText, textPos, color);
if (isTextOverflowing) if (isTextOverflowing)

View File

@@ -0,0 +1,149 @@
#region Copyright & License Information
/*
* Copyright 2007-2019 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, either version 3 of
* the License, or (at your option) any later version. For more
* information, see COPYING.
*/
#endregion
using System;
using OpenRA.Primitives;
using OpenRA.Widgets;
namespace OpenRA.Mods.Common.Widgets.Logic
{
public class HotkeyDialogLogic : ChromeLogic
{
readonly Widget panel;
readonly ButtonWidget resetButton, clearButton, cancelButton;
readonly LabelWidget duplicateNotice, defaultNotice, originalNotice;
readonly Action onSave;
readonly HotkeyDefinition definition;
readonly HotkeyManager manager;
readonly HotkeyEntryWidget hotkeyEntry;
readonly bool isFirstValidation = true;
Hotkey currentHotkey;
HotkeyDefinition duplicateHotkey;
bool isValid = false;
bool isValidating = false;
[ObjectCreator.UseCtor]
public HotkeyDialogLogic(Widget widget, Action onSave, HotkeyDefinition hotkeyDefinition, HotkeyManager hotkeyManager)
{
panel = widget;
this.onSave = onSave;
definition = hotkeyDefinition;
manager = hotkeyManager;
currentHotkey = manager[definition.Name].GetValue();
hotkeyEntry = panel.Get<HotkeyEntryWidget>("HOTKEY_ENTRY");
resetButton = panel.Get<ButtonWidget>("RESET_BUTTON");
clearButton = panel.Get<ButtonWidget>("CLEAR_BUTTON");
cancelButton = panel.Get<ButtonWidget>("CANCEL_BUTTON");
duplicateNotice = panel.Get<LabelWidget>("DUPLICATE_NOTICE");
defaultNotice = panel.Get<LabelWidget>("DEFAULT_NOTICE");
originalNotice = panel.Get<LabelWidget>("ORIGINAL_NOTICE");
panel.Get<LabelWidget>("HOTKEY_LABEL").GetText = () => hotkeyDefinition.Description + ":";
duplicateNotice.TextColor = ChromeMetrics.Get<Color>("NoticeErrorColor");
duplicateNotice.GetText = () =>
{
return (duplicateHotkey != null) ? duplicateNotice.Text.F(duplicateHotkey.Description) : duplicateNotice.Text;
};
defaultNotice.TextColor = ChromeMetrics.Get<Color>("NoticeInfoColor");
originalNotice.TextColor = ChromeMetrics.Get<Color>("NoticeInfoColor");
originalNotice.Text = originalNotice.Text.F(hotkeyDefinition.Default.DisplayString());
resetButton.OnClick = Reset;
clearButton.OnClick = Clear;
cancelButton.OnClick = Cancel;
hotkeyEntry.Key = currentHotkey;
hotkeyEntry.IsValid = () => isValid;
hotkeyEntry.OnTakeFocus = OnHotkeyEntryTakeFocus;
hotkeyEntry.OnLoseFocus = OnHotkeyEntryLoseFocus;
hotkeyEntry.OnEscape = Cancel;
hotkeyEntry.OnReturn = Cancel;
hotkeyEntry.TakeKeyboardFocus();
Validate();
isFirstValidation = false;
}
void OnHotkeyEntryTakeFocus()
{
cancelButton.Disabled = manager.GetFirstDuplicate(definition.Name, currentHotkey, definition) != null;
}
void OnHotkeyEntryLoseFocus()
{
cancelButton.Disabled = true;
if (!isValidating)
Validate();
}
void Validate()
{
isValidating = true;
duplicateHotkey = manager.GetFirstDuplicate(definition.Name, hotkeyEntry.Key, definition);
isValid = duplicateHotkey == null;
duplicateNotice.Visible = !isValid;
clearButton.Disabled = !hotkeyEntry.Key.IsValid();
if (hotkeyEntry.Key == definition.Default || (!hotkeyEntry.Key.IsValid() && !definition.Default.IsValid()))
{
defaultNotice.Visible = !duplicateNotice.Visible;
originalNotice.Visible = false;
resetButton.Disabled = true;
}
else
{
defaultNotice.Visible = false;
originalNotice.Visible = !duplicateNotice.Visible;
resetButton.Disabled = false;
}
if (isValid && !isFirstValidation)
{
currentHotkey = hotkeyEntry.Key;
hotkeyEntry.YieldKeyboardFocus();
Save();
}
else
hotkeyEntry.TakeKeyboardFocus();
isValidating = false;
}
void Save()
{
manager.Set(definition.Name, hotkeyEntry.Key);
Game.Settings.Save();
onSave();
}
void Cancel()
{
cancelButton.Disabled = true;
hotkeyEntry.Key = currentHotkey;
Validate();
}
void Reset()
{
hotkeyEntry.Key = definition.Default;
Validate();
}
void Clear()
{
hotkeyEntry.Key = Hotkey.Invalid;
Validate();
}
}
}

View File

@@ -13,13 +13,14 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using OpenRA.Graphics; using OpenRA.Graphics;
using OpenRA.Primitives;
using OpenRA.Widgets; using OpenRA.Widgets;
namespace OpenRA.Mods.Common.Widgets.Logic namespace OpenRA.Mods.Common.Widgets.Logic
{ {
public class SettingsLogic : ChromeLogic public class SettingsLogic : ChromeLogic
{ {
enum PanelType { Display, Audio, Input, Advanced } enum PanelType { Display, Audio, Input, Hotkeys, Advanced }
static readonly string OriginalSoundDevice; static readonly string OriginalSoundDevice;
static readonly WindowMode OriginalGraphicsMode; static readonly WindowMode OriginalGraphicsMode;
@@ -61,6 +62,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
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");
RegisterSettingsPanel(PanelType.Input, InitInputPanel, ResetInputPanel, "INPUT_PANEL", "INPUT_TAB"); RegisterSettingsPanel(PanelType.Input, InitInputPanel, ResetInputPanel, "INPUT_PANEL", "INPUT_TAB");
RegisterSettingsPanel(PanelType.Hotkeys, InitHotkeysPanel, ResetHotkeysPanel, "HOTKEYS_PANEL", "HOTKEYS_TAB");
RegisterSettingsPanel(PanelType.Advanced, InitAdvancedPanel, ResetAdvancedPanel, "ADVANCED_PANEL", "ADVANCED_TAB"); RegisterSettingsPanel(PanelType.Advanced, InitAdvancedPanel, ResetAdvancedPanel, "ADVANCED_PANEL", "ADVANCED_TAB");
panelContainer.Get<ButtonWidget>("BACK_BUTTON").OnClick = () => panelContainer.Get<ButtonWidget>("BACK_BUTTON").OnClick = () =>
@@ -123,7 +125,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
ss.OnChange += x => field.SetValue(group, x); ss.OnChange += x => field.SetValue(group, x);
} }
static void BindHotkeyPref(HotkeyDefinition hd, HotkeyManager manager, Widget template, Widget parent) static void BindHotkeyPref(HotkeyDefinition hd, HotkeyManager manager, Widget template, Widget parent, Widget remapDialogRoot, Widget remapDialogPlaceholder)
{ {
var key = template.Clone() as Widget; var key = template.Clone() as Widget;
key.Id = hd.Name; key.Id = hd.Name;
@@ -131,9 +133,53 @@ namespace OpenRA.Mods.Common.Widgets.Logic
key.Get<LabelWidget>("FUNCTION").GetText = () => hd.Description + ":"; key.Get<LabelWidget>("FUNCTION").GetText = () => hd.Description + ":";
var textBox = key.Get<HotkeyEntryWidget>("HOTKEY"); var remapButton = key.Get<ButtonWidget>("HOTKEY");
textBox.Key = manager[hd.Name].GetValue(); remapButton.GetText = () => manager[hd.Name].GetValue().DisplayString();
textBox.OnLoseFocus = () => manager.Set(hd.Name, textBox.Key);
if (manager.GetFirstDuplicate(hd.Name, manager[hd.Name].GetValue(), hd) != null)
remapButton.GetColor = () => ChromeMetrics.Get<Color>("HotkeyColorInvalid");
remapButton.OnClick = () =>
{
remapDialogRoot.RemoveChildren();
if (remapButton.IsHighlighted())
{
remapButton.IsHighlighted = () => false;
if (remapDialogPlaceholder != null)
remapDialogPlaceholder.Visible = true;
return;
}
if (remapDialogPlaceholder != null)
remapDialogPlaceholder.Visible = false;
var siblings = parent.Children;
foreach (var sibling in siblings)
{
var button = sibling.GetOrNull<ButtonWidget>("HOTKEY");
if (button != null)
button.IsHighlighted = () => false;
}
remapButton.IsHighlighted = () => true;
Ui.LoadWidget("HOTKEY_DIALOG", remapDialogRoot, new WidgetArgs
{
{
"onSave", () =>
{
remapButton.GetText = () => manager[hd.Name].GetValue().DisplayString();
remapButton.GetColor = () => ChromeMetrics.Get<Color>("ButtonTextColor");
}
},
{ "hotkeyDefinition", hd },
{ "hotkeyManager", manager },
});
};
parent.AddChild(key); parent.AddChild(key);
} }
@@ -408,6 +454,11 @@ namespace OpenRA.Mods.Common.Widgets.Logic
zoomModifierDropdown.OnMouseDown = _ => ShowZoomModifierDropdown(zoomModifierDropdown, gs); zoomModifierDropdown.OnMouseDown = _ => ShowZoomModifierDropdown(zoomModifierDropdown, gs);
zoomModifierDropdown.GetText = () => gs.ZoomModifier.ToString(); zoomModifierDropdown.GetText = () => gs.ZoomModifier.ToString();
return () => { };
}
Action InitHotkeysPanel(Widget panel)
{
var hotkeyList = panel.Get<ScrollPanelWidget>("HOTKEY_LIST"); var hotkeyList = panel.Get<ScrollPanelWidget>("HOTKEY_LIST");
hotkeyList.Layout = new GridLayout(hotkeyList); hotkeyList.Layout = new GridLayout(hotkeyList);
var hotkeyHeader = hotkeyList.Get<ScrollItemWidget>("HEADER"); var hotkeyHeader = hotkeyList.Get<ScrollItemWidget>("HEADER");
@@ -434,10 +485,12 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var types = FieldLoader.GetValue<string[]>("Types", typesNode.Value.Value); var types = FieldLoader.GetValue<string[]>("Types", typesNode.Value.Value);
var added = new HashSet<HotkeyDefinition>(); var added = new HashSet<HotkeyDefinition>();
var template = templates.Get(templateNode.Value.Value); var template = templates.Get(templateNode.Value.Value);
var remapDialogRoot = panel.Get("HOTKEY_DIALOG_ROOT");
var remapDialogPlaceholder = panel.GetOrNull("HOTKEY_DIALOG_PLACEHOLDER");
foreach (var t in types) foreach (var t in types)
foreach (var hd in modData.Hotkeys.Definitions.Where(k => k.Types.Contains(t))) foreach (var hd in modData.Hotkeys.Definitions.Where(k => k.Types.Contains(t)))
if (added.Add(hd)) if (added.Add(hd))
BindHotkeyPref(hd, modData.Hotkeys, template, hotkeyList); BindHotkeyPref(hd, modData.Hotkeys, template, hotkeyList, remapDialogRoot, remapDialogPlaceholder);
} }
} }
@@ -461,16 +514,22 @@ namespace OpenRA.Mods.Common.Widgets.Logic
gs.AllowZoom = dgs.AllowZoom; gs.AllowZoom = dgs.AllowZoom;
gs.ZoomModifier = dgs.ZoomModifier; gs.ZoomModifier = dgs.ZoomModifier;
panel.Get<SliderWidget>("SCROLLSPEED_SLIDER").Value = gs.ViewportEdgeScrollStep;
panel.Get<SliderWidget>("UI_SCROLLSPEED_SLIDER").Value = gs.UIScrollSpeed;
MakeMouseFocusSettingsLive();
};
}
Action ResetHotkeysPanel(Widget panel)
{
return () =>
{
foreach (var hd in modData.Hotkeys.Definitions) foreach (var hd in modData.Hotkeys.Definitions)
{ {
modData.Hotkeys.Set(hd.Name, hd.Default); modData.Hotkeys.Set(hd.Name, hd.Default);
panel.Get(hd.Name).Get<HotkeyEntryWidget>("HOTKEY").Key = hd.Default; panel.Get(hd.Name).Get<HotkeyEntryWidget>("HOTKEY").Key = hd.Default;
} }
panel.Get<SliderWidget>("SCROLLSPEED_SLIDER").Value = gs.ViewportEdgeScrollStep;
panel.Get<SliderWidget>("UI_SCROLLSPEED_SLIDER").Value = gs.UIScrollSpeed;
MakeMouseFocusSettingsLive();
}; };
} }

View File

@@ -0,0 +1,83 @@
Background@HOTKEY_DIALOG:
Logic: HotkeyDialogLogic
Width: PARENT_RIGHT
Height: PARENT_BOTTOM
Background: panel-gray
Children:
Label@HOTKEY_LABEL:
X: 15
Y: 14
Width: PARENT_RIGHT - 40
Height: 25
Font: Bold
HotkeyEntry@HOTKEY_ENTRY:
X: 15
Y: 40
Width: 382
Height: 25
Container@NOTICES:
X: 15
Y: 65
Width: PARENT_RIGHT - 40
Height: 25
Children:
Label@DEFAULT_NOTICE:
Width: PARENT_RIGHT
Height: PARENT_BOTTOM
Font: Tiny
Align: Left
Text: This is the default hotkey.
Label@ORIGINAL_NOTICE:
Width: PARENT_RIGHT
Height: PARENT_BOTTOM
Font: Tiny
Align: Left
Text: The default is "{0}"
Label@DUPLICATE_NOTICE:
Width: PARENT_RIGHT
Height: PARENT_BOTTOM
Font: Tiny
Align: Left
Text: This hotkey is already used for "{0}"
Button@CLEAR_BUTTON:
X: PARENT_RIGHT - 65 - 15 - 2 * (WIDTH + 10)
Y: 40
Width: 25
Height: 25
TooltipText: Unbind the hotkey
TooltipContainer: TOOLTIP_CONTAINER
TooltipTemplate: SIMPLE_TOOLTIP
Children:
Image:
ImageCollection: lobby-bits
ImageName: kick
X: 7
Y: 8
IgnoreMouseOver: True
Button@RESET_BUTTON:
X: PARENT_RIGHT - 65 - 15 - WIDTH - 10
Y: 40
Width: 25
Height: 25
TooltipText: Reset to default
TooltipContainer: TOOLTIP_CONTAINER
TooltipTemplate: SIMPLE_TOOLTIP
Children:
Image@IMAGE_RELOAD:
X: 5
Y: 5
Width: 16
Height: 16
ImageCollection: reload-icon
ImageName: enabled
IgnoreMouseOver: True
Button@CANCEL_BUTTON:
X: PARENT_RIGHT - WIDTH - 15
Y: 40
Width: 65
Height: 25
Text: Cancel
TooltipText: Cancel the operation
TooltipContainer: TOOLTIP_CONTAINER
TooltipTemplate: SIMPLE_TOOLTIP
TooltipContainer@TOOLTIP_CONTAINER:

View File

@@ -40,22 +40,27 @@ Container@SETTINGS_PANEL:
Container@TAB_CONTAINER: Container@TAB_CONTAINER:
Children: Children:
Button@DISPLAY_TAB: Button@DISPLAY_TAB:
Width: 140 Width: 110
Height: 35 Height: 35
Text: Display Text: Display
Button@AUDIO_TAB: Button@AUDIO_TAB:
X: 150 X: WIDTH + 10
Width: 140 Width: 110
Height: 35 Height: 35
Text: Audio Text: Audio
Button@INPUT_TAB: Button@INPUT_TAB:
X: 300 X: 2 * (WIDTH + 10)
Width: 140 Width: 110
Height: 35 Height: 35
Text: Input Text: Input
Button@HOTKEYS_TAB:
X: 3 * (WIDTH + 10)
Width: 110
Height: 35
Text: Hotkeys
Button@ADVANCED_TAB: Button@ADVANCED_TAB:
X: 450 X: 4 * (WIDTH + 10)
Width: 140 Width: 110
Height: 35 Height: 35
Text: Advanced Text: Advanced
Background@bg: Background@bg:
@@ -459,13 +464,17 @@ Container@SETTINGS_PANEL:
Font: Bold Font: Bold
Text: Hotkeys Text: Hotkeys
Align: Center Align: Center
ScrollPanel@HOTKEY_LIST: Container@HOTKEYS_PANEL:
X: 15 X: 15
Y: 185 Y: 15
Width: 560 Width: PARENT_RIGHT - 15
Height: PARENT_BOTTOM - 15
Children:
ScrollPanel@HOTKEY_LIST:
Width: PARENT_RIGHT - 15
TopBottomSpacing: 4 TopBottomSpacing: 4
ItemSpacing: 4 ItemSpacing: 4
Height: 160 Height: 210
Children: Children:
ScrollItem@HEADER: ScrollItem@HEADER:
Width: 528 Width: 528
@@ -489,10 +498,12 @@ Container@SETTINGS_PANEL:
Width: PARENT_RIGHT - 85 Width: PARENT_RIGHT - 85
Height: 25 Height: 25
Align: Right Align: Right
HotkeyEntry@HOTKEY: Button@HOTKEY:
X: PARENT_RIGHT - WIDTH X: PARENT_RIGHT - WIDTH
Width: 80 Width: 80
Height: 25 Height: 25
Align: Left
TooltipContainer: TOOLTIP_CONTAINER
Container@THREE_COLUMN: Container@THREE_COLUMN:
Width: 173 Width: 173
Height: 25 Height: 25
@@ -503,10 +514,29 @@ Container@SETTINGS_PANEL:
Width: PARENT_RIGHT - 84 Width: PARENT_RIGHT - 84
Height: 25 Height: 25
Align: Right Align: Right
HotkeyEntry@HOTKEY: Button@HOTKEY:
X: PARENT_RIGHT - WIDTH + 1 X: PARENT_RIGHT - WIDTH + 1
Width: 80 Width: 80
Height: 25 Height: 25
Align: Left
TooltipContainer: TOOLTIP_CONTAINER
Background@HOTKEY_DIALOG_PLACEHOLDER:
Y: 225
Width: PARENT_RIGHT - 15
Height: 105
Background: panel-gray
Children:
Label@HOTKEY_DIALOG_HELPTEXT:
Y: PARENT_BOTTOM / 2 - 12
Width: PARENT_RIGHT
Height: 25
Font: Tiny
Align: Center
Text: Click on a hotkey to start rebinding
Container@HOTKEY_DIALOG_ROOT:
Y: 225
Width: PARENT_RIGHT - 15
Height: 105
Container@ADVANCED_PANEL: Container@ADVANCED_PANEL:
Width: PARENT_RIGHT Width: PARENT_RIGHT
Height: PARENT_BOTTOM Height: PARENT_BOTTOM
@@ -648,3 +678,4 @@ Container@SETTINGS_PANEL:
Width: 140 Width: 140
Height: 35 Height: 35
Text: Reset Text: Reset
TooltipContainer@TOOLTIP_CONTAINER:

View File

@@ -1,19 +1,19 @@
ProductionTypeBuilding: E ProductionTypeBuilding: E
Description: Building Tab Description: Building Tab
Types: Production Types: Production, Player
ProductionTypeDefense: R ProductionTypeDefense: R
Description: Defense Tab Description: Defense Tab
Types: Production Types: Production, Player
ProductionTypeInfantry: T ProductionTypeInfantry: T
Description: Infantry Tab Description: Infantry Tab
Types: Production Types: Production, Player
ProductionTypeVehicle: Y ProductionTypeVehicle: Y
Description: Vehicle Tab Description: Vehicle Tab
Types: Production Types: Production, Player
ProductionTypeAircraft: U ProductionTypeAircraft: U
Description: Aircraft Tab Description: Aircraft Tab
Types: Production Types: Production, Player

View File

@@ -128,6 +128,7 @@ ChromeLayout:
cnc|chrome/assetbrowser.yaml cnc|chrome/assetbrowser.yaml
cnc|chrome/missionbrowser.yaml cnc|chrome/missionbrowser.yaml
cnc|chrome/editor.yaml cnc|chrome/editor.yaml
cnc|chrome/dialog-hotkey.yaml
Voices: Voices:
cnc|audio/voices.yaml cnc|audio/voices.yaml

View File

@@ -0,0 +1,69 @@
Background@HOTKEY_DIALOG:
Logic: HotkeyDialogLogic
Width: PARENT_RIGHT
Height: PARENT_BOTTOM
Background: dialog3
Children:
Label@HOTKEY_LABEL:
X: 20
Y: 14
Width: PARENT_RIGHT - 40
Height: 25
Font: Bold
HotkeyEntry@HOTKEY_ENTRY:
X: 20
Y: 40
Width: 280
Height: 25
Container@NOTICES:
X: 20
Y: 65
Width: PARENT_RIGHT - 40
Height: 25
Children:
Label@DEFAULT_NOTICE:
Width: PARENT_RIGHT
Height: PARENT_BOTTOM
Font: Tiny
Align: Left
Text: This is the default
Label@ORIGINAL_NOTICE:
Width: PARENT_RIGHT
Height: PARENT_BOTTOM
Font: Tiny
Align: Left
Text: The default is "{0}"
Label@DUPLICATE_NOTICE:
Width: PARENT_RIGHT
Height: PARENT_BOTTOM
Font: Tiny
Align: Left
Text: This hotkey is already used for "{0}"
Button@CLEAR_BUTTON:
X: PARENT_RIGHT - 3 * WIDTH - 40
Y: 41
Width: 65
Height: 25
Text: Clear
TooltipText: Unbind the hotkey
TooltipContainer: TOOLTIP_CONTAINER
TooltipTemplate: SIMPLE_TOOLTIP
Button@RESET_BUTTON:
X: PARENT_RIGHT - 2 * WIDTH - 30
Y: 41
Width: 65
Height: 25
Text: Reset
TooltipText: Reset to default
TooltipContainer: TOOLTIP_CONTAINER
TooltipTemplate: SIMPLE_TOOLTIP
Button@CANCEL_BUTTON:
X: PARENT_RIGHT - WIDTH - 20
Y: 41
Width: 65
Height: 25
Text: Cancel
TooltipText: Cancel the operation
TooltipContainer: TOOLTIP_CONTAINER
TooltipTemplate: SIMPLE_TOOLTIP
TooltipContainer@TOOLTIP_CONTAINER:

View File

@@ -58,25 +58,31 @@ Background@SETTINGS_PANEL:
Height: 25 Height: 25
Children: Children:
Button@DISPLAY_TAB: Button@DISPLAY_TAB:
X: 115 X: 70
Width: 90 Width: 90
Height: 25 Height: 25
Text: Display Text: Display
Font: Bold Font: Bold
Button@AUDIO_TAB: Button@AUDIO_TAB:
X: 205 X: 70 + WIDTH
Width: 90 Width: 90
Height: 25 Height: 25
Text: Audio Text: Audio
Font: Bold Font: Bold
Button@INPUT_TAB: Button@INPUT_TAB:
X: 295 X: 70 + 2 * WIDTH
Width: 90 Width: 90
Height: 25 Height: 25
Text: Input Text: Input
Font: Bold Font: Bold
Button@HOTKEYS_TAB:
X: 70 + 3 * WIDTH
Width: 90
Height: 25
Text: Hotkeys
Font: Bold
Button@ADVANCED_TAB: Button@ADVANCED_TAB:
X: 385 X: 70 + 4 * WIDTH
Width: 90 Width: 90
Height: 25 Height: 25
Text: Advanced Text: Advanced
@@ -457,19 +463,19 @@ Background@SETTINGS_PANEL:
Ticks: 5 Ticks: 5
MinimumValue: 1 MinimumValue: 1
MaximumValue: 100 MaximumValue: 100
Label@HOTKEYS_TITLE: Container@HOTKEYS_PANEL:
Y: 165 X: 5
Width: PARENT_RIGHT Y: 50
Font: Bold Width: PARENT_RIGHT - 10
Text: Hotkeys Height: PARENT_BOTTOM
Align: Center Children:
ScrollPanel@HOTKEY_LIST: ScrollPanel@HOTKEY_LIST:
X: 15 X: 15
Y: 185 Y: 40
Width: 560 Width: PARENT_RIGHT - 30
TopBottomSpacing: 4 TopBottomSpacing: 4
ItemSpacing: 4 ItemSpacing: 4
Height: 160 Height: 183
Children: Children:
ScrollItem@HEADER: ScrollItem@HEADER:
BaseName: scrollheader BaseName: scrollheader
@@ -504,10 +510,12 @@ Background@SETTINGS_PANEL:
Width: PARENT_RIGHT - 85 Width: PARENT_RIGHT - 85
Height: 25 Height: 25
Align: Right Align: Right
HotkeyEntry@HOTKEY: Button@HOTKEY:
X: PARENT_RIGHT - WIDTH X: PARENT_RIGHT - WIDTH
Width: 80 Width: 80
Height: 25 Height: 25
Align: Left
TooltipContainer: TOOLTIP_CONTAINER
Container@THREE_COLUMN: Container@THREE_COLUMN:
Width: 173 Width: 173
Height: 25 Height: 25
@@ -518,10 +526,31 @@ Background@SETTINGS_PANEL:
Width: PARENT_RIGHT - 84 Width: PARENT_RIGHT - 84
Height: 25 Height: 25
Align: Right Align: Right
HotkeyEntry@HOTKEY: Button@HOTKEY:
X: PARENT_RIGHT - WIDTH + 1 X: PARENT_RIGHT - WIDTH + 1
Width: 80 Width: 80
Height: 25 Height: 25
Align: Left
TooltipContainer: TOOLTIP_CONTAINER
Background@HOTKEY_DIALOG_PLACEHOLDER:
X: 15
Y: 232
Width: PARENT_RIGHT - 30
Height: 108
Background: dialog3
Children:
Label@HOTKEY_DIALOG_HELPTEXT:
Y: PARENT_BOTTOM / 2 - 12
Width: PARENT_RIGHT
Height: 25
Font: Tiny
Align: Center
Text: Click on a hotkey to start rebinding
Container@HOTKEY_DIALOG_ROOT:
X: 15
Y: 232
Width: PARENT_RIGHT - 30
Height: 108
Container@ADVANCED_PANEL: Container@ADVANCED_PANEL:
X: 5 X: 5
Y: 50 Y: 50
@@ -647,3 +676,4 @@ Background@SETTINGS_PANEL:
Height: 20 Height: 20
Font: Regular Font: Regular
Text: Strict Activity checking Text: Strict Activity checking
TooltipContainer@TOOLTIP_CONTAINER:

View File

@@ -1,111 +1,111 @@
CycleBase: H CycleBase: H
Description: Jump to base Description: Jump to base
Types: World Types: World, Player, Spectator
ToLastEvent: SPACE ToLastEvent: SPACE
Description: Jump to last radar event Description: Jump to last radar event
Types: World Types: World, Player, Spectator
ToSelection: HOME ToSelection: HOME
Description: Jump to selection Description: Jump to selection
Types: World Types: World, Player, Spectator
SelectAllUnits: Q SelectAllUnits: Q
Description: Select all combat units Description: Select all combat units
Types: World Types: World, Player, Spectator
SelectUnitsByType: W SelectUnitsByType: W
Description: Select units by type Description: Select units by type
Types: World Types: World, Player, Spectator
RemoveFromControlGroup: RemoveFromControlGroup:
Description: Remove from control group Description: Remove from control group
Types: World Types: World, Player
Pause: PAUSE Pause: PAUSE
Description: Pause / Unpause Description: Pause / Unpause
Types: World Types: World, Player, Spectator
Sell: Z Sell: Z
Description: Sell mode Description: Sell mode
Types: OrderGenerator Types: OrderGenerator, Player
Repair: C Repair: C
Description: Repair mode Description: Repair mode
Types: OrderGenerator Types: OrderGenerator, Player
PlaceBeacon: B PlaceBeacon: B
Description: Place beacon Description: Place beacon
Types: OrderGenerator Types: OrderGenerator, Player, Spectator
CycleStatusBars: COMMA CycleStatusBars: COMMA
Description: Cycle status bars display Description: Cycle status bars display
Types: World Types: World, Player, Spectator
TogglePixelDouble: PERIOD TogglePixelDouble: PERIOD
Description: Toggle pixel doubling Description: Toggle pixel doubling
Types: World Types: World, Player, Spectator
ToggleMute: M ToggleMute: M
Description: Toggle audio mute Description: Toggle audio mute
Types: World, Menu Types: World, Menu, Player, Spectator
TogglePlayerStanceColor: COMMA Ctrl TogglePlayerStanceColor: COMMA Ctrl
Description: Toggle player stance colors Description: Toggle player stance colors
Types: World Types: World, Player, Spectator
TakeScreenshot: P Ctrl TakeScreenshot: P Ctrl
Description: Take screenshot Description: Take screenshot
Types: World, Menu Types: World, Menu, Player, Spectator
AttackMove: A AttackMove: A
Description: Attack Move Description: Attack Move
Types: Unit Types: Unit, Player
Stop: S Stop: S
Description: Stop Description: Stop
Types: Unit Types: Unit, Player
Scatter: X Ctrl Scatter: X Ctrl
Description: Scatter Description: Scatter
Types: Unit Types: Unit, Player
Deploy: F Deploy: F
Description: Deploy Description: Deploy
Types: Unit Types: Unit, Player
Guard: D Guard: D
Description: Guard Description: Guard
Types: Unit Types: Unit, Player
StanceAttackAnything: A Alt StanceAttackAnything: A Alt
Description: Attack anything Description: Attack anything
Types: Stance Types: Stance, Player
StanceDefend: S Alt StanceDefend: S Alt
Description: Defend Description: Defend
Types: Stance Types: Stance, Player
StanceReturnFire: D Alt StanceReturnFire: D Alt
Description: Return fire Description: Return fire
Types: Stance Types: Stance, Player
StanceHoldFire: F Alt StanceHoldFire: F Alt
Description: Hold fire Description: Hold fire
Types: Stance Types: Stance, Player
StopMusic: AUDIOSTOP StopMusic: AUDIOSTOP
Description: Stop Description: Stop
Types: Music Types: Music, Player, Spectator
PauseMusic: AUDIOPLAY PauseMusic: AUDIOPLAY
Description: Pause or Resume Description: Pause or Resume
Types: Music Types: Music, Player, Spectator
PrevMusic: AUDIOPREV PrevMusic: AUDIOPREV
Description: Previous Description: Previous
Types: Music Types: Music, Player, Spectator
NextMusic: AUDIONEXT NextMusic: AUDIONEXT
Description: Next Description: Next
Types: Music Types: Music, Player, Spectator

View File

@@ -1,26 +1,26 @@
ObserverCombinedView: MINUS ObserverCombinedView: MINUS
Description: All Players Description: All Players
Types: Observer Types: Observer, Spectator
ObserverWorldView: EQUALS ObserverWorldView: EQUALS
Description: Disable Shroud Description: Disable Shroud
Types: Observer Types: Observer, Spectator
ReplaySpeedSlow: F9 ReplaySpeedSlow: F9
Description: Slow speed Description: Slow speed
Types: Replay Types: Replay, Spectator
ReplaySpeedRegular: F10 ReplaySpeedRegular: F10
Description: Regular speed Description: Regular speed
Types: Replay Types: Replay, Spectator
ReplaySpeedFast: F11 ReplaySpeedFast: F11
Description: Fast speed Description: Fast speed
Types: Replay Types: Replay, Spectator
ReplaySpeedMax: F12 ReplaySpeedMax: F12
Description: Maximum speed Description: Maximum speed
Types: Replay Types: Replay, Spectator
StatisticsNone: F1 StatisticsNone: F1
Description: Disable statistics Description: Disable statistics
@@ -28,15 +28,15 @@ StatisticsNone: F1
StatisticsBasic: F2 StatisticsBasic: F2
Description: Basic statistics Description: Basic statistics
Types: Observer, Replay Types: Observer, Replay, Spectator
StatisticsEconomy: F3 StatisticsEconomy: F3
Description: Economy statistics Description: Economy statistics
Types: Observer, Replay Types: Observer, Replay, Spectator
StatisticsProduction: F4 StatisticsProduction: F4
Description: Production statistics Description: Production statistics
Types: Observer, Replay Types: Observer, Replay, Spectator
StatisticsSupportPowers: F5 StatisticsSupportPowers: F5
Description: Support Power statistics Description: Support Power statistics
@@ -44,12 +44,12 @@ StatisticsSupportPowers: F5
StatisticsCombat: F6 StatisticsCombat: F6
Description: Combat statistics Description: Combat statistics
Types: Observer, Replay Types: Observer, Replay, Spectator
StatisticsGraph: F7 StatisticsGraph: F7
Description: Statistics graph Description: Statistics graph
Types: Observer, Replay Types: Observer, Replay, Spectator
StatisticsArmyGraph: F8 StatisticsArmyGraph: F8
Description: Army value graph Description: Army value graph
Types: Observer, Replay Types: Observer, Replay, Spectator

View File

@@ -1,99 +1,99 @@
CycleProductionBuildings: TAB CycleProductionBuildings: TAB
Description: Next facility Description: Next facility
Types: Production Types: Production, Player, Spectator
Production01: F1 Production01: F1
Description: Slot 01 Description: Slot 01
Types: ProductionSlot Types: ProductionSlot, Player
Production02: F2 Production02: F2
Description: Slot 02 Description: Slot 02
Types: ProductionSlot Types: ProductionSlot, Player
Production03: F3 Production03: F3
Description: Slot 03 Description: Slot 03
Types: ProductionSlot Types: ProductionSlot, Player
Production04: F4 Production04: F4
Description: Slot 04 Description: Slot 04
Types: ProductionSlot Types: ProductionSlot, Player
Production05: F5 Production05: F5
Description: Slot 05 Description: Slot 05
Types: ProductionSlot Types: ProductionSlot, Player
Production06: F6 Production06: F6
Description: Slot 06 Description: Slot 06
Types: ProductionSlot Types: ProductionSlot, Player
Production07: F7 Production07: F7
Description: Slot 07 Description: Slot 07
Types: ProductionSlot Types: ProductionSlot, Player
Production08: F8 Production08: F8
Description: Slot 08 Description: Slot 08
Types: ProductionSlot Types: ProductionSlot, Player
Production09: F9 Production09: F9
Description: Slot 09 Description: Slot 09
Types: ProductionSlot Types: ProductionSlot, Player
Production10: F10 Production10: F10
Description: Slot 10 Description: Slot 10
Types: ProductionSlot Types: ProductionSlot, Player
Production11: F11 Production11: F11
Description: Slot 11 Description: Slot 11
Types: ProductionSlot Types: ProductionSlot, Player
Production12: F12 Production12: F12
Description: Slot 12 Description: Slot 12
Types: ProductionSlot Types: ProductionSlot, Player
Production13: F1 CTRL Production13: F1 CTRL
Description: Slot 13 Description: Slot 13
Types: ProductionSlot Types: ProductionSlot, Player
Production14: F2 CTRL Production14: F2 CTRL
Description: Slot 14 Description: Slot 14
Types: ProductionSlot Types: ProductionSlot, Player
Production15: F3 CTRL Production15: F3 CTRL
Description: Slot 15 Description: Slot 15
Types: ProductionSlot Types: ProductionSlot, Player
Production16: F4 CTRL Production16: F4 CTRL
Description: Slot 16 Description: Slot 16
Types: ProductionSlot Types: ProductionSlot, Player
Production17: F5 CTRL Production17: F5 CTRL
Description: Slot 17 Description: Slot 17
Types: ProductionSlot Types: ProductionSlot, Player
Production18: F6 CTRL Production18: F6 CTRL
Description: Slot 18 Description: Slot 18
Types: ProductionSlot Types: ProductionSlot, Player
Production19: F7 CTRL Production19: F7 CTRL
Description: Slot 19 Description: Slot 19
Types: ProductionSlot Types: ProductionSlot, Player
Production20: F8 CTRL Production20: F8 CTRL
Description: Slot 20 Description: Slot 20
Types: ProductionSlot Types: ProductionSlot, Player
Production21: F9 CTRL Production21: F9 CTRL
Description: Slot 21 Description: Slot 21
Types: ProductionSlot Types: ProductionSlot, Player
Production22: F10 CTRL Production22: F10 CTRL
Description: Slot 22 Description: Slot 22
Types: ProductionSlot Types: ProductionSlot, Player
Production23: F11 CTRL Production23: F11 CTRL
Description: Slot 23 Description: Slot 23
Types: ProductionSlot Types: ProductionSlot, Player
Production24: F12 CTRL Production24: F12 CTRL
Description: Slot 24 Description: Slot 24
Types: ProductionSlot Types: ProductionSlot, Player

View File

@@ -1,7 +1,7 @@
NextProductionTab: PAGEDOWN NextProductionTab: PAGEDOWN
Description: Next tab Description: Next tab
Types: Production Types: Production, Player
PreviousProductionTab: PAGEUP PreviousProductionTab: PAGEUP
Description: Previous tab Description: Previous tab
Types: Production Types: Production, Player

View File

@@ -1,23 +1,23 @@
SupportPower01: SupportPower01:
Description: Slot 01 Description: Slot 01
Types: SupportPower Types: SupportPower, Player
SupportPower02: SupportPower02:
Description: Slot 02 Description: Slot 02
Types: SupportPower Types: SupportPower, Player
SupportPower03: SupportPower03:
Description: Slot 03 Description: Slot 03
Types: SupportPower Types: SupportPower, Player
SupportPower04: SupportPower04:
Description: Slot 04 Description: Slot 04
Types: SupportPower Types: SupportPower, Player
SupportPower05: SupportPower05:
Description: Slot 05 Description: Slot 05
Types: SupportPower Types: SupportPower, Player
SupportPower06: SupportPower06:
Description: Slot 06 Description: Slot 06
Types: SupportPower Types: SupportPower, Player

View File

@@ -1,63 +1,63 @@
MapScrollUp: UP MapScrollUp: UP
Description: Scroll up Description: Scroll up
Types: Viewport Types: Viewport, Player, Spectator
MapScrollDown: DOWN MapScrollDown: DOWN
Description: Scroll down Description: Scroll down
Types: Viewport Types: Viewport, Player, Spectator
MapScrollLeft: LEFT MapScrollLeft: LEFT
Description: Scroll left Description: Scroll left
Types: Viewport Types: Viewport, Player, Spectator
MapScrollRight: RIGHT MapScrollRight: RIGHT
Description: Scroll right Description: Scroll right
Types: Viewport Types: Viewport, Player, Spectator
MapJumpToTopEdge: UP Alt MapJumpToTopEdge: UP Alt
Description: Jump to top edge Description: Jump to top edge
Types: Viewport Types: Viewport, Player, Spectator
MapJumpToBottomEdge: DOWN Alt MapJumpToBottomEdge: DOWN Alt
Description: Jump to bottom edge Description: Jump to bottom edge
Types: Viewport Types: Viewport, Player, Spectator
MapJumpToLeftEdge: LEFT Alt MapJumpToLeftEdge: LEFT Alt
Description: Jump to left edge Description: Jump to left edge
Types: Viewport Types: Viewport, Player, Spectator
MapJumpToRightEdge: RIGHT Alt MapJumpToRightEdge: RIGHT Alt
Description: Jump to right edge Description: Jump to right edge
Types: Viewport Types: Viewport, Player, Spectator
MapBookmarkSave01: Q Ctrl MapBookmarkSave01: Q Ctrl
Description: Record bookmark 1 Description: Record bookmark 1
Types: Viewport Types: Viewport, Player, Spectator
MapBookmarkRestore01: Q Alt MapBookmarkRestore01: Q Alt
Description: Jump to bookmark 1 Description: Jump to bookmark 1
Types: Viewport Types: Viewport, Player, Spectator
MapBookmarkSave02: W Ctrl MapBookmarkSave02: W Ctrl
Description: Record bookmark 2 Description: Record bookmark 2
Types: Viewport Types: Viewport, Player, Spectator
MapBookmarkRestore02: W Alt MapBookmarkRestore02: W Alt
Description: Jump to bookmark 2 Description: Jump to bookmark 2
Types: Viewport Types: Viewport, Player, Spectator
MapBookmarkSave03: E Ctrl MapBookmarkSave03: E Ctrl
Description: Record bookmark 3 Description: Record bookmark 3
Types: Viewport Types: Viewport, Player, Spectator
MapBookmarkRestore03: E Alt MapBookmarkRestore03: E Alt
Description: Jump to bookmark 3 Description: Jump to bookmark 3
Types: Viewport Types: Viewport, Player, Spectator
MapBookmarkSave04: R Ctrl MapBookmarkSave04: R Ctrl
Description: Record bookmark 4 Description: Record bookmark 4
Types: Viewport Types: Viewport, Player, Spectator
MapBookmarkRestore04: R Alt MapBookmarkRestore04: R Alt
Description: Jump to bookmark 4 Description: Jump to bookmark 4
Types: Viewport Types: Viewport, Player, Spectator

View File

@@ -11,6 +11,7 @@ Metrics:
GameStartedColor: FFA500 GameStartedColor: FFA500
HotkeyColor: FFFFFF HotkeyColor: FFFFFF
HotkeyColorDisabled: 808080 HotkeyColorDisabled: 808080
HotkeyColorInvalid: FF0000
HotkeyFont: Regular HotkeyFont: Regular
IncompatibleGameColor: A9A9A9 IncompatibleGameColor: A9A9A9
IncompatibleGameStartedColor: D2691E IncompatibleGameStartedColor: D2691E

View File

@@ -1,31 +1,31 @@
ProductionTypeBuilding: E ProductionTypeBuilding: E
Description: Building Tab Description: Building Tab
Types: Production Types: Production, Player
ProductionTypeUpgrade: R ProductionTypeUpgrade: R
Description: Upgrade Tab Description: Upgrade Tab
Types: Production Types: Production, Player
ProductionTypeInfantry: T ProductionTypeInfantry: T
Description: Infantry Tab Description: Infantry Tab
Types: Production Types: Production, Player
ProductionTypeVehicle: Y ProductionTypeVehicle: Y
Description: Vehicle Tab Description: Vehicle Tab
Types: Production Types: Production, Player
ProductionTypeAircraft: U ProductionTypeAircraft: U
Description: Aircraft Tab Description: Aircraft Tab
Types: Production Types: Production, Player
ProductionTypeTank: I ProductionTypeTank: I
Description: Tank Tab Description: Tank Tab
Types: Production Types: Production, Player
ProductionTypeMerchant: O ProductionTypeMerchant: O
Description: Starport Tab Description: Starport Tab
Types: Production Types: Production, Player
PowerDown: X PowerDown: X
Description: Power-down mode Description: Power-down mode
Types: OrderGenerator Types: OrderGenerator, Player

View File

@@ -109,6 +109,7 @@ ChromeLayout:
common|chrome/replaybrowser.yaml common|chrome/replaybrowser.yaml
common|chrome/gamesave-browser.yaml common|chrome/gamesave-browser.yaml
common|chrome/gamesave-loading.yaml common|chrome/gamesave-loading.yaml
common|chrome/dialog-hotkey.yaml
Weapons: Weapons:
d2k|weapons/debris.yaml d2k|weapons/debris.yaml

View File

@@ -1,27 +1,27 @@
ProductionTypeBuilding: E ProductionTypeBuilding: E
Description: Building Tab Description: Building Tab
Types: Production Types: Production, Player
ProductionTypeDefense: R ProductionTypeDefense: R
Description: Defense Tab Description: Defense Tab
Types: Production Types: Production, Player
ProductionTypeInfantry: T ProductionTypeInfantry: T
Description: Infantry Tab Description: Infantry Tab
Types: Production Types: Production, Player
ProductionTypeVehicle: Y ProductionTypeVehicle: Y
Description: Vehicle Tab Description: Vehicle Tab
Types: Production Types: Production, Player
ProductionTypeAircraft: U ProductionTypeAircraft: U
Description: Aircraft Tab Description: Aircraft Tab
Types: Production Types: Production, Player
ProductionTypeNaval: I ProductionTypeNaval: I
Description: Naval Tab Description: Naval Tab
Types: Production Types: Production, Player
PowerDown: X PowerDown: X
Description: Power-down mode Description: Power-down mode
Types: OrderGenerator Types: OrderGenerator, Player

View File

@@ -124,6 +124,7 @@ ChromeLayout:
common|chrome/confirmation-dialogs.yaml common|chrome/confirmation-dialogs.yaml
common|chrome/editor.yaml common|chrome/editor.yaml
common|chrome/playerprofile.yaml common|chrome/playerprofile.yaml
common|chrome/dialog-hotkey.yaml
Weapons: Weapons:
ra|weapons/explosions.yaml ra|weapons/explosions.yaml

View File

@@ -1,23 +1,23 @@
ProductionTypeBuilding: E ProductionTypeBuilding: E
Description: Building Tab Description: Building Tab
Types: Production Types: Production, Player
ProductionTypeDefense: R ProductionTypeDefense: R
Description: Defense Tab Description: Defense Tab
Types: Production Types: Production, Player
ProductionTypeInfantry: T ProductionTypeInfantry: T
Description: Infantry Tab Description: Infantry Tab
Types: Production Types: Production, Player
ProductionTypeVehicle: Y ProductionTypeVehicle: Y
Description: Vehicle Tab Description: Vehicle Tab
Types: Production Types: Production, Player
ProductionTypeAircraft: U ProductionTypeAircraft: U
Description: Aircraft Tab Description: Aircraft Tab
Types: Production Types: Production, Player
PowerDown: X PowerDown: X
Description: Power-down mode Description: Power-down mode
Types: OrderGenerator Types: OrderGenerator, Player

View File

@@ -172,6 +172,7 @@ ChromeLayout:
common|chrome/missionbrowser.yaml common|chrome/missionbrowser.yaml
common|chrome/confirmation-dialogs.yaml common|chrome/confirmation-dialogs.yaml
common|chrome/editor.yaml common|chrome/editor.yaml
common|chrome/dialog-hotkey.yaml
Voices: Voices:
ts|audio/voices.yaml ts|audio/voices.yaml