#include #include #include #include "main.h" #include "list.h" #include "myTimer.h" #include "interface.h" #include "hotKey.h" typedef struct hotKey_struct { SDLKey key; bool_t active; void (*handler) (); } hotKey_t; static list_t *listHotKey; static my_time_t lastActive; static hotKey_t *newHotKey(SDLKey key, void (*handler) ()) { hotKey_t *new; new = malloc(sizeof(hotKey_t)); new->key = key; new->active = TRUE; new->handler = handler; return new; } static void destroyHotKey(hotKey_t * hotkey) { free(hotkey); } static hotKey_t *findHotkey(SDLKey key) { int i; for (i = 0; i < listHotKey->count; i++) { hotKey_t *this; this = (hotKey_t *) listHotKey->list[i]; if (this->key == key) { return this; } } return NULL; } void initHotKey() { listHotKey = newList(); lastActive = getMyTime(); } void registerHotKey(SDLKey key, void (*handler) ()) { hotKey_t *hotkey; if (findHotkey(key) != NULL) { assert(!"Conflict with register key"); } hotkey = newHotKey(key, handler); addList(listHotKey, hotkey); } void unregisterHotKey(SDLKey key) { hotKey_t *hotkey; int index; hotkey = findHotkey(key); if (hotkey == NULL) { assert(!"This hotkey not register"); } index = searchListItem(listHotKey, hotkey); assert(index != -1); delListItem(listHotKey, index, destroyHotKey); } void enableHotKey(SDLKey key) { hotKey_t *hotkey; hotkey = findHotkey(key); if (hotkey == NULL) { assert(!"This hotkey not register"); } lastActive = getMyTime(); hotkey->active = TRUE; } void disableHotKey(SDLKey key) { hotKey_t *hotkey; hotkey = findHotkey(key); if (hotkey == NULL) { assert(!"This hotkey not register"); } lastActive = getMyTime(); hotkey->active = FALSE; } void eventHotKey() { my_time_t currentTime; Uint8 *mapa; int i; currentTime = getMyTime(); if (currentTime - lastActive < HOTKEY_ACTIVE_INTERVAL) { return; } mapa = SDL_GetKeyState(NULL); for (i = 0; i < listHotKey->count; i++) { hotKey_t *this; this = (hotKey_t *) listHotKey->list[i]; if (mapa[this->key] == SDL_PRESSED && this->active == TRUE) { lastActive = getMyTime(); //printf("hotKey = %d\n", this->key); this->handler(); } } } void quitHotKey() { destroyListItem(listHotKey, destroyHotKey); }