diff --git a/src/AudacityApp.h b/src/AudacityApp.h index 60ba23038..9f3906478 100644 --- a/src/AudacityApp.h +++ b/src/AudacityApp.h @@ -92,10 +92,10 @@ enum CommandFlag : unsigned long long IsRealtimeNotActiveFlag= 0x10000000, //lll CaptureNotBusyFlag = 0x20000000, CanStopAudioStreamFlag = 0x40000000, - AudioStreamNotScrubbingFlag - = 0x80000000ULL, // prl RulerHasFocus - = 0x100000000ULL, // prl + = 0x80000000ULL, // prl +// nextOneHas33BitsWow +// = 0x100000000ULL, // prl NoFlagsSpecifed = ~0ULL }; diff --git a/src/Menus.cpp b/src/Menus.cpp index a7110fe45..57c7e3af0 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -754,9 +754,7 @@ void AudacityProject::CreateMenusAndCommands() // Scrubbing sub-menu GetScrubber().AddMenuItems(); - c->AddItem(wxT("Pause"), _("&Pause"), FN(OnPause), wxT("P"), - c->GetDefaultFlags() | AudioStreamNotScrubbingFlag, - c->GetDefaultMask() | AudioStreamNotScrubbingFlag); + c->AddItem(wxT("Pause"), _("&Pause"), FN(OnPause), wxT("P")); c->AddItem(wxT("SkipStart"), _("S&kip to Start"), FN(OnSkipStart), wxT("Home"), AudioIONotBusyFlag, AudioIONotBusyFlag); c->AddItem(wxT("SkipEnd"), _("Skip to E&nd"), FN(OnSkipEnd), wxT("End"), @@ -1776,9 +1774,6 @@ CommandFlag AudacityProject::GetUpdateFlags() if (bar->ControlToolBar::CanStopAudioStream()) flags |= CanStopAudioStreamFlag; - if(!GetScrubber().HasStartedScrubbing()) - flags |= AudioStreamNotScrubbingFlag; - return flags; } diff --git a/src/toolbars/ControlToolBar.cpp b/src/toolbars/ControlToolBar.cpp index 042c3de14..764cb757f 100644 --- a/src/toolbars/ControlToolBar.cpp +++ b/src/toolbars/ControlToolBar.cpp @@ -431,9 +431,7 @@ void ControlToolBar::EnableDisableButtons() mFF->SetEnabled(tracks && !playing && !recording); auto pProject = GetActiveProject(); - mPause->SetEnabled(CanStopAudioStream() && - !(pProject && - pProject->GetScrubber().HasStartedScrubbing())); + mPause->SetEnabled(CanStopAudioStream()); } void ControlToolBar::SetPlay(bool down, PlayAppearance appearance) @@ -479,7 +477,12 @@ void ControlToolBar::SetRecord(bool down, bool append) EnableDisableButtons(); } -bool ControlToolBar::IsRecordDown() +bool ControlToolBar::IsPauseDown() const +{ + return mPause->IsDown(); +} + +bool ControlToolBar::IsRecordDown() const { return mRecord->IsDown(); } @@ -1090,12 +1093,6 @@ void ControlToolBar::OnPause(wxCommandEvent & WXUNUSED(evt)) return; } -#ifdef EXPERIMENTAL_SCRUBBING_SUPPORT - if (gAudioIO->IsScrubbing()) - // Pausing does not make sense. Force the button - // to pop up below. - mPaused = true; -#endif if(mPaused) { @@ -1108,7 +1105,15 @@ void ControlToolBar::OnPause(wxCommandEvent & WXUNUSED(evt)) mPaused=true; } - gAudioIO->SetPaused(mPaused); +#ifdef EXPERIMENTAL_SCRUBBING_SUPPORT + if (gAudioIO->IsScrubbing()) + GetActiveProject()->GetScrubber().Pause(mPaused); + else +#endif + { + gAudioIO->SetPaused(mPaused); + } + UpdateStatusBar(GetActiveProject()); } @@ -1190,22 +1195,22 @@ int ControlToolBar::WidthForStatusBar(wxStatusBar* const sb) int xMax = 0; const auto pauseString = wxT(" ") + wxGetTranslation(mStatePause); - auto update = [&] (const wxString &state, bool pauseToo) { + auto update = [&] (const wxString &state) { int x, y; sb->GetTextExtent( - wxGetTranslation(state) + ( pauseToo ? pauseString : wxString{} ) + wxT("."), + wxGetTranslation(state) + pauseString + wxT("."), &x, &y ); xMax = std::max(x, xMax); }; - update(mStatePlay, true); - update(mStateStop, true); - update(mStateRecord, true); + update(mStatePlay); + update(mStateStop); + update(mStateRecord); // Note that Scrubbing + Paused is not allowed. for(const auto &state : Scrubber::GetAllUntranslatedStatusStrings()) - update(state, false); + update(state); return xMax + 30; // added constant needed because xMax isn't large enough for some reason, plus some space. } diff --git a/src/toolbars/ControlToolBar.h b/src/toolbars/ControlToolBar.h index c4244e0f5..989e3a168 100644 --- a/src/toolbars/ControlToolBar.h +++ b/src/toolbars/ControlToolBar.h @@ -70,7 +70,8 @@ class ControlToolBar final : public ToolBar { void SetStop(bool down); void SetRecord(bool down, bool append=false); - bool IsRecordDown(); + bool IsPauseDown() const; + bool IsRecordDown() const; // A project is only allowed to stop an audio stream that it owns. bool CanStopAudioStream (); diff --git a/src/tracks/ui/Scrubbing.cpp b/src/tracks/ui/Scrubbing.cpp index 00893bbaa..b096fd967 100644 --- a/src/tracks/ui/Scrubbing.cpp +++ b/src/tracks/ui/Scrubbing.cpp @@ -210,9 +210,6 @@ void Scrubber::MarkScrubStart( ctb->SetPlay(true, ControlToolBar::PlayAppearance::Scrub); - // This disables the pause button. - ctb->EnableDisableButtons(); - ctb->UpdateStatusBar(mProject); mScrubStartPosition = xx; @@ -469,12 +466,17 @@ void Scrubber::HandleScrollWheel(int steps) } } +void Scrubber::Pause( bool paused ) +{ + mScrubHasFocus = !paused; +} + void Scrubber::OnActivateOrDeactivateApp(wxActivateEvent &event) { if (event.GetActive()) - mScrubHasFocus = IsScrubbing(); + Pause(!IsScrubbing() || mProject->GetControlToolBar()->IsPauseDown()); else - mScrubHasFocus = false; + Pause(true); event.Skip(); } diff --git a/src/tracks/ui/Scrubbing.h b/src/tracks/ui/Scrubbing.h index 9a1a6d797..92e631929 100644 --- a/src/tracks/ui/Scrubbing.h +++ b/src/tracks/ui/Scrubbing.h @@ -85,6 +85,8 @@ public: // All possible status strings. static std::vector GetAllUntranslatedStatusStrings(); + void Pause(bool paused); + private: void DoScrub(bool scroll, bool seek); void OnActivateOrDeactivateApp(wxActivateEvent & event);