1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-10-31 00:07:39 +02:00
Files
vcmi/client/gui/InterfaceEventDispatcher.h

60 lines
1.9 KiB
C++

/*
* CGuiHandler.h, part of VCMI engine
*
* Authors: listed in file AUTHORS in main folder
*
* License: GNU General Public License v2.0 or later
* Full text of license available in license.txt file, in main folder
*
*/
#pragma once
VCMI_LIB_NAMESPACE_BEGIN
class Point;
VCMI_LIB_NAMESPACE_END
class AEventsReceiver;
enum class MouseButton;
enum class EShortcut;
class InterfaceEventDispatcher
{
using CIntObjectList = std::list<AEventsReceiver *>;
//active GUI elements (listening for events
CIntObjectList lclickable;
CIntObjectList rclickable;
CIntObjectList mclickable;
CIntObjectList hoverable;
CIntObjectList keyinterested;
CIntObjectList motioninterested;
CIntObjectList timeinterested;
CIntObjectList wheelInterested;
CIntObjectList doubleClickInterested;
CIntObjectList textInterested;
CIntObjectList & getListForMouseButton(MouseButton button);
void handleMouseButtonClick(CIntObjectList & interestedObjs, MouseButton btn, bool isPressed);
void processList(const ui16 mask, const ui16 flag, CIntObjectList * lst, std::function<void(CIntObjectList *)> cb);
void processLists(ui16 activityFlag, std::function<void(CIntObjectList *)> cb);
public:
void handleElementActivate(AEventsReceiver * elem, ui16 activityFlag);
void handleElementDeActivate(AEventsReceiver * elem, ui16 activityFlag);
void updateTime(uint32_t msPassed); //handles timeInterested
void dispatchShortcutPressed(const std::vector<EShortcut> & shortcuts);
void dispatchShortcutReleased(const std::vector<EShortcut> & shortcuts);
void dispatchMouseButtonPressed(const MouseButton & button, const Point & position);
void dispatchMouseButtonReleased(const MouseButton & button, const Point & position);
void dispatchMouseScrolled(const Point & distance, const Point & position);
void dispatchMouseMoved(const Point & position);
void dispatchTextInput(const std::string & text);
void dispatchTextEditing(const std::string & text);
};