CEvent.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. #pragma once
  2. #include <AK/String.h>
  3. #include <AK/Function.h>
  4. #include <AK/Types.h>
  5. #include <AK/WeakPtr.h>
  6. class CObject;
  7. class CEvent {
  8. public:
  9. enum Type {
  10. Invalid = 0,
  11. Quit,
  12. Timer,
  13. NotifierRead,
  14. NotifierWrite,
  15. DeferredDestroy,
  16. DeferredInvoke,
  17. ChildAdded,
  18. ChildRemoved,
  19. Custom,
  20. };
  21. CEvent() {}
  22. explicit CEvent(unsigned type)
  23. : m_type(type)
  24. {
  25. }
  26. virtual ~CEvent() {}
  27. unsigned type() const { return m_type; }
  28. bool is_accepted() const { return m_accepted; }
  29. void accept() { m_accepted = true; }
  30. void ignore() { m_accepted = false; }
  31. private:
  32. unsigned m_type { Type::Invalid };
  33. bool m_accepted { true };
  34. };
  35. class CDeferredInvocationEvent : public CEvent {
  36. friend class CEventLoop;
  37. public:
  38. CDeferredInvocationEvent(Function<void(CObject&)> invokee)
  39. : CEvent(CEvent::Type::DeferredInvoke)
  40. , m_invokee(move(invokee))
  41. {
  42. }
  43. private:
  44. Function<void(CObject&)> m_invokee;
  45. };
  46. class CTimerEvent final : public CEvent {
  47. public:
  48. explicit CTimerEvent(int timer_id)
  49. : CEvent(CEvent::Timer)
  50. , m_timer_id(timer_id)
  51. {
  52. }
  53. ~CTimerEvent() {}
  54. int timer_id() const { return m_timer_id; }
  55. private:
  56. int m_timer_id;
  57. };
  58. class CNotifierReadEvent final : public CEvent {
  59. public:
  60. explicit CNotifierReadEvent(int fd)
  61. : CEvent(CEvent::NotifierRead)
  62. , m_fd(fd)
  63. {
  64. }
  65. ~CNotifierReadEvent() {}
  66. int fd() const { return m_fd; }
  67. private:
  68. int m_fd;
  69. };
  70. class CNotifierWriteEvent final : public CEvent {
  71. public:
  72. explicit CNotifierWriteEvent(int fd)
  73. : CEvent(CEvent::NotifierWrite)
  74. , m_fd(fd)
  75. {
  76. }
  77. ~CNotifierWriteEvent() {}
  78. int fd() const { return m_fd; }
  79. private:
  80. int m_fd;
  81. };
  82. class CChildEvent final : public CEvent {
  83. public:
  84. CChildEvent(Type, CObject& child);
  85. ~CChildEvent();
  86. CObject* child() { return m_child.ptr(); }
  87. const CObject* child() const { return m_child.ptr(); }
  88. private:
  89. WeakPtr<CObject> m_child;
  90. };
  91. class CCustomEvent : public CEvent {
  92. public:
  93. CCustomEvent(int custom_type, void* data = nullptr)
  94. : CEvent(CEvent::Type::Custom)
  95. , m_custom_type(custom_type)
  96. , m_data(data)
  97. {
  98. }
  99. ~CCustomEvent() {}
  100. int custom_type() const { return m_custom_type; }
  101. void* data() { return m_data; }
  102. const void* data() const { return m_data; }
  103. private:
  104. int m_custom_type { 0 };
  105. void* m_data { nullptr };
  106. };