From d257dc154fced407a4aed744a42fd052bb469ae9 Mon Sep 17 00:00:00 2001 From: Sander Speetjens Date: Mon, 19 Aug 2024 01:07:52 +0200 Subject: [PATCH] Move from function pointers to std::function --- src/UI/UI_button.cpp | 2 +- src/UI/UI_button.hpp | 5 ++--- src/UI/UI_checkbox.cpp | 2 +- src/UI/UI_checkbox.hpp | 5 ++--- src/UI/UI_combobox.cpp | 9 ++------- src/UI/UI_combobox.hpp | 7 +++---- src/UI/UI_item.hpp | 1 + src/UI/UI_slider.cpp | 2 +- src/UI/UI_slider.hpp | 5 ++--- 9 files changed, 15 insertions(+), 23 deletions(-) diff --git a/src/UI/UI_button.cpp b/src/UI/UI_button.cpp index 16a429d..d1fb578 100644 --- a/src/UI/UI_button.cpp +++ b/src/UI/UI_button.cpp @@ -1,6 +1,6 @@ #include "UI_button.hpp" -UI_button::UI_button(std::string id, std::string text, Color fg_color, Color bg_color, UI_button_on_click on_click) +UI_button::UI_button(std::string id, std::string text, Color fg_color, Color bg_color, std::function on_click) : UI_item(id, UI_BUTTON_TYPE, text, 12, fg_color, bg_color) { this->p_on_click = on_click; diff --git a/src/UI/UI_button.hpp b/src/UI/UI_button.hpp index 6f7fd01..d682666 100644 --- a/src/UI/UI_button.hpp +++ b/src/UI/UI_button.hpp @@ -3,12 +3,11 @@ #include "UI_item.hpp" #define UI_BUTTON_TYPE std::string("UIButton") -typedef void(*UI_button_on_click)(std::string id); class UI_button : public UI_item { public: - UI_button(std::string id, std::string text, Color fg_color, Color bg_color, UI_button_on_click on_click); + UI_button(std::string id, std::string text, Color fg_color, Color bg_color, std::function on_click = nullptr); UI_button(const json& j); void from_json(const json& j) override; @@ -16,5 +15,5 @@ class UI_button : public UI_item void click() const; private: - UI_button_on_click p_on_click = nullptr; + std::function p_on_click = nullptr; }; \ No newline at end of file diff --git a/src/UI/UI_checkbox.cpp b/src/UI/UI_checkbox.cpp index b00a958..28d62d3 100644 --- a/src/UI/UI_checkbox.cpp +++ b/src/UI/UI_checkbox.cpp @@ -5,7 +5,7 @@ UI_checkbox::UI_checkbox() { } -UI_checkbox::UI_checkbox(std::string id, std::string text, Color fg_color, Color bg_color, std::vector options, UI_checkbox_on_change on_change) +UI_checkbox::UI_checkbox(std::string id, std::string text, Color fg_color, Color bg_color, std::vector options, std::function)> on_change) : UI_x_boxes(id, UI_CHECKBOX_TYPE, text, fg_color, bg_color, options), p_selected(), p_on_change(on_change) { } diff --git a/src/UI/UI_checkbox.hpp b/src/UI/UI_checkbox.hpp index bb5ea61..3e14598 100644 --- a/src/UI/UI_checkbox.hpp +++ b/src/UI/UI_checkbox.hpp @@ -4,13 +4,12 @@ #include "UI_x_boxes.hpp" #define UI_CHECKBOX_TYPE std::string("UIcheckbox") -typedef void (*UI_checkbox_on_change) (std::string id, std::vector selected); class UI_checkbox : public UI_x_boxes { public: UI_checkbox(); - UI_checkbox(std::string id, std::string text, Color fg_color, Color bg_color, std::vector options, UI_checkbox_on_change on_change = nullptr); + UI_checkbox(std::string id, std::string text, Color fg_color, Color bg_color, std::vector options, std::function)> on_change = nullptr); UI_checkbox(const json& j); void toggle_selected(size_t selected); @@ -23,5 +22,5 @@ class UI_checkbox : public UI_x_boxes private: std::vector p_selected; - UI_checkbox_on_change p_on_change; + std::function)> p_on_change; }; \ No newline at end of file diff --git a/src/UI/UI_combobox.cpp b/src/UI/UI_combobox.cpp index f5c77f8..55d5163 100644 --- a/src/UI/UI_combobox.cpp +++ b/src/UI/UI_combobox.cpp @@ -5,16 +5,11 @@ UI_combobox::UI_combobox() { } -UI_combobox::UI_combobox(std::string id, std::string text, Color fg_color, Color bg_color, std::vector options, size_t selected, UI_combobox_on_change on_change) +UI_combobox::UI_combobox(std::string id, std::string text, Color fg_color, Color bg_color, std::vector options, size_t selected, std::function on_change) : UI_x_boxes(id, UI_COMBOBOX_TYPE, text, fg_color, bg_color, options), p_selected(selected), p_on_change(on_change) { } -UI_combobox::UI_combobox(std::string id, std::string text, Color fg_color, Color bg_color, std::vector options, UI_combobox_on_change on_change) - : UI_x_boxes(id, UI_COMBOBOX_TYPE, text, fg_color, bg_color, options), p_selected(0), p_on_change(on_change) -{ -} - UI_combobox::UI_combobox(const json& j) : UI_x_boxes(UI_COMBOBOX_TYPE), p_on_change(nullptr) { @@ -28,7 +23,7 @@ void UI_combobox::set_selected(size_t selected) p_selected = selected; if (p_on_change != nullptr) { - p_on_change(p_id, selected); + p_on_change(p_id, selected_text()); } } } diff --git a/src/UI/UI_combobox.hpp b/src/UI/UI_combobox.hpp index be2bd7a..330e105 100644 --- a/src/UI/UI_combobox.hpp +++ b/src/UI/UI_combobox.hpp @@ -1,17 +1,16 @@ #pragma once +#include #include "UI_item.hpp" #include "UI_x_boxes.hpp" #define UI_COMBOBOX_TYPE std::string("UIcombobox") -typedef void (*UI_combobox_on_change) (std::string id, size_t selected); class UI_combobox : public UI_x_boxes { public: UI_combobox(); - UI_combobox(std::string id, std::string text, Color fg_color, Color bg_color, std::vector options, size_t selected, UI_combobox_on_change on_change = nullptr); - UI_combobox(std::string id, std::string text, Color fg_color, Color bg_color, std::vector options, UI_combobox_on_change on_change = nullptr); + UI_combobox(std::string id, std::string text, Color fg_color, Color bg_color, std::vector options, size_t selected = 0, std::function on_change = nullptr); UI_combobox(const json& j); void set_selected(size_t selected); @@ -24,5 +23,5 @@ class UI_combobox : public UI_x_boxes private: size_t p_selected; - UI_combobox_on_change p_on_change; + std::function p_on_change; }; \ No newline at end of file diff --git a/src/UI/UI_item.hpp b/src/UI/UI_item.hpp index 5687956..f8fb5e4 100644 --- a/src/UI/UI_item.hpp +++ b/src/UI/UI_item.hpp @@ -1,4 +1,5 @@ #pragma once +#include #include #include #include diff --git a/src/UI/UI_slider.cpp b/src/UI/UI_slider.cpp index 3ae2645..6aaea97 100644 --- a/src/UI/UI_slider.cpp +++ b/src/UI/UI_slider.cpp @@ -1,6 +1,6 @@ #include "UI_slider.hpp" -UI_slider::UI_slider(std::string id, std::string text, Color fg_color, Color bg_color, double min, double max, double value, UI_slider_on_change on_change) +UI_slider::UI_slider(std::string id, std::string text, Color fg_color, Color bg_color, double min, double max, double value, std::function on_change) : UI_item(id, UI_SLIDER_TYPE, text, 12, fg_color, bg_color), p_min(min), p_max(max), p_value(value) { this->p_on_change = on_change; diff --git a/src/UI/UI_slider.hpp b/src/UI/UI_slider.hpp index 33afaa6..b4dddba 100644 --- a/src/UI/UI_slider.hpp +++ b/src/UI/UI_slider.hpp @@ -2,12 +2,11 @@ #include "UI_item.hpp" #define UI_SLIDER_TYPE std::string("UISlider") -typedef void(*UI_slider_on_change)(std::string, double value); class UI_slider : public UI_item { public: - UI_slider(std::string id, std::string text, Color fg_color, Color bg_color, double min, double max, double value, UI_slider_on_change on_change); + UI_slider(std::string id, std::string text, Color fg_color, Color bg_color, double min, double max, double value, std::function on_change = nullptr); UI_slider(const json& j); void set_value(double value); @@ -20,5 +19,5 @@ class UI_slider : public UI_item double p_max; double p_value; - UI_slider_on_change p_on_change; + std::function p_on_change; }; \ No newline at end of file