mirror of
https://github.com/cookiengineer/audacity
synced 2025-08-02 00:49:33 +02:00
Split class ProjectSelectionManager from ProjectManager...
... handling the callbacks from the selection toolbars. Next ProjectFileManager will be split out of ProjectManager, and ProjectSelectionManager will be used by it during file opening, so separating files for it avoids a cycle.
This commit is contained in:
parent
0c6cda50c3
commit
186f2f6ac7
@ -61,6 +61,33 @@ Paul Licameli split from AudacityProject.cpp
|
||||
|
||||
const int AudacityProjectTimerID = 5200;
|
||||
|
||||
static AudacityProject::AttachedObjects::RegisteredFactory
|
||||
sProjectSelectionManagerKey {
|
||||
[]( AudacityProject &project ) {
|
||||
return std::make_shared< ProjectSelectionManager >( project );
|
||||
}
|
||||
};
|
||||
|
||||
ProjectSelectionManager &ProjectSelectionManager::Get(
|
||||
AudacityProject &project )
|
||||
{
|
||||
return project.AttachedObjects::Get< ProjectSelectionManager >(
|
||||
sProjectSelectionManagerKey );
|
||||
}
|
||||
|
||||
const ProjectSelectionManager &ProjectSelectionManager::Get(
|
||||
const AudacityProject &project )
|
||||
{
|
||||
return Get( const_cast< AudacityProject & >( project ) );
|
||||
}
|
||||
|
||||
ProjectSelectionManager::ProjectSelectionManager( AudacityProject &project )
|
||||
: mProject{ project }
|
||||
{
|
||||
}
|
||||
|
||||
ProjectSelectionManager::~ProjectSelectionManager() = default;
|
||||
|
||||
static AudacityProject::AttachedObjects::RegisteredFactory sProjectManagerKey {
|
||||
[]( AudacityProject &project ) {
|
||||
return std::make_shared< ProjectManager >( project );
|
||||
@ -391,9 +418,10 @@ AudacityProject *ProjectManager::New()
|
||||
|
||||
//Initialise the Listeners
|
||||
gAudioIO->SetListener( &ProjectAudioManager::Get( project ) );
|
||||
SelectionBar::Get( project ).SetListener( &projectManager );
|
||||
auto &projectSelectionManager = ProjectSelectionManager::Get( project );
|
||||
SelectionBar::Get( project ).SetListener( &projectSelectionManager );
|
||||
#ifdef EXPERIMENTAL_SPECTRAL_EDITING
|
||||
SpectralSelectionBar::Get( project ).SetListener( &projectManager );
|
||||
SpectralSelectionBar::Get( project ).SetListener( &projectSelectionManager );
|
||||
#endif
|
||||
|
||||
#if wxUSE_DRAG_AND_DROP
|
||||
@ -419,7 +447,7 @@ AudacityProject *ProjectManager::New()
|
||||
return p;
|
||||
}
|
||||
|
||||
bool ProjectManager::SnapSelection()
|
||||
bool ProjectSelectionManager::SnapSelection()
|
||||
{
|
||||
auto &project = mProject;
|
||||
auto &settings = ProjectSettings::Get( project );
|
||||
@ -453,7 +481,7 @@ bool ProjectManager::SnapSelection()
|
||||
return false;
|
||||
}
|
||||
|
||||
double ProjectManager::AS_GetRate()
|
||||
double ProjectSelectionManager::AS_GetRate()
|
||||
{
|
||||
auto &project = mProject;
|
||||
auto &settings = ProjectSettings::Get( project );
|
||||
@ -462,21 +490,21 @@ double ProjectManager::AS_GetRate()
|
||||
|
||||
// Typically this came from the SelectionToolbar and does not need to
|
||||
// be communicated back to it.
|
||||
void ProjectManager::AS_SetRate(double rate)
|
||||
void ProjectSelectionManager::AS_SetRate(double rate)
|
||||
{
|
||||
auto &project = mProject;
|
||||
auto &settings = ProjectSettings::Get( project );
|
||||
settings.SetRate( rate );
|
||||
}
|
||||
|
||||
int ProjectManager::AS_GetSnapTo()
|
||||
int ProjectSelectionManager::AS_GetSnapTo()
|
||||
{
|
||||
auto &project = mProject;
|
||||
auto &settings = ProjectSettings::Get( project );
|
||||
return settings.GetSnapTo();
|
||||
}
|
||||
|
||||
void ProjectManager::AS_SetSnapTo(int snap)
|
||||
void ProjectSelectionManager::AS_SetSnapTo(int snap)
|
||||
{
|
||||
auto &project = mProject;
|
||||
auto &settings = ProjectSettings::Get( project );
|
||||
@ -496,14 +524,15 @@ void ProjectManager::AS_SetSnapTo(int snap)
|
||||
SelectionBar::Get( project ).SetSnapTo(snap);
|
||||
}
|
||||
|
||||
const NumericFormatSymbol & ProjectManager::AS_GetSelectionFormat()
|
||||
const NumericFormatSymbol & ProjectSelectionManager::AS_GetSelectionFormat()
|
||||
{
|
||||
auto &project = mProject;
|
||||
auto &settings = ProjectSettings::Get( project );
|
||||
return settings.GetSelectionFormat();
|
||||
}
|
||||
|
||||
void ProjectManager::AS_SetSelectionFormat(const NumericFormatSymbol & format)
|
||||
void ProjectSelectionManager::AS_SetSelectionFormat(
|
||||
const NumericFormatSymbol & format)
|
||||
{
|
||||
auto &project = mProject;
|
||||
auto &settings = ProjectSettings::Get( project );
|
||||
@ -518,7 +547,8 @@ void ProjectManager::AS_SetSelectionFormat(const NumericFormatSymbol & format)
|
||||
SelectionBar::Get( project ).SetSelectionFormat(format);
|
||||
}
|
||||
|
||||
void ProjectManager::AS_ModifySelection(double &start, double &end, bool done)
|
||||
void ProjectSelectionManager::AS_ModifySelection(
|
||||
double &start, double &end, bool done)
|
||||
{
|
||||
auto &project = mProject;
|
||||
auto &history = ProjectHistory::Get( project );
|
||||
@ -531,7 +561,7 @@ void ProjectManager::AS_ModifySelection(double &start, double &end, bool done)
|
||||
}
|
||||
}
|
||||
|
||||
double ProjectManager::SSBL_GetRate() const
|
||||
double ProjectSelectionManager::SSBL_GetRate() const
|
||||
{
|
||||
auto &project = mProject;
|
||||
auto &settings = ProjectSettings::Get( project );
|
||||
@ -541,14 +571,15 @@ double ProjectManager::SSBL_GetRate() const
|
||||
tracks.Any<const WaveTrack>().max( &WaveTrack::GetRate ) );
|
||||
}
|
||||
|
||||
const NumericFormatSymbol & ProjectManager::SSBL_GetFrequencySelectionFormatName()
|
||||
const NumericFormatSymbol &
|
||||
ProjectSelectionManager::SSBL_GetFrequencySelectionFormatName()
|
||||
{
|
||||
auto &project = mProject;
|
||||
auto &settings = ProjectSettings::Get( project );
|
||||
return settings.GetFrequencySelectionFormatName();
|
||||
}
|
||||
|
||||
void ProjectManager::SSBL_SetFrequencySelectionFormatName(
|
||||
void ProjectSelectionManager::SSBL_SetFrequencySelectionFormatName(
|
||||
const NumericFormatSymbol & formatName)
|
||||
{
|
||||
auto &project = mProject;
|
||||
@ -566,14 +597,14 @@ void ProjectManager::SSBL_SetFrequencySelectionFormatName(
|
||||
}
|
||||
|
||||
const NumericFormatSymbol &
|
||||
ProjectManager::SSBL_GetBandwidthSelectionFormatName()
|
||||
ProjectSelectionManager::SSBL_GetBandwidthSelectionFormatName()
|
||||
{
|
||||
auto &project = mProject;
|
||||
auto &settings = ProjectSettings::Get( project );
|
||||
return settings.GetBandwidthSelectionFormatName();
|
||||
}
|
||||
|
||||
void ProjectManager::SSBL_SetBandwidthSelectionFormatName(
|
||||
void ProjectSelectionManager::SSBL_SetBandwidthSelectionFormatName(
|
||||
const NumericFormatSymbol & formatName)
|
||||
{
|
||||
auto &project = mProject;
|
||||
@ -590,7 +621,7 @@ void ProjectManager::SSBL_SetBandwidthSelectionFormatName(
|
||||
#endif
|
||||
}
|
||||
|
||||
void ProjectManager::SSBL_ModifySpectralSelection(
|
||||
void ProjectSelectionManager::SSBL_ModifySpectralSelection(
|
||||
double &bottom, double &top, bool done)
|
||||
{
|
||||
#ifdef EXPERIMENTAL_SPECTRAL_EDITING
|
||||
@ -1294,11 +1325,12 @@ void ProjectManager::OpenFile(const FilePath &fileNameArg, bool addtohistory)
|
||||
|
||||
if (bParseSuccess) {
|
||||
auto &settings = ProjectSettings::Get( project );
|
||||
AS_SetSnapTo(settings.GetSnapTo());
|
||||
AS_SetSelectionFormat(settings.GetSelectionFormat());
|
||||
SSBL_SetFrequencySelectionFormatName(
|
||||
auto &selectionManager = ProjectSelectionManager::Get( project );
|
||||
selectionManager.AS_SetSnapTo(settings.GetSnapTo());
|
||||
selectionManager.AS_SetSelectionFormat(settings.GetSelectionFormat());
|
||||
selectionManager.SSBL_SetFrequencySelectionFormatName(
|
||||
settings.GetFrequencySelectionFormatName());
|
||||
SSBL_SetBandwidthSelectionFormatName(
|
||||
selectionManager.SSBL_SetBandwidthSelectionFormatName(
|
||||
settings.GetBandwidthSelectionFormatName());
|
||||
|
||||
ProjectHistory::Get( project ).InitialState();
|
||||
|
@ -34,14 +34,50 @@ namespace ProjectFileIORegistry{ struct Entry; }
|
||||
|
||||
using WaveTrackArray = std::vector < std::shared_ptr < WaveTrack > >;
|
||||
|
||||
class ProjectSelectionManager final
|
||||
: public ClientData::Base
|
||||
, public SelectionBarListener
|
||||
, public SpectralSelectionBarListener
|
||||
{
|
||||
public:
|
||||
static ProjectSelectionManager &Get( AudacityProject &project );
|
||||
static const ProjectSelectionManager &Get( const AudacityProject &project );
|
||||
|
||||
explicit ProjectSelectionManager( AudacityProject &project );
|
||||
~ProjectSelectionManager() override;
|
||||
|
||||
// SelectionBarListener callback methods
|
||||
double AS_GetRate() override;
|
||||
void AS_SetRate(double rate) override;
|
||||
int AS_GetSnapTo() override;
|
||||
void AS_SetSnapTo(int snap) override;
|
||||
const NumericFormatSymbol & AS_GetSelectionFormat() override;
|
||||
void AS_SetSelectionFormat(const NumericFormatSymbol & format) override;
|
||||
void AS_ModifySelection(double &start, double &end, bool done) override;
|
||||
|
||||
// SpectralSelectionBarListener callback methods
|
||||
double SSBL_GetRate() const override;
|
||||
const NumericFormatSymbol & SSBL_GetFrequencySelectionFormatName() override;
|
||||
void SSBL_SetFrequencySelectionFormatName(
|
||||
const NumericFormatSymbol & formatName) override;
|
||||
const NumericFormatSymbol & SSBL_GetBandwidthSelectionFormatName() override;
|
||||
void SSBL_SetBandwidthSelectionFormatName(
|
||||
const NumericFormatSymbol & formatName) override;
|
||||
void SSBL_ModifySpectralSelection(
|
||||
double &bottom, double &top, bool done) override;
|
||||
|
||||
private:
|
||||
bool SnapSelection();
|
||||
|
||||
AudacityProject &mProject;
|
||||
};
|
||||
|
||||
///\brief Object associated with a project for high-level management of the
|
||||
/// project's lifetime, including creation, destruction, opening from file,
|
||||
/// importing, pushing undo states, and reverting to saved states
|
||||
class ProjectManager final
|
||||
: public wxEvtHandler
|
||||
, public ClientData::Base
|
||||
, private SelectionBarListener
|
||||
, private SpectralSelectionBarListener
|
||||
{
|
||||
public:
|
||||
static ProjectManager &Get( AudacityProject &project );
|
||||
@ -119,34 +155,12 @@ public:
|
||||
|
||||
void SetMenuClose(bool value) { mMenuClose = value; }
|
||||
|
||||
// SelectionBarListener callback methods
|
||||
double AS_GetRate() override;
|
||||
void AS_SetRate(double rate) override;
|
||||
int AS_GetSnapTo() override;
|
||||
void AS_SetSnapTo(int snap) override;
|
||||
const NumericFormatSymbol & AS_GetSelectionFormat() override;
|
||||
void AS_SetSelectionFormat(const NumericFormatSymbol & format) override;
|
||||
void AS_ModifySelection(double &start, double &end, bool done) override;
|
||||
|
||||
// SpectralSelectionBarListener callback methods
|
||||
double SSBL_GetRate() const override;
|
||||
const NumericFormatSymbol & SSBL_GetFrequencySelectionFormatName() override;
|
||||
void SSBL_SetFrequencySelectionFormatName(
|
||||
const NumericFormatSymbol & formatName) override;
|
||||
const NumericFormatSymbol & SSBL_GetBandwidthSelectionFormatName() override;
|
||||
void SSBL_SetBandwidthSelectionFormatName(
|
||||
const NumericFormatSymbol & formatName) override;
|
||||
void SSBL_ModifySpectralSelection(
|
||||
double &bottom, double &top, bool done) override;
|
||||
|
||||
private:
|
||||
void OnCloseWindow(wxCloseEvent & event);
|
||||
void OnTimer(wxTimerEvent & event);
|
||||
void OnOpenAudioFile(wxCommandEvent & event);
|
||||
void OnStatusChange( wxCommandEvent& );
|
||||
|
||||
bool SnapSelection();
|
||||
|
||||
void RestartTimer();
|
||||
|
||||
// Declared in this class so that they can have access to private members
|
||||
|
@ -165,7 +165,7 @@ bool SelectFrequenciesCommand::Apply(const CommandContext & context){
|
||||
if( !bHasBottom )
|
||||
mBottom = 0.0;
|
||||
|
||||
ProjectManager::Get( context.project ).SSBL_ModifySpectralSelection(
|
||||
ProjectSelectionManager::Get( context.project ).SSBL_ModifySpectralSelection(
|
||||
mBottom, mTop, false);// false for not done.
|
||||
return true;
|
||||
}
|
||||
|
@ -253,7 +253,7 @@ void QuickFixDialog::OnFix(wxCommandEvent &event)
|
||||
// preference dialogs.
|
||||
if( Str == "/SnapTo" )
|
||||
{
|
||||
ProjectManager::Get( *pProject ).AS_SetSnapTo( 0 );
|
||||
ProjectSelectionManager::Get( *pProject ).AS_SetSnapTo( 0 );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -901,19 +901,19 @@ void OnZeroCrossing(const CommandContext &context)
|
||||
void OnSnapToOff(const CommandContext &context)
|
||||
{
|
||||
auto &project = context.project;
|
||||
ProjectManager::Get( project ).AS_SetSnapTo(SNAP_OFF);
|
||||
ProjectSelectionManager::Get( project ).AS_SetSnapTo(SNAP_OFF);
|
||||
}
|
||||
|
||||
void OnSnapToNearest(const CommandContext &context)
|
||||
{
|
||||
auto &project = context.project;
|
||||
ProjectManager::Get( project ).AS_SetSnapTo(SNAP_NEAREST);
|
||||
ProjectSelectionManager::Get( project ).AS_SetSnapTo(SNAP_NEAREST);
|
||||
}
|
||||
|
||||
void OnSnapToPrior(const CommandContext &context)
|
||||
{
|
||||
auto &project = context.project;
|
||||
ProjectManager::Get( project ).AS_SetSnapTo(SNAP_PRIOR);
|
||||
ProjectSelectionManager::Get( project ).AS_SetSnapTo(SNAP_PRIOR);
|
||||
}
|
||||
|
||||
void OnSelToStart(const CommandContext &context)
|
||||
|
Loading…
x
Reference in New Issue
Block a user