Audacity  3.0.0
TrackFactory.cpp
Go to the documentation of this file.
1 /**********************************************************************
2 
3 Audacity: A Digital Audio Editor
4 
5 TrackFactory.h
6 
7 Paul Licameli -- split from Track.h
8 
9 **********************************************************************/
10 
11 #include "TrackFactory.h"
12 
13 #include "LabelTrack.h"
14 #include "NoteTrack.h"
15 #include "TimeTrack.h"
16 #include "ViewInfo.h"
17 #include "WaveTrack.h"
18 
20 {
21  return std::make_shared<LabelTrack>();
22 }
23 
25 {
26  return std::make_shared<NoteTrack>();
27 }
28 
29 std::shared_ptr<TimeTrack> TrackFactory::NewTimeTrack()
30 {
31  return std::make_shared<TimeTrack>(mZoomInfo);
32 }
33 
35 {
36  return std::static_pointer_cast<WaveTrack>( orig.Duplicate() );
37 }
38 
40 {
41  if (format == (sampleFormat)0)
43  if (rate == 0)
44  rate = mSettings.GetRate();
45  return std::make_shared<WaveTrack> ( &mProject, format, rate );
46 }
47 
48 static auto TrackFactoryFactory = []( AudacityProject &project ) {
49  auto &viewInfo = ViewInfo::Get( project );
50  return std::make_shared< TrackFactory >(
51  ProjectSettings::Get( project ),
52  project, &viewInfo );
53 };
54 
57 };
58 
60 {
61  return project.AttachedObjects::Get< TrackFactory >( key2 );
62 }
63 
65 {
66  return Get( const_cast< AudacityProject & >( project ) );
67 }
68 
70 {
71  auto result = TrackFactoryFactory( project );
72  project.AttachedObjects::Assign( key2, result );
73  return *result;
74 }
75 
77 {
78  project.AttachedObjects::Assign( key2, nullptr );
79 }
WaveTrack.h
ViewInfo::Get
static ViewInfo & Get(AudacityProject &project)
Definition: ViewInfo.cpp:162
WaveTrack
A Track that contains audio waveform data.
Definition: WaveTrack.h:68
TrackFactoryFactory
static auto TrackFactoryFactory
Definition: TrackFactory.cpp:48
TrackFactory::mSettings
const ProjectSettings & mSettings
Definition: TrackFactory.h:38
TrackFactory.h
Track::Duplicate
virtual Holder Duplicate() const
Definition: Track.cpp:113
ProjectSettings::Get
static ProjectSettings & Get(AudacityProject &project)
Definition: ProjectSettings.cpp:39
NoteTrack.h
TimeTrack.h
TrackFactory::Destroy
static void Destroy(AudacityProject &project)
Definition: TrackFactory.cpp:76
TrackFactory::NewTimeTrack
std::shared_ptr< TimeTrack > NewTimeTrack()
Definition: TrackFactory.cpp:29
TrackFactory::NewWaveTrack
std::shared_ptr< WaveTrack > NewWaveTrack(sampleFormat format=(sampleFormat) 0, double rate=0)
Definition: TrackFactory.cpp:39
ClientData::Site::RegisteredFactory
Client code makes static instance from a factory of attachments; passes it to Get or Find as a retrie...
Definition: ClientData.h:266
TrackFactory::NewNoteTrack
std::shared_ptr< NoteTrack > NewNoteTrack()
Definition: TrackFactory.cpp:24
key2
static const AudacityProject::AttachedObjects::RegisteredFactory key2
Definition: TrackFactory.cpp:55
WaveTrack::Holder
std::shared_ptr< WaveTrack > Holder
Definition: WaveTrack.h:93
sampleFormat
sampleFormat
Definition: Types.h:725
format
int format
Definition: ExportPCM.cpp:54
ViewInfo.h
LabelTrack.h
TrackFactory
Definition: TrackFactory.h:20
QualityPrefs::SampleFormatChoice
static sampleFormat SampleFormatChoice()
Definition: QualityPrefs.cpp:246
TrackFactory::DuplicateWaveTrack
std::shared_ptr< WaveTrack > DuplicateWaveTrack(const WaveTrack &orig)
Definition: TrackFactory.cpp:34
AudacityProject
The top-level handle to an Audacity project. It serves as a source of events that other objects can b...
Definition: Project.h:112
ProjectSettings::GetRate
double GetRate() const
Definition: ProjectSettings.cpp:166
TrackFactory::Get
static TrackFactory & Get(AudacityProject &project)
Definition: TrackFactory.cpp:59
TrackFactory::mProject
AudacityProject & mProject
Definition: TrackFactory.h:39
TrackFactory::Reset
static TrackFactory & Reset(AudacityProject &project)
Definition: TrackFactory.cpp:69
NoteTrack::Holder
std::shared_ptr< NoteTrack > Holder
Definition: NoteTrack.h:71
TrackFactory::NewLabelTrack
std::shared_ptr< LabelTrack > NewLabelTrack()
Definition: TrackFactory.cpp:19
TrackFactory::mZoomInfo
const ZoomInfo *const mZoomInfo
Definition: TrackFactory.h:40
LabelTrack::Holder
std::shared_ptr< LabelTrack > Holder
Definition: LabelTrack.h:105