diff --git a/src/AdornedRulerPanel.cpp b/src/AdornedRulerPanel.cpp index 6d72bd4e8..fbee08e81 100644 --- a/src/AdornedRulerPanel.cpp +++ b/src/AdornedRulerPanel.cpp @@ -779,9 +779,9 @@ private: auto &scrubber = Scrubber::Get( *pProject ); scrubber.Cancel(); - auto ctb = pProject->GetControlToolBar(); + auto &ctb = ControlToolBar::Get( *pProject ); wxCommandEvent evt; - ctb->OnStop(evt); + ctb.OnStop(evt); } return result; @@ -1595,8 +1595,8 @@ void AdornedRulerPanel::StartQPPlay(bool looped, bool cutPreview) bool startPlaying = (mPlayRegionStart >= 0); if (startPlaying) { - ControlToolBar* ctb = mProject->GetControlToolBar(); - ctb->StopPlaying(); + auto &ctb = ControlToolBar::Get( *mProject ); + ctb.StopPlaying(); bool loopEnabled = true; double start, end; @@ -1638,7 +1638,7 @@ void AdornedRulerPanel::StartQPPlay(bool looped, bool cutPreview) mPlayRegionEnd = end; Refresh(); - ctb->PlayPlayRegion((SelectedRegion(start, end)), + ctb.PlayPlayRegion((SelectedRegion(start, end)), options, mode, false, true); @@ -2113,8 +2113,8 @@ void AdornedRulerPanel::SetPlayRegion(double playRegionStart, void AdornedRulerPanel::ClearPlayRegion() { - ControlToolBar* ctb = mProject->GetControlToolBar(); - ctb->StopPlaying(); + auto &ctb = ControlToolBar::Get( *mProject ); + ctb.StopPlaying(); mPlayRegionStart = -1; mPlayRegionEnd = -1; diff --git a/src/AudioIO.cpp b/src/AudioIO.cpp index d8c7efabb..908e01511 100644 --- a/src/AudioIO.cpp +++ b/src/AudioIO.cpp @@ -2659,8 +2659,8 @@ void AudioIO::StopStream() } } - ControlToolBar *bar = mOwningProject->GetControlToolBar(); - bar->CommitRecording(); + ControlToolBar &bar = ControlToolBar::Get( *mOwningProject ); + bar.CommitRecording(); } } @@ -4830,8 +4830,8 @@ void AudioIoCallback::CheckSoundActivatedRecordingLevel( const void *inputBuffer bool bShouldBePaused = mInputMeter->GetMaxPeak() < mSilenceLevel; if( bShouldBePaused != IsPaused()) { - ControlToolBar *bar = mOwningProject->GetControlToolBar(); - bar->CallAfter(&ControlToolBar::Pause); + auto &bar = ControlToolBar::Get( *mOwningProject ); + bar.CallAfter(&ControlToolBar::Pause); } } diff --git a/src/DeviceManager.cpp b/src/DeviceManager.cpp index 775f39d57..f9420b40d 100644 --- a/src/DeviceManager.cpp +++ b/src/DeviceManager.cpp @@ -300,10 +300,9 @@ void DeviceManager::Rescan() // If this was not an initial scan update each device toolbar. // Hosts may have disappeared or appeared so a complete repopulate is needed. if (m_inited) { - DeviceToolBar *dt; for (size_t i = 0; i < gAudacityProjects.size(); i++) { - dt = gAudacityProjects[i]->GetDeviceToolBar(); - dt->RefillCombos(); + auto &dt = DeviceToolBar::Get( *gAudacityProjects[i] ); + dt.RefillCombos(); } } m_inited = true; diff --git a/src/Menus.cpp b/src/Menus.cpp index 32ed9ecf7..2f4db1e55 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -562,8 +562,8 @@ CommandFlag MenuManager::GetUpdateFlags if ( !( gAudioIO->IsBusy() && gAudioIO->GetNumCaptureChannels() > 0 ) ) flags |= CaptureNotBusyFlag; - ControlToolBar *bar = project.GetControlToolBar(); - if (bar->ControlToolBar::CanStopAudioStream()) + auto &bar = ControlToolBar::Get( project ); + if (bar.ControlToolBar::CanStopAudioStream()) flags |= CanStopAudioStreamFlag; lastFlags = flags; diff --git a/src/MixerBoard.cpp b/src/MixerBoard.cpp index 0b866d509..c46d3d78c 100644 --- a/src/MixerBoard.cpp +++ b/src/MixerBoard.cpp @@ -1345,7 +1345,7 @@ void MixerBoard::OnTimer(wxCommandEvent &event) { UpdateMeters( gAudioIO->GetStreamTime(), - (mProject->GetControlToolBar()->GetLastPlayMode() + (ControlToolBar::Get( *mProject ).GetLastPlayMode() == PlayMode::loopedPlay) ); } diff --git a/src/Project.cpp b/src/Project.cpp index b2a65b1e0..8140cdb6d 100644 --- a/src/Project.cpp +++ b/src/Project.cpp @@ -148,13 +148,9 @@ scroll information. It also has some status flags. #include "toolbars/ToolManager.h" #include "toolbars/ControlToolBar.h" -#include "toolbars/DeviceToolBar.h" #include "toolbars/MixerToolBar.h" -#include "toolbars/ScrubbingToolBar.h" #include "toolbars/SelectionBar.h" #include "toolbars/SpectralSelectionBar.h" -#include "toolbars/ToolsToolBar.h" -#include "toolbars/TranscriptionToolBar.h" #include "tracks/ui/Scrubbing.h" @@ -1128,9 +1124,9 @@ AudacityProject::AudacityProject(wxWindow * parent, wxWindowID id, // // Create the ToolDock // - GetSelectionBar()->SetListener(this); + SelectionBar::Get( project ).SetListener( &project ); #ifdef EXPERIMENTAL_SPECTRAL_EDITING - GetSpectralSelectionBar()->SetListener(this); + SpectralSelectionBar::Get( project ).SetListener( &project ); #endif ToolManager::Get( project ).LayoutToolBars(); @@ -1299,12 +1295,17 @@ AudacityProject::AudacityProject(wxWindow * parent, wxWindowID id, #endif mIconized = false; - int widths[] = {0, GetControlToolBar()->WidthForStatusBar(statusBar), -1, 150}; + int widths[] = { + 0, + ControlToolBar::Get( project ).WidthForStatusBar(statusBar), + -1, + 150 + }; statusBar->SetStatusWidths(4, widths); wxString msg = wxString::Format(_("Welcome to Audacity version %s"), AUDACITY_VERSION_STRING); statusBar->SetStatusText(msg, mainStatusBarField); - GetControlToolBar()->UpdateStatusBar(this); + ControlToolBar::Get( project ).UpdateStatusBar(this); mTimer = std::make_unique(this, AudacityProjectTimerID); RestartTimer(); @@ -1394,10 +1395,8 @@ void AudacityProject::UpdatePrefsVariables() if( TrackList::Get( *this ).size() == 0){ gPrefs->Read(wxT("/SamplingRate/DefaultProjectSampleRate"), &mRate, AudioIO::GetOptimalSupportedSampleRate()); // If necessary, we change this rate in the selection toolbar too. - auto bar = GetSelectionBar(); - if( bar ){ - bar->SetRate( mRate ); - } + auto bar = SelectionBar::Get( *this ); + bar.SetRate( mRate ); } #endif @@ -1650,11 +1649,10 @@ const NumericFormatSymbol & AudacityProject::GetFrequencySelectionFormatName() c void AudacityProject::SetFrequencySelectionFormatName(const NumericFormatSymbol & formatName) { + auto &project = *this; SSBL_SetFrequencySelectionFormatName(formatName); #ifdef EXPERIMENTAL_SPECTRAL_EDITING - if (GetSpectralSelectionBar()) { - GetSpectralSelectionBar()->SetFrequencySelectionFormatName(formatName); - } + SpectralSelectionBar::Get( project ).SetFrequencySelectionFormatName(formatName); #endif } @@ -1665,20 +1663,18 @@ const NumericFormatSymbol & AudacityProject::GetBandwidthSelectionFormatName() c void AudacityProject::SetBandwidthSelectionFormatName(const NumericFormatSymbol & formatName) { + auto &project = *this; SSBL_SetBandwidthSelectionFormatName(formatName); #ifdef EXPERIMENTAL_SPECTRAL_EDITING - if (GetSpectralSelectionBar()) { - GetSpectralSelectionBar()->SetBandwidthSelectionFormatName(formatName); - } + SpectralSelectionBar::Get( project ).SetBandwidthSelectionFormatName(formatName); #endif } void AudacityProject::SetSelectionFormat(const NumericFormatSymbol & format) { + auto &project = *this; AS_SetSelectionFormat(format); - if (GetSelectionBar()) { - GetSelectionBar()->SetSelectionFormat(format); - } + SelectionBar::Get( project ).SetSelectionFormat(format); } const NumericFormatSymbol & AudacityProject::GetSelectionFormat() const @@ -2478,7 +2474,7 @@ void AudacityProject::OnCloseWindow(wxCloseEvent & event) // We were playing or recording audio, but we've stopped the stream. wxCommandEvent dummyEvent; - GetControlToolBar()->OnStop(dummyEvent); + ControlToolBar::Get( project ).OnStop(dummyEvent); FixScrollbars(); SetAudioIOToken(0); @@ -3492,7 +3488,7 @@ bool AudacityProject::HandleXMLTag(const wxChar *tag, const wxChar **attrs) else if (!wxStrcmp(attr, wxT("rate"))) { Internat::CompatibleToDouble(value, &mRate); - GetSelectionBar()->SetRate(mRate); + SelectionBar::Get( project ).SetRate( mRate ); } else if (!wxStrcmp(attr, wxT("snapto"))) { @@ -4213,7 +4209,7 @@ AudacityProject::AddImportedTracks(const FilePath &fileName, // if this is the first file that is imported if (initiallyEmpty && newRate > 0) { mRate = newRate; - GetSelectionBar()->SetRate(mRate); + SelectionBar::Get( project ).SetRate( newRate ); } PushState(wxString::Format(_("Imported '%s'"), fileName), @@ -4800,73 +4796,6 @@ void AudacityProject::SkipEnd(bool shift) } -namespace { - template - ToolBar *DoGetToolBar( AudacityProject &project, int type ) - { - auto &toolManager = ToolManager::Get( project ); - return static_cast( toolManager.GetToolBar( type ) ); - } - - template - const ToolBar *DoGetToolBar( const AudacityProject &project, int type ) - { - return DoGetToolBar( - const_cast( project ), type ); - } -} - -//////////////////////////////////////////////////////////// -// This fetches a pointer to the Transport Toolbar. It may -// either be docked or floating out in the open. -//////////////////////////////////////////////////////////// -ControlToolBar *AudacityProject::GetControlToolBar() -{ - return DoGetToolBar< ControlToolBar >( *this, TransportBarID ); -} - -DeviceToolBar *AudacityProject::GetDeviceToolBar() -{ - return DoGetToolBar< DeviceToolBar >( *this, DeviceBarID ); -} - -MixerToolBar *AudacityProject::GetMixerToolBar() -{ - return DoGetToolBar< MixerToolBar >( *this, MixerBarID ); -} - -ScrubbingToolBar *AudacityProject::GetScrubbingToolBar() -{ - return DoGetToolBar< ScrubbingToolBar >( *this, ScrubbingBarID ); -} - -SelectionBar *AudacityProject::GetSelectionBar() -{ - return DoGetToolBar< SelectionBar >( *this, SelectionBarID ); -} - -#ifdef EXPERIMENTAL_SPECTRAL_EDITING -SpectralSelectionBar *AudacityProject::GetSpectralSelectionBar() -{ - return DoGetToolBar< SpectralSelectionBar >( *this, SpectralSelectionBarID ); -} -#endif - -ToolsToolBar *AudacityProject::GetToolsToolBar() -{ - return DoGetToolBar< ToolsToolBar >( *this, ToolsBarID ); -} - -const ToolsToolBar *AudacityProject::GetToolsToolBar() const -{ - return DoGetToolBar< const ToolsToolBar >( *this, ToolsBarID ); -} - -TranscriptionToolBar *AudacityProject::GetTranscriptionToolBar() -{ - return DoGetToolBar< TranscriptionToolBar >( *this, TranscriptionBarID ); -} - MeterPanel *AudacityProject::GetPlaybackMeter() { return mPlaybackMeter; @@ -4909,9 +4838,8 @@ void AudacityProject::OnTimer(wxTimerEvent& WXUNUSED(event)) auto &project = *this; auto &window = project; auto &dirManager = DirManager::Get( project ); - MixerToolBar *mixerToolBar = GetMixerToolBar(); - if( mixerToolBar ) - mixerToolBar->UpdateControls(); + auto mixerToolBar = &MixerToolBar::Get( project ); + mixerToolBar->UpdateControls(); // gAudioIO->GetNumCaptureChannels() should only be positive // when we are recording. @@ -5001,13 +4929,12 @@ void AudacityProject::TP_DisplaySelection() GetPlayRegion(&audioTime, &playEnd); } - GetSelectionBar()->SetTimes(selectedRegion.t0(), + SelectionBar::Get( project ).SetTimes(selectedRegion.t0(), selectedRegion.t1(), audioTime); #ifdef EXPERIMENTAL_SPECTRAL_EDITING - GetSpectralSelectionBar()->SetFrequencies( + SpectralSelectionBar::Get( project ).SetFrequencies( selectedRegion.f0(), selectedRegion.f1()); #endif - } @@ -5136,7 +5063,8 @@ void AudacityProject::MayStartMonitoring() void AudacityProject::OnAudioIORate(int rate) { - auto &window = *this; + auto &project = *this; + auto &window = project; wxString display; if (rate > 0) { display = wxString::Format(_("Actual Rate: %d"), rate); @@ -5148,7 +5076,12 @@ void AudacityProject::OnAudioIORate(int rate) int x, y; auto statusBar = window.GetStatusBar(); statusBar->GetTextExtent(display, &x, &y); - int widths[] = {0, GetControlToolBar()->WidthForStatusBar(statusBar), -1, x+50}; + int widths[] = { + 0, + ControlToolBar::Get( project ).WidthForStatusBar(statusBar), + -1, + x+50 + }; statusBar->SetStatusWidths(4, widths); statusBar->SetStatusText(display, rateStatusBarField); } @@ -5238,12 +5171,11 @@ void AudacityProject::OnAudioIONewBlockFiles(const AutoSaveFile & blockFileLog) void AudacityProject::SetSnapTo(int snap) { + auto &project = *this; AS_SetSnapTo(snap); - if (GetSelectionBar()) { - GetSelectionBar()->SetSnapTo(snap); - } + SelectionBar::Get( project ).SetSnapTo(snap); } - + int AudacityProject::GetSnapTo() const { return mSnapTo; diff --git a/src/Project.h b/src/Project.h index c46ec7ae9..0bc110e6f 100644 --- a/src/Project.h +++ b/src/Project.h @@ -63,16 +63,6 @@ class TrackPanel; class FreqWindow; class MeterPanel; -// toolbar classes -class ControlToolBar; -class DeviceToolBar; -class MixerToolBar; -class ScrubbingToolBar; -class SelectionBar; -class SpectralSelectionBar; -class ToolsToolBar; -class TranscriptionToolBar; - // windows and frames class AdornedRulerPanel; class LyricsWindow; @@ -416,22 +406,6 @@ public: bool TP_ScrollUpDown(int delta) override; void TP_HandleResize() override; - // ToolBar - - // In the GUI, ControlToolBar appears as the "Transport Toolbar". "Control Toolbar" is historic. - ControlToolBar *GetControlToolBar(); - - DeviceToolBar *GetDeviceToolBar(); - MixerToolBar *GetMixerToolBar(); - ScrubbingToolBar *GetScrubbingToolBar(); - SelectionBar *GetSelectionBar(); -#ifdef EXPERIMENTAL_SPECTRAL_EDITING - SpectralSelectionBar *GetSpectralSelectionBar(); -#endif - ToolsToolBar *GetToolsToolBar(); - const ToolsToolBar *GetToolsToolBar() const; - TranscriptionToolBar *GetTranscriptionToolBar(); - MeterPanel *GetPlaybackMeter(); void SetPlaybackMeter(MeterPanel *playback); MeterPanel *GetCaptureMeter(); diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index 2f3a7521b..e1d18aa76 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -463,7 +463,8 @@ void TrackPanel::OnTimer(wxTimerEvent& ) { //the stream may have been started up after this one finished (by some other project) //in that case reset the buttons don't stop the stream - p->GetControlToolBar()->StopPlaying(!gAudioIO->IsStreamActive()); + auto &bar = ControlToolBar::Get( *p ); + bar.StopPlaying(!gAudioIO->IsStreamActive()); } // Next, check to see if we were playing or recording @@ -1130,7 +1131,7 @@ void TrackPanel::DrawTracks(wxDC * dc) // Don't draw a bottom margin here. - ToolsToolBar *pTtb = GetProject()->GetToolsToolBar(); + auto pTtb = &ToolsToolBar::Get( *GetProject() ); bool bMultiToolDown = pTtb->IsDown(multiTool); bool envelopeFlag = pTtb->IsDown(envelopeTool) || bMultiToolDown; bool bigPointsFlag = pTtb->IsDown(drawTool) || bMultiToolDown; diff --git a/src/commands/SetProjectCommand.cpp b/src/commands/SetProjectCommand.cpp index 1d9c62dd9..1dc9259fc 100644 --- a/src/commands/SetProjectCommand.cpp +++ b/src/commands/SetProjectCommand.cpp @@ -72,10 +72,8 @@ bool SetProjectCommand::Apply(const CommandContext & context) if( bHasRate && mRate >= 1 && mRate <= 1000000 ) { - auto *bar = pProj->GetSelectionBar(); - if( bar ){ - bar->SetRate( mRate ); - } + auto &bar = SelectionBar::Get( *pProj ); + bar.SetRate( mRate ); } if( bHasSizing ) diff --git a/src/effects/Effect.cpp b/src/effects/Effect.cpp index 90d6b0fb1..fa58fe10c 100644 --- a/src/effects/Effect.cpp +++ b/src/effects/Effect.cpp @@ -3507,7 +3507,8 @@ void EffectUIHost::OnPlay(wxCommandEvent & WXUNUSED(evt)) if (mPlaying) { mPlayPos = gAudioIO->GetStreamTime(); - mProject->GetControlToolBar()->StopPlaying(); + auto &bar = ControlToolBar::Get( *mProject ); + bar.StopPlaying(); } else { @@ -3532,7 +3533,8 @@ void EffectUIHost::OnPlay(wxCommandEvent & WXUNUSED(evt)) mPlayPos = mRegion.t1(); } - mProject->GetControlToolBar()->PlayPlayRegion( + auto &bar = ControlToolBar::Get( *mProject ); + bar.PlayPlayRegion( SelectedRegion(mPlayPos, mRegion.t1()), mProject->GetDefaultPlayOptions(), PlayMode::normalPlay ); diff --git a/src/menus/ExtraMenus.cpp b/src/menus/ExtraMenus.cpp index cfce0a4db..3e2e2fd5f 100644 --- a/src/menus/ExtraMenus.cpp +++ b/src/menus/ExtraMenus.cpp @@ -22,7 +22,7 @@ struct Handler : CommandHandlerObject { void OnOutputGain(const CommandContext &context) { auto &project = context.project; - auto tb = project.GetMixerToolBar(); + auto tb = &MixerToolBar::Get( project ); if (tb) { tb->ShowOutputGainDialog(); @@ -32,7 +32,7 @@ void OnOutputGain(const CommandContext &context) void OnOutputGainInc(const CommandContext &context) { auto &project = context.project; - auto tb = project.GetMixerToolBar(); + auto tb = &MixerToolBar::Get( project ); if (tb) { tb->AdjustOutputGain(1); @@ -42,7 +42,7 @@ void OnOutputGainInc(const CommandContext &context) void OnOutputGainDec(const CommandContext &context) { auto &project = context.project; - auto tb = project.GetMixerToolBar(); + auto tb = &MixerToolBar::Get( project ); if (tb) { tb->AdjustOutputGain(-1); @@ -52,7 +52,7 @@ void OnOutputGainDec(const CommandContext &context) void OnInputGain(const CommandContext &context) { auto &project = context.project; - auto tb = project.GetMixerToolBar(); + auto tb = &MixerToolBar::Get( project ); if (tb) { tb->ShowInputGainDialog(); @@ -62,7 +62,7 @@ void OnInputGain(const CommandContext &context) void OnInputGainInc(const CommandContext &context) { auto &project = context.project; - auto tb = project.GetMixerToolBar(); + auto tb = &MixerToolBar::Get( project ); if (tb) { tb->AdjustInputGain(1); @@ -72,7 +72,7 @@ void OnInputGainInc(const CommandContext &context) void OnInputGainDec(const CommandContext &context) { auto &project = context.project; - auto tb = project.GetMixerToolBar(); + auto tb = &MixerToolBar::Get( project ); if (tb) { tb->AdjustInputGain(-1); @@ -82,41 +82,29 @@ void OnInputGainDec(const CommandContext &context) void OnInputDevice(const CommandContext &context) { auto &project = context.project; - auto tb = project.GetDeviceToolBar(); - - if (tb) { - tb->ShowInputDialog(); - } + auto &tb = DeviceToolBar::Get( project ); + tb.ShowInputDialog(); } void OnOutputDevice(const CommandContext &context) { auto &project = context.project; - auto tb = project.GetDeviceToolBar(); - - if (tb) { - tb->ShowOutputDialog(); - } + auto &tb = DeviceToolBar::Get( project ); + tb.ShowOutputDialog(); } void OnInputChannels(const CommandContext &context) { auto &project = context.project; - auto tb = project.GetDeviceToolBar(); - - if (tb) { - tb->ShowChannelsDialog(); - } + auto &tb = DeviceToolBar::Get( project ); + tb.ShowChannelsDialog(); } void OnAudioHost(const CommandContext &context) { auto &project = context.project; - auto tb = project.GetDeviceToolBar(); - - if (tb) { - tb->ShowHostDialog(); - } + auto &tb = DeviceToolBar::Get( project ); + tb.ShowHostDialog(); } void OnFullScreen(const CommandContext &context) diff --git a/src/menus/SelectMenus.cpp b/src/menus/SelectMenus.cpp index ad5af340c..811dfa1bd 100644 --- a/src/menus/SelectMenus.cpp +++ b/src/menus/SelectMenus.cpp @@ -1036,8 +1036,8 @@ void OnSkipStart(const CommandContext &context) auto &project = context.project; wxCommandEvent evt; - auto controlToolBar = project.GetControlToolBar(); - controlToolBar->OnRewind(evt); + auto &controlToolBar = ControlToolBar::Get( project ); + controlToolBar.OnRewind(evt); project.ModifyState(false); } @@ -1046,8 +1046,8 @@ void OnSkipEnd(const CommandContext &context) auto &project = context.project; wxCommandEvent evt; - auto controlToolBar = project.GetControlToolBar(); - controlToolBar->OnFF(evt); + auto &controlToolBar = ControlToolBar::Get( project ); + controlToolBar.OnFF(evt); project.ModifyState(false); } diff --git a/src/menus/ToolbarMenus.cpp b/src/menus/ToolbarMenus.cpp index 761a88633..327ffd2b4 100644 --- a/src/menus/ToolbarMenus.cpp +++ b/src/menus/ToolbarMenus.cpp @@ -2,7 +2,6 @@ #include "../Experimental.h" #include "../Menus.h" -#include "../Project.h" #include "../TrackPanel.h" #include "../commands/CommandContext.h" #include "../commands/CommandManager.h" @@ -15,7 +14,7 @@ namespace { /// Called by handlers that set tools. void SetTool(AudacityProject &project, int tool) { - ToolsToolBar *toolbar = project.GetToolsToolBar(); + auto toolbar = &ToolsToolBar::Get( project ); if (toolbar) { toolbar->SetCurrentTool(tool); TrackPanel::Get( project ).Refresh(false); @@ -206,29 +205,25 @@ void OnMultiTool(const CommandContext &context) void OnPrevTool(const CommandContext &context) { auto &project = context.project; - auto toolbar = project.GetToolsToolBar(); + auto &toolbar = ToolsToolBar::Get( project ); auto &trackPanel = TrackPanel::Get( project ); - if (toolbar) { - // Use GetDownTool() here since GetCurrentTool() can return a value that - // doesn't represent the real tool if the Multi-tool is being used. - toolbar->SetCurrentTool((toolbar->GetDownTool()+(numTools-1))%numTools); - trackPanel.Refresh(false); - } + // Use GetDownTool() here since GetCurrentTool() can return a value that + // doesn't represent the real tool if the Multi-tool is being used. + toolbar.SetCurrentTool((toolbar.GetDownTool()+(numTools-1))%numTools); + trackPanel.Refresh(false); } void OnNextTool(const CommandContext &context) { auto &project = context.project; - auto toolbar = project.GetToolsToolBar(); + auto &toolbar = ToolsToolBar::Get( project ); auto &trackPanel = TrackPanel::Get( project ); - if (toolbar) { - // Use GetDownTool() here since GetCurrentTool() can return a value that - // doesn't represent the real tool if the Multi-tool is being used. - toolbar->SetCurrentTool((toolbar->GetDownTool()+1)%numTools); - trackPanel.Refresh(false); - } + // Use GetDownTool() here since GetCurrentTool() can return a value that + // doesn't represent the real tool if the Multi-tool is being used. + toolbar.SetCurrentTool((toolbar.GetDownTool()+1)%numTools); + trackPanel.Refresh(false); } }; // struct Handler diff --git a/src/menus/TransportMenus.cpp b/src/menus/TransportMenus.cpp index 82cc4fdd0..88e86a816 100644 --- a/src/menus/TransportMenus.cpp +++ b/src/menus/TransportMenus.cpp @@ -37,14 +37,14 @@ namespace { bool MakeReadyToPlay(AudacityProject &project, bool loop = false, bool cutpreview = false) { - ControlToolBar *toolbar = project.GetControlToolBar(); + auto &toolbar = ControlToolBar::Get( project ); wxCommandEvent evt; // If this project is playing, stop playing if (gAudioIO->IsStreamActive(project.GetAudioIOToken())) { - toolbar->SetPlay(false); //Pops - toolbar->SetStop(true); //Pushes stop down - toolbar->OnStop(evt); + toolbar.SetPlay(false); //Pops + toolbar.SetStop(true); //Pushes stop down + toolbar.OnStop(evt); ::wxMilliSleep(100); } @@ -58,8 +58,8 @@ bool MakeReadyToPlay(AudacityProject &project, cutpreview ? ControlToolBar::PlayAppearance::CutPreview : loop ? ControlToolBar::PlayAppearance::Looped : ControlToolBar::PlayAppearance::Straight; - toolbar->SetPlay(true, appearance); - toolbar->SetStop(false); + toolbar.SetPlay(true, appearance); + toolbar.SetStop(false); return true; } @@ -79,14 +79,14 @@ enum { void DoPlayStop(const CommandContext &context) { auto &project = context.project; - auto toolbar = project.GetControlToolBar(); + auto &toolbar = ControlToolBar::Get( project ); auto token = project.GetAudioIOToken(); //If this project is playing, stop playing, make sure everything is unpaused. if (gAudioIO->IsStreamActive(token)) { - toolbar->SetPlay(false); //Pops - toolbar->SetStop(true); //Pushes stop down - toolbar->StopPlaying(); + toolbar.SetPlay(false); //Pops + toolbar.SetStop(true); //Pushes stop down + toolbar.StopPlaying(); } else if (gAudioIO->IsStreamActive()) { // If this project isn't playing, but another one is, stop playing the @@ -103,10 +103,10 @@ void DoPlayStop(const CommandContext &context) //stop playing the other project if(otherProject) { - ControlToolBar *otherToolbar = otherProject->GetControlToolBar(); - otherToolbar->SetPlay(false); //Pops - otherToolbar->SetStop(true); //Pushes stop down - otherToolbar->StopPlaying(); + auto &otherToolbar = ControlToolBar::Get( *otherProject ); + otherToolbar.SetPlay(false); //Pops + otherToolbar.SetStop(true); //Pushes stop down + otherToolbar.StopPlaying(); } //play the front project @@ -115,19 +115,19 @@ void DoPlayStop(const CommandContext &context) project.TP_DisplaySelection(); //Otherwise, start playing (assuming audio I/O isn't busy) //toolbar->SetPlay(true); // Not needed as done in PlayPlayRegion. - toolbar->SetStop(false); + toolbar.SetStop(false); // Will automatically set mLastPlayMode - toolbar->PlayCurrentRegion(false); + toolbar.PlayCurrentRegion(false); } } else if (!gAudioIO->IsBusy()) { //Otherwise, start playing (assuming audio I/O isn't busy) //toolbar->SetPlay(true); // Not needed as done in PlayPlayRegion. - toolbar->SetStop(false); + toolbar.SetStop(false); // Will automatically set mLastPlayMode - toolbar->PlayCurrentRegion(false); + toolbar.PlayCurrentRegion(false); } } @@ -205,7 +205,7 @@ void StopIfPaused( AudacityProject &project ) bool DoPlayStopSelect (AudacityProject &project, bool click, bool shift) { - auto toolbar = project.GetControlToolBar(); + auto &toolbar = ControlToolBar::Get( project ); auto &scrubber = Scrubber::Get( project ); auto token = project.GetAudioIOToken(); auto &viewInfo = ViewInfo::Get( project ); @@ -214,8 +214,8 @@ bool DoPlayStopSelect //If busy, stop playing, make sure everything is unpaused. if (scrubber.HasMark() || gAudioIO->IsStreamActive(token)) { - toolbar->SetPlay(false); //Pops - toolbar->SetStop(true); //Pushes stop down + toolbar.SetPlay(false); //Pops + toolbar.SetStop(true); //Pushes stop down // change the selection auto time = gAudioIO->GetStreamTime(); @@ -263,17 +263,17 @@ bool DoPlayStopSelect // "OnStopSelect" merged. void DoPlayStopSelect(AudacityProject &project) { - auto toolbar = project.GetControlToolBar(); + auto &toolbar = ControlToolBar::Get( project ); wxCommandEvent evt; if (DoPlayStopSelect(project, false, false)) - toolbar->OnStop(evt); + toolbar.OnStop(evt); else if (!gAudioIO->IsBusy()) { //Otherwise, start playing (assuming audio I/O isn't busy) //toolbar->SetPlay(true); // Not needed as set in PlayPlayRegion() - toolbar->SetStop(false); + toolbar.SetStop(false); // Will automatically set mLastPlayMode - toolbar->PlayCurrentRegion(false); + toolbar.PlayCurrentRegion(false); } } @@ -281,8 +281,8 @@ void DoPause( AudacityProject &project ) { wxCommandEvent evt; - auto controlToolBar = project.GetControlToolBar(); - controlToolBar->OnPause(evt); + auto &controlToolBar = ControlToolBar::Get( project ); + controlToolBar.OnPause(evt); } void DoRecord( AudacityProject &project ) @@ -290,8 +290,8 @@ void DoRecord( AudacityProject &project ) wxCommandEvent evt; evt.SetInt(2); // 0 is default, use 1 to set shift on, 2 to clear it - auto controlToolBar = project.GetControlToolBar(); - controlToolBar->OnRecord(evt); + auto &controlToolBar = ControlToolBar::Get( project ); + controlToolBar.OnRecord(evt); } void DoLockPlayRegion( AudacityProject &project ) @@ -326,7 +326,7 @@ void DoTogglePinnedHead( AudacityProject &project ) MenuManager::ModifyAllProjectToolbarMenus(); // Change what happens in case transport is in progress right now - auto ctb = GetActiveProject()->GetControlToolBar(); + auto ctb = ControlToolBar::Find( *GetActiveProject() ); if (ctb) ctb->StartScrollingIfPreferred(); @@ -343,8 +343,8 @@ void DoStop( AudacityProject &project ) { wxCommandEvent evt; - auto controlToolBar = project.GetControlToolBar(); - controlToolBar->OnStop(evt); + auto &controlToolBar = ControlToolBar::Get( project ); + controlToolBar.OnStop(evt); } // Menu handler functions @@ -370,8 +370,8 @@ void OnPlayLooped(const CommandContext &context) // Now play in a loop // Will automatically set mLastPlayMode - auto controlToolBar = project.GetControlToolBar(); - controlToolBar->PlayCurrentRegion(true); + auto &controlToolBar = ControlToolBar::Get( project ); + controlToolBar.PlayCurrentRegion(true); } void OnPause(const CommandContext &context) @@ -392,8 +392,8 @@ void OnRecord2ndChoice(const CommandContext &context) wxCommandEvent evt; evt.SetInt(1); // 0 is default, use 1 to set shift on, 2 to clear it - auto controlToolBar = project.GetControlToolBar(); - controlToolBar->OnRecord(evt); + auto &controlToolBar = ControlToolBar::Get( project ); + controlToolBar.OnRecord(evt); } void OnTimerRecord(const CommandContext &context) @@ -506,8 +506,8 @@ void OnPunchAndRoll(const CommandContext &context) double t1 = std::max(0.0, viewInfo.selectedRegion.t1()); // Decide which tracks to record in. - auto pBar = project.GetControlToolBar(); - auto tracks = pBar->ChooseExistingRecordingTracks(project, true); + auto &bar = ControlToolBar::Get( project ); + auto tracks = bar.ChooseExistingRecordingTracks(project, true); if (tracks.empty()) { int recordingChannels = std::max(0L, gPrefs->Read(wxT("/AudioIO/RecordChannels"), 2)); @@ -605,7 +605,7 @@ void OnPunchAndRoll(const CommandContext &context) options.preRoll = std::max(0L, gPrefs->Read(AUDIO_PRE_ROLL_KEY, DEFAULT_PRE_ROLL_SECONDS)); options.pCrossfadeData = &crossfadeData; - bool success = project.GetControlToolBar()->DoRecord(project, + bool success = ControlToolBar::Get( project ).DoRecord(project, transportTracks, t1, DBL_MAX, false, // altAppearance @@ -704,11 +704,11 @@ void OnPlayOneSecond(const CommandContext &context) return; auto &trackPanel = TrackPanel::Get( project ); - auto controlToolBar = project.GetControlToolBar(); + auto &controlToolBar = ControlToolBar::Get( project ); auto options = project.GetDefaultPlayOptions(); double pos = trackPanel.GetMostRecentXPos(); - controlToolBar->PlayPlayRegion( + controlToolBar.PlayPlayRegion( SelectedRegion(pos - 0.5, pos + 0.5), options, PlayMode::oneSecondPlay); } @@ -757,10 +757,10 @@ void OnPlayToSelection(const CommandContext &context) // only when playing a short region, less than or equal to a second. // mLastPlayMode = ((t1-t0) > 1.0) ? normalPlay : oneSecondPlay; - auto controlToolBar = project.GetControlToolBar(); + auto &controlToolBar = ControlToolBar::Get( project ); auto playOptions = project.GetDefaultPlayOptions(); - controlToolBar->PlayPlayRegion( + controlToolBar.PlayPlayRegion( SelectedRegion(t0, t1), playOptions, PlayMode::oneSecondPlay); } @@ -781,10 +781,10 @@ void OnPlayBeforeSelectionStart(const CommandContext &context) double beforeLen; gPrefs->Read(wxT("/AudioIO/CutPreviewBeforeLen"), &beforeLen, 2.0); - auto controlToolBar = project.GetControlToolBar(); + auto &controlToolBar = ControlToolBar::Get( project ); auto playOptions = project.GetDefaultPlayOptions(); - controlToolBar->PlayPlayRegion( + controlToolBar.PlayPlayRegion( SelectedRegion(t0 - beforeLen, t0), playOptions, PlayMode::oneSecondPlay); } @@ -803,14 +803,14 @@ void OnPlayAfterSelectionStart(const CommandContext &context) double afterLen; gPrefs->Read(wxT("/AudioIO/CutPreviewAfterLen"), &afterLen, 1.0); - auto controlToolBar = project.GetControlToolBar(); + auto &controlToolBar = ControlToolBar::Get( project ); auto playOptions = project.GetDefaultPlayOptions(); if ( t1 - t0 > 0.0 && t1 - t0 < afterLen ) - controlToolBar->PlayPlayRegion( + controlToolBar.PlayPlayRegion( SelectedRegion(t0, t1), playOptions, PlayMode::oneSecondPlay); else - controlToolBar->PlayPlayRegion( + controlToolBar.PlayPlayRegion( SelectedRegion(t0, t0 + afterLen), playOptions, PlayMode::oneSecondPlay); } @@ -830,14 +830,14 @@ void OnPlayBeforeSelectionEnd(const CommandContext &context) double beforeLen; gPrefs->Read(wxT("/AudioIO/CutPreviewBeforeLen"), &beforeLen, 2.0); - auto controlToolBar = project.GetControlToolBar(); + auto &controlToolBar = ControlToolBar::Get( project ); auto playOptions = project.GetDefaultPlayOptions(); if ( t1 - t0 > 0.0 && t1 - t0 < beforeLen ) - controlToolBar->PlayPlayRegion( + controlToolBar.PlayPlayRegion( SelectedRegion(t0, t1), playOptions, PlayMode::oneSecondPlay); else - controlToolBar->PlayPlayRegion( + controlToolBar.PlayPlayRegion( SelectedRegion(t1 - beforeLen, t1), playOptions, PlayMode::oneSecondPlay); } @@ -857,10 +857,10 @@ void OnPlayAfterSelectionEnd(const CommandContext &context) double afterLen; gPrefs->Read(wxT("/AudioIO/CutPreviewAfterLen"), &afterLen, 1.0); - auto controlToolBar = project.GetControlToolBar(); + auto &controlToolBar = ControlToolBar::Get( project ); auto playOptions = project.GetDefaultPlayOptions(); - controlToolBar->PlayPlayRegion( + controlToolBar.PlayPlayRegion( SelectedRegion(t1, t1 + afterLen), playOptions, PlayMode::oneSecondPlay); } @@ -882,15 +882,15 @@ void OnPlayBeforeAndAfterSelectionStart double afterLen; gPrefs->Read(wxT("/AudioIO/CutPreviewAfterLen"), &afterLen, 1.0); - auto controlToolBar = project.GetControlToolBar(); + auto &controlToolBar = ControlToolBar::Get( project ); auto playOptions = project.GetDefaultPlayOptions(); if ( t1 - t0 > 0.0 && t1 - t0 < afterLen ) - controlToolBar->PlayPlayRegion( + controlToolBar.PlayPlayRegion( SelectedRegion(t0 - beforeLen, t1), playOptions, PlayMode::oneSecondPlay); else - controlToolBar->PlayPlayRegion( + controlToolBar.PlayPlayRegion( SelectedRegion(t0 - beforeLen, t0 + afterLen), playOptions, PlayMode::oneSecondPlay); } @@ -913,15 +913,15 @@ void OnPlayBeforeAndAfterSelectionEnd double afterLen; gPrefs->Read(wxT("/AudioIO/CutPreviewAfterLen"), &afterLen, 1.0); - auto controlToolBar = project.GetControlToolBar(); + auto &controlToolBar = ControlToolBar::Get( project ); auto playOptions = project.GetDefaultPlayOptions(); if ( t1 - t0 > 0.0 && t1 - t0 < beforeLen ) - controlToolBar->PlayPlayRegion( + controlToolBar.PlayPlayRegion( SelectedRegion(t0, t1 + afterLen), playOptions, PlayMode::oneSecondPlay); else - controlToolBar->PlayPlayRegion( + controlToolBar.PlayPlayRegion( SelectedRegion(t1 - beforeLen, t1 + afterLen), playOptions, PlayMode::oneSecondPlay); } @@ -935,14 +935,14 @@ void OnPlayCutPreview(const CommandContext &context) return; // Play with cut preview - auto controlToolBar = project.GetControlToolBar(); - controlToolBar->PlayCurrentRegion(false, true); + auto &controlToolBar = ControlToolBar::Get( project ); + controlToolBar.PlayCurrentRegion(false, true); } void OnPlayAtSpeed(const CommandContext &context) { auto &project = context.project; - auto tb = project.GetTranscriptionToolBar(); + auto tb = &TranscriptionToolBar::Get( project ); if (tb) { tb->PlayAtSpeed(false, false); @@ -952,7 +952,7 @@ void OnPlayAtSpeed(const CommandContext &context) void OnPlayAtSpeedLooped(const CommandContext &context) { auto &project = context.project; - auto tb = project.GetTranscriptionToolBar(); + auto tb = &TranscriptionToolBar::Get( project ); if (tb) { tb->PlayAtSpeed(true, false); @@ -962,7 +962,7 @@ void OnPlayAtSpeedLooped(const CommandContext &context) void OnPlayAtSpeedCutPreview(const CommandContext &context) { auto &project = context.project; - auto tb = project.GetTranscriptionToolBar(); + auto tb = &TranscriptionToolBar::Get( project ); if (tb) { tb->PlayAtSpeed(false, true); @@ -972,7 +972,7 @@ void OnPlayAtSpeedCutPreview(const CommandContext &context) void OnSetPlaySpeed(const CommandContext &context) { auto &project = context.project; - auto tb = project.GetTranscriptionToolBar(); + auto tb = &TranscriptionToolBar::Get( project ); if (tb) { tb->ShowPlaySpeedDialog(); @@ -982,7 +982,7 @@ void OnSetPlaySpeed(const CommandContext &context) void OnPlaySpeedInc(const CommandContext &context) { auto &project = context.project; - auto tb = project.GetTranscriptionToolBar(); + auto tb = &TranscriptionToolBar::Get( project ); if (tb) { tb->AdjustPlaySpeed(0.1f); @@ -992,7 +992,7 @@ void OnPlaySpeedInc(const CommandContext &context) void OnPlaySpeedDec(const CommandContext &context) { auto &project = context.project; - auto tb = project.GetTranscriptionToolBar(); + auto tb = &TranscriptionToolBar::Get( project ); if (tb) { tb->AdjustPlaySpeed(-0.1f); @@ -1021,9 +1021,9 @@ void OnStopSelect(const CommandContext &context) wxCommandEvent evt; if (gAudioIO->IsStreamActive()) { - auto controlToolBar = project.GetControlToolBar(); + auto &controlToolbar = ControlToolBar::Get( project ); selectedRegion.setT0(gAudioIO->GetStreamTime(), false); - controlToolBar->OnStop(evt); + controlToolBar.OnStop(evt); project.ModifyState(false); // without bWantsAutoSave } } diff --git a/src/toolbars/ControlToolBar.cpp b/src/toolbars/ControlToolBar.cpp index 8a7327a80..fdbbf3a37 100644 --- a/src/toolbars/ControlToolBar.cpp +++ b/src/toolbars/ControlToolBar.cpp @@ -125,6 +125,25 @@ ControlToolBar::~ControlToolBar() } +ControlToolBar *ControlToolBar::Find( AudacityProject &project ) +{ + auto &toolManager = ToolManager::Get( project ); + return static_cast( + toolManager.GetToolBar(TransportBarID) ); +} + +ControlToolBar &ControlToolBar::Get( AudacityProject &project ) +{ + auto &toolManager = ToolManager::Get( project ); + return *static_cast( + toolManager.GetToolBar(TransportBarID) ); +} + +const ControlToolBar &ControlToolBar::Get( const AudacityProject &project ) +{ + return Get( const_cast( project )) ; +} + void ControlToolBar::Create(wxWindow * parent) { ToolBar::Create(parent); @@ -464,7 +483,7 @@ void ControlToolBar::EnableDisableButtons() bool tracks = p && TrackList::Get( *p ).Any(); // PRL: PlayableTrack ? if (p) { - TranscriptionToolBar *const playAtSpeedTB = p->GetTranscriptionToolBar(); + const auto playAtSpeedTB = &TranscriptionToolBar::Get( *p ); if (playAtSpeedTB) playAtSpeedTB->SetEnabled(CanStopAudioStream() && tracks && !recording); } diff --git a/src/toolbars/ControlToolBar.h b/src/toolbars/ControlToolBar.h index 77d06b878..84c6d6358 100644 --- a/src/toolbars/ControlToolBar.h +++ b/src/toolbars/ControlToolBar.h @@ -55,6 +55,10 @@ class ControlToolBar final : public ToolBar { static bool IsTransportingPinned(); + static ControlToolBar *Find( AudacityProject &project ); + static ControlToolBar &Get( AudacityProject &project ); + static const ControlToolBar &Get( const AudacityProject &project ); + void Create(wxWindow *parent) override; void UpdatePrefs() override; diff --git a/src/toolbars/DeviceToolBar.cpp b/src/toolbars/DeviceToolBar.cpp index 7927d7caf..9c995e762 100644 --- a/src/toolbars/DeviceToolBar.cpp +++ b/src/toolbars/DeviceToolBar.cpp @@ -16,6 +16,7 @@ #include "../Audacity.h" // for USE_* macros #include "DeviceToolBar.h" +#include "ToolManager.h" // For compilers that support precompilation, includes "wx/wx.h". #include @@ -80,6 +81,17 @@ DeviceToolBar::~DeviceToolBar() { } +DeviceToolBar &DeviceToolBar::Get( AudacityProject &project ) +{ + auto &toolManager = ToolManager::Get( project ); + return *static_cast( toolManager.GetToolBar(DeviceBarID) ); +} + +const DeviceToolBar &DeviceToolBar::Get( const AudacityProject &project ) +{ + return Get( const_cast( project )) ; +} + void DeviceToolBar::Create(wxWindow *parent) { ToolBar::Create(parent); diff --git a/src/toolbars/DeviceToolBar.h b/src/toolbars/DeviceToolBar.h index 66b7f670b..f00881866 100644 --- a/src/toolbars/DeviceToolBar.h +++ b/src/toolbars/DeviceToolBar.h @@ -19,6 +19,8 @@ class wxPoint; class wxChoice; struct DeviceSourceMap; +class AudacityProject; + class DeviceToolBar final : public ToolBar { public: @@ -26,6 +28,9 @@ class DeviceToolBar final : public ToolBar { DeviceToolBar(); virtual ~DeviceToolBar(); + static DeviceToolBar &Get( AudacityProject &project ); + static const DeviceToolBar &Get( const AudacityProject &project ); + void Create(wxWindow * parent) override; void UpdatePrefs() override; diff --git a/src/toolbars/MixerToolBar.cpp b/src/toolbars/MixerToolBar.cpp index 48837f670..f0b6b260c 100644 --- a/src/toolbars/MixerToolBar.cpp +++ b/src/toolbars/MixerToolBar.cpp @@ -17,6 +17,8 @@ #include "../Audacity.h" // for USE_* macros #include "MixerToolBar.h" +#include "ToolManager.h" + // For compilers that support precompilation, includes "wx/wx.h". #include @@ -64,6 +66,17 @@ MixerToolBar::~MixerToolBar() { } +MixerToolBar &MixerToolBar::Get( AudacityProject &project ) +{ + auto &toolManager = ToolManager::Get( project ); + return *static_cast( toolManager.GetToolBar(MixerBarID) ); +} + +const MixerToolBar &MixerToolBar::Get( const AudacityProject &project ) +{ + return Get( const_cast( project )) ; +} + void MixerToolBar::Create(wxWindow *parent) { ToolBar::Create(parent); diff --git a/src/toolbars/MixerToolBar.h b/src/toolbars/MixerToolBar.h index 90da18a04..c310e3424 100644 --- a/src/toolbars/MixerToolBar.h +++ b/src/toolbars/MixerToolBar.h @@ -17,6 +17,7 @@ class wxSize; class wxPoint; class ASlider; +class AudacityProject; class MixerToolBar final : public ToolBar { @@ -25,6 +26,9 @@ class MixerToolBar final : public ToolBar { MixerToolBar(); virtual ~MixerToolBar(); + static MixerToolBar &Get( AudacityProject &project ); + static const MixerToolBar &Get( const AudacityProject &project ); + void Create(wxWindow * parent) override; void UpdatePrefs() override; diff --git a/src/toolbars/ScrubbingToolBar.cpp b/src/toolbars/ScrubbingToolBar.cpp index 31a7452d3..ea2141033 100644 --- a/src/toolbars/ScrubbingToolBar.cpp +++ b/src/toolbars/ScrubbingToolBar.cpp @@ -15,6 +15,7 @@ #include "../Audacity.h" #include "ScrubbingToolBar.h" +#include "ToolManager.h" // For compilers that support precompilation, includes "wx/wx.h". #include @@ -64,6 +65,17 @@ ScrubbingToolBar::~ScrubbingToolBar() { } +ScrubbingToolBar &ScrubbingToolBar::Get( AudacityProject &project ) +{ + auto &toolManager = ToolManager::Get( project ); + return *static_cast( toolManager.GetToolBar(ScrubbingBarID) ); +} + +const ScrubbingToolBar &ScrubbingToolBar::Get( const AudacityProject &project ) +{ + return Get( const_cast( project )) ; +} + void ScrubbingToolBar::Create(wxWindow * parent) { ToolBar::Create(parent); diff --git a/src/toolbars/ScrubbingToolBar.h b/src/toolbars/ScrubbingToolBar.h index 08e855f9f..4dec81e55 100644 --- a/src/toolbars/ScrubbingToolBar.h +++ b/src/toolbars/ScrubbingToolBar.h @@ -18,6 +18,8 @@ #include "ToolBar.h" +class AudacityProject; + class wxCommandEvent; class wxDC; class wxImage; @@ -41,6 +43,9 @@ public: ScrubbingToolBar(); virtual ~ScrubbingToolBar(); + static ScrubbingToolBar &Get( AudacityProject &project ); + static const ScrubbingToolBar &Get( const AudacityProject &project ); + void Create(wxWindow *parent) override; void OnButton(wxCommandEvent & event); diff --git a/src/toolbars/SelectionBar.cpp b/src/toolbars/SelectionBar.cpp index 2e694620b..11ca94273 100644 --- a/src/toolbars/SelectionBar.cpp +++ b/src/toolbars/SelectionBar.cpp @@ -30,6 +30,7 @@ with changes in the SelectionBar. #include "SelectionBar.h" #include "SelectionBarListener.h" +#include "ToolManager.h" // For compilers that support precompilation, includes "wx/wx.h". #include @@ -129,6 +130,17 @@ SelectionBar::~SelectionBar() { } +SelectionBar &SelectionBar::Get( AudacityProject &project ) +{ + auto &toolManager = ToolManager::Get( project ); + return *static_cast( toolManager.GetToolBar(SelectionBarID) ); +} + +const SelectionBar &SelectionBar::Get( const AudacityProject &project ) +{ + return Get( const_cast( project )) ; +} + void SelectionBar::Create(wxWindow * parent) { ToolBar::Create(parent); diff --git a/src/toolbars/SelectionBar.h b/src/toolbars/SelectionBar.h index f9b0b1a6a..deee05bd1 100644 --- a/src/toolbars/SelectionBar.h +++ b/src/toolbars/SelectionBar.h @@ -33,6 +33,7 @@ class wxDC; class wxSizeEvent; class wxStaticText; +class AudacityProject; class SelectionBarListener; class NumericTextCtrl; @@ -42,6 +43,9 @@ class SelectionBar final : public ToolBar { SelectionBar(); virtual ~SelectionBar(); + static SelectionBar &Get( AudacityProject &project ); + static const SelectionBar &Get( const AudacityProject &project ); + void Create(wxWindow *parent) override; void Populate() override; diff --git a/src/toolbars/SpectralSelectionBar.cpp b/src/toolbars/SpectralSelectionBar.cpp index 1201b178c..7c23f2187 100644 --- a/src/toolbars/SpectralSelectionBar.cpp +++ b/src/toolbars/SpectralSelectionBar.cpp @@ -31,6 +31,7 @@ with changes in the SpectralSelectionBar. #include "SpectralSelectionBarListener.h" #include "../Experimental.h" +#include "ToolManager.h" #include @@ -104,6 +105,18 @@ SpectralSelectionBar::~SpectralSelectionBar() // Do nothing, sizer deletes the controls } +SpectralSelectionBar &SpectralSelectionBar::Get( AudacityProject &project ) +{ + auto &toolManager = ToolManager::Get( project ); + return *static_cast( + toolManager.GetToolBar(SpectralSelectionBarID) ); +} + +const SpectralSelectionBar &SpectralSelectionBar::Get( const AudacityProject &project ) +{ + return Get( const_cast( project )) ; +} + void SpectralSelectionBar::Create(wxWindow * parent) { ToolBar::Create(parent); diff --git a/src/toolbars/SpectralSelectionBar.h b/src/toolbars/SpectralSelectionBar.h index 4bcba66ae..60377a848 100644 --- a/src/toolbars/SpectralSelectionBar.h +++ b/src/toolbars/SpectralSelectionBar.h @@ -21,6 +21,7 @@ class wxCommandEvent; class wxDC; class wxSizeEvent; +class AudacityProject; class SpectralSelectionBarListener; class NumericTextCtrl; @@ -31,6 +32,9 @@ public: SpectralSelectionBar(); virtual ~SpectralSelectionBar(); + static SpectralSelectionBar &Get( AudacityProject &project ); + static const SpectralSelectionBar &Get( const AudacityProject &project ); + void Create(wxWindow *parent) override; void Populate() override; diff --git a/src/toolbars/ToolsToolBar.cpp b/src/toolbars/ToolsToolBar.cpp index aaf27326c..3d474e614 100644 --- a/src/toolbars/ToolsToolBar.cpp +++ b/src/toolbars/ToolsToolBar.cpp @@ -32,6 +32,7 @@ #include "../Audacity.h" #include "ToolsToolBar.h" +#include "ToolManager.h" // For compilers that support precompilation, includes "wx/wx.h". #include @@ -93,6 +94,17 @@ ToolsToolBar::~ToolsToolBar() { } +ToolsToolBar &ToolsToolBar::Get( AudacityProject &project ) +{ + auto &toolManager = ToolManager::Get( project ); + return *static_cast( toolManager.GetToolBar(ToolsBarID) ); +} + +const ToolsToolBar &ToolsToolBar::Get( const AudacityProject &project ) +{ + return Get( const_cast( project )) ; +} + void ToolsToolBar::RegenerateTooltips() { diff --git a/src/toolbars/ToolsToolBar.h b/src/toolbars/ToolsToolBar.h index c6a91dac2..c65a67d8d 100644 --- a/src/toolbars/ToolsToolBar.h +++ b/src/toolbars/ToolsToolBar.h @@ -25,6 +25,7 @@ class wxImage; class wxWindow; class AButton; +class AudacityProject; // Code duplication warning: these apparently need to be in the // same order as the enum in ToolsToolBar.cpp @@ -51,6 +52,9 @@ class ToolsToolBar final : public ToolBar { ToolsToolBar(); virtual ~ToolsToolBar(); + static ToolsToolBar &Get( AudacityProject &project ); + static const ToolsToolBar &Get( const AudacityProject &project ); + void UpdatePrefs() override; void OnTool(wxCommandEvent & evt); diff --git a/src/toolbars/TranscriptionToolBar.cpp b/src/toolbars/TranscriptionToolBar.cpp index 64257fe10..6bce09fa4 100644 --- a/src/toolbars/TranscriptionToolBar.cpp +++ b/src/toolbars/TranscriptionToolBar.cpp @@ -16,6 +16,7 @@ #include "../Audacity.h" #include "TranscriptionToolBar.h" +#include "ToolManager.h" #include "../Experimental.h" @@ -105,6 +106,17 @@ TranscriptionToolBar::~TranscriptionToolBar() { } +TranscriptionToolBar &TranscriptionToolBar::Get( AudacityProject &project ) +{ + auto &toolManager = ToolManager::Get( project ); + return *static_cast( toolManager.GetToolBar(TranscriptionBarID) ); +} + +const TranscriptionToolBar &TranscriptionToolBar::Get( const AudacityProject &project ) +{ + return Get( const_cast( project )) ; +} + void TranscriptionToolBar::Create(wxWindow * parent) { ToolBar::Create(parent); @@ -469,7 +481,8 @@ void TranscriptionToolBar::PlayAtSpeed(bool looped, bool cutPreview) // If IO is busy, abort immediately if (gAudioIO->IsBusy()) { - p->GetControlToolBar()->StopPlaying(); + auto &bar = ControlToolBar::Get( *p ); + bar.StopPlaying(); } // Get the current play region @@ -489,7 +502,8 @@ void TranscriptionToolBar::PlayAtSpeed(bool looped, bool cutPreview) cutPreview ? PlayMode::cutPreviewPlay : options.playLooped ? PlayMode::loopedPlay : PlayMode::normalPlay; - p->GetControlToolBar()->PlayPlayRegion + auto &bar = ControlToolBar::Get( *p ); + bar.PlayPlayRegion (SelectedRegion(playRegionStart, playRegionEnd), options, mode); diff --git a/src/toolbars/TranscriptionToolBar.h b/src/toolbars/TranscriptionToolBar.h index b9f093b6c..5852c4828 100644 --- a/src/toolbars/TranscriptionToolBar.h +++ b/src/toolbars/TranscriptionToolBar.h @@ -28,6 +28,7 @@ class wxKeyEvent; class AButton; class ASlider; +class AudacityProject; class TimeTrack; class WaveTrack; @@ -67,6 +68,9 @@ class TranscriptionToolBar final : public ToolBar { TranscriptionToolBar(); virtual ~TranscriptionToolBar(); + static TranscriptionToolBar &Get( AudacityProject &project ); + static const TranscriptionToolBar &Get( const AudacityProject &project ); + void Create(wxWindow *parent) override; void OnKeyEvent(wxKeyEvent & event); diff --git a/src/tracks/ui/PlayIndicatorOverlay.cpp b/src/tracks/ui/PlayIndicatorOverlay.cpp index ea10c382e..359ee299a 100644 --- a/src/tracks/ui/PlayIndicatorOverlay.cpp +++ b/src/tracks/ui/PlayIndicatorOverlay.cpp @@ -186,7 +186,7 @@ void PlayIndicatorOverlay::OnTimer(wxCommandEvent &event) playPos >= 0 && !onScreen ) { // msmeyer: But only if not playing looped or in one-second mode // PRL: and not scrolling with play/record head fixed - auto mode = mProject->GetControlToolBar()->GetLastPlayMode(); + auto mode = ControlToolBar::Get( *mProject ).GetLastPlayMode(); if (!pinned && mode != PlayMode::loopedPlay && mode != PlayMode::oneSecondPlay && diff --git a/src/tracks/ui/Scrubbing.cpp b/src/tracks/ui/Scrubbing.cpp index 201369d91..331a4803f 100644 --- a/src/tracks/ui/Scrubbing.cpp +++ b/src/tracks/ui/Scrubbing.cpp @@ -300,12 +300,12 @@ void Scrubber::MarkScrubStart( // drag events. mSmoothScrollingScrub = smoothScrolling; - ControlToolBar * const ctb = mProject->GetControlToolBar(); + auto &ctb = ControlToolBar::Get( *mProject ); // Stop any play in progress // Bug 1492: mCancelled to stop us collapsing the selected region. mCancelled = true; - ctb->StopPlaying(); + ctb.StopPlaying(); mCancelled = false; // Usually the timer handler of TrackPanel does this, but we do this now, @@ -316,14 +316,14 @@ void Scrubber::MarkScrubStart( mSeeking = seek; CheckMenuItems(); - ctb->SetPlay(true, ControlToolBar::PlayAppearance::Straight ); + ctb.SetPlay(true, ControlToolBar::PlayAppearance::Straight ); // Commented out for Bug 1421 // mSeeking // ? ControlToolBar::PlayAppearance::Seek // : ControlToolBar::PlayAppearance::Scrub); mScrubStartPosition = xx; - ctb->UpdateStatusBar(mProject); + ctb.UpdateStatusBar(mProject); mCancelled = false; } @@ -351,7 +351,7 @@ bool Scrubber::MaybeStartScrubbing(wxCoord xx) if (abs(mScrubStartPosition - position) >= SCRUBBING_PIXEL_TOLERANCE) { auto &viewInfo = ViewInfo::Get( *mProject ); auto &trackPanel = TrackPanel::Get( *mProject ); - ControlToolBar * const ctb = mProject->GetControlToolBar(); + auto &ctb = ControlToolBar::Get( *mProject ); double maxTime = TrackList::Get( *mProject ).GetEndTime(); const int leftOffset = trackPanel.GetLeftOffset(); double time0 = std::min(maxTime, @@ -363,7 +363,7 @@ bool Scrubber::MaybeStartScrubbing(wxCoord xx) if (time1 != time0) { if (busy) { position = mScrubStartPosition; - ctb->StopPlaying(); + ctb.StopPlaying(); mScrubStartPosition = position; } @@ -390,7 +390,7 @@ bool Scrubber::MaybeStartScrubbing(wxCoord xx) // Take the starting speed limit from the transcription toolbar, // but it may be varied during the scrub. mMaxSpeed = mOptions.maxSpeed = - mProject->GetTranscriptionToolBar()->GetPlaySpeed(); + TranscriptionToolBar::Get( *mProject ).GetPlaySpeed(); } #else // That idea seems unpopular... just make it one for move-scrub, @@ -430,7 +430,7 @@ bool Scrubber::MaybeStartScrubbing(wxCoord xx) }); mScrubToken = - ctb->PlayPlayRegion(SelectedRegion(time0, time1), options, + ctb.PlayPlayRegion(SelectedRegion(time0, time1), options, PlayMode::normalPlay, backwards); if (mScrubToken <= 0) { // Bug1627 (part of it): @@ -470,9 +470,9 @@ bool Scrubber::StartSpeedPlay(double speed, double time0, double time1) return false; } - ControlToolBar * const ctb = mProject->GetControlToolBar(); + auto &ctb = ControlToolBar::Get( *mProject ); if (busy) { - ctb->StopPlaying(); + ctb.StopPlaying(); } mScrubStartPosition = 0; mSpeedPlaying = true; @@ -517,7 +517,7 @@ bool Scrubber::StartSpeedPlay(double speed, double time0, double time1) double stopTolerance = 20.0 / options.rate; mScrubToken = // Reduce time by 'stopTolerance' fudge factor, so that the Play will stop. - ctb->PlayPlayRegion(SelectedRegion(time0, time1-stopTolerance), options, + ctb.PlayPlayRegion(SelectedRegion(time0, time1-stopTolerance), options, PlayMode::normalPlay, backwards); if (mScrubToken >= 0) { @@ -551,7 +551,7 @@ void Scrubber::ContinueScrubbingPoll() // default speed of 1.3 set, so that we can hear there is a problem // when playAtSpeedTB not found. double speed = 1.3; - TranscriptionToolBar *const playAtSpeedTB = mProject->GetTranscriptionToolBar(); + const auto playAtSpeedTB = &TranscriptionToolBar::Get( *mProject ); if (playAtSpeedTB) { speed = playAtSpeedTB->GetPlaySpeed(); } @@ -629,7 +629,7 @@ void Scrubber::ContinueScrubbingUI() bool bShift = state.ShiftDown(); TransportActions::DoPlayStopSelect(*mProject, true, bShift); wxCommandEvent evt; - mProject->GetControlToolBar()->OnStop(evt); + ControlToolBar::Get( *mProject ).OnStop(evt); return; } @@ -639,9 +639,8 @@ void Scrubber::ContinueScrubbingUI() // Show the correct status for seeking. bool backup = mSeeking; mSeeking = seek; - const auto ctb = mProject->GetControlToolBar(); - if (ctb) - ctb->UpdateStatusBar(mProject); + auto &ctb = ControlToolBar::Get( *mProject ); + ctb.UpdateStatusBar(mProject); mSeeking = backup; } @@ -704,8 +703,8 @@ void Scrubber::StopScrubbing() { // Marked scrub start, but // didn't really play, but did change button apperance - const auto ctb = mProject->GetControlToolBar(); - ctb->SetPlay(false, ControlToolBar::PlayAppearance::Straight); + auto &ctb = ControlToolBar::Get( *mProject ); + ctb.SetPlay(false, ControlToolBar::PlayAppearance::Straight); } AdornedRulerPanel::Get( *mProject ).DrawBothOverlays(); @@ -836,9 +835,9 @@ void Scrubber::OnActivateOrDeactivateApp(wxActivateEvent &event) // Pause if Pause down, or not scrubbing. if (!mProject) Pause(true); - else if (!mProject->GetControlToolBar()) - Pause(true); - else if (mProject->GetControlToolBar()->IsPauseDown()) + else if ( !ControlToolBar::Find( *mProject ) ) + Pause( true ); + else if (ControlToolBar::Get( *mProject ).IsPauseDown()) Pause( true ); else if (!IsScrubbing()) Pause( true ); @@ -1060,8 +1059,10 @@ void Scrubber::DoScrub(bool seek) else if (mSeeking != seek) { // just switching mode } - else - mProject->GetControlToolBar()->StopPlaying(); + else { + auto &ctb = ControlToolBar::Get( *mProject ); + ctb.StopPlaying(); + } } void Scrubber::OnScrubOrSeek(bool seek) @@ -1070,8 +1071,8 @@ void Scrubber::OnScrubOrSeek(bool seek) if (HasMark()) { // Show the correct status. - const auto ctb = mProject->GetControlToolBar(); - ctb->UpdateStatusBar(mProject); + auto &ctb = ControlToolBar::Get( *mProject ); + ctb.UpdateStatusBar(mProject); } mSeeking = seek; @@ -1081,7 +1082,7 @@ void Scrubber::OnScrubOrSeek(bool seek) // Update button images ruler.UpdateButtonStates(); - auto scrubbingToolBar = mProject->GetScrubbingToolBar(); + auto scrubbingToolBar = &ScrubbingToolBar::Get( *mProject ); scrubbingToolBar->EnableDisableButtons(); scrubbingToolBar->RegenerateTooltips(); } diff --git a/src/tracks/ui/SelectHandle.cpp b/src/tracks/ui/SelectHandle.cpp index bc15c4a8e..77c165d33 100644 --- a/src/tracks/ui/SelectHandle.cpp +++ b/src/tracks/ui/SelectHandle.cpp @@ -900,7 +900,7 @@ HitTestPreview SelectHandle::Preview auto xx = viewInfo.TimeToPosition(time, mRect.x); const bool bMultiToolMode = - pProject->GetToolsToolBar()->IsDown(multiTool); + ToolsToolBar::Get( *pProject ).IsDown(multiTool); //In Multi-tool mode, give multitool prompt if no-special-hit. if (bMultiToolMode) { diff --git a/src/tracks/ui/TimeShiftHandle.cpp b/src/tracks/ui/TimeShiftHandle.cpp index ffdaf3874..f1ffdf0f2 100644 --- a/src/tracks/ui/TimeShiftHandle.cpp +++ b/src/tracks/ui/TimeShiftHandle.cpp @@ -370,7 +370,7 @@ UIHandle::Result TimeShiftHandle::Click mClipMoveState.clear(); mDidSlideVertically = false; - ToolsToolBar *const ttb = pProject->GetToolsToolBar(); + const auto ttb = &ToolsToolBar::Get( *pProject ); const bool multiToolModeActive = (ttb && ttb->IsDown(multiTool)); const double clickTime = diff --git a/src/tracks/ui/TrackUI.cpp b/src/tracks/ui/TrackUI.cpp index b114ab3ca..6ef527749 100644 --- a/src/tracks/ui/TrackUI.cpp +++ b/src/tracks/ui/TrackUI.cpp @@ -15,7 +15,6 @@ Paul Licameli split from TrackPanel.cpp #include "TrackVRulerControls.h" #include "../../HitTestResult.h" -#include "../../Project.h" #include "../../toolbars/ToolsToolBar.h" #include "../ui/SelectHandle.h" @@ -32,7 +31,7 @@ std::vector Track::HitTest { UIHandlePtr result; std::vector results; - const ToolsToolBar * pTtb = pProject->GetToolsToolBar(); + auto pTtb = &ToolsToolBar::Get( *pProject ); const bool isMultiTool = pTtb->IsDown(multiTool); const auto currentTool = pTtb->GetCurrentTool();