filename | src/hotkeys.c |
changeset | 1072:d82e04e6d497 |
prev | 1038:f220d18c0615 |
next | 1298:d0eb2307b847 |
author | nkeynes |
date | Tue Jul 21 20:33:21 2009 +1000 (13 years ago) |
permissions | -rw-r--r-- |
last change | Heavy configuration management refactor - Configuration groups now take both an on_change event handler and a default keybinding handler, making most keybinding tasks quite simple - GUI configuration all merged into a unified model, drastically reducing the amount of GUI config code. Bonuses - OSX now has a hotkey preference pane - GTK keybinding editor is much more usable |
file | annotate | diff | log | raw |
nkeynes@1015 | 1 | /** |
nkeynes@1072 | 2 | * $Id$ |
nkeynes@1015 | 3 | * |
nkeynes@1015 | 4 | * Handles hotkeys for pause/continue, save states, quit, etc |
nkeynes@1015 | 5 | * |
nkeynes@1015 | 6 | * Copyright (c) 2009 wahrhaft |
nkeynes@1015 | 7 | * |
nkeynes@1015 | 8 | * This program is free software; you can redistribute it and/or modify |
nkeynes@1015 | 9 | * it under the terms of the GNU General Public License as published by |
nkeynes@1015 | 10 | * the Free Software Foundation; either version 2 of the License, or |
nkeynes@1015 | 11 | * (at your option) any later version. |
nkeynes@1015 | 12 | * |
nkeynes@1015 | 13 | * This program is distributed in the hope that it will be useful, |
nkeynes@1015 | 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
nkeynes@1015 | 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
nkeynes@1015 | 16 | * GNU General Public License for more details. |
nkeynes@1015 | 17 | */ |
nkeynes@1015 | 18 | #include <assert.h> |
nkeynes@1015 | 19 | #include <glib.h> |
nkeynes@1015 | 20 | #include <sys/stat.h> |
nkeynes@1015 | 21 | #include <stdint.h> |
nkeynes@1015 | 22 | #include <stdlib.h> |
nkeynes@1015 | 23 | #include "lxdream.h" |
nkeynes@1015 | 24 | #include "dreamcast.h" |
nkeynes@1015 | 25 | #include "display.h" |
nkeynes@1015 | 26 | #include "hotkeys.h" |
nkeynes@1015 | 27 | #include "gui.h" |
nkeynes@1015 | 28 | #include "config.h" |
nkeynes@1015 | 29 | |
nkeynes@1072 | 30 | static void hotkey_key_callback( void *data, uint32_t value, uint32_t pressure, gboolean isKeyDown ); |
nkeynes@1072 | 31 | static gboolean hotkey_config_changed( void *data, lxdream_config_group_t group, unsigned key, |
nkeynes@1072 | 32 | const gchar *oldval, const gchar *newval ); |
nkeynes@1015 | 33 | |
nkeynes@1072 | 34 | #define TAG_RESUME 0 |
nkeynes@1072 | 35 | #define TAG_STOP 1 |
nkeynes@1072 | 36 | #define TAG_RESET 2 |
nkeynes@1072 | 37 | #define TAG_EXIT 3 |
nkeynes@1072 | 38 | #define TAG_SAVE 4 |
nkeynes@1072 | 39 | #define TAG_LOAD 5 |
nkeynes@1072 | 40 | #define TAG_SELECT(i) (6+(i)) |
nkeynes@1015 | 41 | |
nkeynes@1072 | 42 | struct lxdream_config_group hotkeys_group = { |
nkeynes@1072 | 43 | "hotkeys", input_keygroup_changed, hotkey_key_callback, NULL, { |
nkeynes@1072 | 44 | {"resume", N_("Resume emulation"), CONFIG_TYPE_KEY, NULL, TAG_RESUME }, |
nkeynes@1072 | 45 | {"stop", N_("Stop emulation"), CONFIG_TYPE_KEY, NULL, TAG_STOP }, |
nkeynes@1072 | 46 | {"reset", N_("Reset emulator"), CONFIG_TYPE_KEY, NULL, TAG_RESET }, |
nkeynes@1072 | 47 | {"exit", N_("Exit emulator"), CONFIG_TYPE_KEY, NULL, TAG_EXIT }, |
nkeynes@1072 | 48 | {"save", N_("Save current quick save"), CONFIG_TYPE_KEY, NULL, TAG_SAVE }, |
nkeynes@1072 | 49 | {"load", N_("Load current quick save"), CONFIG_TYPE_KEY, NULL, TAG_LOAD }, |
nkeynes@1072 | 50 | {"state0", N_("Select quick save state 0"), CONFIG_TYPE_KEY, NULL, TAG_SELECT(0) }, |
nkeynes@1072 | 51 | {"state1", N_("Select quick save state 1"), CONFIG_TYPE_KEY, NULL, TAG_SELECT(1) }, |
nkeynes@1072 | 52 | {"state2", N_("Select quick save state 2"), CONFIG_TYPE_KEY, NULL, TAG_SELECT(2) }, |
nkeynes@1072 | 53 | {"state3", N_("Select quick save state 3"), CONFIG_TYPE_KEY, NULL, TAG_SELECT(3) }, |
nkeynes@1072 | 54 | {"state4", N_("Select quick save state 4"), CONFIG_TYPE_KEY, NULL, TAG_SELECT(4) }, |
nkeynes@1072 | 55 | {"state5", N_("Select quick save state 5"), CONFIG_TYPE_KEY, NULL, TAG_SELECT(5) }, |
nkeynes@1072 | 56 | {"state6", N_("Select quick save state 6"), CONFIG_TYPE_KEY, NULL, TAG_SELECT(6) }, |
nkeynes@1072 | 57 | {"state7", N_("Select quick save state 7"), CONFIG_TYPE_KEY, NULL, TAG_SELECT(7) }, |
nkeynes@1072 | 58 | {"state8", N_("Select quick save state 8"), CONFIG_TYPE_KEY, NULL, TAG_SELECT(8) }, |
nkeynes@1072 | 59 | {"state9", N_("Select quick save state 9"), CONFIG_TYPE_KEY, NULL, TAG_SELECT(9) }, |
nkeynes@1072 | 60 | {NULL, CONFIG_TYPE_NONE}} }; |
nkeynes@1015 | 61 | |
nkeynes@1038 | 62 | void hotkeys_init() |
nkeynes@1038 | 63 | { |
nkeynes@1015 | 64 | hotkeys_register_keys(); |
nkeynes@1015 | 65 | } |
nkeynes@1015 | 66 | |
nkeynes@1015 | 67 | void hotkeys_register_keys() |
nkeynes@1015 | 68 | { |
nkeynes@1072 | 69 | input_register_keygroup( &hotkeys_group ); |
nkeynes@1015 | 70 | } |
nkeynes@1015 | 71 | |
nkeynes@1015 | 72 | void hotkeys_unregister_keys() |
nkeynes@1015 | 73 | { |
nkeynes@1072 | 74 | input_unregister_keygroup( &hotkeys_group ); |
nkeynes@1072 | 75 | } |
nkeynes@1072 | 76 | |
nkeynes@1072 | 77 | lxdream_config_group_t hotkeys_get_config() |
nkeynes@1072 | 78 | { |
nkeynes@1072 | 79 | return &hotkeys_group; |
nkeynes@1072 | 80 | } |
nkeynes@1072 | 81 | |
nkeynes@1072 | 82 | static void hotkey_key_callback( void *data, uint32_t value, uint32_t pressure, gboolean isKeyDown ) |
nkeynes@1072 | 83 | { |
nkeynes@1072 | 84 | if( isKeyDown ) { |
nkeynes@1072 | 85 | switch(value) { |
nkeynes@1072 | 86 | case TAG_RESUME: |
nkeynes@1072 | 87 | if( !dreamcast_is_running() ) |
nkeynes@1072 | 88 | gui_do_later(dreamcast_run); |
nkeynes@1072 | 89 | break; |
nkeynes@1072 | 90 | case TAG_STOP: |
nkeynes@1072 | 91 | if( dreamcast_is_running() ) |
nkeynes@1072 | 92 | gui_do_later(dreamcast_stop); |
nkeynes@1072 | 93 | break; |
nkeynes@1072 | 94 | case TAG_RESET: |
nkeynes@1072 | 95 | dreamcast_reset(); |
nkeynes@1072 | 96 | break; |
nkeynes@1072 | 97 | case TAG_EXIT: |
nkeynes@1072 | 98 | dreamcast_shutdown(); |
nkeynes@1072 | 99 | exit(0); |
nkeynes@1072 | 100 | break; |
nkeynes@1072 | 101 | case TAG_SAVE: |
nkeynes@1072 | 102 | dreamcast_quick_save(); |
nkeynes@1072 | 103 | break; |
nkeynes@1072 | 104 | case TAG_LOAD: |
nkeynes@1072 | 105 | dreamcast_quick_load(); |
nkeynes@1072 | 106 | break; |
nkeynes@1072 | 107 | default: |
nkeynes@1072 | 108 | dreamcast_set_quick_state(value- TAG_SELECT(0) ); |
nkeynes@1072 | 109 | break; |
nkeynes@1072 | 110 | } |
nkeynes@1015 | 111 | } |
nkeynes@1015 | 112 | } |
.