From 4d49961c93fe23dc4f76a5bcb60c93d0c80bcd3c Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 8 Jul 2013 23:56:03 +0200 Subject: allow to include solo,mute buttons on meterbridge --- gtk2_ardour/meter_strip.cc | 79 ++++++++++++++++++++++++++++++++++-- gtk2_ardour/meter_strip.h | 4 +- gtk2_ardour/meterbridge.cc | 12 ++++++ gtk2_ardour/session_option_editor.cc | 21 ++++++++++ 4 files changed, 111 insertions(+), 5 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/meter_strip.cc b/gtk2_ardour/meter_strip.cc index f07bca7c67..c877d734e1 100644 --- a/gtk2_ardour/meter_strip.cc +++ b/gtk2_ardour/meter_strip.cc @@ -64,8 +64,8 @@ MeterStrip::MeterStrip (int metricmode) _strip_type = 0; set_spacing(2); peakbx.set_size_request(-1, 14); - btnbox.set_size_request(-1, 16); namebx.set_size_request(18, 52); + update_button_box(); set_metric_mode(metricmode); @@ -100,6 +100,7 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr rt) { set_spacing(2); RouteUI::set_route (rt); + SessionHandlePtr::set_session (sess); _has_midi = false; @@ -165,10 +166,33 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr rt) namebx.pack_start(name_label, true, false, 3); namebx.pack_start(number_label, true, false, 0); - // rec-enable button - btnbox.pack_start(*rec_enable_button, true, false); + Gtk::HBox *btnwrap; // horiz center, no expand gtk workaround + + btnwrap = manage(new Gtk::HBox()); + btnwrap->pack_start(*rec_enable_button, true, false); + btnbox.pack_start(*btnwrap, false, false, 1); + btnwrap->show(); + + btnwrap = manage(new Gtk::HBox()); + btnwrap->pack_start(*mute_button, true, false); + btnbox.pack_start(*btnwrap, false, false, 1); + btnwrap->show(); + + btnwrap = manage(new Gtk::HBox()); + btnwrap->pack_start(*solo_button, true, false); + btnbox.pack_start(*btnwrap, false, false, 1); + btnwrap->show(); + rec_enable_button->set_corner_radius(2); - btnbox.set_size_request(-1, 16); + rec_enable_button->set_size_request(16, 16); + + mute_button->set_corner_radius(2); + mute_button->set_size_request(16, 16); + + solo_button->set_corner_radius(2); + solo_button->set_size_request(16, 16); + + update_button_box(); pack_start (peakbx, false, false); pack_start (meterbox, true, true); @@ -212,6 +236,7 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr rt) ColorsChanged.connect (sigc::mem_fun (*this, &MeterStrip::on_theme_changed)); DPIReset.connect (sigc::mem_fun (*this, &MeterStrip::on_theme_changed)); Config->ParameterChanged.connect (*this, invalidator (*this), ui_bind (&MeterStrip::parameter_changed, this, _1), gui_context()); + sess->config.ParameterChanged.connect (*this, invalidator (*this), ui_bind (&MeterStrip::parameter_changed, this, _1), gui_context()); if (_route->is_master()) { _strip_type = 4; @@ -241,6 +266,14 @@ MeterStrip::self_delete () delete this; } +void +MeterStrip::set_session (Session* s) +{ + SessionHandlePtr::set_session (s); + s->config.ParameterChanged.connect (*this, invalidator (*this), ui_bind (&MeterStrip::parameter_changed, this, _1), gui_context()); + update_button_box(); +} + void MeterStrip::update_rec_display () { @@ -256,6 +289,8 @@ MeterStrip::state_id() const void MeterStrip::set_button_names() { + mute_button->set_text (_("M")); + solo_button->set_text (_("S")); rec_enable_button->set_text (""); rec_enable_button->set_image (::get_icon (X_("record_normal_red"))); } @@ -470,12 +505,48 @@ MeterStrip::redraw_metrics () meter_ticks2_area.queue_draw(); } +void +MeterStrip::update_button_box () +{ + if (!_session) return; + int height = 0; + if (_session->config.get_show_mute_on_meterbridge()) { + height += 18; + if (mute_button) mute_button->show(); + } else { + if (mute_button) mute_button->hide(); + } + if (_session->config.get_show_solo_on_meterbridge()) { + height += 18; + if (solo_button) solo_button->show(); + } else { + if (solo_button) solo_button->hide(); + } + if (_session->config.get_show_rec_on_meterbridge()) { + height += 18; + if (rec_enable_button) rec_enable_button->show(); + } else { + if (rec_enable_button) rec_enable_button->hide(); + } + btnbox.set_size_request(16, height); + check_resize(); +} + void MeterStrip::parameter_changed (std::string const & p) { if (p == "meter-peak") { max_peak = -INFINITY; } + else if (p == "show-rec-on-meterbridge") { + update_button_box(); + } + else if (p == "show-mute-on-meterbridge") { + update_button_box(); + } + else if (p == "show-solo-on-meterbridge") { + update_button_box(); + } } diff --git a/gtk2_ardour/meter_strip.h b/gtk2_ardour/meter_strip.h index 8474d3cf72..022ac9edb9 100644 --- a/gtk2_ardour/meter_strip.h +++ b/gtk2_ardour/meter_strip.h @@ -50,6 +50,7 @@ class MeterStrip : public Gtk::VBox, public RouteUI MeterStrip (int); ~MeterStrip (); + void set_session (ARDOUR::Session* s); void fast_update (); boost::shared_ptr route() { return _route; } @@ -98,7 +99,7 @@ class MeterStrip : public Gtk::VBox, public RouteUI Gtk::Alignment meter_align; Gtk::Alignment peak_align; Gtk::HBox peakbx; - Gtk::HBox btnbox; + Gtk::VBox btnbox; ArdourButton peak_display; std::vector _types; @@ -120,6 +121,7 @@ class MeterStrip : public Gtk::VBox, public RouteUI void parameter_changed (std::string const & p); void redraw_metrics (); + void update_button_box (); bool _suspend_menu_callbacks; bool level_meter_button_press (GdkEventButton* ev); diff --git a/gtk2_ardour/meterbridge.cc b/gtk2_ardour/meterbridge.cc index 35df88e76a..881aeb53aa 100644 --- a/gtk2_ardour/meterbridge.cc +++ b/gtk2_ardour/meterbridge.cc @@ -363,6 +363,9 @@ Meterbridge::set_session (Session* s) return; } + metrics_left.set_session(s); + metrics_right.set_session(s); + XMLNode* node = _session->instant_xml(X_("Meterbridge")); if (node) { set_state (*node); @@ -666,6 +669,15 @@ Meterbridge::parameter_changed (std::string const & p) meter_clear_pattern_cache(); update_metrics(); } + else if (p == "show-rec-on-meterbridge") { + scroller.queue_resize(); + } + else if (p == "show-mute-on-meterbridge") { + scroller.queue_resize(); + } + else if (p == "show-solo-on-meterbridge") { + scroller.queue_resize(); + } } void diff --git a/gtk2_ardour/session_option_editor.cc b/gtk2_ardour/session_option_editor.cc index 31629cf085..b3a19b3b42 100644 --- a/gtk2_ardour/session_option_editor.cc +++ b/gtk2_ardour/session_option_editor.cc @@ -295,6 +295,27 @@ SessionOptionEditor::SessionOptionEditor (Session* s) sigc::mem_fun (*_session_config, &SessionConfiguration::set_show_master_on_meterbridge) )); + add_option (_("Misc"), new BoolOption ( + "show-rec-on-meterbridge", + _("Show Rec-enable Button on Meterbridge"), + sigc::mem_fun (*_session_config, &SessionConfiguration::get_show_rec_on_meterbridge), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_show_rec_on_meterbridge) + )); + + add_option (_("Misc"), new BoolOption ( + "show-mute-on-meterbridge", + _("Include Mute Button on Meterbridge"), + sigc::mem_fun (*_session_config, &SessionConfiguration::get_show_mute_on_meterbridge), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_show_mute_on_meterbridge) + )); + + add_option (_("Misc"), new BoolOption ( + "show-solo-on-meterbridge", + _("Show Solo Button on Meterbridge"), + sigc::mem_fun (*_session_config, &SessionConfiguration::get_show_solo_on_meterbridge), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_show_solo_on_meterbridge) + )); + } void -- cgit v1.2.3