lxgui
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 
11 namespace lxgui::gui {
12 
14 class event_data {
15 public:
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 
87 private:
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.
const utils::variant & get(std::size_t index) const
Returns a parameter of this event.
event_data & operator=(event_data &&)=default
T & get(std::size_t index)
Returns a parameter of this event.
event_data & operator=(const event_data &)=default
event_data(event_data &&)=default
utils::variant & get(std::size_t index)
Returns a parameter of this event.
const T & get(std::size_t index) const
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.