diff -r 2f9a87538ca1 -r e8130b7cfe80 indra/newview/llpanelvoicedevicesettings.h --- a/indra/newview/llpanelvoicedevicesettings.h Mon Jul 25 14:38:02 2011 -0400 +++ b/indra/newview/llpanelvoicedevicesettings.h Tue Jul 26 23:14:02 2011 +0300 @@ -49,6 +49,8 @@ public: void setUseTuningMode(bool use) { mUseTuningMode = use; }; protected: + std::string getLocalizedDeviceName(const std::string& en_dev_name); + void onCommitInputDevice(); void onCommitOutputDevice(); @@ -59,6 +61,7 @@ protected: class LLComboBox *mCtrlOutputDevices; BOOL mDevicesUpdated; bool mUseTuningMode; + std::map mLocalizedDeviceNames; }; #endif // LL_LLPANELVOICEDEVICESETTINGS_H diff -r 2f9a87538ca1 -r e8130b7cfe80 indra/newview/llpanelvoicedevicesettings.cpp --- a/indra/newview/llpanelvoicedevicesettings.cpp Mon Jul 25 14:38:02 2011 -0400 +++ b/indra/newview/llpanelvoicedevicesettings.cpp Tue Jul 26 23:14:02 2011 +0300 @@ -41,6 +41,7 @@ static LLRegisterPanelClassWrapper t_panel_group_general("panel_voice_device_settings"); +static const std::string DEFAULT_DEVICE("Default"); LLPanelVoiceDeviceSettings::LLPanelVoiceDeviceSettings() @@ -68,10 +69,17 @@ BOOL LLPanelVoiceDeviceSettings::postBui // set mic volume tuning slider based on last mic volume setting volume_slider->setValue(mMicVolume); - getChild("voice_input_device")->setCommitCallback( + mCtrlInputDevices = getChild("voice_input_device"); + mCtrlOutputDevices = getChild("voice_output_device"); + + mCtrlInputDevices->setCommitCallback( boost::bind(&LLPanelVoiceDeviceSettings::onCommitInputDevice, this)); - getChild("voice_output_device")->setCommitCallback( + mCtrlOutputDevices->setCommitCallback( boost::bind(&LLPanelVoiceDeviceSettings::onCommitOutputDevice, this)); + + mLocalizedDeviceNames[DEFAULT_DEVICE] = getString("default_text"); + mLocalizedDeviceNames["No Device"] = getString("name_no_device"); + mLocalizedDeviceNames["Default System Device"] = getString("name_default_system_device"); return TRUE; } @@ -138,14 +146,14 @@ void LLPanelVoiceDeviceSettings::apply() std::string s; if(mCtrlInputDevices) { - s = mCtrlInputDevices->getSimple(); + s = mCtrlInputDevices->getValue().asString(); gSavedSettings.setString("VoiceInputAudioDevice", s); mInputDevice = s; } if(mCtrlOutputDevices) { - s = mCtrlOutputDevices->getSimple(); + s = mCtrlOutputDevices->getValue().asString(); gSavedSettings.setString("VoiceOutputAudioDevice", s); mOutputDevice = s; } @@ -166,10 +174,10 @@ void LLPanelVoiceDeviceSettings::cancel( gSavedSettings.setString("VoiceOutputAudioDevice", mOutputDevice); if(mCtrlInputDevices) - mCtrlInputDevices->setSimple(mInputDevice); + mCtrlInputDevices->setValue(mInputDevice); if(mCtrlOutputDevices) - mCtrlOutputDevices->setSimple(mOutputDevice); + mCtrlOutputDevices->setValue(mOutputDevice); gSavedSettings.setF32("AudioLevelMic", mMicVolume); LLSlider* volume_slider = getChild("mic_volume_slider"); @@ -188,9 +196,6 @@ void LLPanelVoiceDeviceSettings::refresh LLVoiceClient::getInstance()->tuningSetMicVolume(current_volume); // Fill in popup menus - mCtrlInputDevices = getChild("voice_input_device"); - mCtrlOutputDevices = getChild("voice_output_device"); - bool device_settings_available = LLVoiceClient::getInstance()->deviceSettingsAvailable(); if (mCtrlInputDevices) @@ -212,14 +217,14 @@ void LLPanelVoiceDeviceSettings::refresh if(mCtrlInputDevices) { mCtrlInputDevices->removeall(); - mCtrlInputDevices->add( mInputDevice, ADD_BOTTOM ); - mCtrlInputDevices->setSimple(mInputDevice); + mCtrlInputDevices->add(getLocalizedDeviceName(mInputDevice), mInputDevice, ADD_BOTTOM); + mCtrlInputDevices->setValue(mInputDevice); } if(mCtrlOutputDevices) { mCtrlOutputDevices->removeall(); - mCtrlOutputDevices->add( mOutputDevice, ADD_BOTTOM ); - mCtrlOutputDevices->setSimple(mOutputDevice); + mCtrlOutputDevices->add(getLocalizedDeviceName(mOutputDevice), mOutputDevice, ADD_BOTTOM); + mCtrlOutputDevices->setValue(mOutputDevice); } mDevicesUpdated = FALSE; } @@ -230,35 +235,41 @@ void LLPanelVoiceDeviceSettings::refresh if(mCtrlInputDevices) { mCtrlInputDevices->removeall(); - mCtrlInputDevices->add( getString("default_text"), ADD_BOTTOM ); + mCtrlInputDevices->add(getLocalizedDeviceName(DEFAULT_DEVICE), DEFAULT_DEVICE, ADD_BOTTOM); for(iter=LLVoiceClient::getInstance()->getCaptureDevices().begin(); iter != LLVoiceClient::getInstance()->getCaptureDevices().end(); iter++) { - mCtrlInputDevices->add( *iter, ADD_BOTTOM ); + mCtrlInputDevices->add(getLocalizedDeviceName(*iter), *iter, ADD_BOTTOM); } - if(!mCtrlInputDevices->setSimple(mInputDevice)) + // Fix invalid input audio device preference. + if (!mCtrlInputDevices->setSelectedByValue(mInputDevice, TRUE)) { - mCtrlInputDevices->setSimple(getString("default_text")); + mCtrlInputDevices->setValue(DEFAULT_DEVICE); + gSavedSettings.setString("VoiceInputAudioDevice", DEFAULT_DEVICE); + mInputDevice = DEFAULT_DEVICE; } } if(mCtrlOutputDevices) { mCtrlOutputDevices->removeall(); - mCtrlOutputDevices->add( getString("default_text"), ADD_BOTTOM ); + mCtrlOutputDevices->add(getLocalizedDeviceName(DEFAULT_DEVICE), DEFAULT_DEVICE, ADD_BOTTOM); for(iter= LLVoiceClient::getInstance()->getRenderDevices().begin(); iter != LLVoiceClient::getInstance()->getRenderDevices().end(); iter++) { - mCtrlOutputDevices->add( *iter, ADD_BOTTOM ); + mCtrlOutputDevices->add(getLocalizedDeviceName(*iter), *iter, ADD_BOTTOM); } - if(!mCtrlOutputDevices->setSimple(mOutputDevice)) + // Fix invalid output audio device preference. + if (!mCtrlOutputDevices->setSelectedByValue(mOutputDevice, TRUE)) { - mCtrlOutputDevices->setSimple(getString("default_text")); + mCtrlOutputDevices->setValue(DEFAULT_DEVICE); + gSavedSettings.setString("VoiceOutputAudioDevice", DEFAULT_DEVICE); + mOutputDevice = DEFAULT_DEVICE; } } mDevicesUpdated = TRUE; @@ -292,12 +303,19 @@ void LLPanelVoiceDeviceSettings::cleanup } } +// returns English name if no translation found +std::string LLPanelVoiceDeviceSettings::getLocalizedDeviceName(const std::string& en_dev_name) +{ + std::map::const_iterator it = mLocalizedDeviceNames.find(en_dev_name); + return it != mLocalizedDeviceNames.end() ? it->second : en_dev_name; +} + void LLPanelVoiceDeviceSettings::onCommitInputDevice() { if(LLVoiceClient::getInstance()) { LLVoiceClient::getInstance()->setCaptureDevice( - getChild("voice_input_device")->getValue().asString()); + mCtrlInputDevices->getValue().asString()); } } @@ -306,6 +324,6 @@ void LLPanelVoiceDeviceSettings::onCommi if(LLVoiceClient::getInstance()) { LLVoiceClient::getInstance()->setRenderDevice( - getChild("voice_output_device")->getValue().asString()); + mCtrlInputDevices->getValue().asString()); } } diff -r 2f9a87538ca1 -r e8130b7cfe80 indra/newview/skins/default/xui/en/panel_sound_devices.xml --- a/indra/newview/skins/default/xui/en/panel_sound_devices.xml Mon Jul 25 14:38:02 2011 -0400 +++ b/indra/newview/skins/default/xui/en/panel_sound_devices.xml Tue Jul 26 23:14:02 2011 +0300 @@ -11,6 +11,14 @@ name="default_text"> Default + + No Device + + + Default System Device +