summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2006-08-16 20:22:44 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2006-08-16 20:22:44 +0000
commit199dce57f35014189f21c76fff32e0752bcc8c15 (patch)
tree8e70c240c4551236f63dc086d310586e52c057a8 /gtk2_ardour
parent279128c81e3d0756db961cdf8da770b2b92afddd (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.cc24
-rw-r--r--gtk2_ardour/ardour_ui.h8
-rw-r--r--gtk2_ardour/ardour_ui_ed.cc2
-rw-r--r--gtk2_ardour/editor_audio_import.cc16
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;
}
}