1
0
mirror of git://projects.qi-hardware.com/gmenu2x.git synced 2024-07-04 21:05:27 +03:00
gmenu2x/src/inputmanager.h
Nebuleon Fumika 9c4e97c839 Make the button repeat rate (after the first repetition) a user setting.
This allows for faster scrolling between section links, in file and directory
selectors, and in manuals, without repeatedly pressing buttons.

The setting's unit is repetitions per second. Its default value is set to
10, and anything between 0 (disabled) and 20 (50 ms) is acceptable.

Grabbing &(instance of GMenu2X).confInt["buttonRepeatRate"] is unsafe, because
the storage for the slot may move as the slot is deleted or added. Instead, a
callback jumps back into the context of an InputManager so the value can be
read from a GMenu2X object's configuration.

A GMenu2X object is also passed to InputManager::init.
2014-07-19 00:43:05 +02:00

95 lines
2.8 KiB
C++

/***************************************************************************
* Copyright (C) 2006 by Massimiliano Torromeo *
* massimiliano.torromeo@gmail.com *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#ifndef INPUTMANAGER_H
#define INPUTMANAGER_H
#include <SDL.h>
#include <string>
#include <vector>
#define INPUT_KEY_REPEAT_DELAY 250
class GMenu2X;
class Menu;
class InputManager;
enum EventCode {
REMOVE_LINKS,
OPEN_PACKAGE,
OPEN_PACKAGES_FROM_DIR,
REPAINT_MENU,
};
#ifndef SDL_JOYSTICK_DISABLED
#define AXIS_STATE_POSITIVE 0
#define AXIS_STATE_NEGATIVE 1
struct Joystick {
SDL_Joystick *joystick;
bool axisState[2][2];
Uint8 hatState;
SDL_TimerID timer;
InputManager *inputManager;
};
#endif
class InputManager {
public:
enum Button {
UP, DOWN, LEFT, RIGHT,
ACCEPT, CANCEL,
ALTLEFT, ALTRIGHT,
MENU, SETTINGS,
REPAINT,
};
#define BUTTON_TYPE_SIZE 10
InputManager();
~InputManager();
void init(GMenu2X *gmenu2x, const std::string &conffile, Menu *menu);
Button waitForPressedButton();
void repeatRateChanged();
Uint32 joystickRepeatCallback(Uint32 timeout, struct Joystick *joystick);
bool pollButton(Button *button);
bool getButton(Button *button, bool wait);
private:
void readConfFile(const std::string &conffile);
struct ButtonMapEntry {
bool kb_mapped, js_mapped;
unsigned int kb_code, js_code;
};
GMenu2X *gmenu2x;
Menu *menu;
ButtonMapEntry buttonMap[BUTTON_TYPE_SIZE];
#ifndef SDL_JOYSTICK_DISABLED
std::vector<Joystick> joysticks;
void startTimer(Joystick *joystick);
void stopTimer(Joystick *joystick);
#endif
};
#endif