Make monitoring work after a theme change
This commit is contained in:
parent
c8f58c90af
commit
419b790235
|
@ -2237,6 +2237,10 @@ void AudioIO::SetPlaybackMeter(AudacityProject *project, Meter *meter)
|
|||
}
|
||||
}
|
||||
|
||||
Meter * AudioIO::GetCaptureMeter(){
|
||||
return mInputMeter;
|
||||
}
|
||||
|
||||
void AudioIO::SetMeters()
|
||||
{
|
||||
if (mInputMeter)
|
||||
|
@ -2515,6 +2519,7 @@ void AudioIO::StopStream()
|
|||
|
||||
if (mInputMeter)
|
||||
mInputMeter->Reset(mRate, false);
|
||||
|
||||
if (mOutputMeter)
|
||||
mOutputMeter->Reset(mRate, false);
|
||||
|
||||
|
|
|
@ -389,6 +389,7 @@ class AUDACITY_DLL_API AudioIO final {
|
|||
bool IsAvailable(AudacityProject *projecT);
|
||||
void SetCaptureMeter(AudacityProject *project, Meter *meter);
|
||||
void SetPlaybackMeter(AudacityProject *project, Meter *meter);
|
||||
Meter * GetCaptureMeter();
|
||||
|
||||
private:
|
||||
/** \brief Set the current VU meters - this should be done once after
|
||||
|
|
|
@ -87,20 +87,26 @@ void MeterToolBar::ReCreateButtons()
|
|||
|
||||
if (mPlayMeter && mProject->GetPlaybackMeter() == mPlayMeter)
|
||||
{
|
||||
mProject->SetPlaybackMeter( NULL );
|
||||
playState = mPlayMeter->SaveState();
|
||||
mProject->SetPlaybackMeter( NULL );
|
||||
}
|
||||
|
||||
if (mRecordMeter && mProject->GetCaptureMeter() == mRecordMeter)
|
||||
{
|
||||
mProject->SetCaptureMeter( NULL );
|
||||
recordState = mRecordMeter->SaveState();
|
||||
mProject->SetCaptureMeter( NULL );
|
||||
}
|
||||
|
||||
ToolBar::ReCreateButtons();
|
||||
|
||||
mPlayMeter->RestoreState(playState);
|
||||
if( playState.mSaved ){
|
||||
mProject->SetPlaybackMeter( mPlayMeter );
|
||||
}
|
||||
mRecordMeter->RestoreState(recordState);
|
||||
if( recordState.mSaved ){
|
||||
mProject->SetCaptureMeter( mRecordMeter );
|
||||
}
|
||||
}
|
||||
|
||||
void MeterToolBar::Populate()
|
||||
|
|
|
@ -368,7 +368,8 @@ Meter::~Meter()
|
|||
// LLL: This prevents a crash during termination if monitoring
|
||||
// is active.
|
||||
if (gAudioIO && gAudioIO->IsMonitoring())
|
||||
gAudioIO->StopStream();
|
||||
if( gAudioIO->GetCaptureMeter() == this )
|
||||
gAudioIO->StopStream();
|
||||
}
|
||||
|
||||
void Meter::UpdatePrefs()
|
||||
|
@ -1824,45 +1825,32 @@ void Meter::StartMonitoring()
|
|||
}
|
||||
}
|
||||
|
||||
void Meter::StopMonitoring(){
|
||||
mMonitoring = false;
|
||||
if (gAudioIO->IsMonitoring()){
|
||||
gAudioIO->StopStream();
|
||||
}
|
||||
}
|
||||
|
||||
void Meter::OnAudioIOStatus(wxCommandEvent &evt)
|
||||
{
|
||||
evt.Skip();
|
||||
|
||||
AudacityProject *p = (AudacityProject *) evt.GetEventObject();
|
||||
|
||||
mActive = false;
|
||||
if (evt.GetInt() != 0)
|
||||
{
|
||||
if (p == mProject)
|
||||
{
|
||||
mActive = true;
|
||||
mActive = (evt.GetInt() != 0) && (p == mProject);
|
||||
|
||||
mTimer.Start(1000 / mMeterRefreshRate);
|
||||
|
||||
if (evt.GetEventType() == EVT_AUDIOIO_MONITOR)
|
||||
{
|
||||
mMonitoring = mActive;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mTimer.Stop();
|
||||
|
||||
mMonitoring = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if( mActive ){
|
||||
mTimer.Start(1000 / mMeterRefreshRate);
|
||||
if (evt.GetEventType() == EVT_AUDIOIO_MONITOR)
|
||||
mMonitoring = mActive;
|
||||
} else {
|
||||
mTimer.Stop();
|
||||
|
||||
mMonitoring = false;
|
||||
}
|
||||
|
||||
// Only refresh is we're the active meter
|
||||
if (IsShownOnScreen())
|
||||
{
|
||||
Refresh(false);
|
||||
}
|
||||
}
|
||||
|
||||
// SaveState() and RestoreState() exist solely for purpose of recreating toolbars
|
||||
|
@ -1880,11 +1868,10 @@ void Meter::RestoreState(const State &state)
|
|||
|
||||
mMonitoring = state.mMonitoring;
|
||||
mActive = state.mActive;
|
||||
wxLogDebug("Restore state for %08X, is %i", (int)this, mActive );
|
||||
|
||||
if (mActive)
|
||||
{
|
||||
mTimer.Start(1000 / mMeterRefreshRate);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
@ -175,6 +175,7 @@ class Meter final : public wxPanelWrapper
|
|||
bool IsClipping() const;
|
||||
|
||||
void StartMonitoring();
|
||||
void StopMonitoring();
|
||||
|
||||
// These exist solely for the purpose of resetting the toolbars
|
||||
struct State{ bool mSaved, mMonitoring, mActive; };
|
||||
|
|
Loading…
Reference in New Issue