mirror of
https://github.com/vcmi/vcmi.git
synced 2025-11-27 22:49:25 +02:00
key name capture
This commit is contained in:
@@ -262,7 +262,6 @@
|
||||
"vcmi.shortcuts.button.hover" : "Shortcuts",
|
||||
"vcmi.shortcuts.button.help" : "{Shortcuts}\n\nShow menu for viewing and adjusting shortcuts and keybindings",
|
||||
"vcmi.shortcuts.editButton.help" : "Edit key binding",
|
||||
"vcmi.shortcuts.editButton.popup" : "You want to change keybinding for {%s}?\n\nSadly setting the key binding here is not supported yet. Bindings has to configured over {shortcutsConfig.json} in config folder. You need to add the key {%s}.",
|
||||
"vcmi.shortcuts.group.keyboard" : "Keyboard",
|
||||
"vcmi.shortcuts.group.joystickAxes" : "Joystick Axes",
|
||||
"vcmi.shortcuts.group.joystickButtons" : "Joystick Buttons",
|
||||
|
||||
@@ -262,7 +262,6 @@
|
||||
"vcmi.shortcuts.button.hover" : "Tastenkürzel",
|
||||
"vcmi.shortcuts.button.help" : "{Tastenkürzel}\n\nMenü zum Anzeigen und Anpassen von Tastenkürzeln und Tastenbelegungen anzeigen",
|
||||
"vcmi.shortcuts.editButton.help" : "Tastenbelegung bearbeiten",
|
||||
"vcmi.shortcuts.editButton.popup" : "Möchten Sie die Tastenbelegung für {%s} ändern?\n\nLeider wird das Festlegen der Tastenbelegung hier noch nicht unterstützt. Die Belegung muss über die {shortcutsConfig.json} im Konfigurationsordner eingestellt werden. Sie müssen den Schlüssel {%s} hinzufügen.",
|
||||
"vcmi.shortcuts.group.keyboard" : "Tastatur",
|
||||
"vcmi.shortcuts.group.joystickAxes" : "Joystick-Achsen",
|
||||
"vcmi.shortcuts.group.joystickButtons" : "Joystick-Tasten",
|
||||
|
||||
@@ -140,12 +140,13 @@ double InputSourceGameController::getRealAxisValue(int value) const
|
||||
return clampedValue;
|
||||
}
|
||||
|
||||
void InputSourceGameController::dispatchAxisShortcuts(const std::vector<EShortcut> & shortcutsVector, SDL_GameControllerAxis axisID, int axisValue)
|
||||
void InputSourceGameController::dispatchAxisShortcuts(const std::vector<EShortcut> & shortcutsVector, SDL_GameControllerAxis axisID, int axisValue, std::string axisName)
|
||||
{
|
||||
if(getRealAxisValue(axisValue) > configTriggerThreshold)
|
||||
{
|
||||
if(!pressedAxes.count(axisID))
|
||||
{
|
||||
ENGINE->events().dispatchKeyPressed(axisName);
|
||||
ENGINE->events().dispatchShortcutPressed(shortcutsVector);
|
||||
pressedAxes.insert(axisID);
|
||||
}
|
||||
@@ -154,6 +155,7 @@ void InputSourceGameController::dispatchAxisShortcuts(const std::vector<EShortcu
|
||||
{
|
||||
if(pressedAxes.count(axisID))
|
||||
{
|
||||
ENGINE->events().dispatchKeyReleased(axisName);
|
||||
ENGINE->events().dispatchShortcutReleased(shortcutsVector);
|
||||
pressedAxes.erase(axisID);
|
||||
}
|
||||
@@ -189,7 +191,7 @@ void InputSourceGameController::handleEventAxisMotion(const SDL_ControllerAxisEv
|
||||
}
|
||||
}
|
||||
|
||||
dispatchAxisShortcuts(buttonActions, axisID, axis.value);
|
||||
dispatchAxisShortcuts(buttonActions, axisID, axis.value, axisName);
|
||||
}
|
||||
|
||||
void InputSourceGameController::tryToConvertCursor()
|
||||
@@ -208,6 +210,8 @@ void InputSourceGameController::handleEventButtonDown(const SDL_ControllerButton
|
||||
{
|
||||
std::string buttonName = SDL_GameControllerGetStringForButton(static_cast<SDL_GameControllerButton>(button.button));
|
||||
const auto & shortcutsVector = ENGINE->shortcuts().translateJoystickButton(buttonName);
|
||||
|
||||
ENGINE->events().dispatchKeyPressed(buttonName);
|
||||
ENGINE->events().dispatchShortcutPressed(shortcutsVector);
|
||||
}
|
||||
|
||||
@@ -215,6 +219,7 @@ void InputSourceGameController::handleEventButtonUp(const SDL_ControllerButtonEv
|
||||
{
|
||||
std::string buttonName = SDL_GameControllerGetStringForButton(static_cast<SDL_GameControllerButton>(button.button));
|
||||
const auto & shortcutsVector = ENGINE->shortcuts().translateJoystickButton(buttonName);
|
||||
ENGINE->events().dispatchKeyReleased(buttonName);
|
||||
ENGINE->events().dispatchShortcutReleased(shortcutsVector);
|
||||
}
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ class InputSourceGameController
|
||||
void openGameController(int index);
|
||||
int getJoystickIndex(SDL_GameController * controller);
|
||||
double getRealAxisValue(int value) const;
|
||||
void dispatchAxisShortcuts(const std::vector<EShortcut> & shortcutsVector, SDL_GameControllerAxis axisID, int axisValue);
|
||||
void dispatchAxisShortcuts(const std::vector<EShortcut> & shortcutsVector, SDL_GameControllerAxis axisID, int axisValue, std::string axisName);
|
||||
void tryToConvertCursor();
|
||||
void doCursorMove(int deltaX, int deltaY);
|
||||
int getMoveDis(float planDis);
|
||||
|
||||
@@ -88,6 +88,8 @@ void InputSourceKeyboard::handleEventKeyDown(const SDL_KeyboardEvent & key)
|
||||
|
||||
auto shortcutsVector = ENGINE->shortcuts().translateKeycode(keyName);
|
||||
|
||||
ENGINE->events().dispatchKeyPressed(keyName);
|
||||
|
||||
if (vstd::contains(shortcutsVector, EShortcut::MAIN_MENU_LOBBY))
|
||||
ENGINE->user().onGlobalLobbyInterfaceActivated();
|
||||
|
||||
@@ -143,6 +145,8 @@ void InputSourceKeyboard::handleEventKeyUp(const SDL_KeyboardEvent & key)
|
||||
|
||||
auto shortcutsVector = ENGINE->shortcuts().translateKeycode(keyName);
|
||||
|
||||
ENGINE->events().dispatchKeyReleased(keyName);
|
||||
|
||||
ENGINE->events().dispatchShortcutReleased(shortcutsVector);
|
||||
}
|
||||
|
||||
|
||||
@@ -43,6 +43,7 @@ void EventDispatcher::processLists(ui16 activityFlag, const Functor & cb)
|
||||
processList(AEventsReceiver::TEXTINPUT, textInterested);
|
||||
processList(AEventsReceiver::GESTURE, panningInterested);
|
||||
processList(AEventsReceiver::INPUT_MODE_CHANGE, inputModeChangeInterested);
|
||||
processList(AEventsReceiver::KEY_NAME, keyNameInterested);
|
||||
}
|
||||
|
||||
void EventDispatcher::activateElement(AEventsReceiver * elem, ui16 activityFlag)
|
||||
@@ -133,6 +134,22 @@ void EventDispatcher::dispatchShortcutReleased(const std::vector<EShortcut> & sh
|
||||
}
|
||||
}
|
||||
|
||||
void EventDispatcher::dispatchKeyPressed(const std::string & keyName)
|
||||
{
|
||||
EventReceiversList miCopy = keyNameInterested;
|
||||
|
||||
for(auto & i : miCopy)
|
||||
i->keyPressed(keyName);
|
||||
}
|
||||
|
||||
void EventDispatcher::dispatchKeyReleased(const std::string & keyName)
|
||||
{
|
||||
EventReceiversList miCopy = keyNameInterested;
|
||||
|
||||
for(auto & i : miCopy)
|
||||
i->keyReleased(keyName);
|
||||
}
|
||||
|
||||
void EventDispatcher::dispatchMouseDoubleClick(const Point & position, int tolerance)
|
||||
{
|
||||
handleDoubleButtonClick(position, tolerance);
|
||||
|
||||
@@ -37,6 +37,7 @@ class EventDispatcher
|
||||
EventReceiversList textInterested;
|
||||
EventReceiversList panningInterested;
|
||||
EventReceiversList inputModeChangeInterested;
|
||||
EventReceiversList keyNameInterested;
|
||||
|
||||
void handleLeftButtonClick(const Point & position, int tolerance, bool isPressed);
|
||||
void handleDoubleButtonClick(const Point & position, int tolerance);
|
||||
@@ -59,6 +60,10 @@ public:
|
||||
void dispatchShortcutPressed(const std::vector<EShortcut> & shortcuts);
|
||||
void dispatchShortcutReleased(const std::vector<EShortcut> & shortcuts);
|
||||
|
||||
/// Key events (to get keyname of pressed key)
|
||||
void dispatchKeyPressed(const std::string & keyName);
|
||||
void dispatchKeyReleased(const std::string & keyName);
|
||||
|
||||
/// Mouse events
|
||||
void dispatchMouseLeftButtonPressed(const Point & position, int tolerance);
|
||||
void dispatchMouseLeftButtonReleased(const Point & position, int tolerance);
|
||||
|
||||
@@ -77,6 +77,9 @@ public:
|
||||
virtual void keyPressed(EShortcut key) {}
|
||||
virtual void keyReleased(EShortcut key) {}
|
||||
|
||||
virtual void keyPressed(const std::string & keyName) {}
|
||||
virtual void keyReleased(const std::string & keyName) {}
|
||||
|
||||
virtual void tick(uint32_t msPassed) {}
|
||||
|
||||
virtual void inputModeChanged(InputMode modi) {}
|
||||
@@ -101,7 +104,8 @@ public:
|
||||
GESTURE = 1024,
|
||||
DRAG = 2048,
|
||||
INPUT_MODE_CHANGE = 4096,
|
||||
DRAG_POPUP = 8192
|
||||
DRAG_POPUP = 8192,
|
||||
KEY_NAME = 16384
|
||||
};
|
||||
|
||||
/// Returns true if element is currently hovered by mouse
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include "StdInc.h"
|
||||
#include "ShortcutsWindow.h"
|
||||
|
||||
#include "../../GameEngine.h"
|
||||
#include "../../gui/Shortcut.h"
|
||||
#include "../../gui/WindowHandler.h"
|
||||
#include "../../widgets/Buttons.h"
|
||||
@@ -110,10 +111,7 @@ ShortcutElement::ShortcutElement(std::string id, JsonNode keys, int elem)
|
||||
buttonEdit = std::make_shared<CButton>(Point(422, 3), AnimationPath::builtin("settingsWindow/button32"), std::make_pair("", MetaString::createFromTextID("vcmi.shortcuts.editButton.help").toString()));
|
||||
buttonEdit->setOverlay(std::make_shared<CPicture>(ImagePath::builtin("settingsWindow/gear")));
|
||||
buttonEdit->addCallback([id](){
|
||||
auto str = MetaString::createFromTextID("vcmi.shortcuts.editButton.popup");
|
||||
str.replaceTextID("vcmi.shortcuts.shortcut." + id);
|
||||
str.replaceRawString(id);
|
||||
CInfoWindow::showInfoDialog(str.toString(), {});
|
||||
ENGINE->windows().createAndPushWindow<ShortcutsEditWindow>(id);
|
||||
});
|
||||
if(elem < MAX_LINES - 1)
|
||||
seperationLine = std::make_shared<TransparentFilledRectangle>(Rect(0, LINE_HEIGHT, 456, 1), ColorRGBA(0, 0, 0, 64), ColorRGBA(128, 100, 75), 1);
|
||||
@@ -133,3 +131,21 @@ ShortcutElement::ShortcutElement(std::string group, int elem)
|
||||
if(elem < MAX_LINES - 1)
|
||||
seperationLine = std::make_shared<TransparentFilledRectangle>(Rect(0, LINE_HEIGHT, 456, 1), ColorRGBA(0, 0, 0, 64), ColorRGBA(128, 100, 75), 1);
|
||||
}
|
||||
|
||||
ShortcutsEditWindow::ShortcutsEditWindow(const std::string & id)
|
||||
: CWindowObject(BORDERED)
|
||||
{
|
||||
OBJECT_CONSTRUCTION;
|
||||
pos.w = 200;
|
||||
pos.h = 100;
|
||||
|
||||
updateShadow();
|
||||
center();
|
||||
|
||||
addUsedEvents(KEY_NAME);
|
||||
}
|
||||
|
||||
void ShortcutsEditWindow::keyPressed(const std::string & keyName)
|
||||
{
|
||||
std::cout << keyName << "\n";
|
||||
}
|
||||
|
||||
@@ -53,3 +53,11 @@ public:
|
||||
ShortcutsWindow();
|
||||
};
|
||||
|
||||
class ShortcutsEditWindow : public CWindowObject
|
||||
{
|
||||
private:
|
||||
void keyPressed(const std::string & keyName) override;
|
||||
public:
|
||||
ShortcutsEditWindow(const std::string & id);
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user