mirror of
https://github.com/cookiengineer/audacity
synced 2025-09-09 08:53:23 +02:00
Track duplication methods return unique_ptr, although some callers...
... simply release() them for now.
This commit is contained in:
parent
5162ab5c5b
commit
f42a953752
@ -1136,9 +1136,9 @@ double LabelTrack::GetEndTime() const
|
|||||||
return end;
|
return end;
|
||||||
}
|
}
|
||||||
|
|
||||||
Track *LabelTrack::Duplicate() const
|
Track::Holder LabelTrack::Duplicate() const
|
||||||
{
|
{
|
||||||
return new LabelTrack(*this);
|
return std::make_unique<LabelTrack>( *this );
|
||||||
}
|
}
|
||||||
|
|
||||||
void LabelTrack::SetSelected(bool s)
|
void LabelTrack::SetSelected(bool s)
|
||||||
|
@ -139,7 +139,8 @@ class AUDACITY_DLL_API LabelTrack final : public Track
|
|||||||
double GetStartTime() const override;
|
double GetStartTime() const override;
|
||||||
double GetEndTime() const override;
|
double GetEndTime() const override;
|
||||||
|
|
||||||
Track *Duplicate() const override;
|
using Holder = std::unique_ptr<LabelTrack>;
|
||||||
|
Track::Holder Duplicate() const override;
|
||||||
|
|
||||||
void SetSelected(bool s) override;
|
void SetSelected(bool s) override;
|
||||||
|
|
||||||
|
@ -135,9 +135,9 @@ NoteTrack::~NoteTrack()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Track *NoteTrack::Duplicate() const
|
Track::Holder NoteTrack::Duplicate() const
|
||||||
{
|
{
|
||||||
NoteTrack *duplicate = new NoteTrack(mDirManager);
|
auto duplicate = std::make_unique<NoteTrack>(mDirManager);
|
||||||
duplicate->Init(*this);
|
duplicate->Init(*this);
|
||||||
// Duplicate on NoteTrack moves data from mSeq to mSerializationBuffer
|
// Duplicate on NoteTrack moves data from mSeq to mSerializationBuffer
|
||||||
// and from mSerializationBuffer to mSeq on alternate calls. Duplicate
|
// and from mSerializationBuffer to mSeq on alternate calls. Duplicate
|
||||||
@ -169,7 +169,7 @@ Track *NoteTrack::Duplicate() const
|
|||||||
#ifdef EXPERIMENTAL_MIDI_OUT
|
#ifdef EXPERIMENTAL_MIDI_OUT
|
||||||
duplicate->SetGain(GetGain());
|
duplicate->SetGain(GetGain());
|
||||||
#endif
|
#endif
|
||||||
return duplicate;
|
return std::move(duplicate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -196,10 +196,10 @@ void NoteTrack::WarpAndTransposeNotes(double t0, double t1,
|
|||||||
// Since this is a duplicate and duplicates convert mSeq to
|
// Since this is a duplicate and duplicates convert mSeq to
|
||||||
// a text string for saving as XML, we probably have to
|
// a text string for saving as XML, we probably have to
|
||||||
// duplicate again to get back an mSeq
|
// duplicate again to get back an mSeq
|
||||||
NoteTrack *nt = this;
|
double offset = this->GetOffset(); // track is shifted this amount
|
||||||
double offset = nt->GetOffset(); // track is shifted this amount
|
|
||||||
if (!mSeq) { // replace saveme with an (unserialized) duplicate
|
if (!mSeq) { // replace saveme with an (unserialized) duplicate
|
||||||
nt = (NoteTrack *) this->Duplicate();
|
Track::Holder unt{ Duplicate() };
|
||||||
|
const auto nt = static_cast<NoteTrack*>(unt.get());
|
||||||
wxASSERT(!mSeq && nt->mSeq && !nt->mSerializationBuffer);
|
wxASSERT(!mSeq && nt->mSeq && !nt->mSerializationBuffer);
|
||||||
// swap mSeq and Buffer between this and nt
|
// swap mSeq and Buffer between this and nt
|
||||||
nt->mSerializationBuffer = mSerializationBuffer;
|
nt->mSerializationBuffer = mSerializationBuffer;
|
||||||
@ -208,7 +208,6 @@ void NoteTrack::WarpAndTransposeNotes(double t0, double t1,
|
|||||||
mSerializationLength = 0;
|
mSerializationLength = 0;
|
||||||
mSeq = nt->mSeq;
|
mSeq = nt->mSeq;
|
||||||
nt->mSeq = NULL;
|
nt->mSeq = NULL;
|
||||||
delete nt; // delete the duplicate
|
|
||||||
}
|
}
|
||||||
mSeq->convert_to_seconds(); // make sure time units are right
|
mSeq->convert_to_seconds(); // make sure time units are right
|
||||||
t1 -= offset; // adjust time range to compensate for track offset
|
t1 -= offset; // adjust time range to compensate for track offset
|
||||||
@ -821,9 +820,11 @@ void NoteTrack::WriteXML(XMLWriter &xmlFile)
|
|||||||
// NoteTrack.) In this case, mSeq will be NULL. To avoid a crash
|
// NoteTrack.) In this case, mSeq will be NULL. To avoid a crash
|
||||||
// and perform WriteXML, we may need to restore NoteTracks from binary
|
// and perform WriteXML, we may need to restore NoteTracks from binary
|
||||||
// blobs to regular data structures (with an Alg_seq member).
|
// blobs to regular data structures (with an Alg_seq member).
|
||||||
|
Track::Holder holder;
|
||||||
NoteTrack *saveme = this;
|
NoteTrack *saveme = this;
|
||||||
if (!mSeq) { // replace saveme with an (unserialized) duplicate
|
if (!mSeq) { // replace saveme with an (unserialized) duplicate
|
||||||
saveme = (NoteTrack *) this->Duplicate();
|
holder = Duplicate();
|
||||||
|
saveme = static_cast<NoteTrack*>(holder.get());
|
||||||
assert(saveme->mSeq);
|
assert(saveme->mSeq);
|
||||||
}
|
}
|
||||||
saveme->mSeq->write(data, true);
|
saveme->mSeq->write(data, true);
|
||||||
@ -841,9 +842,6 @@ void NoteTrack::WriteXML(XMLWriter &xmlFile)
|
|||||||
xmlFile.WriteAttr(wxT("bottomnote"), saveme->mBottomNote);
|
xmlFile.WriteAttr(wxT("bottomnote"), saveme->mBottomNote);
|
||||||
xmlFile.WriteAttr(wxT("data"), wxString(data.str().c_str(), wxConvUTF8));
|
xmlFile.WriteAttr(wxT("data"), wxString(data.str().c_str(), wxConvUTF8));
|
||||||
xmlFile.EndTag(wxT("notetrack"));
|
xmlFile.EndTag(wxT("notetrack"));
|
||||||
if (this != saveme) {
|
|
||||||
delete saveme; // DELETE the duplicate
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void NoteTrack::StartVScroll()
|
void NoteTrack::StartVScroll()
|
||||||
|
@ -57,7 +57,8 @@ class AUDACITY_DLL_API NoteTrack final : public Track {
|
|||||||
NoteTrack(DirManager * projDirManager);
|
NoteTrack(DirManager * projDirManager);
|
||||||
virtual ~NoteTrack();
|
virtual ~NoteTrack();
|
||||||
|
|
||||||
Track *Duplicate() const override;
|
using Holder = std::unique_ptr<NoteTrack>;
|
||||||
|
Track::Holder Duplicate() const override;
|
||||||
|
|
||||||
int GetKind() const override { return Note; }
|
int GetKind() const override { return Note; }
|
||||||
|
|
||||||
|
@ -2751,7 +2751,7 @@ void AudacityProject::OpenFile(const wxString &fileNameArg, bool addtohistory)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mLastSavedTracks->Add(t->Duplicate());
|
mLastSavedTracks->Add(t->Duplicate().release());
|
||||||
t = iter.Next();
|
t = iter.Next();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3549,7 +3549,7 @@ bool AudacityProject::Save(bool overwrite /* = true */ ,
|
|||||||
Track *t = iter.First();
|
Track *t = iter.First();
|
||||||
Track *dupT;
|
Track *dupT;
|
||||||
while (t) {
|
while (t) {
|
||||||
dupT = t->Duplicate();
|
dupT = t->Duplicate().release();
|
||||||
mLastSavedTracks->Add(dupT);
|
mLastSavedTracks->Add(dupT);
|
||||||
|
|
||||||
//only after the xml has been saved we can mark it saved.
|
//only after the xml has been saved we can mark it saved.
|
||||||
@ -4066,8 +4066,7 @@ void AudacityProject::PopState(const UndoState &state)
|
|||||||
|
|
||||||
while (t)
|
while (t)
|
||||||
{
|
{
|
||||||
copyTrack=t->Duplicate();
|
mTracks->Add(copyTrack = t->Duplicate().release());
|
||||||
mTracks->Add(copyTrack);
|
|
||||||
|
|
||||||
//add the track to OD if the manager exists. later we might do a more rigorous check...
|
//add the track to OD if the manager exists. later we might do a more rigorous check...
|
||||||
if (copyTrack->GetKind() == Track::Wave)
|
if (copyTrack->GetKind() == Track::Wave)
|
||||||
|
@ -109,9 +109,9 @@ TimeTrack::~TimeTrack()
|
|||||||
delete mRuler;
|
delete mRuler;
|
||||||
}
|
}
|
||||||
|
|
||||||
Track *TimeTrack::Duplicate() const
|
Track::Holder TimeTrack::Duplicate() const
|
||||||
{
|
{
|
||||||
return new TimeTrack(*this);
|
return std::make_unique<TimeTrack>(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TimeTrack::GetInterpolateLog() const
|
bool TimeTrack::GetInterpolateLog() const
|
||||||
|
@ -132,7 +132,9 @@ class TimeTrack final : public Track {
|
|||||||
* @param orig the TimeTrack to copy from
|
* @param orig the TimeTrack to copy from
|
||||||
*/
|
*/
|
||||||
void Init(const TimeTrack &orig);
|
void Init(const TimeTrack &orig);
|
||||||
Track *Duplicate() const override;
|
|
||||||
|
using Holder = std::unique_ptr<TimeTrack>;
|
||||||
|
Track::Holder Duplicate() const override;
|
||||||
|
|
||||||
friend class TrackFactory;
|
friend class TrackFactory;
|
||||||
|
|
||||||
|
@ -746,7 +746,7 @@ void TrackList::DoAssign(const TrackList &that)
|
|||||||
mDestructorDeletesTracks = true;
|
mDestructorDeletesTracks = true;
|
||||||
TrackListConstIterator it(&that);
|
TrackListConstIterator it(&that);
|
||||||
for (const Track *track = it.First(); track; track = it.Next())
|
for (const Track *track = it.First(); track; track = it.Next())
|
||||||
Add(track->Duplicate());
|
Add(track->Duplicate().release());
|
||||||
}
|
}
|
||||||
|
|
||||||
void TrackList::Swap(TrackList &that)
|
void TrackList::Swap(TrackList &that)
|
||||||
|
@ -165,7 +165,9 @@ class AUDACITY_DLL_API Track /* not final */ : public XMLTagHandler
|
|||||||
virtual ~ Track();
|
virtual ~ Track();
|
||||||
|
|
||||||
void Init(const Track &orig);
|
void Init(const Track &orig);
|
||||||
virtual Track *Duplicate() const = 0;
|
|
||||||
|
using Holder = std::unique_ptr<Track>;
|
||||||
|
virtual Holder Duplicate() const = 0;
|
||||||
|
|
||||||
// Called when this track is merged to stereo with another, and should
|
// Called when this track is merged to stereo with another, and should
|
||||||
// take on some paramaters of its partner.
|
// take on some paramaters of its partner.
|
||||||
|
@ -214,7 +214,7 @@ void UndoManager::ModifyState(const TrackList * l,
|
|||||||
TrackListConstIterator iter(l);
|
TrackListConstIterator iter(l);
|
||||||
const Track *t = iter.First();
|
const Track *t = iter.First();
|
||||||
while (t) {
|
while (t) {
|
||||||
tracksCopy->Add(t->Duplicate());
|
tracksCopy->Add(t->Duplicate().release());
|
||||||
t = iter.Next();
|
t = iter.Next();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -259,7 +259,7 @@ void UndoManager::PushState(const TrackList * l,
|
|||||||
TrackListConstIterator iter(l);
|
TrackListConstIterator iter(l);
|
||||||
const Track *t = iter.First();
|
const Track *t = iter.First();
|
||||||
while (t) {
|
while (t) {
|
||||||
tracksCopy->Add(t->Duplicate());
|
tracksCopy->Add(t->Duplicate().release());
|
||||||
t = iter.Next();
|
t = iter.Next();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ bool WaveTrack::mMonoAsVirtualStereo;
|
|||||||
|
|
||||||
WaveTrack* TrackFactory::DuplicateWaveTrack(WaveTrack &orig)
|
WaveTrack* TrackFactory::DuplicateWaveTrack(WaveTrack &orig)
|
||||||
{
|
{
|
||||||
return (WaveTrack*)(orig.Duplicate());
|
return (WaveTrack*)(orig.Duplicate().release());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -355,9 +355,9 @@ void WaveTrack::SetSpectrumBounds(float min, float max) const
|
|||||||
mSpectrumMax = max;
|
mSpectrumMax = max;
|
||||||
}
|
}
|
||||||
|
|
||||||
Track *WaveTrack::Duplicate() const
|
Track::Holder WaveTrack::Duplicate() const
|
||||||
{
|
{
|
||||||
return new WaveTrack(*this);
|
return Track::Holder{ safenew WaveTrack{ *this } };
|
||||||
}
|
}
|
||||||
|
|
||||||
double WaveTrack::GetRate() const
|
double WaveTrack::GetRate() const
|
||||||
|
@ -75,7 +75,9 @@ class AUDACITY_DLL_API WaveTrack final : public Track {
|
|||||||
WaveTrack(const WaveTrack &orig);
|
WaveTrack(const WaveTrack &orig);
|
||||||
|
|
||||||
void Init(const WaveTrack &orig);
|
void Init(const WaveTrack &orig);
|
||||||
virtual Track *Duplicate() const override;
|
|
||||||
|
Track::Holder Duplicate() const override;
|
||||||
|
|
||||||
#ifdef EXPERIMENTAL_OUTPUT_DISPLAY
|
#ifdef EXPERIMENTAL_OUTPUT_DISPLAY
|
||||||
void VirtualStereoInit();
|
void VirtualStereoInit();
|
||||||
#endif
|
#endif
|
||||||
@ -87,6 +89,7 @@ class AUDACITY_DLL_API WaveTrack final : public Track {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef WaveTrackLocation Location;
|
typedef WaveTrackLocation Location;
|
||||||
|
using Holder = std::unique_ptr<WaveTrack>;
|
||||||
|
|
||||||
virtual ~WaveTrack();
|
virtual ~WaveTrack();
|
||||||
double GetOffset() const override;
|
double GetOffset() const override;
|
||||||
|
@ -2117,7 +2117,7 @@ void Effect::CopyInputTracks(int trackType)
|
|||||||
if (aTrack->GetSelected() ||
|
if (aTrack->GetSelected() ||
|
||||||
(trackType == Track::All && aTrack->IsSyncLockSelected()))
|
(trackType == Track::All && aTrack->IsSyncLockSelected()))
|
||||||
{
|
{
|
||||||
Track *o = aTrack->Duplicate();
|
Track *o = aTrack->Duplicate().release();
|
||||||
mOutputTracks->Add(o);
|
mOutputTracks->Add(o);
|
||||||
mIMap.Add(aTrack);
|
mIMap.Add(aTrack);
|
||||||
mOMap.Add(o);
|
mOMap.Add(o);
|
||||||
|
@ -1098,11 +1098,11 @@ void ControlToolBar::SetupCutPreviewTracks(double WXUNUSED(playStart), double cu
|
|||||||
if (track1)
|
if (track1)
|
||||||
{
|
{
|
||||||
// Duplicate and change tracks
|
// Duplicate and change tracks
|
||||||
track1 = track1->Duplicate();
|
track1 = track1->Duplicate().release();
|
||||||
track1->Clear(cutStart, cutEnd);
|
track1->Clear(cutStart, cutEnd);
|
||||||
if (track2)
|
if (track2)
|
||||||
{
|
{
|
||||||
track2 = track2->Duplicate();
|
track2 = track2->Duplicate().release();
|
||||||
track2->Clear(cutStart, cutEnd);
|
track2->Clear(cutStart, cutEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user