1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-12-22 08:31:14 +01:00

Track cut and copy functions return a unique_ptr argument...

... Because they are factory functions.
This commit is contained in:
Paul Licameli
2016-03-02 15:36:44 -05:00
parent 5ef4dd46a5
commit 3015a9c8d9
15 changed files with 144 additions and 153 deletions

View File

@@ -531,38 +531,51 @@ bool WaveTrack::IsEmpty(double t0, double t1)
return true;
}
bool WaveTrack::Cut(double t0, double t1, Track **dest)
Track::Holder WaveTrack::Cut(double t0, double t1)
{
if (t1 < t0)
return false;
return{};
if (!Copy(t0, t1, dest))
return false;
auto tmp = Copy(t0, t1);
return Clear(t0, t1);
if (!tmp)
return{};
if (!Clear(t0, t1))
return{};
return std::move(tmp);
}
bool WaveTrack::SplitCut(double t0, double t1, Track **dest)
Track::Holder WaveTrack::SplitCut(double t0, double t1)
{
if (t1 < t0)
return false;
return{};
// SplitCut is the same as 'Copy', then 'SplitDelete'
if (!Copy(t0, t1, dest))
return false;
return SplitDelete(t0, t1);
auto tmp = Copy(t0, t1);
if (!tmp)
return{};
if (!SplitDelete(t0, t1))
return{};
return std::move(tmp);
}
#if 0
bool WaveTrack::CutAndAddCutLine(double t0, double t1, Track **dest)
Track::Holder WaveTrack::CutAndAddCutLine(double t0, double t1)
{
if (t1 < t0)
return false;
return {};
// Cut is the same as 'Copy', then 'Delete'
if (!Copy(t0, t1, dest))
return false;
return ClearAndAddCutLine(t0, t1);
auto tmp = Copy(t0, t1);
if (!tmp)
return {};
if (!ClearAndAddCutLine(t0, t1))
return {};
return std::move(tmp);
}
#endif
@@ -625,14 +638,14 @@ bool WaveTrack::Trim (double t0, double t1)
bool WaveTrack::Copy(double t0, double t1, Track **dest) const
Track::Holder WaveTrack::Copy(double t0, double t1) const
{
*dest = NULL;
if (t1 <= t0)
return false;
return{};
WaveTrack *newTrack = new WaveTrack(mDirManager);
WaveTrack *newTrack;
Track::Holder result
{ newTrack = safenew WaveTrack{ mDirManager } };
newTrack->Init(*this);
@@ -710,14 +723,12 @@ bool WaveTrack::Copy(double t0, double t1, Track **dest) const
}
}
*dest = newTrack;
return true;
return std::move(result);
}
bool WaveTrack::CopyNonconst(double t0, double t1, Track **dest)
Track::Holder WaveTrack::CopyNonconst(double t0, double t1)
{
return Copy(t0, t1, dest);
return Copy(t0, t1);
}
bool WaveTrack::Clear(double t0, double t1)
@@ -1150,13 +1161,11 @@ bool WaveTrack::SyncLockAdjust(double oldT1, double newT1)
bool clipsCanMove = true;
gPrefs->Read(wxT("/GUI/EditClipCanMove"), &clipsCanMove);
if (clipsCanMove) {
Track *tmp = NULL;
ret = Cut (oldT1, GetEndTime() + 1.0/GetRate(), &tmp);
auto tmp = Cut (oldT1, GetEndTime() + 1.0/GetRate());
if (!ret) return false;
ret = Paste(newT1, tmp);
ret = Paste(newT1, tmp.get());
wxASSERT(ret);
delete tmp;
}
return ret;
@@ -1240,12 +1249,10 @@ bool WaveTrack::Paste(double t0, const Track *src)
// We need to insert multiple clips, so split the current clip and
// move everything to the right, then try to paste again
if (!IsEmpty(t0, GetEndTime())) {
Track *tmp = NULL;
Cut(t0, GetEndTime()+1.0/mRate, &tmp);
bool bResult = Paste(t0 + insertDuration, tmp);
auto tmp = Cut(t0, GetEndTime()+1.0/mRate);
bool bResult = Paste(t0 + insertDuration, tmp.get());
wxASSERT(bResult); // TO DO: Actually handle this.
wxUnusedVar(bResult);
delete tmp;
}
} else
{