Files
OpenRA/OpenRA.FileFormats/Hotkey.cs
Matthias Mailänder a6f06a5dfd fixed broken build palette hotkeys
support modifiers for build palette hotkeys
2013-11-09 12:18:07 +01:00

103 lines
2.3 KiB
C#
Executable File

#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;
namespace OpenRA
{
public struct Hotkey
{
public static Hotkey Invalid = new Hotkey(Keycode.UNKNOWN, Modifiers.None);
public bool IsValid()
{
return Key != Keycode.UNKNOWN;
}
public readonly Keycode Key;
public readonly Modifiers Modifiers;
public static bool TryParse(string s, out Hotkey result)
{
result = Invalid;
var parts = s.Split(' ');
Keycode key;
if (!Enum<Keycode>.TryParse(parts[0], true, out key))
return false;
var mods = Modifiers.None;
if (parts.Length >= 2)
{
var modString = s.Substring(s.IndexOf(' '));
if (!Enum<Modifiers>.TryParse(modString, true, out mods))
return false;
}
result = new Hotkey(key, mods);
return true;
}
public static Hotkey FromKeyInput(KeyInput ki)
{
return new Hotkey(ki.Key, ki.Modifiers);
}
public Hotkey(Keycode virtKey, Modifiers mod)
{
Key = virtKey;
Modifiers = mod;
}
public static bool operator !=(Hotkey a, Hotkey b) { return !(a == b); }
public static bool operator ==(Hotkey a, Hotkey b)
{
// Unknown keys are never equal
if (a.Key == Keycode.UNKNOWN)
return false;
return a.Key == b.Key && a.Modifiers == b.Modifiers;
}
public override int GetHashCode() { return Key.GetHashCode() ^ Modifiers.GetHashCode(); }
public override bool Equals(object obj)
{
if (obj == null)
return false;
return (Hotkey)obj == this;
}
public override string ToString() { return "{0} {1}".F(Key, Modifiers.ToString("F")); }
public string DisplayString()
{
var ret = KeycodeExts.DisplayString(Key);
if (Modifiers.HasModifier(Modifiers.Shift))
ret = "Shift + " + ret;
if (Modifiers.HasModifier(Modifiers.Alt))
ret = "Alt + " + ret;
if (Modifiers.HasModifier(Modifiers.Ctrl))
ret = "Ctrl + " + ret;
if (Modifiers.HasModifier(Modifiers.Meta))
ret = (Platform.CurrentPlatform == PlatformType.OSX ? "Cmd + " : "Meta + ") + ret;
return ret;
}
}
}