Audacity 3.2.0
ProjectSelectionManager.cpp
Go to the documentation of this file.
1/**********************************************************************
2
3Audacity: A Digital Audio Editor
4
5ProjectSelectionManager.cpp
6
7Paul Licameli split from ProjectManager.cpp
8
9**********************************************************************/
10
12
13
14
15#include "Project.h"
16#include "ProjectHistory.h"
17#include "ProjectWindows.h"
19#include "ProjectRate.h"
20#include "ProjectSettings.h"
21#include "ProjectWindow.h"
22#include "Snap.h"
23#include "TrackPanel.h"
24#include "ViewInfo.h"
25#include "WaveTrack.h"
29
32 []( AudacityProject &project ) {
33 return std::make_shared< ProjectSelectionManager >( project );
34 }
35};
36
38 AudacityProject &project )
39{
40 return project.AttachedObjects::Get< ProjectSelectionManager >(
42}
43
45 const AudacityProject &project )
46{
47 return Get( const_cast< AudacityProject & >( project ) );
48}
49
51 : mProject{ project }
52{
53}
54
56
58{
59 auto &project = mProject;
60 auto &formats = ProjectNumericFormats::Get( project );
61 auto &settings = ProjectSettings::Get( project );
62 auto &window = ProjectWindow::Get( project );
63 auto snapTo = settings.GetSnapTo();
64 if (snapTo != SNAP_OFF) {
65 auto &viewInfo = ViewInfo::Get( project );
66 auto &selectedRegion = viewInfo.selectedRegion;
68 formats.GetSelectionFormat(), 0, ProjectRate::Get(project).GetRate());
69 const bool nearest = (snapTo == SNAP_NEAREST);
70
71 const double oldt0 = selectedRegion.t0();
72 const double oldt1 = selectedRegion.t1();
73
74 nc.ValueToControls(oldt0, nearest);
75 nc.ControlsToValue();
76 const double t0 = nc.GetValue();
77
78 nc.ValueToControls(oldt1, nearest);
79 nc.ControlsToValue();
80 const double t1 = nc.GetValue();
81
82 if (t0 != oldt0 || t1 != oldt1) {
83 selectedRegion.setTimes(t0, t1);
84 return true;
85 }
86 }
87
88 return false;
89}
90
92{
94}
95
97{
98 auto &project = mProject;
99 ProjectRate::Get( project ).SetRate( rate );
100 SelectionBar::Get( project ).SetRate(rate);
101}
102
104{
105 auto &project = mProject;
106 auto &settings = ProjectSettings::Get( project );
107 return settings.GetSnapTo();
108}
109
111{
112 auto &project = mProject;
113 auto &settings = ProjectSettings::Get( project );
114 auto &window = ProjectWindow::Get( project );
115
116 settings.SetSnapTo( snap );
117
118// LLL: TODO - what should this be changed to???
119// GetCommandManager()->Check(wxT("Snap"), mSnapTo);
120 gPrefs->Write(wxT("/SnapTo"), snap);
121 gPrefs->Flush();
122
124
125 window.RedrawProject();
126
127 SelectionBar::Get( project ).SetSnapTo(snap);
128}
129
131{
132 auto &project = mProject;
133 auto &formats = ProjectNumericFormats::Get( project );
134 return formats.GetSelectionFormat();
135}
136
139{
140 auto &project = mProject;
141 auto &formats = ProjectNumericFormats::Get( project );
142 formats.SetSelectionFormat( format );
143
144 gPrefs->Write(wxT("/SelectionFormat"), format.Internal());
145 gPrefs->Flush();
146
147 if (SnapSelection())
148 TrackPanel::Get( project ).Refresh(false);
149
151}
152
154{
155 auto &project = mProject;
156 auto &formats = ProjectNumericFormats::Get( project );
157 return formats.GetAudioTimeFormat();
158}
159
162{
163 auto &project = mProject;
164 auto &formats = ProjectNumericFormats::Get( project );
165 formats.SetAudioTimeFormat( format );
166
167 gPrefs->Write(wxT("/AudioTimeFormat"), format.Internal());
168 gPrefs->Flush();
169
171}
172
174 double &start, double &end, bool done)
175{
176 auto &project = mProject;
177 auto &history = ProjectHistory::Get( project );
178 auto &trackPanel = TrackPanel::Get( project );
179 auto &viewInfo = ViewInfo::Get( project );
180 viewInfo.selectedRegion.setTimes(start, end);
181 trackPanel.Refresh(false);
182 if (done) {
183 history.ModifyState(false);
184 }
185}
186
188{
189 auto &project = mProject;
190 auto &tracks = TrackList::Get( project );
191 // Return maximum of project rate and all track rates.
192 return std::max( ProjectRate::Get( project ).GetRate(),
193 tracks.Any<const WaveTrack>().max( &WaveTrack::GetRate ) );
194}
195
198{
199 auto &project = mProject;
200 auto &formats = ProjectNumericFormats::Get( project );
201 return formats.GetFrequencySelectionFormatName();
202}
203
205 const NumericFormatSymbol & formatName)
206{
207 auto &project = mProject;
208 auto &formats = ProjectNumericFormats::Get( project );
209
210 formats.SetFrequencySelectionFormatName( formatName );
211
212 gPrefs->Write(wxT("/FrequencySelectionFormatName"),
213 formatName.Internal());
214 gPrefs->Flush();
215
216#ifdef EXPERIMENTAL_SPECTRAL_EDITING
218#endif
219}
220
223{
224 auto &project = mProject;
225 auto &formats = ProjectNumericFormats::Get( project );
226 return formats.GetBandwidthSelectionFormatName();
227}
228
230 const NumericFormatSymbol & formatName)
231{
232 auto &project = mProject;
233 auto &formats = ProjectNumericFormats::Get( project );
234
235 formats.SetBandwidthSelectionFormatName( formatName );
236
237 gPrefs->Write(wxT("/BandwidthSelectionFormatName"),
238 formatName.Internal());
239 gPrefs->Flush();
240
241#ifdef EXPERIMENTAL_SPECTRAL_EDITING
243#endif
244}
245
247 double &bottom, double &top, bool done)
248{
249#ifdef EXPERIMENTAL_SPECTRAL_EDITING
250 auto &project = mProject;
251 auto &history = ProjectHistory::Get( project );
252 auto &trackPanel = TrackPanel::Get( project );
253 auto &viewInfo = ViewInfo::Get( project );
254
255 double nyq = SSBL_GetRate() / 2.0;
256 if (bottom >= 0.0)
257 bottom = std::min(nyq, bottom);
258 if (top >= 0.0)
259 top = std::min(nyq, top);
260 viewInfo.selectedRegion.setFrequencies(bottom, top);
261 trackPanel.Refresh(false);
262 if (done) {
263 history.ModifyState(false);
264 }
265#else
266 bottom; top; done;
267#endif
268}
wxT("CloseDown"))
int min(int a, int b)
int format
Definition: ExportPCM.cpp:53
FileConfig * gPrefs
Definition: Prefs.cpp:70
an object holding per-project preferred sample rate
static AudacityProject::AttachedObjects::RegisteredFactory sProjectSelectionManagerKey
@ SNAP_NEAREST
@ SNAP_OFF
accessors for certain important windows associated with each project
static Settings & settings()
Definition: TrackInfo.cpp:87
The top-level handle to an Audacity project. It serves as a source of events that other objects can b...
Definition: Project.h:90
Client code makes static instance from a factory of attachments; passes it to Get or Find as a retrie...
Definition: ClientData.h:266
ComponentInterfaceSymbol pairs a persistent string identifier used internally with an optional,...
const wxString & Internal() const
virtual bool Flush(bool bCurrentOnly=false) wxOVERRIDE
Definition: FileConfig.cpp:143
NumericConverter provides the advanced formatting control used in the selection bar of Audacity.
virtual void ControlsToValue()
virtual void ValueToControls()
static ProjectHistory & Get(AudacityProject &project)
static ProjectNumericFormats & Get(AudacityProject &project)
static ProjectRate & Get(AudacityProject &project)
Definition: ProjectRate.cpp:28
void SetRate(double rate)
Definition: ProjectRate.cpp:58
double GetRate() const
Definition: ProjectRate.cpp:53
~ProjectSelectionManager() override
void TT_SetAudioTimeFormat(const NumericFormatSymbol &format) override
void AS_ModifySelection(double &start, double &end, bool done) override
void AS_SetSnapTo(int snap) override
void SSBL_SetBandwidthSelectionFormatName(const NumericFormatSymbol &formatName) override
const NumericFormatSymbol & SSBL_GetBandwidthSelectionFormatName() override
ProjectSelectionManager(AudacityProject &project)
const NumericFormatSymbol & SSBL_GetFrequencySelectionFormatName() override
const NumericFormatSymbol & AS_GetSelectionFormat() override
const NumericFormatSymbol & TT_GetAudioTimeFormat() override
static ProjectSelectionManager & Get(AudacityProject &project)
void SSBL_ModifySpectralSelection(double &bottom, double &top, bool done) override
double SSBL_GetRate() const override
void AS_SetSelectionFormat(const NumericFormatSymbol &format) override
void SSBL_SetFrequencySelectionFormatName(const NumericFormatSymbol &formatName) override
void AS_SetRate(double rate) override
static ProjectSettings & Get(AudacityProject &project)
static ProjectWindow & Get(AudacityProject &project)
void SetSelectionFormat(const NumericFormatSymbol &format)
void SetRate(double rate)
static SelectionBar & Get(AudacityProject &project)
void SetSnapTo(int)
void SetBandwidthSelectionFormatName(const NumericFormatSymbol &formatName)
static SpectralSelectionBar & Get(AudacityProject &project)
void SetFrequencySelectionFormatName(const NumericFormatSymbol &formatName)
void SetAudioTimeFormat(const NumericFormatSymbol &format)
static TimeToolBar & Get(AudacityProject &project)
Definition: TimeToolBar.cpp:74
static TrackList & Get(AudacityProject &project)
Definition: Track.cpp:487
void Refresh(bool eraseBackground=true, const wxRect *rect=(const wxRect *) NULL) override
Definition: TrackPanel.cpp:781
static TrackPanel & Get(AudacityProject &project)
Definition: TrackPanel.cpp:231
static ViewInfo & Get(AudacityProject &project)
Definition: ViewInfo.cpp:235
A Track that contains audio waveform data.
Definition: WaveTrack.h:51
double GetRate() const override
Definition: WaveTrack.cpp:360
auto end(const Ptr< Type, BaseDeleter > &p)
Enables range-for.
Definition: PackedArray.h:159
double GetRate(const Track &track)
Definition: TimeTrack.cpp:179