[Summary] Implemented master bus use cases for inspector track view

[Details] 1. Made master bus shownable in inspector when no track selected in StereoOut, StereoOut mode has just been enabled, or there is no tracks at all in StereoOut.
2. Made master bus hidden in MultiOut mode in any case.
This commit is contained in:
GZharun 2014-08-04 14:35:13 +03:00
parent f4597492e4
commit 6acabf15ce
4 changed files with 86 additions and 16 deletions

View file

@ -64,6 +64,7 @@
#include "ardour/audio_track.h" #include "ardour/audio_track.h"
#include "ardour/audioengine.h" #include "ardour/audioengine.h"
#include "ardour/engine_state_controller.h"
#include "ardour/audioregion.h" #include "ardour/audioregion.h"
#include "ardour/location.h" #include "ardour/location.h"
#include "ardour/profile.h" #include "ardour/profile.h"
@ -502,6 +503,8 @@ Editor::Editor ()
selection->TimeChanged.connect (sigc::mem_fun(*this, &Editor::time_selection_changed)); selection->TimeChanged.connect (sigc::mem_fun(*this, &Editor::time_selection_changed));
selection->TracksChanged.connect (sigc::mem_fun(*this, &Editor::track_selection_changed)); selection->TracksChanged.connect (sigc::mem_fun(*this, &Editor::track_selection_changed));
EngineStateController::instance()->OutputConnectionModeChanged.connect (*this, invalidator (*this), boost::bind (&Editor::output_connection_mode_changed, this), gui_context() );
editor_regions_selection_changed_connection = selection->RegionsChanged.connect (sigc::mem_fun(*this, &Editor::region_selection_changed)); editor_regions_selection_changed_connection = selection->RegionsChanged.connect (sigc::mem_fun(*this, &Editor::region_selection_changed));
selection->PointsChanged.connect (sigc::mem_fun(*this, &Editor::point_selection_changed)); selection->PointsChanged.connect (sigc::mem_fun(*this, &Editor::point_selection_changed));
@ -1385,6 +1388,7 @@ Editor::set_session (Session *t)
ActionManager::ui_manager->signal_pre_activate().connect (sigc::mem_fun (*this, &Editor::action_pre_activated)); ActionManager::ui_manager->signal_pre_activate().connect (sigc::mem_fun (*this, &Editor::action_pre_activated));
start_updating_meters (); start_updating_meters ();
} }
void void
@ -5089,8 +5093,11 @@ Editor::add_routes (RouteList& routes)
for (RouteList::iterator x = routes.begin(); x != routes.end(); ++x) { for (RouteList::iterator x = routes.begin(); x != routes.end(); ++x) {
boost::shared_ptr<Route> route = (*x); boost::shared_ptr<Route> route = (*x);
bool is_master_visible = (Config->get_output_auto_connect() & AutoConnectMaster);
if (route->is_auditioner() || route->is_monitor() || if (route->is_auditioner() || route->is_monitor() ||
!boost::dynamic_pointer_cast<Track> (route)) { (!boost::dynamic_pointer_cast<Track> (route) &&
(route->is_master() && !is_master_visible ) ) ) {
continue; continue;
} }
@ -5187,7 +5194,7 @@ Editor::timeaxisview_deleted (TimeAxisView *tv)
} }
if (next_tv) { if (next_tv ) {
set_selected_mixer_strip (*next_tv); set_selected_mixer_strip (*next_tv);
} else { } else {
/* make the editor mixer strip go away setting the /* make the editor mixer strip go away setting the
@ -5763,3 +5770,28 @@ Editor::zoom_vertical_modifier_released()
{ {
_stepping_axis_view = 0; _stepping_axis_view = 0;
} }
void
Editor::output_connection_mode_changed ()
{
if (!_session) {
return;
}
if (Config->get_output_auto_connect() & AutoConnectMaster) {
if (_session->master_out() && !axis_view_from_route(_session->master_out() ) ) {
RouteList list;
list.push_back(_session->master_out() );
add_routes(list);
}
} else {
TimeAxisView* tv = 0;
if (_session->master_out() && (tv = axis_view_from_route(_session->master_out() ) ) ) {
delete tv;
}
}
track_selection_changed ();
}

View file

@ -1694,6 +1694,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void time_selection_changed (); void time_selection_changed ();
void update_time_selection_display (); void update_time_selection_display ();
void track_selection_changed (); void track_selection_changed ();
void output_connection_mode_changed ();
void region_selection_changed (); void region_selection_changed ();
sigc::connection editor_regions_selection_changed_connection; sigc::connection editor_regions_selection_changed_connection;
void sensitize_all_region_actions (bool); void sensitize_all_region_actions (bool);

View file

@ -49,6 +49,7 @@
using namespace std; using namespace std;
using namespace Gtkmm2ext; using namespace Gtkmm2ext;
using namespace PBD; using namespace PBD;
using namespace ARDOUR;
void void
Editor::editor_mixer_button_toggled () Editor::editor_mixer_button_toggled ()
@ -108,14 +109,24 @@ Editor::show_editor_mixer (bool yn)
return; return;
} }
// check if master is available: try to find it's view
TimeAxisView* tv;
if ( tv = axis_view_from_route (_session->master_out() ) ) {
RouteTimeAxisView* atv = dynamic_cast<RouteTimeAxisView*> (tv);
if ( atv != 0 ) {
r = atv->route();
}
} else {
// set the first track visible in inspector
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
RouteTimeAxisView* atv; RouteTimeAxisView* atv;
if ( atv = dynamic_cast<RouteTimeAxisView*> (*i) ) {
if ((atv = dynamic_cast<RouteTimeAxisView*> (*i)) != 0) {
r = atv->route(); r = atv->route();
break; break;
} }
} }
}
} else { } else {
sort_track_selection (selection->tracks); sort_track_selection (selection->tracks);

View file

@ -941,13 +941,39 @@ Editor::set_selected_regionview_from_map_event (GdkEventAny* /*ev*/, StreamView*
void void
Editor::track_selection_changed () Editor::track_selection_changed ()
{ {
switch (selection->tracks.size()) { if (!selection->tracks.empty() ) {
case 0:
break;
default:
set_selected_mixer_strip (*(selection->tracks.front())); set_selected_mixer_strip (*(selection->tracks.front()));
} else {
// set master bus visible if it's available
RouteTimeAxisView* rtv = 0;
bool set_master_bus = false;
if (_session ) {
TimeAxisView* tv = axis_view_from_route (_session->master_out() );
rtv = dynamic_cast <RouteTimeAxisView*> (tv);
if (rtv) {
set_master_bus = true;
}
}
// if master bus is not available (Multi Out mode)
if (!set_master_bus && !track_views.empty() ) {
TrackViewList::const_iterator iter = track_views.begin();
for (; iter != track_views.end() ; ++iter) {
if ( ( rtv = dynamic_cast <RouteTimeAxisView*> (*iter ) ) &&
!(rtv->route()->is_master() )) {
break; break;
} }
}
}
if (rtv) {
set_selected_mixer_strip (*rtv );
}
}
RouteNotificationListPtr routes (new RouteNotificationList); RouteNotificationListPtr routes (new RouteNotificationList);