1
0
mirror of https://github.com/cookiengineer/audacity synced 2026-02-05 03:03:10 +01:00

More pure virtuals in Track, supply Note and Time overrides

This commit is contained in:
Paul Licameli
2017-03-31 14:54:55 -04:00
parent ad34145ded
commit f1b354b141
5 changed files with 81 additions and 14 deletions

View File

@@ -63,20 +63,24 @@ TimeTrack::TimeTrack(const std::shared_ptr<DirManager> &projDirManager, const Zo
blankPen.SetColour(214, 214, 214);
}
TimeTrack::TimeTrack(const TimeTrack &orig):
Track(orig)
TimeTrack::TimeTrack(const TimeTrack &orig, double *pT0, double *pT1)
: Track(orig)
, mZoomInfo(orig.mZoomInfo)
{
Init(orig); // this copies the TimeTrack metadata (name, range, etc)
///@TODO: Give Envelope:: a copy-constructor instead of this?
mEnvelope = std::make_unique<Envelope>();
mEnvelope->Flatten(1.0);
mEnvelope->SetTrackLen(DBL_MAX);
SetInterpolateLog(orig.GetInterpolateLog()); // this calls Envelope::SetInterpolateDB
mEnvelope->Flatten(1.0);
mEnvelope->SetOffset(0);
mEnvelope->SetRange(orig.mEnvelope->GetMinValue(), orig.mEnvelope->GetMaxValue());
mEnvelope->Paste(0.0, orig.mEnvelope.get());
if ( pT0 && pT1 )
// restricted copy
mEnvelope->CopyFrom(orig.mEnvelope.get(), *pT0, *pT1);
else
mEnvelope->Paste(0.0, orig.mEnvelope.get());
///@TODO: Give Ruler:: a copy-constructor instead of this?
mRuler = std::make_unique<Ruler>();
@@ -103,6 +107,45 @@ TimeTrack::~TimeTrack()
{
}
Track::Holder TimeTrack::Cut( double t0, double t1 )
{
auto result = Copy( t0, t1, false );
Clear( t0, t1 );
return result;
}
Track::Holder TimeTrack::Copy( double t0, double t1, bool ) const
{
auto result = std::make_unique<TimeTrack>( *this, &t0, &t1 );
return Track::Holder{ std::move( result ) };
}
bool TimeTrack::Clear(double t0, double t1)
{
mEnvelope->CollapseRegion(t0, t1);
return true;
}
bool TimeTrack::Paste(double t, const Track * src)
{
if (src->GetKind() != Track::Time)
return false;
mEnvelope->Paste(t, static_cast<const TimeTrack*>(src)->mEnvelope.get());
return true;
}
bool TimeTrack::Silence(double t0, double t1)
{
return true;
}
bool TimeTrack::InsertSilence(double t, double len)
{
mEnvelope->InsertSpace(t, len);
return true;
}
Track::Holder TimeTrack::Duplicate() const
{
return std::make_unique<TimeTrack>(*this);