Horizon
parameter_set_editor.hpp
1#pragma once
2#include <gtkmm.h>
3#include <set>
4#include "parameter/set.hpp"
5#include "util/changeable.hpp"
6#include "util/list_accumulator.hpp"
7#include <optional>
8
9namespace horizon {
10class ParameterSetEditor : public Gtk::Box, public Changeable {
11 friend class ParameterEditor;
12
13public:
14 ParameterSetEditor(ParameterSet *ps, bool populate_init = true);
15 void populate();
16 void focus_first();
17 void set_button_margin_left(int margin);
18 void add_or_set_parameter(ParameterID param, int64_t value);
19 void set_has_apply_all(const std::string &tooltip_text);
20 void set_has_apply_all_toggle(const std::string &tooltip_text);
21 void set_apply_all(std::set<ParameterID> params);
22
23 typedef sigc::signal<void> type_signal_activate_last;
24 type_signal_activate_last signal_activate_last()
25 {
26 return s_signal_activate_last;
27 }
28
29 typedef sigc::signal<void, ParameterID> type_signal_apply_all;
30 type_signal_apply_all signal_apply_all()
31 {
32 return s_signal_apply_all;
33 }
34
35 typedef sigc::signal<void, ParameterID, bool> type_signal_apply_all_toggled;
36 type_signal_apply_all_toggled signal_apply_all_toggled()
37 {
38 return s_signal_apply_all_toggled;
39 }
40
41 typedef sigc::signal<Gtk::Widget *, ParameterID>::accumulated<list_accumulator<Gtk::Widget *, false>>
42 type_signal_create_extra_widget;
43 type_signal_create_extra_widget signal_create_extra_widget()
44 {
45 return s_signal_create_extra_widget;
46 }
47
48 type_signal_apply_all signal_remove_extra_widget()
49 {
50 return s_signal_remove_extra_widget;
51 }
52
53private:
54 Gtk::Widget *create_apply_all_button(ParameterID id);
55 Gtk::MenuButton *add_button = nullptr;
56 Gtk::ListBox *listbox = nullptr;
57 Gtk::Menu menu;
58 std::map<ParameterID, Gtk::MenuItem &> menu_items;
59 ParameterSet *parameter_set;
60 Glib::RefPtr<Gtk::SizeGroup> sg_label;
61 void update_menu();
62 std::optional<std::string> apply_all_tooltip_text;
63 bool apply_all_toggle = false;
64
65 type_signal_activate_last s_signal_activate_last;
66
67 type_signal_create_extra_widget s_signal_create_extra_widget;
68 type_signal_apply_all s_signal_remove_extra_widget;
69
70protected:
71 type_signal_apply_all s_signal_apply_all;
72 type_signal_apply_all_toggled s_signal_apply_all_toggled;
73};
74} // namespace horizon
Definition: changeable.hpp:5
Definition: parameter_set_editor.cpp:15
Definition: parameter_set_editor.hpp:10
Definition: list_accumulator.hpp:5