nkeynes@1015: /** nkeynes@1072: * $Id$ nkeynes@1015: * nkeynes@1015: * Handles hotkeys for pause/continue, save states, quit, etc nkeynes@1015: * nkeynes@1015: * Copyright (c) 2009 wahrhaft nkeynes@1015: * nkeynes@1015: * This program is free software; you can redistribute it and/or modify nkeynes@1015: * it under the terms of the GNU General Public License as published by nkeynes@1015: * the Free Software Foundation; either version 2 of the License, or nkeynes@1015: * (at your option) any later version. nkeynes@1015: * nkeynes@1015: * This program is distributed in the hope that it will be useful, nkeynes@1015: * but WITHOUT ANY WARRANTY; without even the implied warranty of nkeynes@1015: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nkeynes@1015: * GNU General Public License for more details. nkeynes@1015: */ nkeynes@1015: #include nkeynes@1015: #include nkeynes@1015: #include nkeynes@1015: #include nkeynes@1015: #include nkeynes@1015: #include "lxdream.h" nkeynes@1015: #include "dreamcast.h" nkeynes@1015: #include "display.h" nkeynes@1015: #include "hotkeys.h" nkeynes@1015: #include "gui.h" nkeynes@1015: #include "config.h" nkeynes@1015: nkeynes@1072: static void hotkey_key_callback( void *data, uint32_t value, uint32_t pressure, gboolean isKeyDown ); nkeynes@1072: static gboolean hotkey_config_changed( void *data, lxdream_config_group_t group, unsigned key, nkeynes@1072: const gchar *oldval, const gchar *newval ); nkeynes@1015: nkeynes@1072: #define TAG_RESUME 0 nkeynes@1072: #define TAG_STOP 1 nkeynes@1072: #define TAG_RESET 2 nkeynes@1072: #define TAG_EXIT 3 nkeynes@1072: #define TAG_SAVE 4 nkeynes@1072: #define TAG_LOAD 5 nkeynes@1072: #define TAG_SELECT(i) (6+(i)) nkeynes@1015: nkeynes@1072: struct lxdream_config_group hotkeys_group = { nkeynes@1072: "hotkeys", input_keygroup_changed, hotkey_key_callback, NULL, { nkeynes@1072: {"resume", N_("Resume emulation"), CONFIG_TYPE_KEY, NULL, TAG_RESUME }, nkeynes@1072: {"stop", N_("Stop emulation"), CONFIG_TYPE_KEY, NULL, TAG_STOP }, nkeynes@1072: {"reset", N_("Reset emulator"), CONFIG_TYPE_KEY, NULL, TAG_RESET }, nkeynes@1072: {"exit", N_("Exit emulator"), CONFIG_TYPE_KEY, NULL, TAG_EXIT }, nkeynes@1072: {"save", N_("Save current quick save"), CONFIG_TYPE_KEY, NULL, TAG_SAVE }, nkeynes@1072: {"load", N_("Load current quick save"), CONFIG_TYPE_KEY, NULL, TAG_LOAD }, nkeynes@1072: {"state0", N_("Select quick save state 0"), CONFIG_TYPE_KEY, NULL, TAG_SELECT(0) }, nkeynes@1072: {"state1", N_("Select quick save state 1"), CONFIG_TYPE_KEY, NULL, TAG_SELECT(1) }, nkeynes@1072: {"state2", N_("Select quick save state 2"), CONFIG_TYPE_KEY, NULL, TAG_SELECT(2) }, nkeynes@1072: {"state3", N_("Select quick save state 3"), CONFIG_TYPE_KEY, NULL, TAG_SELECT(3) }, nkeynes@1072: {"state4", N_("Select quick save state 4"), CONFIG_TYPE_KEY, NULL, TAG_SELECT(4) }, nkeynes@1072: {"state5", N_("Select quick save state 5"), CONFIG_TYPE_KEY, NULL, TAG_SELECT(5) }, nkeynes@1072: {"state6", N_("Select quick save state 6"), CONFIG_TYPE_KEY, NULL, TAG_SELECT(6) }, nkeynes@1072: {"state7", N_("Select quick save state 7"), CONFIG_TYPE_KEY, NULL, TAG_SELECT(7) }, nkeynes@1072: {"state8", N_("Select quick save state 8"), CONFIG_TYPE_KEY, NULL, TAG_SELECT(8) }, nkeynes@1072: {"state9", N_("Select quick save state 9"), CONFIG_TYPE_KEY, NULL, TAG_SELECT(9) }, nkeynes@1072: {NULL, CONFIG_TYPE_NONE}} }; nkeynes@1015: nkeynes@1038: void hotkeys_init() nkeynes@1038: { nkeynes@1015: hotkeys_register_keys(); nkeynes@1015: } nkeynes@1015: nkeynes@1015: void hotkeys_register_keys() nkeynes@1015: { nkeynes@1072: input_register_keygroup( &hotkeys_group ); nkeynes@1015: } nkeynes@1015: nkeynes@1015: void hotkeys_unregister_keys() nkeynes@1015: { nkeynes@1072: input_unregister_keygroup( &hotkeys_group ); nkeynes@1072: } nkeynes@1072: nkeynes@1072: lxdream_config_group_t hotkeys_get_config() nkeynes@1072: { nkeynes@1072: return &hotkeys_group; nkeynes@1072: } nkeynes@1072: nkeynes@1072: static void hotkey_key_callback( void *data, uint32_t value, uint32_t pressure, gboolean isKeyDown ) nkeynes@1072: { nkeynes@1072: if( isKeyDown ) { nkeynes@1072: switch(value) { nkeynes@1072: case TAG_RESUME: nkeynes@1072: if( !dreamcast_is_running() ) nkeynes@1072: gui_do_later(dreamcast_run); nkeynes@1072: break; nkeynes@1072: case TAG_STOP: nkeynes@1072: if( dreamcast_is_running() ) nkeynes@1072: gui_do_later(dreamcast_stop); nkeynes@1072: break; nkeynes@1072: case TAG_RESET: nkeynes@1072: dreamcast_reset(); nkeynes@1072: break; nkeynes@1072: case TAG_EXIT: nkeynes@1072: dreamcast_shutdown(); nkeynes@1072: exit(0); nkeynes@1072: break; nkeynes@1072: case TAG_SAVE: nkeynes@1072: dreamcast_quick_save(); nkeynes@1072: break; nkeynes@1072: case TAG_LOAD: nkeynes@1072: dreamcast_quick_load(); nkeynes@1072: break; nkeynes@1072: default: nkeynes@1072: dreamcast_set_quick_state(value- TAG_SELECT(0) ); nkeynes@1072: break; nkeynes@1072: } nkeynes@1015: } nkeynes@1015: }