diff options
Diffstat (limited to 'gtk2_ardour/ardour_ui.cc')
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 0c2b46ce7f..31b79d1657 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -3760,6 +3760,36 @@ ARDOUR_UI::start_duplicate_routes () duplicate_routes_dialog->signal_response().connect (sigc::mem_fun (*this, &ARDOUR_UI::finish_duplicate_routes)); } + TrackSelection& tracks (editor->get_selection().tracks); + uint32_t ntracks = 0; + uint32_t nbusses = 0; + + for (TrackSelection::iterator t = tracks.begin(); t != tracks.end(); ++t) { + + RouteUI* rui = dynamic_cast<RouteUI*> (*t); + + if (!rui) { + /* some other type of timeaxis view, not a route */ + continue; + } + + boost::shared_ptr<Route> r (rui->route()); + + if (boost::dynamic_pointer_cast<Track> (r)) { + ntracks++; + } else { + if (!r->is_master() && !r->is_monitor()) { + nbusses++; + } + } + } + + if (ntracks == 0 && nbusses == 0) { + cerr << "You can't do this\n"; + return; + } + + duplicate_routes_dialog->setup (ntracks, nbusses); duplicate_routes_dialog->present (); } @@ -3793,6 +3823,11 @@ ARDOUR_UI::finish_duplicate_routes (int response) continue; } + if (rui->route()->is_master() || rui->route()->is_monitor()) { + /* no option to duplicate these */ + continue; + } + XMLNode& state (rui->route()->get_state()); RouteList rl = _session->new_route_from_template (count, state, string(), playlist_disposition); |