summaryrefslogtreecommitdiff
path: root/src/hotkeys.h
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2013-06-15 15:27:33 +0000
committerfrosch <frosch@openttd.org>2013-06-15 15:27:33 +0000
commitd9e9710cb3c4273d3742d0097dbe0b78511a5511 (patch)
treea107a3a43bbd18fb929a32c3298c75bba31ce7b8 /src/hotkeys.h
parentcd0a57fba30a7d365ab84af9846860c64da6b242 (diff)
downloadopenttd-d9e9710cb3c4273d3742d0097dbe0b78511a5511.tar.xz
(svn r25408) -Codechange: Simplify hotkeys by removing unused stuff.
Diffstat (limited to 'src/hotkeys.h')
-rw-r--r--src/hotkeys.h100
1 files changed, 5 insertions, 95 deletions
diff --git a/src/hotkeys.h b/src/hotkeys.h
index b87787e1b..87fafe2a1 100644
--- a/src/hotkeys.h
+++ b/src/hotkeys.h
@@ -19,110 +19,20 @@
* All data for a single hotkey. The name (for saving/loading a configfile),
* a list of keycodes and a number to help identifying this hotkey.
*/
-template<class T>
struct Hotkey {
- typedef void (T::*hotkey_callback)(int);
+ Hotkey(uint16 default_keycode, const char *name, int num);
+ Hotkey(const uint16 *default_keycodes, const char *name, int num);
- /**
- * A wrapper around the callback function. This wrapper is needed because
- * the size of a pointer to a member function depends on the class
- * definition. The possible solutions are to either wrap the callback
- * pointer in a class and dynamically allocate memory for it like we do
- * now or making all class definitions available in hotkeys.cpp.
- */
- struct CallbackWrapper {
- CallbackWrapper(hotkey_callback callback) :
- callback(callback)
- {}
- hotkey_callback callback;
- };
-
- /**
- * Create a new Hotkey object with a single default keycode.
- * @param default_keycode The default keycode for this hotkey.
- * @param name The name of this hotkey.
- * @param num Number of this hotkey, should be unique within the hotkey list.
- * @param callback The function to call if the hotkey is pressed.
- */
- Hotkey(uint16 default_keycode, const char *name, int num, hotkey_callback callback = NULL) :
- name(name),
- num(num)
- {
- if (callback == NULL) {
- this->callback = NULL;
- } else {
- this->callback = new CallbackWrapper(callback);
- }
- if (default_keycode != 0) this->AddKeycode(default_keycode);
- }
-
- /**
- * Create a new Hotkey object with multiple default keycodes.
- * @param default_keycodes An array of default keycodes terminated with 0.
- * @param name The name of this hotkey.
- * @param num Number of this hotkey, should be unique within the hotkey list.
- * @param callback The function to call if the hotkey is pressed.
- */
- Hotkey(const uint16 *default_keycodes, const char *name, int num, hotkey_callback callback = NULL) :
- name(name),
- num(num)
- {
- if (callback == NULL) {
- this->callback = NULL;
- } else {
- this->callback = new CallbackWrapper(callback);
- }
-
- const uint16 *keycode = default_keycodes;
- while (*keycode != 0) {
- this->AddKeycode(*keycode);
- keycode++;
- }
- }
-
- ~Hotkey()
- {
- delete this->callback;
- }
-
- /**
- * Add a keycode to this hotkey, from now that keycode will be matched
- * in addition to any previously added keycodes.
- * @param keycode The keycode to add.
- */
- void AddKeycode(uint16 keycode)
- {
- this->keycodes.Include(keycode);
- }
+ void AddKeycode(uint16 keycode);
const char *name;
int num;
SmallVector<uint16, 1> keycodes;
- CallbackWrapper *callback;
};
-#define HOTKEY_LIST_END(window_class) Hotkey<window_class>((uint16)0, NULL, -1)
+#define HOTKEY_LIST_END Hotkey((uint16)0, NULL, -1)
-/**
- * Check if a keycode is bound to something.
- * @param list The list with hotkeys to check
- * @param keycode The keycode that was pressed
- * @param w The window-pointer to give to the callback function (if any).
- * @param global_only Limit the search to hotkeys defined as 'global'.
- * @return The number of the matching hotkey or -1.
- */
-template<class T>
-int CheckHotkeyMatch(Hotkey<T> *list, uint16 keycode, T *w, bool global_only = false)
-{
- while (list->num != -1) {
- if (list->keycodes.Contains(keycode | WKC_GLOBAL_HOTKEY) || (!global_only && list->keycodes.Contains(keycode))) {
- if (!global_only && list->callback != NULL) (w->*(list->callback->callback))(-1);
- return list->num;
- }
- list++;
- }
- return -1;
-}
+int CheckHotkeyMatch(Hotkey *list, uint16 keycode, bool global_only = false);
bool IsQuitKey(uint16 keycode);