1.10
object.h
1/*
2 * Copyright (C) 2018 Microchip Technology Inc. All rights reserved.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6#ifndef EGT_OBJECT_H
7#define EGT_OBJECT_H
8
14#include <cstdint>
15#include <egt/detail/cow.h>
16#include <egt/detail/meta.h>
17#include <egt/event.h>
18#include <egt/flagsbase.h>
19#include <functional>
20#include <string>
21#include <vector>
22
23namespace egt
24{
25inline namespace v1
26{
27
31class EGT_API Object
32{
33public:
34
35 Object() noexcept = default;
36 Object(const Object&) = delete;
37 Object& operator=(const Object&) = delete;
38 Object(Object&&) = default;
39 Object& operator=(Object&&) = default;
40
42 EGT_NODISCARD const std::string& name() const { return m_name; }
43
52 void name(const std::string& name) { m_name = name; }
53
55 using EventCallback = std::function<void (Event& event)>;
56
59
61 using RegisterHandle = uint64_t;
62
79 const FilterFlags& mask = {});
80
86 void invoke_handlers(Event& event);
87
94
99
106
107 virtual ~Object() noexcept = default;
108
109protected:
110
112 RegisterHandle m_handle_counter{0};
113
118 {
125 // NOLINTNEXTLINE(modernize-pass-by-value)
126 const FilterFlags& m,
127 RegisterHandle h) noexcept
128 : callback(std::move(c)),
129 mask(m),
130 handle(h)
131 {}
132
138 RegisterHandle handle{0};
139 };
140
142 using CallbackArray = std::vector<CallbackMeta>;
143
146
148 std::string m_name;
149};
150
151}
152}
153
154#endif
Base object class with fundamental properties.
Definition object.h:32
void clear_handlers()
Clear all registered event handlers.
virtual ~Object() noexcept=default
std::function< void(Event &event)> EventCallback
Event handler callback function.
Definition object.h:55
std::vector< CallbackMeta > CallbackArray
Helper type for an array of callbacks.
Definition object.h:142
detail::CopyOnWriteAllocate< CallbackArray > m_callbacks
Array of callbacks.
Definition object.h:145
uint64_t RegisterHandle
Handle type.
Definition object.h:61
void invoke_handlers(Event &event)
Invoke all handlers with the specified event.
void invoke_handlers(EventId event)
Invoke all handlers with the specified EventId.
Object() noexcept=default
RegisterHandle on_event(const EventCallback &handler, const FilterFlags &mask={})
Add an event handler to be called when the widget generates an event.
void name(const std::string &name)
Set the name of the Object.
Definition object.h:52
void remove_handler(RegisterHandle handle)
Remove an event handler.
std::string m_name
A user defined name for the Object.
Definition object.h:148
Copy-On-Write wrapper for an object or container.
Definition cow.h:33
EventId
Event identifiers.
Definition event.h:36
EGT framework namespace.
Definition animation.h:24
A single event that has information about the event and state for the event.
Definition event.h:255
Manages metadata about a registered callback.
Definition object.h:118
FilterFlags mask
Filter mask for events.
Definition object.h:136
EventCallback callback
Event callback function.
Definition object.h:134
CallbackMeta(EventCallback c, const FilterFlags &m, RegisterHandle h) noexcept
Definition object.h:124