summaryrefslogtreecommitdiff
path: root/gtk2_ardour/ardour_ui.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/ardour_ui.cc')
-rw-r--r--gtk2_ardour/ardour_ui.cc35
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);