mirror of
https://github.com/cookiengineer/audacity
synced 2025-09-17 16:50:26 +02:00
Move CanStopAudioStream into ProjectAudioManager
This commit is contained in:
parent
a470ba00b0
commit
977b46cda2
@ -202,7 +202,7 @@ bool ProjectAudioManager::Playing() const
|
|||||||
auto gAudioIO = AudioIO::Get();
|
auto gAudioIO = AudioIO::Get();
|
||||||
return
|
return
|
||||||
gAudioIO->IsBusy() &&
|
gAudioIO->IsBusy() &&
|
||||||
ControlToolBar::Get( mProject ).CanStopAudioStream() &&
|
CanStopAudioStream() &&
|
||||||
// ... and not merely monitoring
|
// ... and not merely monitoring
|
||||||
!gAudioIO->IsMonitoring() &&
|
!gAudioIO->IsMonitoring() &&
|
||||||
// ... and not punch-and-roll recording
|
// ... and not punch-and-roll recording
|
||||||
@ -214,10 +214,27 @@ bool ProjectAudioManager::Recording() const
|
|||||||
auto gAudioIO = AudioIO::Get();
|
auto gAudioIO = AudioIO::Get();
|
||||||
return
|
return
|
||||||
gAudioIO->IsBusy() &&
|
gAudioIO->IsBusy() &&
|
||||||
ControlToolBar::Get( mProject).CanStopAudioStream() &&
|
CanStopAudioStream() &&
|
||||||
gAudioIO->GetNumCaptureChannels() > 0;
|
gAudioIO->GetNumCaptureChannels() > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ProjectAudioManager::CanStopAudioStream() const
|
||||||
|
{
|
||||||
|
auto gAudioIO = AudioIO::Get();
|
||||||
|
return (!gAudioIO->IsStreamActive() ||
|
||||||
|
gAudioIO->IsMonitoring() ||
|
||||||
|
gAudioIO->GetOwningProject() == &mProject );
|
||||||
|
}
|
||||||
|
|
||||||
|
const ReservedCommandFlag
|
||||||
|
CanStopAudioStreamFlag{
|
||||||
|
[](const AudacityProject &project){
|
||||||
|
auto &projectAudioManager = ProjectAudioManager::Get( project );
|
||||||
|
bool canStop = projectAudioManager.CanStopAudioStream();
|
||||||
|
return canStop;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
AudioIOStartStreamOptions
|
AudioIOStartStreamOptions
|
||||||
DefaultPlayOptions( AudacityProject &project )
|
DefaultPlayOptions( AudacityProject &project )
|
||||||
{
|
{
|
||||||
|
@ -58,6 +58,9 @@ public:
|
|||||||
void SetCutting( bool value ) { mCutting = value; }
|
void SetCutting( bool value ) { mCutting = value; }
|
||||||
void SetStopping( bool value ) { mStopping = value; }
|
void SetStopping( bool value ) { mStopping = value; }
|
||||||
|
|
||||||
|
// A project is only allowed to stop an audio stream that it owns.
|
||||||
|
bool CanStopAudioStream () const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Audio IO callback methods
|
// Audio IO callback methods
|
||||||
void OnAudioIORate(int rate) override;
|
void OnAudioIORate(int rate) override;
|
||||||
@ -87,6 +90,11 @@ private:
|
|||||||
AudioIOStartStreamOptions DefaultPlayOptions( AudacityProject &project );
|
AudioIOStartStreamOptions DefaultPlayOptions( AudacityProject &project );
|
||||||
AudioIOStartStreamOptions DefaultSpeedPlayOptions( AudacityProject &project );
|
AudioIOStartStreamOptions DefaultSpeedPlayOptions( AudacityProject &project );
|
||||||
|
|
||||||
|
#include "commands/CommandFlag.h"
|
||||||
|
|
||||||
|
extern const ReservedCommandFlag
|
||||||
|
CanStopAudioStreamFlag;
|
||||||
|
|
||||||
/// Namespace for functions for Transport menu
|
/// Namespace for functions for Transport menu
|
||||||
namespace TransportActions {
|
namespace TransportActions {
|
||||||
void StopIfPaused( AudacityProject &project );
|
void StopIfPaused( AudacityProject &project );
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#include "../Prefs.h"
|
#include "../Prefs.h"
|
||||||
#include "../Project.h"
|
#include "../Project.h"
|
||||||
#include "../ProjectAudioIO.h"
|
#include "../ProjectAudioIO.h"
|
||||||
|
#include "../ProjectAudioManager.h"
|
||||||
#include "../ProjectHistory.h"
|
#include "../ProjectHistory.h"
|
||||||
#include "../ProjectSelectionManager.h"
|
#include "../ProjectSelectionManager.h"
|
||||||
#include "../ProjectSettings.h"
|
#include "../ProjectSettings.h"
|
||||||
|
@ -482,6 +482,8 @@ void ControlToolBar::Repaint( wxDC *dc )
|
|||||||
void ControlToolBar::EnableDisableButtons()
|
void ControlToolBar::EnableDisableButtons()
|
||||||
{
|
{
|
||||||
AudacityProject *p = &mProject;
|
AudacityProject *p = &mProject;
|
||||||
|
auto &projectAudioManager = ProjectAudioManager::Get( mProject );
|
||||||
|
bool canStop = projectAudioManager.CanStopAudioStream();
|
||||||
|
|
||||||
bool paused = mPause->IsDown();
|
bool paused = mPause->IsDown();
|
||||||
bool playing = mPlay->IsDown();
|
bool playing = mPlay->IsDown();
|
||||||
@ -492,17 +494,17 @@ void ControlToolBar::EnableDisableButtons()
|
|||||||
// Only interested in audio type tracks
|
// Only interested in audio type tracks
|
||||||
bool tracks = p && TrackList::Get( *p ).Any<AudioTrack>(); // PRL: PlayableTrack ?
|
bool tracks = p && TrackList::Get( *p ).Any<AudioTrack>(); // PRL: PlayableTrack ?
|
||||||
|
|
||||||
mPlay->SetEnabled(CanStopAudioStream() && tracks && !recording);
|
mPlay->SetEnabled( canStop && tracks && !recording );
|
||||||
mRecord->SetEnabled(
|
mRecord->SetEnabled(
|
||||||
CanStopAudioStream() &&
|
canStop &&
|
||||||
!(busy && !recording && !paused) &&
|
!(busy && !recording && !paused) &&
|
||||||
!(playing && !paused)
|
!(playing && !paused)
|
||||||
);
|
);
|
||||||
mStop->SetEnabled(CanStopAudioStream() && (playing || recording));
|
mStop->SetEnabled(canStop && (playing || recording));
|
||||||
mRewind->SetEnabled(paused || (!playing && !recording));
|
mRewind->SetEnabled(paused || (!playing && !recording));
|
||||||
mFF->SetEnabled(tracks && (paused || (!playing && !recording)));
|
mFF->SetEnabled(tracks && (paused || (!playing && !recording)));
|
||||||
|
|
||||||
mPause->SetEnabled(CanStopAudioStream());
|
mPause->SetEnabled(canStop);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ControlToolBar::SetPlay(bool down, PlayAppearance appearance)
|
void ControlToolBar::SetPlay(bool down, PlayAppearance appearance)
|
||||||
@ -534,8 +536,9 @@ int ControlToolBar::PlayPlayRegion(const SelectedRegion &selectedRegion,
|
|||||||
// STRONG-GUARANTEE (for state of mCutPreviewTracks)
|
// STRONG-GUARANTEE (for state of mCutPreviewTracks)
|
||||||
{
|
{
|
||||||
auto &projectAudioManager = ProjectAudioManager::Get( mProject );
|
auto &projectAudioManager = ProjectAudioManager::Get( mProject );
|
||||||
|
bool canStop = projectAudioManager.CanStopAudioStream();
|
||||||
|
|
||||||
if (!CanStopAudioStream())
|
if ( !canStop )
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
bool useMidi = true;
|
bool useMidi = true;
|
||||||
@ -701,7 +704,10 @@ int ControlToolBar::PlayPlayRegion(const SelectedRegion &selectedRegion,
|
|||||||
void ControlToolBar::PlayCurrentRegion(bool looped /* = false */,
|
void ControlToolBar::PlayCurrentRegion(bool looped /* = false */,
|
||||||
bool cutpreview /* = false */)
|
bool cutpreview /* = false */)
|
||||||
{
|
{
|
||||||
if (!CanStopAudioStream())
|
auto &projectAudioManager = ProjectAudioManager::Get( mProject );
|
||||||
|
bool canStop = projectAudioManager.CanStopAudioStream();
|
||||||
|
|
||||||
|
if ( !canStop )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
AudacityProject *p = &mProject;
|
AudacityProject *p = &mProject;
|
||||||
@ -758,8 +764,10 @@ void ControlToolBar::OnKeyEvent(wxKeyEvent & event)
|
|||||||
void ControlToolBar::OnPlay(wxCommandEvent & WXUNUSED(evt))
|
void ControlToolBar::OnPlay(wxCommandEvent & WXUNUSED(evt))
|
||||||
{
|
{
|
||||||
auto p = &mProject;
|
auto p = &mProject;
|
||||||
|
auto &projectAudioManager = ProjectAudioManager::Get( mProject );
|
||||||
|
bool canStop = projectAudioManager.CanStopAudioStream();
|
||||||
|
|
||||||
if (!CanStopAudioStream())
|
if ( !canStop )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
StopPlaying();
|
StopPlaying();
|
||||||
@ -772,19 +780,14 @@ void ControlToolBar::OnPlay(wxCommandEvent & WXUNUSED(evt))
|
|||||||
|
|
||||||
void ControlToolBar::OnStop(wxCommandEvent & WXUNUSED(evt))
|
void ControlToolBar::OnStop(wxCommandEvent & WXUNUSED(evt))
|
||||||
{
|
{
|
||||||
if (CanStopAudioStream()) {
|
auto &projectAudioManager = ProjectAudioManager::Get( mProject );
|
||||||
|
bool canStop = projectAudioManager.CanStopAudioStream();
|
||||||
|
|
||||||
|
if ( canStop ) {
|
||||||
StopPlaying();
|
StopPlaying();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ControlToolBar::CanStopAudioStream() const
|
|
||||||
{
|
|
||||||
auto gAudioIO = AudioIO::Get();
|
|
||||||
return (!gAudioIO->IsStreamActive() ||
|
|
||||||
gAudioIO->IsMonitoring() ||
|
|
||||||
gAudioIO->GetOwningProject() == &mProject );
|
|
||||||
}
|
|
||||||
|
|
||||||
void ControlToolBar::PlayDefault()
|
void ControlToolBar::PlayDefault()
|
||||||
{
|
{
|
||||||
// Let control have precedence over shift
|
// Let control have precedence over shift
|
||||||
@ -798,6 +801,7 @@ void ControlToolBar::StopPlaying(bool stopStream /* = true*/)
|
|||||||
{
|
{
|
||||||
AudacityProject *project = &mProject;
|
AudacityProject *project = &mProject;
|
||||||
auto &projectAudioManager = ProjectAudioManager::Get( mProject );
|
auto &projectAudioManager = ProjectAudioManager::Get( mProject );
|
||||||
|
bool canStop = projectAudioManager.CanStopAudioStream();
|
||||||
|
|
||||||
if(project) {
|
if(project) {
|
||||||
// Let scrubbing code do some appearance change
|
// Let scrubbing code do some appearance change
|
||||||
@ -805,7 +809,7 @@ void ControlToolBar::StopPlaying(bool stopStream /* = true*/)
|
|||||||
scrubber.StopScrubbing();
|
scrubber.StopScrubbing();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!CanStopAudioStream())
|
if ( !canStop )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
auto gAudioIO = AudioIO::Get();
|
auto gAudioIO = AudioIO::Get();
|
||||||
@ -860,7 +864,10 @@ void ControlToolBar::StopPlaying(bool stopStream /* = true*/)
|
|||||||
|
|
||||||
void ControlToolBar::Pause()
|
void ControlToolBar::Pause()
|
||||||
{
|
{
|
||||||
if (!CanStopAudioStream()) {
|
auto &projectAudioManager = ProjectAudioManager::Get( mProject );
|
||||||
|
bool canStop = projectAudioManager.CanStopAudioStream();
|
||||||
|
|
||||||
|
if ( !canStop ) {
|
||||||
auto gAudioIO = AudioIO::Get();
|
auto gAudioIO = AudioIO::Get();
|
||||||
gAudioIO->SetPaused(!gAudioIO->IsPaused());
|
gAudioIO->SetPaused(!gAudioIO->IsPaused());
|
||||||
}
|
}
|
||||||
@ -1227,8 +1234,9 @@ bool ControlToolBar::DoRecord(AudacityProject &project,
|
|||||||
void ControlToolBar::OnPause(wxCommandEvent & WXUNUSED(evt))
|
void ControlToolBar::OnPause(wxCommandEvent & WXUNUSED(evt))
|
||||||
{
|
{
|
||||||
auto &projectAudioManager = ProjectAudioManager::Get( mProject );
|
auto &projectAudioManager = ProjectAudioManager::Get( mProject );
|
||||||
|
bool canStop = projectAudioManager.CanStopAudioStream();
|
||||||
|
|
||||||
if (!CanStopAudioStream()) {
|
if ( !canStop ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1551,10 +1559,3 @@ static RegisteredToolbarFactory factory{ TransportBarID,
|
|||||||
[]( AudacityProject &project ){
|
[]( AudacityProject &project ){
|
||||||
return ToolBar::Holder{ safenew ControlToolBar{ project } }; }
|
return ToolBar::Holder{ safenew ControlToolBar{ project } }; }
|
||||||
};
|
};
|
||||||
|
|
||||||
const ReservedCommandFlag
|
|
||||||
CanStopAudioStreamFlag{
|
|
||||||
[](const AudacityProject &project){
|
|
||||||
return ControlToolBar::Get( project ).CanStopAudioStream();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
@ -96,9 +96,6 @@ class ControlToolBar final : public ToolBar {
|
|||||||
void SetPlay(bool down, PlayAppearance appearance = PlayAppearance::Straight);
|
void SetPlay(bool down, PlayAppearance appearance = PlayAppearance::Straight);
|
||||||
void SetStop();
|
void SetStop();
|
||||||
|
|
||||||
// A project is only allowed to stop an audio stream that it owns.
|
|
||||||
bool CanStopAudioStream () const;
|
|
||||||
|
|
||||||
// Play currently selected region, or if nothing selected,
|
// Play currently selected region, or if nothing selected,
|
||||||
// play from current cursor.
|
// play from current cursor.
|
||||||
void PlayCurrentRegion(bool looped = false, bool cutpreview = false);
|
void PlayCurrentRegion(bool looped = false, bool cutpreview = false);
|
||||||
@ -194,10 +191,5 @@ class ControlToolBar final : public ToolBar {
|
|||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "../commands/CommandFlag.h"
|
|
||||||
|
|
||||||
extern const ReservedCommandFlag
|
|
||||||
CanStopAudioStreamFlag;
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user