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 
9 namespace horizon {
10 class ParameterSetEditor : public Gtk::Box, public Changeable {
11  friend class ParameterEditor;
12 
13 public:
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 
53 private:
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 
70 protected:
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
zip_int64_t int64_t
zip_int64_t typedef.
Definition: zip.hpp:103
Definition: list_accumulator.hpp:5