Bug2159: Ruler play region should update when play/record stops

This commit is contained in:
Paul Licameli 2019-07-15 23:17:58 -04:00
parent f5efb17046
commit 7969b5a9e9
3 changed files with 41 additions and 25 deletions

View File

@ -937,6 +937,9 @@ AdornedRulerPanel::AdornedRulerPanel(AudacityProject* project,
wxTheApp->Bind(EVT_AUDIOIO_CAPTURE,
&AdornedRulerPanel::OnRecordStartStop,
this);
wxTheApp->Bind(EVT_AUDIOIO_PLAYBACK,
&AdornedRulerPanel::OnRecordStartStop,
this);
// Delay until after CommandManager has been populated:
this->CallAfter( &AdornedRulerPanel::UpdatePrefs );
@ -1115,7 +1118,11 @@ namespace {
void AdornedRulerPanel::OnIdle( wxIdleEvent &evt )
{
evt.Skip();
DoIdle();
}
void AdornedRulerPanel::DoIdle()
{
bool changed = UpdateRects();
changed = SetPanelSize() || changed;
@ -1144,17 +1151,25 @@ void AdornedRulerPanel::OnRecordStartStop(wxCommandEvent & evt)
{
evt.Skip();
if (evt.GetInt() != 0)
{
mIsRecording = true;
this->CellularPanel::CancelDragging( false );
this->CellularPanel::ClearTargets();
if ( evt.GetEventType() == EVT_AUDIOIO_CAPTURE ) {
if (evt.GetInt() != 0)
{
mIsRecording = true;
this->CellularPanel::CancelDragging( false );
this->CellularPanel::ClearTargets();
UpdateButtonStates();
UpdateButtonStates();
}
else {
mIsRecording = false;
UpdateButtonStates();
}
}
else {
mIsRecording = false;
UpdateButtonStates();
if ( evt.GetInt() == 0 ) {
// So that the play region is updated
mLastDrawnSelectedRegion.setTimes( -1, -1 );
DoIdle();
}
}

View File

@ -79,6 +79,7 @@ public:
private:
void DoIdle();
void OnIdle( wxIdleEvent &evt );
void OnRecordStartStop(wxCommandEvent & evt);
void OnPaint(wxPaintEvent &evt);

View File

@ -2220,22 +2220,6 @@ void AudioIO::StopStream()
mPortStreamV19 = NULL;
}
if (mNumPlaybackChannels > 0)
{
wxCommandEvent e(EVT_AUDIOIO_PLAYBACK);
e.SetEventObject(mOwningProject);
e.SetInt(false);
wxTheApp->ProcessEvent(e);
}
if (mNumCaptureChannels > 0)
{
wxCommandEvent e(mStreamToken == 0 ? EVT_AUDIOIO_MONITOR : EVT_AUDIOIO_CAPTURE);
e.SetEventObject(mOwningProject);
e.SetInt(false);
wxTheApp->ProcessEvent(e);
}
#ifdef EXPERIMENTAL_MIDI_OUT
/* Stop Midi playback */
if ( mMidiStream ) {
@ -2384,6 +2368,22 @@ void AudioIO::StopStream()
//
mStreamToken = 0;
if (mNumPlaybackChannels > 0)
{
wxCommandEvent e(EVT_AUDIOIO_PLAYBACK);
e.SetEventObject(mOwningProject);
e.SetInt(false);
wxTheApp->ProcessEvent(e);
}
if (mNumCaptureChannels > 0)
{
wxCommandEvent e(mStreamToken == 0 ? EVT_AUDIOIO_MONITOR : EVT_AUDIOIO_CAPTURE);
e.SetEventObject(mOwningProject);
e.SetInt(false);
wxTheApp->ProcessEvent(e);
}
mNumCaptureChannels = 0;
mNumPlaybackChannels = 0;