diff options
-rw-r--r-- | gtk2_ardour/meter_strip.cc | 79 | ||||
-rw-r--r-- | gtk2_ardour/meter_strip.h | 4 | ||||
-rw-r--r-- | gtk2_ardour/meterbridge.cc | 12 | ||||
-rw-r--r-- | gtk2_ardour/session_option_editor.cc | 21 | ||||
-rw-r--r-- | libs/ardour/ardour/session_configuration_vars.h | 3 |
5 files changed, 114 insertions, 5 deletions
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<ARDOUR::Route> 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<ARDOUR::Route> 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<ARDOUR::Route> 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; @@ -242,6 +267,14 @@ MeterStrip::self_delete () } 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 () { RouteUI::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"))); } @@ -471,11 +506,47 @@ MeterStrip::redraw_metrics () } 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<ARDOUR::Route> 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<ARDOUR::DataType> _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 diff --git a/libs/ardour/ardour/session_configuration_vars.h b/libs/ardour/ardour/session_configuration_vars.h index fb29004553..e0de36417c 100644 --- a/libs/ardour/ardour/session_configuration_vars.h +++ b/libs/ardour/ardour/session_configuration_vars.h @@ -60,3 +60,6 @@ CONFIG_VARIABLE (bool, videotimeline_pullup, "videotimeline-pullup", true) CONFIG_VARIABLE (bool, show_busses_on_meterbridge, "show-busses-on-meterbridge", false) CONFIG_VARIABLE (bool, show_master_on_meterbridge, "show-master-on-meterbridge", true) CONFIG_VARIABLE (bool, show_midi_on_meterbridge, "show-midi-on-meterbridge", true) +CONFIG_VARIABLE (bool, show_rec_on_meterbridge, "show-rec-on-meterbridge", true) +CONFIG_VARIABLE (bool, show_mute_on_meterbridge, "show-mute-on-meterbridge", false) +CONFIG_VARIABLE (bool, show_solo_on_meterbridge, "show-solo-on-meterbridge", false) |