Sparkle 0.0.1
Loading...
Searching...
No Matches
spk_event_based_module.hpp
1#pragma once
2
3#include "structure/container/spk_thread_safe_queue.hpp"
4#include "structure/widget/spk_widget.hpp"
5
6namespace spk
7{
8 namespace Module
9 {
28 template <typename TEvent>
29 class EventBasedModule
30 {
31 private:
32 ThreadSafeQueue<TEvent> _eventQueue;
33 spk::Widget *_widget = nullptr;
34
35 protected:
40 virtual void _treatEvent(TEvent &p_ievent) = 0;
41
42 public:
43 EventBasedModule() = default;
44
45 virtual ~EventBasedModule() = default;
46
47 EventBasedModule(const EventBasedModule &) = delete;
48 EventBasedModule &operator=(const EventBasedModule &) = delete;
49 EventBasedModule(EventBasedModule &&) = delete;
50 EventBasedModule &operator=(EventBasedModule &&) = delete;
51
56 void setWidget(spk::Widget *p_widget)
57 {
58 _widget = p_widget;
59 }
60
66 {
67 return _widget;
68 }
69
74 void insertEvent(TEvent &&p_ievent)
75 {
76 _eventQueue.insert(std::move(p_ievent));
77 }
78
83 bool hasEvent() const
84 {
85 return !_eventQueue.empty();
86 }
87
92 {
93 while (!_eventQueue.empty())
94 {
95 TEvent Ievent = _eventQueue.popFront();
96 _treatEvent(Ievent);
97 }
98 }
99 };
100 }
101}
void setWidget(spk::Widget *p_widget)
Binds the module to a widget that will receive callbacks.
Definition spk_event_based_module.hpp:56
void treatEvents()
Processes all queued events by invoking _treatEvent.
Definition spk_event_based_module.hpp:91
void insertEvent(TEvent &&p_ievent)
Queues a new event to be processed later.
Definition spk_event_based_module.hpp:74
virtual void _treatEvent(TEvent &p_ievent)=0
Handles a single event pulled from the queue.
spk::Widget * widget() const
Returns the currently bound widget.
Definition spk_event_based_module.hpp:65
bool hasEvent() const
Checks whether the module has pending events.
Definition spk_event_based_module.hpp:83
Minimal mutex-protected FIFO deque wrapper.
Definition spk_thread_safe_queue.hpp:21
Base class for interactive UI elements handling focus and events.
Definition spk_widget.hpp:52