1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-18 17:10:05 +02:00

bug 11 followup fix input hotswapping while monitoring; enable/disable when recording/playing

This commit is contained in:
mchinen 2011-01-09 13:12:51 +00:00
parent 8c645724a1
commit 14cc918d7f
2 changed files with 45 additions and 3 deletions

View File

@ -265,7 +265,7 @@ void DeviceToolBar::Populate()
mInput->Enable(false); mInput->Enable(false);
wxStaticText *channelsLabel = new wxStaticText(this, wxID_ANY, wxT("# Channels:"), wxStaticText *channelsLabel = new wxStaticText(this, wxID_ANY, _("Rec Channels:"),
wxDefaultPosition, wxDefaultSize, wxDefaultPosition, wxDefaultSize,
wxALIGN_LEFT); wxALIGN_LEFT);
Add(channelsLabel, 0, wxALIGN_CENTER); Add(channelsLabel, 0, wxALIGN_CENTER);
@ -304,6 +304,14 @@ void DeviceToolBar::Populate()
wxFocusEventHandler(DeviceToolBar::OnFocus), wxFocusEventHandler(DeviceToolBar::OnFocus),
NULL, NULL,
this); this);
mInputChannels->Connect(wxEVT_SET_FOCUS,
wxFocusEventHandler(DeviceToolBar::OnFocus),
NULL,
this);
mInputChannels->Connect(wxEVT_KILL_FOCUS,
wxFocusEventHandler(DeviceToolBar::OnFocus),
NULL,
this);
FillHostDevices(); FillHostDevices();
FillInputChannels(); FillInputChannels();
@ -406,12 +414,26 @@ void DeviceToolBar::UpdatePrefs()
ToolBar::UpdatePrefs(); ToolBar::UpdatePrefs();
} }
void DeviceToolBar::EnableDisableButtons()
{
if (gAudioIO) {
// we allow changes when monitoring, but not when recording
bool audioStreamActive = gAudioIO->IsStreamActive() && !gAudioIO->IsMonitoring();
mHost->Enable(!audioStreamActive);
mInput->Enable(!audioStreamActive);
mOutput->Enable(!audioStreamActive);
mInputChannels->Enable(!audioStreamActive);
}
}
void DeviceToolBar::RegenerateTooltips() void DeviceToolBar::RegenerateTooltips()
{ {
#if wxUSE_TOOLTIPS #if wxUSE_TOOLTIPS
mOutput->SetToolTip(_("Output Device")); mOutput->SetToolTip(_("Output Device"));
mInput->SetToolTip(_("Input Device")); mInput->SetToolTip(_("Input Device"));
mHost->SetToolTip(_("Audio Host")); mHost->SetToolTip(_("Audio Host"));
mInputChannels->SetToolTip(_("Input Channels"));
#endif #endif
} }
@ -612,8 +634,28 @@ void DeviceToolBar::OnChoice(wxCommandEvent &event)
SetDevices(&mInputDeviceSourceMaps[newInIndex], &mOutputDeviceSourceMaps[newOutIndex]); SetDevices(&mInputDeviceSourceMaps[newInIndex], &mOutputDeviceSourceMaps[newOutIndex]);
} }
if (gAudioIO) if (gAudioIO) {
// We cannot have gotten here if gAudioIO->IsAudioTokenActive(),
// per the setting of AudioIONotBusyFlag and AudioIOBusyFlag in
// AudacityProject::GetUpdateFlags().
// However, we can have an invalid audio token (so IsAudioTokenActive()
// is false), but be monitoring.
// If monitoring, have to stop the stream, so HandleDeviceChange() can work.
// We could disable the Preferences command while monitoring, i.e.,
// set AudioIONotBusyFlag/AudioIOBusyFlag according to monitoring, as well.
// Instead allow it because unlike recording, for example, monitoring
// is not clearly something that should prohibit changing device.
// TO-DO: We *could* be smarter in this method and call HandleDeviceChange()
// only when the device choices actually changed. True of lots of prefs!
// As is, we always stop monitoring before handling the device change.
if (gAudioIO->IsMonitoring())
{
gAudioIO->StopStream();
while (gAudioIO->IsBusy())
wxMilliSleep(100);
}
gAudioIO->HandleDeviceChange(); gAudioIO->HandleDeviceChange();
}
GetActiveProject()->UpdatePrefs(); GetActiveProject()->UpdatePrefs();
} }

View File

@ -44,7 +44,7 @@ class DeviceToolBar:public ToolBar {
virtual void Populate(); virtual void Populate();
virtual void Repaint(wxDC *dc) {}; virtual void Repaint(wxDC *dc) {};
virtual void EnableDisableButtons() {}; virtual void EnableDisableButtons();
void OnFocus(wxFocusEvent &event); void OnFocus(wxFocusEvent &event);
void OnCaptureKey(wxCommandEvent &event); void OnCaptureKey(wxCommandEvent &event);