Root/src/inputmanager.h

Source at commit cb1b26e5e67d79ca9d03e85db06ec6c2e5b3557a created 8 years 5 months ago.
By Maarten ter Huurne, Quit GMenu2X when window is closed in main screen
1/***************************************************************************
2 * Copyright (C) 2006 by Massimiliano Torromeo *
3 * massimiliano.torromeo@gmail.com *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19 ***************************************************************************/
20
21#ifndef INPUTMANAGER_H
22#define INPUTMANAGER_H
23
24#include <SDL.h>
25#include <string>
26#include <vector>
27
28#define INPUT_KEY_REPEAT_DELAY 250
29
30class GMenu2X;
31class Menu;
32class PowerSaver;
33class InputManager;
34
35enum EventCode {
36    REMOVE_LINKS,
37    OPEN_PACKAGE,
38    OPEN_PACKAGES_FROM_DIR,
39    REPAINT_MENU,
40};
41
42#ifndef SDL_JOYSTICK_DISABLED
43#define AXIS_STATE_POSITIVE 0
44#define AXIS_STATE_NEGATIVE 1
45struct Joystick {
46    SDL_Joystick *joystick;
47    bool axisState[2][2];
48    Uint8 hatState;
49    SDL_TimerID timer;
50    InputManager *inputManager;
51};
52#endif
53
54class InputManager {
55public:
56    enum Button {
57        UP, DOWN, LEFT, RIGHT,
58        ACCEPT, CANCEL,
59        ALTLEFT, ALTRIGHT,
60        MENU, SETTINGS,
61        // Events that are not actually buttons:
62        // (not included in BUTTON_TYPE_SIZE)
63        REPAINT, QUIT,
64    };
65    #define BUTTON_TYPE_SIZE 10
66
67    InputManager(GMenu2X& gmenu2x, PowerSaver& powerSaver);
68    ~InputManager();
69
70    bool init(Menu *menu);
71    Button waitForPressedButton();
72    void repeatRateChanged();
73    Uint32 joystickRepeatCallback(Uint32 timeout, struct Joystick *joystick);
74    bool pollButton(Button *button);
75    bool getButton(Button *button, bool wait);
76
77private:
78    bool readConfFile(const std::string &conffile);
79
80    struct ButtonMapEntry {
81        bool kb_mapped, js_mapped;
82        unsigned int kb_code, js_code;
83    };
84
85    GMenu2X& gmenu2x;
86    Menu *menu;
87    PowerSaver& powerSaver;
88
89    ButtonMapEntry buttonMap[BUTTON_TYPE_SIZE];
90#ifndef SDL_JOYSTICK_DISABLED
91    std::vector<Joystick> joysticks;
92
93    void startTimer(Joystick *joystick);
94    void stopTimer(Joystick *joystick);
95#endif
96};
97
98#endif
99

Archive Download this file



interactive