Update of /cvsroot/audacity/audacity-src/src/toolbars
In directory sc8-pr-cvs11.sourceforge.net:/tmp/cvs-serv13385

Modified Files:
        ControlToolBar.cpp 
Log Message:
First crack at "Append Recording"...

Index: ControlToolBar.cpp
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/toolbars/ControlToolBar.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- ControlToolBar.cpp  25 Apr 2007 03:43:36 -0000      1.10
+++ ControlToolBar.cpp  5 May 2007 05:02:59 -0000       1.11
@@ -716,45 +716,81 @@
 
       bool duplex;
       gPrefs->Read(wxT("/AudioIO/Duplex"), &duplex, true);
-      int recordingChannels = gPrefs->Read(wxT("/AudioIO/RecordChannels"), 1);
-
       if( duplex )
          playbackTracks = t->GetWaveTrackArray(false);
       else
          playbackTracks = WaveTrackArray();
 
-      for( int c = 0; c < recordingChannels; c++ )
-      {
-         WaveTrack *newTrack = p->GetTrackFactory()->NewWaveTrack();
-         int initialheight = newTrack->GetHeight();
-         newTrack->SetOffset(t0);
-         newTrack->SetHeight(initialheight / recordingChannels);
-         if( recordingChannels == 2 )
+      // If SHIFT key was down, the user wants append to selected tracks
+      int recordingChannels = 0;
+      if (mRecord->WasShiftDown()) {
+         TrackListIterator it(t);
+         WaveTrack *wt;
+
+         // Find the maximum end time of selected tracks
+         for (Track *tt = it.First(); tt; tt = it.Next()) {
+            if (tt->GetKind() == Track::Wave && tt->GetSelected()) {
+               wt = (WaveTrack *)tt;
+               if (wt->GetEndTime() > t0) {
+                  t0 = wt->GetEndTime();
+               }
+            }
+         }
+
+         // Pad any selected tracks to make them all the same length
+         for (Track *tt = it.First(); tt; tt = it.Next()) {
+            if (tt->GetKind() == Track::Wave && tt->GetSelected()) {
+               wt = (WaveTrack *)tt;
+               t1 = wt->GetEndTime();
+               if (t1 < t0) {
+                  WaveTrack *newTrack = p->GetTrackFactory()->NewWaveTrack();
+                  newTrack->InsertSilence(0.0, t0 - t1);
+                  newTrack->Flush();
+                  wt->Clear(t1, t0);
+                  wt->Paste(t1, newTrack);
+                  delete newTrack;
+               }
+               newRecordingTracks.Add(wt);
+            }
+         }
+
+         t1 = 1000000000.0;     // record for a long, long time (tens of years)
+      }
+      else {
+         recordingChannels = gPrefs->Read(wxT("/AudioIO/RecordChannels"), 1);
+         for( int c = 0; c < recordingChannels; c++ )
          {
-            if( c == 0 )
+            WaveTrack *newTrack = p->GetTrackFactory()->NewWaveTrack();
+            int initialheight = newTrack->GetHeight();
+            newTrack->SetOffset(t0);
+            newTrack->SetHeight(initialheight / recordingChannels);
+            if( recordingChannels == 2 )
             {
-               newTrack->SetChannel(Track::LeftChannel);
-               newTrack->SetLinked(true);
+               if( c == 0 )
+               {
+                  newTrack->SetChannel(Track::LeftChannel);
+                  newTrack->SetLinked(true);
+               }
+               else
+               {
+                  newTrack->SetChannel(Track::RightChannel);
+                  newTrack->SetTeamed(true);
+               }
             }
             else
             {
-               newTrack->SetChannel(Track::RightChannel);
-               newTrack->SetTeamed(true);
+               newTrack->SetChannel( Track::MonoChannel );
             }
-         }
-         else
-         {
-            newTrack->SetChannel( Track::MonoChannel );
-         }
 
-         newRecordingTracks.Add(newTrack);
+            newRecordingTracks.Add(newTrack);
+         }
+         
+         // msmeyer: StartStream calls a callback which triggers auto-save, so
+         // we add the tracks where recording is done into now. We remove them
+         // later if starting the stream fails
+         for (unsigned int i = 0; i < newRecordingTracks.GetCount(); i++)
+            t->Add(newRecordingTracks[i]);
       }
-      
-      // msmeyer: StartStream calls a callback which triggers auto-save, so
-      // we add the tracks where recording is done into now. We remove them
-      // later if starting the stream fails
-      for (unsigned int i = 0; i < newRecordingTracks.GetCount(); i++)
-         t->Add(newRecordingTracks[i]);
 
       int token = gAudioIO->StartStream(playbackTracks,
                                         newRecordingTracks, t->GetTimeTrack(),


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Audacity-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/audacity-cvs

Reply via email to