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