EventDispatcher.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /*
  2. * EventDispatcher.h, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #pragma once
  11. VCMI_LIB_NAMESPACE_BEGIN
  12. class Point;
  13. VCMI_LIB_NAMESPACE_END
  14. class AEventsReceiver;
  15. enum class MouseButton;
  16. enum class EShortcut;
  17. enum class InputMode;
  18. /// Class that receives events from event producers and dispatches it to UI elements that are interested in this event
  19. class EventDispatcher
  20. {
  21. using EventReceiversList = std::list<AEventsReceiver *>;
  22. /// list of UI elements that are interested in particular event
  23. EventReceiversList lclickable;
  24. EventReceiversList rclickable;
  25. EventReceiversList hoverable;
  26. EventReceiversList keyinterested;
  27. EventReceiversList motioninterested;
  28. EventReceiversList draginterested;
  29. EventReceiversList dragPopupInterested;
  30. EventReceiversList timeinterested;
  31. EventReceiversList wheelInterested;
  32. EventReceiversList doubleClickInterested;
  33. EventReceiversList textInterested;
  34. EventReceiversList panningInterested;
  35. EventReceiversList inputModeChangeInterested;
  36. EventReceiversList keyNameInterested;
  37. void handleLeftButtonClick(const Point & position, int tolerance, bool isPressed);
  38. void handleDoubleButtonClick(const Point & position, int tolerance);
  39. AEventsReceiver * findElementInToleranceRange(const EventReceiversList & list, const Point & position, int eventToTest, int tolerance);
  40. template<typename Functor>
  41. void processLists(ui16 activityFlag, const Functor & cb);
  42. public:
  43. /// add specified UI element as interested. Uses unnamed enum from AEventsReceiver for activity flags
  44. void activateElement(AEventsReceiver * elem, ui16 activityFlag);
  45. /// removes specified UI element as interested for specified activities
  46. void deactivateElement(AEventsReceiver * elem, ui16 activityFlag);
  47. /// Regular timer event
  48. void dispatchTimer(uint32_t msPassed);
  49. /// Shortcut events (e.g. keyboard keys)
  50. void dispatchShortcutPressed(const std::vector<EShortcut> & shortcuts);
  51. void dispatchShortcutReleased(const std::vector<EShortcut> & shortcuts);
  52. /// Key events (to get keyname of pressed key)
  53. void dispatchKeyPressed(const std::string & keyName);
  54. void dispatchKeyReleased(const std::string & keyName);
  55. /// Mouse events
  56. void dispatchMouseLeftButtonPressed(const Point & position, int tolerance);
  57. void dispatchMouseLeftButtonReleased(const Point & position, int tolerance);
  58. void dispatchMouseScrolled(const Point & distance, const Point & position);
  59. void dispatchMouseDoubleClick(const Point & position, int tolerance);
  60. void dispatchMouseMoved(const Point & distance, const Point & position);
  61. void dispatchMouseDragged(const Point & currentPosition, const Point & lastUpdateDistance);
  62. void dispatchMouseDraggedPopup(const Point & currentPosition, const Point & lastUpdateDistance);
  63. void dispatchShowPopup(const Point & position, int tolerance);
  64. void dispatchClosePopup(const Point & position);
  65. void dispatchGesturePanningStarted(const Point & initialPosition);
  66. void dispatchGesturePanningEnded(const Point & initialPosition, const Point & finalPosition);
  67. void dispatchGesturePanning(const Point & initialPosition, const Point & currentPosition, const Point & lastUpdateDistance);
  68. void dispatchGesturePinch(const Point & initialPosition, double distance);
  69. /// Text input events
  70. void dispatchTextInput(const std::string & text);
  71. void dispatchTextEditing(const std::string & text);
  72. void dispatchInputModeChanged(const InputMode & modi);
  73. };