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 +++++++++-- libs/ardour/ardour/session_configuration_vars.h | 4 ++- 4 files changed, 58 insertions(+), 17 deletions(-) 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) )); } diff --git a/libs/ardour/ardour/session_configuration_vars.h b/libs/ardour/ardour/session_configuration_vars.h index 7069379b72..fb29004553 100644 --- a/libs/ardour/ardour/session_configuration_vars.h +++ b/libs/ardour/ardour/session_configuration_vars.h @@ -57,4 +57,6 @@ CONFIG_VARIABLE (bool, midi_copy_is_fork, "midi-copy-is-fork", false) CONFIG_VARIABLE (bool, glue_new_regions_to_bars_and_beats, "glue-new-regions-to-bars-and-beats", false) CONFIG_VARIABLE (bool, use_video_file_fps, "use-video-file-fps", false) CONFIG_VARIABLE (bool, videotimeline_pullup, "videotimeline-pullup", true) -CONFIG_VARIABLE (bool, show_busses_in_meterbridge, "show-busses-in-meterbridge", false) +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) -- cgit v1.2.3