Migrate ButtonWidget to NamedHotkey.
This commit is contained in:
@@ -19,14 +19,8 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
{
|
||||
public readonly string TooltipContainer;
|
||||
public readonly string TooltipTemplate = "BUTTON_TOOLTIP";
|
||||
public Func<ButtonWidget, Hotkey> GetKey = _ => Hotkey.Invalid;
|
||||
|
||||
public Hotkey Key
|
||||
{
|
||||
get { return GetKey(this); }
|
||||
set { GetKey = _ => value; }
|
||||
}
|
||||
|
||||
public NamedHotkey Key = new NamedHotkey();
|
||||
public bool DisableKeyRepeat = false;
|
||||
public bool DisableKeySound = false;
|
||||
|
||||
@@ -136,7 +130,7 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
|
||||
public override bool HandleKeyPress(KeyInput e)
|
||||
{
|
||||
if (Hotkey.FromKeyInput(e) != Key || e.Event != KeyInputEvent.Down || (DisableKeyRepeat && e.IsRepeat))
|
||||
if (Hotkey.FromKeyInput(e) != Key.GetValue() || e.Event != KeyInputEvent.Down || (DisableKeyRepeat && e.IsRepeat))
|
||||
return false;
|
||||
|
||||
if (!IsDisabled())
|
||||
|
||||
@@ -23,17 +23,18 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var font = Game.Renderer.Fonts[label.Font];
|
||||
var text = button.GetTooltipText();
|
||||
var labelWidth = font.Measure(text).X;
|
||||
var key = button.Key.GetValue();
|
||||
|
||||
label.GetText = () => text;
|
||||
label.Bounds.Width = labelWidth;
|
||||
widget.Bounds.Width = 2 * label.Bounds.X + labelWidth;
|
||||
|
||||
if (button.Key.IsValid())
|
||||
if (key.IsValid())
|
||||
{
|
||||
var hotkey = widget.Get<LabelWidget>("HOTKEY");
|
||||
hotkey.Visible = true;
|
||||
|
||||
var hotkeyLabel = "({0})".F(button.Key.DisplayString());
|
||||
var hotkeyLabel = "({0})".F(key.DisplayString());
|
||||
hotkey.GetText = () => hotkeyLabel;
|
||||
hotkey.Bounds.X = labelWidth + 2 * label.Bounds.X;
|
||||
|
||||
|
||||
@@ -25,17 +25,18 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var font = Game.Renderer.Fonts[label.Font];
|
||||
var text = button.GetTooltipText();
|
||||
var labelWidth = font.Measure(text).X;
|
||||
var key = button.Key.GetValue();
|
||||
|
||||
label.GetText = () => text;
|
||||
label.Bounds.Width = labelWidth;
|
||||
widget.Bounds.Width = 2 * label.Bounds.X + labelWidth;
|
||||
|
||||
if (button.Key.IsValid())
|
||||
if (key.IsValid())
|
||||
{
|
||||
var hotkey = widget.Get<LabelWidget>("HOTKEY");
|
||||
hotkey.Visible = true;
|
||||
|
||||
var hotkeyLabel = "({0})".F(button.Key.DisplayString());
|
||||
var hotkeyLabel = "({0})".F(key.DisplayString());
|
||||
hotkey.GetText = () => hotkeyLabel;
|
||||
hotkey.Bounds.X = labelWidth + 2 * label.Bounds.X;
|
||||
|
||||
|
||||
@@ -62,7 +62,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var options = worldRenderer.Viewport.AvailableZoomSteps;
|
||||
zoomDropdown.OnMouseDown = _ => zoomDropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 150, options, setupItem);
|
||||
zoomDropdown.GetText = () => zoomDropdown.SelectedItem;
|
||||
zoomDropdown.GetKey = _ => Game.Settings.Keys.TogglePixelDoubleKey;
|
||||
zoomDropdown.OnKeyPress = e =>
|
||||
{
|
||||
var key = Hotkey.FromKeyInput(e);
|
||||
|
||||
@@ -43,21 +43,11 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
palette.PickUpCompletedBuilding();
|
||||
};
|
||||
|
||||
Func<ButtonWidget, Hotkey> getKey = _ => Hotkey.Invalid;
|
||||
if (!string.IsNullOrEmpty(button.HotkeyName))
|
||||
{
|
||||
var ks = Game.Settings.Keys;
|
||||
var field = ks.GetType().GetField(button.HotkeyName);
|
||||
if (field != null)
|
||||
getKey = _ => (Hotkey)field.GetValue(ks);
|
||||
}
|
||||
|
||||
button.IsDisabled = () => !queues.Any(q => q.BuildableItems().Any());
|
||||
button.OnMouseUp = mi => selectTab(mi.Modifiers.HasModifier(Modifiers.Shift));
|
||||
button.OnKeyPress = e => selectTab(e.Modifiers.HasModifier(Modifiers.Shift));
|
||||
button.OnClick = () => selectTab(false);
|
||||
button.IsHighlighted = () => queues.Contains(palette.CurrentQueue);
|
||||
button.GetKey = getKey;
|
||||
|
||||
var chromeName = button.ProductionGroup.ToLowerInvariant();
|
||||
var icon = button.Get<ImageWidget>("ICON");
|
||||
|
||||
@@ -43,14 +43,12 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
public CommandBarLogic(Widget widget, World world)
|
||||
{
|
||||
this.world = world;
|
||||
var ks = Game.Settings.Keys;
|
||||
|
||||
var attackMoveButton = widget.GetOrNull<ButtonWidget>("ATTACK_MOVE");
|
||||
if (attackMoveButton != null)
|
||||
{
|
||||
BindButtonIcon(attackMoveButton);
|
||||
|
||||
attackMoveButton.GetKey = _ => ks.AttackMoveKey;
|
||||
attackMoveButton.IsDisabled = () => { UpdateStateIfNecessary(); return attackMoveDisabled; };
|
||||
attackMoveButton.IsHighlighted = () => world.OrderGenerator is GenericSelectTarget
|
||||
&& ((GenericSelectTarget)world.OrderGenerator).OrderName == "AttackMove";
|
||||
@@ -108,7 +106,6 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
{
|
||||
BindButtonIcon(guardButton);
|
||||
|
||||
guardButton.GetKey = _ => ks.GuardKey;
|
||||
guardButton.IsDisabled = () => { UpdateStateIfNecessary(); return guardDisabled; };
|
||||
guardButton.IsHighlighted = () => world.OrderGenerator is GenericSelectTarget
|
||||
&& ((GenericSelectTarget)world.OrderGenerator).OrderName == "Guard";
|
||||
@@ -134,7 +131,6 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
{
|
||||
BindButtonIcon(scatterButton);
|
||||
|
||||
scatterButton.GetKey = _ => ks.ScatterKey;
|
||||
scatterButton.IsDisabled = () => { UpdateStateIfNecessary(); return scatterDisabled; };
|
||||
scatterButton.IsHighlighted = () => scatterHighlighted > 0;
|
||||
scatterButton.OnClick = () => PerformKeyboardOrderOnSelection(a => new Order("Scatter", a, false));
|
||||
@@ -146,7 +142,6 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
{
|
||||
BindButtonIcon(deployButton);
|
||||
|
||||
deployButton.GetKey = _ => ks.DeployKey;
|
||||
deployButton.IsDisabled = () => { UpdateStateIfNecessary(); return !selectedDeploys.Any(Exts.IsTraitEnabled); };
|
||||
deployButton.IsHighlighted = () => deployHighlighted > 0;
|
||||
deployButton.OnClick = PerformDeployOrderOnSelection;
|
||||
@@ -158,7 +153,6 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
{
|
||||
BindButtonIcon(stopButton);
|
||||
|
||||
stopButton.GetKey = _ => ks.StopKey;
|
||||
stopButton.IsDisabled = () => { UpdateStateIfNecessary(); return stopDisabled; };
|
||||
stopButton.IsHighlighted = () => stopHighlighted > 0;
|
||||
stopButton.OnClick = () => PerformKeyboardOrderOnSelection(a => new Order("Stop", a, false));
|
||||
|
||||
@@ -21,10 +21,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
{
|
||||
var sell = widget as ButtonWidget;
|
||||
if (sell != null)
|
||||
{
|
||||
sell.GetKey = _ => Game.Settings.Keys.SellKey;
|
||||
OrderButtonsChromeUtils.BindOrderButton<SellOrderGenerator>(world, sell, "sell");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,10 +32,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
{
|
||||
var repair = widget as ButtonWidget;
|
||||
if (repair != null)
|
||||
{
|
||||
repair.GetKey = _ => Game.Settings.Keys.RepairKey;
|
||||
OrderButtonsChromeUtils.BindOrderButton<RepairOrderGenerator>(world, repair, "repair");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,10 +43,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
{
|
||||
var power = widget as ButtonWidget;
|
||||
if (power != null)
|
||||
{
|
||||
power.GetKey = _ => Game.Settings.Keys.PowerDownKey;
|
||||
OrderButtonsChromeUtils.BindOrderButton<PowerDownOrderGenerator>(world, power, "power");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,10 +54,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
{
|
||||
var beacon = widget as ButtonWidget;
|
||||
if (beacon != null)
|
||||
{
|
||||
beacon.GetKey = _ => Game.Settings.Keys.PlaceBeaconKey;
|
||||
OrderButtonsChromeUtils.BindOrderButton<BeaconOrderGenerator>(world, beacon, "beacon");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -34,20 +34,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
tabs.PickUpCompletedBuilding();
|
||||
};
|
||||
|
||||
Func<ButtonWidget, Hotkey> getKey = _ => Hotkey.Invalid;
|
||||
if (!string.IsNullOrEmpty(button.HotkeyName))
|
||||
{
|
||||
var ks = Game.Settings.Keys;
|
||||
var field = ks.GetType().GetField(button.HotkeyName);
|
||||
if (field != null)
|
||||
getKey = _ => (Hotkey)field.GetValue(ks);
|
||||
}
|
||||
|
||||
button.IsDisabled = () => tabs.Groups[button.ProductionGroup].Tabs.Count == 0;
|
||||
button.OnMouseUp = mi => selectTab(mi.Modifiers.HasModifier(Modifiers.Shift));
|
||||
button.OnKeyPress = e => selectTab(e.Modifiers.HasModifier(Modifiers.Shift));
|
||||
button.IsHighlighted = () => tabs.QueueGroup == button.ProductionGroup;
|
||||
button.GetKey = getKey;
|
||||
|
||||
var chromeName = button.ProductionGroup.ToLowerInvariant();
|
||||
var icon = button.Get<ImageWidget>("ICON");
|
||||
|
||||
@@ -46,18 +46,15 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var originalTimestep = world.Timestep;
|
||||
|
||||
var pauseButton = widget.Get<ButtonWidget>("BUTTON_PAUSE");
|
||||
pauseButton.GetKey = _ => Game.Settings.Keys.PauseKey;
|
||||
pauseButton.IsVisible = () => world.Timestep != 0 && orderManager.NetFrameNumber < replayNetTicks;
|
||||
pauseButton.OnClick = () => world.Timestep = 0;
|
||||
|
||||
var playButton = widget.Get<ButtonWidget>("BUTTON_PLAY");
|
||||
playButton.GetKey = _ => Game.Settings.Keys.PauseKey;
|
||||
playButton.IsVisible = () => world.Timestep == 0 || orderManager.NetFrameNumber >= replayNetTicks;
|
||||
playButton.OnClick = () => world.Timestep = (int)Math.Ceiling(originalTimestep * multipliers[speed]);
|
||||
playButton.IsDisabled = () => orderManager.NetFrameNumber >= replayNetTicks;
|
||||
|
||||
var slowButton = widget.Get<ButtonWidget>("BUTTON_SLOW");
|
||||
slowButton.GetKey = _ => Game.Settings.Keys.ReplaySpeedSlowKey;
|
||||
slowButton.IsHighlighted = () => speed == PlaybackSpeed.Slow;
|
||||
slowButton.IsDisabled = () => orderManager.NetFrameNumber >= replayNetTicks;
|
||||
slowButton.OnClick = () =>
|
||||
@@ -68,7 +65,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
};
|
||||
|
||||
var normalSpeedButton = widget.Get<ButtonWidget>("BUTTON_REGULAR");
|
||||
normalSpeedButton.GetKey = _ => Game.Settings.Keys.ReplaySpeedRegularKey;
|
||||
normalSpeedButton.IsHighlighted = () => speed == PlaybackSpeed.Regular;
|
||||
normalSpeedButton.IsDisabled = () => orderManager.NetFrameNumber >= replayNetTicks;
|
||||
normalSpeedButton.OnClick = () =>
|
||||
@@ -79,7 +75,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
};
|
||||
|
||||
var fastButton = widget.Get<ButtonWidget>("BUTTON_FAST");
|
||||
fastButton.GetKey = _ => Game.Settings.Keys.ReplaySpeedFastKey;
|
||||
fastButton.IsHighlighted = () => speed == PlaybackSpeed.Fast;
|
||||
fastButton.IsDisabled = () => orderManager.NetFrameNumber >= replayNetTicks;
|
||||
fastButton.OnClick = () =>
|
||||
@@ -90,7 +85,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
};
|
||||
|
||||
var maximumButton = widget.Get<ButtonWidget>("BUTTON_MAXIMUM");
|
||||
maximumButton.GetKey = _ => Game.Settings.Keys.ReplaySpeedMaxKey;
|
||||
maximumButton.IsHighlighted = () => speed == PlaybackSpeed.Maximum;
|
||||
maximumButton.IsDisabled = () => orderManager.NetFrameNumber >= replayNetTicks;
|
||||
maximumButton.OnClick = () =>
|
||||
|
||||
@@ -27,32 +27,30 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
public StanceSelectorLogic(Widget widget, World world)
|
||||
{
|
||||
this.world = world;
|
||||
var ks = Game.Settings.Keys;
|
||||
|
||||
var holdFireButton = widget.GetOrNull<ButtonWidget>("STANCE_HOLDFIRE");
|
||||
if (holdFireButton != null)
|
||||
BindStanceButton(holdFireButton, UnitStance.HoldFire, _ => ks.StanceHoldFireKey);
|
||||
BindStanceButton(holdFireButton, UnitStance.HoldFire);
|
||||
|
||||
var returnFireButton = widget.GetOrNull<ButtonWidget>("STANCE_RETURNFIRE");
|
||||
if (returnFireButton != null)
|
||||
BindStanceButton(returnFireButton, UnitStance.ReturnFire, _ => ks.StanceReturnFireKey);
|
||||
BindStanceButton(returnFireButton, UnitStance.ReturnFire);
|
||||
|
||||
var defendButton = widget.GetOrNull<ButtonWidget>("STANCE_DEFEND");
|
||||
if (defendButton != null)
|
||||
BindStanceButton(defendButton, UnitStance.Defend, _ => ks.StanceDefendKey);
|
||||
BindStanceButton(defendButton, UnitStance.Defend);
|
||||
|
||||
var attackAnythingButton = widget.GetOrNull<ButtonWidget>("STANCE_ATTACKANYTHING");
|
||||
if (attackAnythingButton != null)
|
||||
BindStanceButton(attackAnythingButton, UnitStance.AttackAnything, _ => ks.StanceAttackAnythingKey);
|
||||
BindStanceButton(attackAnythingButton, UnitStance.AttackAnything);
|
||||
}
|
||||
|
||||
void BindStanceButton(ButtonWidget button, UnitStance stance, Func<ButtonWidget, Hotkey> getHotkey)
|
||||
void BindStanceButton(ButtonWidget button, UnitStance stance)
|
||||
{
|
||||
var icon = button.Get<ImageWidget>("ICON");
|
||||
icon.GetImageName = () => button.IsDisabled() ? icon.ImageName + "-disabled" :
|
||||
button.IsHighlighted() ? icon.ImageName + "-active" : icon.ImageName;
|
||||
|
||||
button.GetKey = getHotkey;
|
||||
button.IsDisabled = () => { UpdateStateIfNecessary(); return !actorStances.Any(); };
|
||||
button.IsHighlighted = () => actorStances.Any(
|
||||
at => !at.Trait.IsTraitDisabled && at.Trait.PredictedStance == stance);
|
||||
|
||||
@@ -14,7 +14,6 @@ namespace OpenRA.Mods.Common.Widgets
|
||||
public class ProductionTypeButtonWidget : ButtonWidget
|
||||
{
|
||||
public readonly string ProductionGroup;
|
||||
public readonly string HotkeyName;
|
||||
|
||||
[ObjectCreator.UseCtor]
|
||||
public ProductionTypeButtonWidget(ModData modData)
|
||||
|
||||
Reference in New Issue
Block a user