diff options
Diffstat (limited to 'src/Patchage.cpp')
-rw-r--r-- | src/Patchage.cpp | 68 |
1 files changed, 31 insertions, 37 deletions
diff --git a/src/Patchage.cpp b/src/Patchage.cpp index 122aae2..6d6c13e 100644 --- a/src/Patchage.cpp +++ b/src/Patchage.cpp @@ -86,6 +86,7 @@ PATCHAGE_RESTORE_WARNINGS #include <gtkmm/window.h> #include <sigc++/adaptors/bind.h> #include <sigc++/functors/mem_fun.h> +#include <sigc++/functors/ptr_fun.h> #include <sigc++/signal.h> #include <algorithm> @@ -155,6 +156,13 @@ port_order(const GanvPort* a, const GanvPort* b, void*) return 0; } +template<class S> +void +on_setting_toggled(Reactor* const reactor, const Gtk::CheckMenuItem* const item) +{ + (*reactor)(action::ChangeSetting{{S{item->get_active()}}}); +} + } // namespace #define INIT_WIDGET(x) x(_xml, (#x) + 1) @@ -242,18 +250,35 @@ Patchage::Patchage(Options options) sigc::mem_fun(this, &Patchage::on_export_image)); _menu_view_refresh->signal_activate().connect(sigc::bind( sigc::mem_fun(this, &Patchage::on_menu_action), Action{action::Refresh{}})); + _menu_view_human_names->signal_activate().connect( - sigc::mem_fun(this, &Patchage::on_view_human_names)); + sigc::bind(sigc::ptr_fun(&on_setting_toggled<setting::HumanNames>), + &_reactor, + _menu_view_human_names.get())); + _menu_view_sort_ports->signal_activate().connect( - sigc::mem_fun(this, &Patchage::on_view_sort_ports)); + sigc::bind(sigc::ptr_fun(&on_setting_toggled<setting::SortedPorts>), + &_reactor, + _menu_view_sort_ports.get())); + _menu_view_arrange->signal_activate().connect( sigc::mem_fun(this, &Patchage::on_arrange)); + _menu_view_sprung_layout->signal_activate().connect( - sigc::mem_fun(this, &Patchage::on_sprung_layout_toggled)); + sigc::bind(sigc::ptr_fun(&on_setting_toggled<setting::SprungLayout>), + &_reactor, + _menu_view_sprung_layout.get())); + _menu_view_messages->signal_activate().connect( - sigc::mem_fun(this, &Patchage::on_view_messages)); + sigc::bind(sigc::ptr_fun(&on_setting_toggled<setting::MessagesVisible>), + &_reactor, + _menu_view_messages.get())); + _menu_view_toolbar->signal_activate().connect( - sigc::mem_fun(this, &Patchage::on_view_toolbar)); + sigc::bind(sigc::ptr_fun(&on_setting_toggled<setting::ToolbarVisible>), + &_reactor, + _menu_view_toolbar.get())); + _menu_help_about->signal_activate().connect( sigc::mem_fun(this, &Patchage::on_help_about)); @@ -758,12 +783,6 @@ Patchage::on_arrange() } void -Patchage::on_sprung_layout_toggled() -{ - _conf.set<setting::SprungLayout>(_menu_view_sprung_layout->get_active()); -} - -void Patchage::on_help_about() { _about_win->run(); @@ -771,22 +790,9 @@ Patchage::on_help_about() } void -Patchage::on_view_human_names() -{ - _conf.set<setting::HumanNames>(_menu_view_human_names->get_active()); -} - -void -Patchage::on_view_sort_ports() -{ - _conf.set<setting::SortedPorts>(_menu_view_sort_ports->get_active()); - _reactor(action::Refresh{}); -} - -void Patchage::on_legend_color_change(PortType id, const std::string&, uint32_t rgba) { - _conf.set_port_color(id, rgba); + _reactor(action::ChangeSetting{{setting::PortColor{id, rgba}}}); } void @@ -872,18 +878,6 @@ Patchage::on_export_image() } } -void -Patchage::on_view_messages() -{ - _conf.set<setting::MessagesVisible>(_menu_view_messages->get_active()); -} - -void -Patchage::on_view_toolbar() -{ - _conf.set<setting::ToolbarVisible>(_menu_view_toolbar->get_active()); -} - bool Patchage::on_scroll(GdkEventScroll*) { |