Update of /cvsroot/audacity/audacity-src/src
In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv28056/src

Modified Files:
        Menus.cpp 
Log Message:
Fix pasting text into wrong label track.

Index: Menus.cpp
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/Menus.cpp,v
retrieving revision 1.474
retrieving revision 1.475
diff -u -d -r1.474 -r1.475
--- Menus.cpp   9 May 2009 18:01:59 -0000       1.474
+++ Menus.cpp   25 May 2009 07:45:47 -0000      1.475
@@ -2996,19 +2996,20 @@
 
 void AudacityProject::OnPaste()
 {
-   // If nothing's selected, we just insert new tracks...so first
-   // check to see if anything's selected
-   
-   TrackListIterator iter2(mTracks);
-   Track *countTrack = iter2.First();
+   // Handle Label tracks first
+   TrackListOfKindIterator iterlt(Track::Label, mTracks);
 
-   int numSelected = 0;
+   LabelTrack *lt = (LabelTrack *) iterlt.First();
+   if (lt) {
 
-   // Pastes text into the first label track or counts selected wave tracks
-   while (countTrack) {
-      if (countTrack->GetSelected()) {
-         if (countTrack->GetKind() == Track::Label) {
-            LabelTrack *lt = (LabelTrack *) countTrack;
+      // Look for selected label tracks and active labels
+      bool selected = false;
+      while (lt) {
+
+         // Does this track have an active label?
+         if (lt->IsSelected()) {
+
+            // Yes, so try pasting into it
             if (lt->PasteSelectedText(mViewInfo.sel0, mViewInfo.sel1)) {
                PushState(_("Pasted text from the clipboard"), _("Paste"));
 
@@ -3018,10 +3019,83 @@
                   mTrackPanel->ScrollIntoView(x);
                }
 
+               // Redraw everyting (is that necessary???) and bail
                RedrawProject();
                return;
             }
          }
+
+         // Remember that we found a selected one
+         if (lt->GetSelected()) {
+            selected = true;
+         }
+
+         // Find the next one
+         lt = (LabelTrack *) iterlt.Next();
+      }
+
+      // Were any Label tracks without active labels selected?
+      if (selected) {
+         LabelTrack *plt = NULL;
+         bool pasted = false;
+
+         // Paste new labels into all selected label tracks
+         lt = (LabelTrack *) iterlt.First();
+         while (lt) {
+            if (lt->GetSelected()) {
+               // Ensure that the last pasted label gets unselected.  This will
+               // leave only one "active" label when we're done.
+               if (plt) {
+                  plt->Unselect();
+               }
+
+               // Add a new label
+               lt->AddLabel(mViewInfo.sel0, mViewInfo.sel1);
+
+               // Now paste the text into it
+               if (lt->PasteSelectedText(mViewInfo.sel0, mViewInfo.sel1)) {
+
+                  // Remember that we pasted something
+                  pasted = true;
+
+                  // Make sure caret is in view
+                  int x;
+                  if (lt->CalcCursorX(this, &x)) {
+                     mTrackPanel->ScrollIntoView(x);
+                  }
+               }
+
+               // Remember this track so we can unselect the new label if its
+               // not the last one pasted
+               plt = lt;
+            }
+
+            // Find the next one
+            lt = (LabelTrack *) iterlt.Next();
+         }
+
+         // We're done if we pasted into any tracks
+         if (pasted) {
+            PushState(_("Pasted from the clipboard"), _("Paste"));
+
+            // Redraw everyting (is that necessary???) and bail
+            RedrawProject();
+            return;
+         }
+      }
+   }
+
+   // If nothing's selected, we just insert new tracks...so first
+   // check to see if anything's selected
+   
+   TrackListIterator iter2(mTracks);
+   Track *countTrack = iter2.First();
+
+   int numSelected = 0;
+
+   // Pastes text into the first label track or counts selected wave tracks
+   while (countTrack) {
+      if (countTrack->GetSelected()) {
          numSelected++;
       }
       countTrack = iter2.Next();
@@ -3082,7 +3156,7 @@
 
       mViewInfo.sel0 = 0.0;
       mViewInfo.sel1 = msClipLen;
-      
+
       PushState(_("Pasted from the clipboard"), _("Paste"));
       
       RedrawProject();


------------------------------------------------------------------------------
Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
is a gathering of tech-side developers & brand creativity professionals. Meet
the minds behind Google Creative Lab, Visual Complexity, Processing, & 
iPhoneDevCamp asthey present alongside digital heavyweights like Barbarian
Group, R/GA, & Big Spaceship. http://www.creativitycat.com 
_______________________________________________
Audacity-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/audacity-cvs

Reply via email to