diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2006-08-16 20:22:44 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2006-08-16 20:22:44 +0000 |
commit | 199dce57f35014189f21c76fff32e0752bcc8c15 (patch) | |
tree | 8e70c240c4551236f63dc086d310586e52c057a8 /gtk2_ardour | |
parent | 279128c81e3d0756db961cdf8da770b2b92afddd (diff) |
make adding multiple tracks more efficient (a *lot* more efficient)
git-svn-id: svn://localhost/ardour2/trunk@834 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 24 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.h | 8 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui_ed.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/editor_audio_import.cc | 16 |
4 files changed, 31 insertions, 19 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index bca27c7231..345f715d39 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -874,9 +874,10 @@ ARDOUR_UI::session_add_midi_track () } void -ARDOUR_UI::session_add_audio_route (bool disk, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode) +ARDOUR_UI::session_add_audio_route (bool disk, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode, uint32_t how_many) { - boost::shared_ptr<Route> route; + boost::shared_ptr<Route> route; + vector<boost::shared_ptr<AudioTrack> > routes; if (session == 0) { warning << _("You cannot add a track without a session already loaded.") << endmsg; @@ -885,9 +886,16 @@ ARDOUR_UI::session_add_audio_route (bool disk, int32_t input_channels, int32_t o try { if (disk) { - if ((route = session->new_audio_track (input_channels, output_channels, mode)) == 0) { - error << _("could not create new audio track") << endmsg; + routes = session->new_audio_track (input_channels, output_channels, mode, how_many); + + if (routes.size() != how_many) { + if (how_many == 1) { + error << _("could not create a new audio track") << endmsg; + } else { + error << string_compose (_("could not create %1 new audio tracks"), how_many) << endmsg; + } } + } else { if ((route = session->new_audio_route (input_channels, output_channels)) == 0) { error << _("could not create new audio bus") << endmsg; @@ -2075,10 +2083,10 @@ ARDOUR_UI::add_route () /* XXX do something with name template */ - while (count) { - if (track) { - session_add_audio_track (input_chan, output_chan, add_route_dialog->mode()); - } else { + if (track) { + session_add_audio_track (input_chan, output_chan, add_route_dialog->mode(), count); + } else { + while (count) { session_add_audio_bus (input_chan, output_chan); } --count; diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index c8d0d70a7d..ebb5c76838 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -189,12 +189,12 @@ class ARDOUR_UI : public Gtkmm2ext::UI void add_route (); - void session_add_audio_track (int input_channels, int32_t output_channels, ARDOUR::TrackMode mode) { - session_add_audio_route (true, input_channels, output_channels, mode); + void session_add_audio_track (int input_channels, int32_t output_channels, ARDOUR::TrackMode mode, uint32_t how_many) { + session_add_audio_route (true, input_channels, output_channels, mode, how_many); } void session_add_audio_bus (int input_channels, int32_t output_channels) { - session_add_audio_route (false, input_channels, output_channels, ARDOUR::Normal); + session_add_audio_route (false, input_channels, output_channels, ARDOUR::Normal, 1); } void session_add_midi_track (); @@ -532,7 +532,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI void save_template (); - void session_add_audio_route (bool disk, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode); + void session_add_audio_route (bool disk, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode, uint32_t how_many); void set_transport_sensitivity (bool); diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index 238f81dd4f..3d8e99ad6e 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -194,7 +194,7 @@ ARDOUR_UI::install_actions () ActionManager::register_action (common_actions, X_("About"), _("About"), mem_fun(*this, &ARDOUR_UI::show_splash)); act = ActionManager::register_toggle_action (common_actions, X_("ToggleColorManager"), _("Colors"), mem_fun(*this, &ARDOUR_UI::toggle_color_manager)); - act = ActionManager::register_action (common_actions, X_("AddAudioTrack"), _("Add Audio Track"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_track), 1, 1, ARDOUR::Normal)); + act = ActionManager::register_action (common_actions, X_("AddAudioTrack"), _("Add Audio Track"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_track), 1, 1, ARDOUR::Normal, 1)); ActionManager::session_sensitive_actions.push_back (act); act = ActionManager::register_action (common_actions, X_("AddAudioBus"), _("Add Audio Bus"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_bus), 1, 1)); ActionManager::session_sensitive_actions.push_back (act); diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc index b6fdefa4d3..4128348e3a 100644 --- a/gtk2_ardour/editor_audio_import.cc +++ b/gtk2_ardour/editor_audio_import.cc @@ -332,17 +332,21 @@ Editor::finish_bringing_in_audio (AudioRegion& region, uint32_t in_chans, uint32 case ImportAsTrack: { - boost::shared_ptr<AudioTrack> at (session->new_audio_track (in_chans, out_chans, Normal)); - copy = new AudioRegion (region); - at->diskstream()->playlist()->add_region (*copy, pos); + vector<boost::shared_ptr<AudioTrack> > at (session->new_audio_track (in_chans, out_chans, Normal, 1)); + if (!at.empty()) { + copy = new AudioRegion (region); + at.front()->diskstream()->playlist()->add_region (*copy, pos); + } break; } case ImportAsTapeTrack: { - boost::shared_ptr<AudioTrack> at (session->new_audio_track (in_chans, out_chans, Destructive)); - copy = new AudioRegion (region); - at->diskstream()->playlist()->add_region (*copy, pos); + vector<boost::shared_ptr<AudioTrack> > at (session->new_audio_track (in_chans, out_chans, Destructive)); + if (!at.empty()) { + copy = new AudioRegion (region); + at.front()->diskstream()->playlist()->add_region (*copy, pos); + } break; } } |