From da08f8b1c5fed5f936d85aa4605eb202e7063cb3 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 5 Jul 2013 20:55:55 +0200 Subject: add options to show/hide master and midi tracks;; hide inactive tracks --- gtk2_ardour/meterbridge.cc | 47 ++++++++++++++++++++++++++---------- gtk2_ardour/meterbridge.h | 3 +++ gtk2_ardour/session_option_editor.cc | 21 +++++++++++++--- 3 files changed, 55 insertions(+), 16 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/meterbridge.cc b/gtk2_ardour/meterbridge.cc index 56a70a8d9a..4731d39b61 100644 --- a/gtk2_ardour/meterbridge.cc +++ b/gtk2_ardour/meterbridge.cc @@ -337,7 +337,9 @@ Meterbridge::set_session (Session* s) } update_title (); - _show_busses = _session->config.get_show_busses_in_meterbridge(); + _show_busses = _session->config.get_show_busses_on_meterbridge(); + _show_master = _session->config.get_show_master_on_meterbridge(); + _show_midi = _session->config.get_show_midi_on_meterbridge(); SignalOrderRouteSorter sorter; boost::shared_ptr routes = _session->get_routes(); @@ -479,6 +481,7 @@ Meterbridge::fast_update_strips () return; } for (list::iterator i = strips.begin(); i != strips.end(); ++i) { + // TODO skip inactive/hidden routes (*i)->fast_update (); } } @@ -498,6 +501,7 @@ Meterbridge::add_strips (RouteList& routes) strip = new MeterStrip (_session, route); strips.push_back (strip); + route->active_changed.connect (*this, invalidator (*this), boost::bind (&Meterbridge::resync_order, this), gui_context ()); meterarea.pack_start (*strip, false, false); strip->show(); @@ -549,18 +553,15 @@ Meterbridge::sync_order_keys (RouteSortOrderKey src) for (list::iterator i = copy.begin(); i != copy.end(); ++i) { -#if 0 // TODO subscribe to route active,inactive changes, merge w/ bus if (! (*i)->route()->active()) { (*i)->hide(); - } else { - (*i)->show(); } -#endif - - // TODO simplyfy, abstract ->is_bus() - if ((*i)->route()->is_master()) { - /* always show master */ - (*i)->show(); + else if ((*i)->route()->is_master()) { + if (_show_master) { + (*i)->show(); + } else { + (*i)->hide(); + } } else if (boost::dynamic_pointer_cast((*i)->route()) == 0 && boost::dynamic_pointer_cast((*i)->route()) == 0 @@ -572,19 +573,39 @@ Meterbridge::sync_order_keys (RouteSortOrderKey src) (*i)->hide(); } } + else if (boost::dynamic_pointer_cast((*i)->route())) { + if (_show_midi) { + (*i)->show(); + } else { + (*i)->hide(); + } + } else { (*i)->show(); } - meterarea.reorder_child(*(*i), pos++); } } +void +Meterbridge::resync_order () +{ + sync_order_keys(MixerSort); +} + void Meterbridge::parameter_changed (std::string const & p) { - if (p == "show-busses-in-meterbridge") { - _show_busses = _session->config.get_show_busses_in_meterbridge(); + if (p == "show-busses-on-meterbridge") { + _show_busses = _session->config.get_show_busses_on_meterbridge(); + sync_order_keys(MixerSort); + } + else if (p == "show-master-on-meterbridge") { + _show_master = _session->config.get_show_master_on_meterbridge(); + sync_order_keys(MixerSort); + } + else if (p == "show-midi-on-meterbridge") { + _show_midi = _session->config.get_show_midi_on_meterbridge(); sync_order_keys(MixerSort); } } diff --git a/gtk2_ardour/meterbridge.h b/gtk2_ardour/meterbridge.h index f02d6b82ab..2e231861c7 100644 --- a/gtk2_ardour/meterbridge.h +++ b/gtk2_ardour/meterbridge.h @@ -60,6 +60,8 @@ class Meterbridge : bool _visible; bool _show_busses; + bool _show_master; + bool _show_midi; Gtk::ScrolledWindow scroller; Gtk::HBox meterarea; @@ -78,6 +80,7 @@ class Meterbridge : void session_going_away (); void sync_order_keys (ARDOUR::RouteSortOrderKey src); + void resync_order (); std::list strips; diff --git a/gtk2_ardour/session_option_editor.cc b/gtk2_ardour/session_option_editor.cc index c419a3ad2b..31629cf085 100644 --- a/gtk2_ardour/session_option_editor.cc +++ b/gtk2_ardour/session_option_editor.cc @@ -273,11 +273,26 @@ SessionOptionEditor::SessionOptionEditor (Session* s) )); add_option (_("Misc"), new OptionEditorHeading (_("Meterbridge Options"))); + + add_option (_("Misc"), new BoolOption ( + "show-midi-on-meterbridge", + _("Include Midi Tracks on Meterbridge"), + sigc::mem_fun (*_session_config, &SessionConfiguration::get_show_midi_on_meterbridge), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_show_midi_on_meterbridge) + )); + add_option (_("Misc"), new BoolOption ( - "show-busses-in-meterbridge", + "show-busses-on-meterbridge", _("Include Busses on Meterbridge"), - sigc::mem_fun (*_session_config, &SessionConfiguration::get_show_busses_in_meterbridge), - sigc::mem_fun (*_session_config, &SessionConfiguration::set_show_busses_in_meterbridge) + sigc::mem_fun (*_session_config, &SessionConfiguration::get_show_busses_on_meterbridge), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_show_busses_on_meterbridge) + )); + + add_option (_("Misc"), new BoolOption ( + "show-master-on-meterbridge", + _("Include Master Bus on Meterbridge"), + sigc::mem_fun (*_session_config, &SessionConfiguration::get_show_master_on_meterbridge), + sigc::mem_fun (*_session_config, &SessionConfiguration::set_show_master_on_meterbridge) )); } -- cgit v1.2.3