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

Modified Files:
        WaveTrack.cpp WaveTrack.h 
Log Message:
fixed bugs with track groups and paste (e.g. Effect->Repeat and Generate 
Silence reported by Martyn Shaw)

Index: WaveTrack.h
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/WaveTrack.h,v
retrieving revision 1.68
retrieving revision 1.69
diff -u -d -r1.68 -r1.69
--- WaveTrack.h 18 Jun 2009 00:40:04 -0000      1.68
+++ WaveTrack.h 19 Jun 2009 15:26:27 -0000      1.69
@@ -130,7 +130,8 @@
    virtual bool ClearAndPaste(double t0, double t1,
                               Track *src,
                               bool preserve = true,
-                              bool merge = true);
+                              bool merge = true,
+                              TrackList* tracks = NULL);
 
    virtual bool Silence(double t0, double t1);
    virtual bool InsertSilence(double t, double len);
@@ -152,10 +153,10 @@
 
    bool Clear(double t0, double t1, TrackList* tracks);
    bool HandleGroupClear(double t0, double t1, bool addCutLines, bool split, 
TrackList* tracks = NULL);
-   bool HandleClear(double t0, double t1,
-                    bool addCutLines, bool split);
-                    
-   bool HandleGroupPaste(double t0, Track *src);
+   bool HandleClear(double t0, double t1, bool addCutLines, bool split);
+
+   bool Paste(double t0, Track *src, TrackList* tracks);
+   bool HandleGroupPaste(double t0, Track *src, TrackList* tracks = NULL);
    bool HandlePaste(double t0, Track *src);
 
    // Returns true if there are no WaveClips in that region

Index: WaveTrack.cpp
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/WaveTrack.cpp,v
retrieving revision 1.152
retrieving revision 1.153
diff -u -d -r1.152 -r1.153
--- WaveTrack.cpp       18 Jun 2009 00:40:04 -0000      1.152
+++ WaveTrack.cpp       19 Jun 2009 15:26:27 -0000      1.153
@@ -431,9 +431,14 @@
 }
 bool WaveTrack::Paste(double t0, Track *src)
 {
+   return Paste(t0, src, NULL);
+}
+
+bool WaveTrack::Paste(double t0, Track *src, TrackList* tracks)
+{
    AudacityProject *p = GetActiveProject();
-   if( p && p->IsSticky())
-      return HandleGroupPaste(t0, src);
+   if( p && p->IsSticky() && GetNode() )
+      return HandleGroupPaste(t0, src, tracks);
    else
       return HandlePaste(t0, src);
 }
@@ -448,7 +453,7 @@
    bool addCutLines = false;
    bool split = false;
    AudacityProject *p = GetActiveProject();
-   if( p && p->IsSticky())
+   if( p && p->IsSticky() && GetNode() )
       return HandleGroupClear(t0, t1, addCutLines, split, tracks);
    else
       return HandleClear(t0, t1, addCutLines, split);
@@ -481,7 +486,7 @@
 //
 bool WaveTrack::ClearAndPaste(double t0, double t1,
                               Track *src,
-                              bool preserve, bool merge)
+                              bool preserve, bool merge, TrackList* tracks)
 {
    WaveClipList::compatibility_iterator ic;
    WaveClipList::compatibility_iterator it;
@@ -492,7 +497,7 @@
 
    // If duration is 0, then it's just a plain paste
    if (dur == 0.0) {
-      return HandlePaste(t0, src);
+      return Paste(t0, src, tracks);
    }
 
    // Align to a sample
@@ -538,10 +543,10 @@
    }
 
    // Now, clear the selection
-   if (HandleClear(t0, t1, false, false)) {
+   if (Clear(t0, t1, tracks)) {
 
       // And paste in the new data
-      if (HandlePaste(t0, src)) {
+      if (Paste(t0, src, tracks)) {
          unsigned int i;
 
          // First, merge the new clip(s) in with the existing clips
@@ -787,38 +792,23 @@
    return true;
 }
 
-bool WaveTrack::HandleGroupPaste(double t0, Track *src)
+bool WaveTrack::HandleGroupPaste(double t0, Track *src, TrackList* tracks)
 {
+   // get tracks
    AudacityProject *p = GetActiveProject();
-   if(p){
-      double length = src->GetEndTime();
-      
-      TrackListIterator iter(p->GetTracks());
-      
-      int editGroup = 0;
-      Track *t=iter.First();
-      Track *n=t;
-      
-      while (t && t!= this){//find edit group number
-         n=iter.Next();
-         //we only add silence when we're on the first selected track
-         //to avoid adding it multiple times, though we paste in still
-         if (t->GetSelected()) return HandlePaste(t0, src);
-         if (n && n->GetKind()==Track::Wave && t->GetKind()==Track::Label) 
-            editGroup++;
-         t=n;
-      }
-      
-      t=iter.First();
-      for (int i=0; i<editGroup; i++){//go to first in edit group
-         while (t && t->GetKind()==Track::Wave) t=iter.Next();
-         while (t && t->GetKind()==Track::Label) t=iter.Next();
-      }
-      
-      while (t && t->GetKind()==Track::Wave){
+
+   if (p) {
+      if (!tracks) tracks = p->GetTracks();
+   }
+   else return false;
+   
+   double length = src->GetEndTime();
+   TrackGroupIterator it(tracks);
+   for( Track *t = it.First(this); t; t = it.Next() ) {
+      if (t->GetKind() == Track::Wave) {
          if (t==this){//paste in the track
             if ( !( ((WaveTrack *)t)->HandlePaste(t0, src)) ) return false;
-            if (t->GetLinked()) t=iter.Next();
+            if (t->GetLinked()) t=it.Next();
          }else{//insert silence
             if (! (t->GetSelected()) ){
                TrackFactory *factory = p->GetTrackFactory();
@@ -828,16 +818,12 @@
                if ( !( ((WaveTrack *)t)->HandlePaste(t0, tmp)) ) return false;
             }
          }
-         t=iter.Next();
       }
-      
-      while (t && t->GetKind()==Track::Label){
-         //printf ("t(l)(p): %x\n", t);
+      else if (t->GetKind() == Track::Label) {
          ((LabelTrack *)t)->ShiftLabelsOnInsert(length, t0);
-         t=iter.Next();
       }
-   }else return false;
-      
+   }
+
    return true;
 }
 


------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Audacity-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/audacity-cvs

Reply via email to