lxgui
Loading...
Searching...
No Matches
gui_event_data.hpp
1#ifndef LXGUI_GUI_EVENT_DATA_HPP
2#define LXGUI_GUI_EVENT_DATA_HPP
3
4#include "lxgui/gui_exception.hpp"
5#include "lxgui/lxgui.hpp"
6#include "lxgui/utils_variant.hpp"
7
8#include <initializer_list>
9#include <vector>
10
11namespace lxgui::gui {
12
15public:
17 event_data() = default;
18
20 event_data(std::initializer_list<utils::variant> data);
21
22 // Copiable, movable
23 event_data(const event_data&) = default;
24 event_data(event_data&&) = default;
25 event_data& operator=(const event_data&) = default;
27
32 template<typename T>
33 void add(T&& value) {
34 arg_list_.push_back(std::forward<T>(value));
35 }
36
42 const utils::variant& get(std::size_t index) const {
43 if (index >= arg_list_.size())
44 throw gui::exception("event_data", "index past size of data");
45 return arg_list_[index];
46 }
47
53 utils::variant& get(std::size_t index) {
54 if (index >= arg_list_.size())
55 throw gui::exception("event_data", "index past size of data");
56 return arg_list_[index];
57 }
58
64 template<typename T>
65 const T& get(std::size_t index) const {
66 return utils::get<T>(this->get(index));
67 }
68
74 template<typename T>
75 T& get(std::size_t index) {
76 return utils::get<T>(this->get(index));
77 }
78
83 std::size_t get_param_count() const {
84 return arg_list_.size();
85 }
86
87private:
88 std::vector<utils::variant> arg_list_;
89};
90
91} // namespace lxgui::gui
92
93#endif
Stores a variable number of arguments for an event.
event_data & operator=(const event_data &)=default
const utils::variant & get(std::size_t index) const
Returns a parameter of this event.
event_data & operator=(event_data &&)=default
const T & get(std::size_t index) const
Returns a parameter of this event.
event_data(event_data &&)=default
T & get(std::size_t index)
Returns a parameter of this event.
utils::variant & get(std::size_t index)
Returns a parameter of this event.
event_data(const event_data &)=default
std::size_t get_param_count() const
Returns the number of parameters.
event_data()=default
Default constructor.
void add(T &&value)
Adds a parameter to this event.
Exception to be thrown by GUI code.
std::variant< empty, bool, std::int64_t, std::int32_t, std::int16_t, std::int8_t, std::uint64_t, std::uint32_t, std::uint16_t, std::uint8_t, double, float, std::string > variant
Type-erased value for passing arguments to events.