#pragma once #include <gtkmm.h> #include <any> #include <typeindex> #include <set> #include <options.hpp> class UIBackendColumns : public Glib::Object { public: Glib::ustring backendId; Glib::ustring backendName; static Glib::RefPtr<UIBackendColumns> create(const Glib::ustring &id, const Glib::ustring &name); protected: UIBackendColumns(const Glib::ustring &id, const Glib::ustring &name); }; class OptionsWindow : public Gtk::Window { int mainBoxRow = 0; Gtk::Box rootBox; Gtk::Box btnBox; Gtk::Button okBtn; Gtk::Button cancelBtn; Gtk::Button saveBtn; Gtk::Button revertBtn; Gtk::Label needsRestartLabel; Gtk::Grid mainBox; std::vector<Gtk::Widget*> optionWidgets; std::set<std::string> modifiableOptions; sigc::signal<void(std::string)> optionChanged; bool savedOptionRequiresRestart = false; void revert(); void save(); void add_option(Glib::ustring title, Gtk::Widget *widget, std::string key); public: sigc::signal<void()> optionsSaved; template<class T> void change_option(std::string key, T value) { Looper::Options::set_option<T>(key, value); optionChanged.emit(key); } OptionsWindow(); ~OptionsWindow(); };