00001
00033 #include "llviewerprecompiledheaders.h"
00034
00035 #include "llviewercontrol.h"
00036
00037 #include "indra_constants.h"
00038
00039
00040 #include "audioengine.h"
00041 #include "llagent.h"
00042 #include "llconsole.h"
00043 #include "lldrawpoolterrain.h"
00044 #include "llflexibleobject.h"
00045 #include "llfeaturemanager.h"
00046 #include "llglslshader.h"
00047 #include "llnetmap.h"
00048 #include "llpanelgeneral.h"
00049 #include "llpanelinput.h"
00050 #include "llsky.h"
00051 #include "llvieweraudio.h"
00052 #include "llviewerimagelist.h"
00053 #include "llviewerthrottle.h"
00054 #include "llviewerwindow.h"
00055 #include "llvoavatar.h"
00056 #include "llvoiceclient.h"
00057 #include "llvosky.h"
00058 #include "llvotree.h"
00059 #include "llvovolume.h"
00060 #include "llworld.h"
00061 #include "pipeline.h"
00062 #include "llviewerjoystick.h"
00063 #include "llviewerparcelmgr.h"
00064 #include "llparcel.h"
00065 #include "llnotify.h"
00066 #include "llkeyboard.h"
00067 #include "llerrorcontrol.h"
00068 #include "llversionviewer.h"
00069 #include "llappviewer.h"
00070 #include "llvosurfacepatch.h"
00071 #include "llvowlsky.h"
00072 #include "llglimmediate.h"
00073
00074 #ifdef TOGGLE_HACKED_GODLIKE_VIEWER
00075 BOOL gHackGodmode = FALSE;
00076 #endif
00077
00078
00079 std::map<LLString, LLControlGroup*> gSettings;
00080 LLControlGroup gSavedSettings;
00081 LLControlGroup gSavedPerAccountSettings;
00082 LLControlGroup gColors;
00083 LLControlGroup gCrashSettings;
00084
00085 LLString gLastRunVersion;
00086 LLString gCurrentVersion;
00087
00088 extern BOOL gResizeScreenTexture;
00089 extern BOOL gDebugGL;
00090
00092
00093
00094 static bool handleRenderAvatarMouselookChanged(const LLSD& newvalue)
00095 {
00096 LLVOAvatar::sVisibleInFirstPerson = newvalue.asBoolean();
00097 return true;
00098 }
00099
00100 static bool handleRenderFarClipChanged(const LLSD& newvalue)
00101 {
00102 F32 draw_distance = (F32) newvalue.asReal();
00103 gAgent.mDrawDistance = draw_distance;
00104 LLWorld::getInstance()->setLandFarClip(draw_distance);
00105 return true;
00106 }
00107
00108 static bool handleTerrainDetailChanged(const LLSD& newvalue)
00109 {
00110 LLDrawPoolTerrain::sDetailMode = newvalue.asInteger();
00111 return true;
00112 }
00113
00114
00115 static bool handleSetShaderChanged(const LLSD& newvalue)
00116 {
00117 LLShaderMgr::setShaders();
00118 return true;
00119 }
00120
00121 static bool handleReleaseGLBufferChanged(const LLSD& newvalue)
00122 {
00123 if (gPipeline.isInit())
00124 {
00125 gPipeline.releaseGLBuffers();
00126 gPipeline.createGLBuffers();
00127 }
00128 return true;
00129 }
00130
00131 static bool handleVolumeLODChanged(const LLSD& newvalue)
00132 {
00133 LLVOVolume::sLODFactor = (F32) newvalue.asReal();
00134 LLVOVolume::sDistanceFactor = 1.f-LLVOVolume::sLODFactor * 0.1f;
00135 return true;
00136 }
00137
00138 static bool handleAvatarLODChanged(const LLSD& newvalue)
00139 {
00140 LLVOAvatar::sLODFactor = (F32) newvalue.asReal();
00141 return true;
00142 }
00143
00144 static bool handleTerrainLODChanged(const LLSD& newvalue)
00145 {
00146 LLVOSurfacePatch::sLODFactor = (F32)newvalue.asReal();
00147
00148
00149
00150 LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor;
00151 return true;
00152 }
00153
00154 static bool handleTreeLODChanged(const LLSD& newvalue)
00155 {
00156 LLVOTree::sTreeFactor = (F32) newvalue.asReal();
00157 return true;
00158 }
00159
00160 static bool handleFlexLODChanged(const LLSD& newvalue)
00161 {
00162 LLVolumeImplFlexible::sUpdateFactor = (F32) newvalue.asReal();
00163 return true;
00164 }
00165
00166 static bool handleGammaChanged(const LLSD& newvalue)
00167 {
00168 F32 gamma = (F32) newvalue.asReal();
00169 if (gamma == 0.0f)
00170 {
00171 gamma = 1.0f;
00172 }
00173 if (gViewerWindow && gViewerWindow->getWindow() && gamma != gViewerWindow->getWindow()->getGamma())
00174 {
00175
00176 if (!gViewerWindow->getWindow()->setGamma(gamma))
00177 {
00178 llwarns << "setGamma failed!" << llendl;
00179 }
00180 }
00181
00182 return true;
00183 }
00184
00185 const F32 MAX_USER_FOG_RATIO = 10.f;
00186 const F32 MIN_USER_FOG_RATIO = 0.5f;
00187
00188 static bool handleFogRatioChanged(const LLSD& newvalue)
00189 {
00190 F32 fog_ratio = llmax(MIN_USER_FOG_RATIO, llmin((F32) newvalue.asReal(), MAX_USER_FOG_RATIO));
00191 gSky.setFogRatio(fog_ratio);
00192 return true;
00193 }
00194
00195 static bool handleMaxPartCountChanged(const LLSD& newvalue)
00196 {
00197 LLViewerPartSim::setMaxPartCount(newvalue.asInteger());
00198 return true;
00199 }
00200
00201 const S32 MAX_USER_COMPOSITE_LIMIT = 100;
00202 const S32 MIN_USER_COMPOSITE_LIMIT = 0;
00203
00204 static bool handleCompositeLimitChanged(const LLSD& newvalue)
00205 {
00206 S32 composite_limit = llmax(MIN_USER_COMPOSITE_LIMIT, llmin((S32)newvalue.asInteger(), MAX_USER_COMPOSITE_LIMIT));
00207 LLVOAvatar::sMaxOtherAvatarsToComposite = composite_limit;
00208 return true;
00209 }
00210
00211 static bool handleVideoMemoryChanged(const LLSD& newvalue)
00212 {
00213 gImageList.updateMaxResidentTexMem(newvalue.asInteger());
00214 return true;
00215 }
00216
00217 static bool handleBandwidthChanged(const LLSD& newvalue)
00218 {
00219 gViewerThrottle.setMaxBandwidth((F32) newvalue.asReal());
00220 return true;
00221 }
00222
00223 static bool handleChatFontSizeChanged(const LLSD& newvalue)
00224 {
00225 if(gConsole)
00226 {
00227 gConsole->setFontSize(newvalue.asInteger());
00228 }
00229 return true;
00230 }
00231
00232 static bool handleChatPersistTimeChanged(const LLSD& newvalue)
00233 {
00234 if(gConsole)
00235 {
00236 gConsole->setLinePersistTime((F32) newvalue.asReal());
00237 }
00238 return true;
00239 }
00240
00241 static bool handleConsoleMaxLinesChanged(const LLSD& newvalue)
00242 {
00243 if(gConsole)
00244 {
00245 gConsole->setMaxLines(newvalue.asInteger());
00246 }
00247 return true;
00248 }
00249
00250 static void handleAudioVolumeChanged(const LLSD& newvalue)
00251 {
00252 audio_update_volume(true);
00253 }
00254
00255 static bool handleJoystickChanged(const LLSD& newvalue)
00256 {
00257 LLViewerJoystick::getInstance()->setCameraNeedsUpdate(TRUE);
00258 return true;
00259 }
00260
00261 static bool handleAudioStreamMusicChanged(const LLSD& newvalue)
00262 {
00263 if (gAudiop)
00264 {
00265 if ( newvalue.asBoolean() )
00266 {
00267 if (LLViewerParcelMgr::getInstance()->getAgentParcel()
00268 && !LLViewerParcelMgr::getInstance()->getAgentParcel()->getMusicURL().empty())
00269 {
00270
00271
00272 if ( !gAudiop->isInternetStreamPlaying() )
00273 {
00274 gAudiop->startInternetStream(LLViewerParcelMgr::getInstance()->getAgentParcel()->getMusicURL().c_str());
00275 }
00276 }
00277 }
00278 else
00279 {
00280 gAudiop->stopInternetStream();
00281 }
00282 }
00283 return true;
00284 }
00285
00286 static bool handleUseOcclusionChanged(const LLSD& newvalue)
00287 {
00288 LLPipeline::sUseOcclusion = (newvalue.asBoolean() && gGLManager.mHasOcclusionQuery
00289 && LLFeatureManager::getInstance()->isFeatureAvailable("UseOcclusion") && !gUseWireframe) ? 2 : 0;
00290 return true;
00291 }
00292
00293 static bool handleNumpadControlChanged(const LLSD& newvalue)
00294 {
00295 if (gKeyboard)
00296 {
00297 gKeyboard->setNumpadDistinct(static_cast<LLKeyboard::e_numpad_distinct>(newvalue.asInteger()));
00298 }
00299 return true;
00300 }
00301
00302 static bool handleRenderUseVBOChanged(const LLSD& newvalue)
00303 {
00304 if (gPipeline.isInit())
00305 {
00306 gPipeline.setUseVBO(newvalue.asBoolean());
00307 }
00308 return true;
00309 }
00310
00311 static bool handleWLSkyDetailChanged(const LLSD&)
00312 {
00313 if (gSky.mVOWLSkyp.notNull())
00314 {
00315 gSky.mVOWLSkyp->updateGeometry(gSky.mVOWLSkyp->mDrawable);
00316 }
00317 return true;
00318 }
00319
00320 static bool handleRenderLightingDetailChanged(const LLSD& newvalue)
00321 {
00322 if (gPipeline.isInit())
00323 {
00324 gPipeline.setLightingDetail(newvalue.asInteger());
00325 }
00326 return true;
00327 }
00328
00329 static bool handleResetVertexBuffersChanged(const LLSD&)
00330 {
00331 if (gPipeline.isInit())
00332 {
00333 gPipeline.resetVertexBuffers();
00334 }
00335 return true;
00336 }
00337
00338 static bool handleRenderDynamicLODChanged(const LLSD& newvalue)
00339 {
00340 LLPipeline::sDynamicLOD = newvalue.asBoolean();
00341 return true;
00342 }
00343
00344 static bool handleRenderUseFBOChanged(const LLSD& newvalue)
00345 {
00346 LLRenderTarget::sUseFBO = newvalue.asBoolean();
00347 if (gPipeline.isInit())
00348 {
00349 gPipeline.releaseGLBuffers();
00350 gPipeline.createGLBuffers();
00351 }
00352 return true;
00353 }
00354
00355 static bool handleRenderUseImpostorsChanged(const LLSD& newvalue)
00356 {
00357 LLVOAvatar::sUseImpostors = FALSE;
00358 return true;
00359 }
00360
00361 static bool handleRenderDebugGLChanged(const LLSD& newvalue)
00362 {
00363 gDebugGL = newvalue.asBoolean();
00364 return true;
00365 }
00366
00367 static bool handleRenderDebugPipelineChanged(const LLSD& newvalue)
00368 {
00369 gDebugPipeline = newvalue.asBoolean();
00370 return true;
00371 }
00372
00373 static bool handleRenderResolutionDivisorChanged(const LLSD&)
00374 {
00375 gResizeScreenTexture = TRUE;
00376 return true;
00377 }
00378
00379 static bool handleDebugViewsChanged(const LLSD& newvalue)
00380 {
00381 LLView::sDebugRects = newvalue.asBoolean();
00382 return true;
00383 }
00384
00385 static bool handleLogFileChanged(const LLSD& newvalue)
00386 {
00387 std::string log_filename = newvalue.asString();
00388 LLFile::remove(log_filename.c_str());
00389 LLError::logToFile(log_filename);
00390 return true;
00391 }
00392
00393 bool handleHideGroupTitleChanged(const LLSD& newvalue)
00394 {
00395 gAgent.setHideGroupTitle(newvalue);
00396 return true;
00397 }
00398
00399 bool handleEffectColorChanged(const LLSD& newvalue)
00400 {
00401 gAgent.setEffectColor(LLColor4(newvalue));
00402 return true;
00403 }
00404
00405 bool handleRotateNetMapChanged(const LLSD& newvalue)
00406 {
00407 LLNetMap::setRotateMap(newvalue.asBoolean());
00408 return true;
00409 }
00410
00411 bool handleVectorizeChanged(const LLSD& newvalue)
00412 {
00413 LLViewerJointMesh::updateVectorize();
00414 return true;
00415 }
00416
00417 bool handleVoiceClientPrefsChanged(const LLSD& newvalue)
00418 {
00419 if(gVoiceClient)
00420 {
00421
00422
00423 gVoiceClient->setVoiceEnabled(gSavedSettings.getBOOL("EnableVoiceChat"));
00424 gVoiceClient->setUsePTT(gSavedSettings.getBOOL("PTTCurrentlyEnabled"));
00425 std::string keyString = gSavedSettings.getString("PushToTalkButton");
00426 gVoiceClient->setPTTKey(keyString);
00427 gVoiceClient->setPTTIsToggle(gSavedSettings.getBOOL("PushToTalkToggle"));
00428 gVoiceClient->setEarLocation(gSavedSettings.getS32("VoiceEarLocation"));
00429 std::string serverName = gSavedSettings.getString("VivoxDebugServerName");
00430 gVoiceClient->setVivoxDebugServerName(serverName);
00431
00432 std::string inputDevice = gSavedSettings.getString("VoiceInputAudioDevice");
00433 gVoiceClient->setCaptureDevice(inputDevice);
00434 std::string outputDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
00435 gVoiceClient->setRenderDevice(outputDevice);
00436 gVoiceClient->setLipSyncEnabled(gSavedSettings.getU32("LipSyncEnabled"));
00437 }
00438 return true;
00439 }
00440
00442
00443 void settings_setup_listeners()
00444 {
00445 gSavedSettings.getControl("FirstPersonAvatarVisible")->getSignal()->connect(boost::bind(&handleRenderAvatarMouselookChanged, _1));
00446 gSavedSettings.getControl("RenderFarClip")->getSignal()->connect(boost::bind(&handleRenderFarClipChanged, _1));
00447 gSavedSettings.getControl("RenderTerrainDetail")->getSignal()->connect(boost::bind(&handleTerrainDetailChanged, _1));
00448 gSavedSettings.getControl("RenderAvatarVP")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
00449 gSavedSettings.getControl("VertexShaderEnable")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
00450 gSavedSettings.getControl("RenderDynamicReflections")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
00451 gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _1));
00452 gSavedSettings.getControl("RenderGlow")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
00453 gSavedSettings.getControl("EnableRippleWater")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
00454 gSavedSettings.getControl("RenderGlowResolutionPow")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _1));
00455 gSavedSettings.getControl("RenderAvatarCloth")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
00456 gSavedSettings.getControl("WindLightUseAtmosShaders")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
00457 gSavedSettings.getControl("RenderGammaFull")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
00458 gSavedSettings.getControl("RenderVolumeLODFactor")->getSignal()->connect(boost::bind(&handleVolumeLODChanged, _1));
00459 gSavedSettings.getControl("RenderAvatarLODFactor")->getSignal()->connect(boost::bind(&handleAvatarLODChanged, _1));
00460 gSavedSettings.getControl("RenderTerrainLODFactor")->getSignal()->connect(boost::bind(&handleTerrainLODChanged, _1));
00461 gSavedSettings.getControl("RenderTreeLODFactor")->getSignal()->connect(boost::bind(&handleTreeLODChanged, _1));
00462 gSavedSettings.getControl("RenderFlexTimeFactor")->getSignal()->connect(boost::bind(&handleFlexLODChanged, _1));
00463 gSavedSettings.getControl("ThrottleBandwidthKBPS")->getSignal()->connect(boost::bind(&handleBandwidthChanged, _1));
00464 gSavedSettings.getControl("RenderGamma")->getSignal()->connect(boost::bind(&handleGammaChanged, _1));
00465 gSavedSettings.getControl("RenderFogRatio")->getSignal()->connect(boost::bind(&handleFogRatioChanged, _1));
00466 gSavedSettings.getControl("RenderMaxPartCount")->getSignal()->connect(boost::bind(&handleMaxPartCountChanged, _1));
00467 gSavedSettings.getControl("RenderDynamicLOD")->getSignal()->connect(boost::bind(&handleRenderDynamicLODChanged, _1));
00468 gSavedSettings.getControl("RenderDebugTextureBind")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1));
00469 gSavedSettings.getControl("RenderFastAlpha")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1));
00470 gSavedSettings.getControl("RenderObjectBump")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1));
00471 gSavedSettings.getControl("RenderMaxVBOSize")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1));
00472 gSavedSettings.getControl("RenderUseFBO")->getSignal()->connect(boost::bind(&handleRenderUseFBOChanged, _1));
00473 gSavedSettings.getControl("RenderUseImpostors")->getSignal()->connect(boost::bind(&handleRenderUseImpostorsChanged, _1));
00474 gSavedSettings.getControl("RenderDebugGL")->getSignal()->connect(boost::bind(&handleRenderDebugGLChanged, _1));
00475 gSavedSettings.getControl("RenderDebugPipeline")->getSignal()->connect(boost::bind(&handleRenderDebugPipelineChanged, _1));
00476 gSavedSettings.getControl("RenderResolutionDivisor")->getSignal()->connect(boost::bind(&handleRenderResolutionDivisorChanged, _1));
00477 gSavedSettings.getControl("RenderDeferred")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
00478 gSavedSettings.getControl("AvatarCompositeLimit")->getSignal()->connect(boost::bind(&handleCompositeLimitChanged, _1));
00479 gSavedSettings.getControl("TextureMemory")->getSignal()->connect(boost::bind(&handleVideoMemoryChanged, _1));
00480 gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&handleChatFontSizeChanged, _1));
00481 gSavedSettings.getControl("ChatPersistTime")->getSignal()->connect(boost::bind(&handleChatPersistTimeChanged, _1));
00482 gSavedSettings.getControl("ConsoleMaxLines")->getSignal()->connect(boost::bind(&handleConsoleMaxLinesChanged, _1));
00483 gSavedSettings.getControl("UseOcclusion")->getSignal()->connect(boost::bind(&handleUseOcclusionChanged, _1));
00484 gSavedSettings.getControl("AudioLevelMaster")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
00485 gSavedSettings.getControl("AudioLevelSFX")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
00486 gSavedSettings.getControl("AudioLevelUI")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
00487 gSavedSettings.getControl("AudioLevelAmbient")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
00488 gSavedSettings.getControl("AudioLevelMusic")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
00489 gSavedSettings.getControl("AudioLevelMedia")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
00490 gSavedSettings.getControl("AudioLevelVoice")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
00491 gSavedSettings.getControl("AudioLevelDistance")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
00492 gSavedSettings.getControl("AudioLevelDoppler")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
00493 gSavedSettings.getControl("AudioLevelRolloff")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
00494 gSavedSettings.getControl("AudioStreamingMusic")->getSignal()->connect(boost::bind(&handleAudioStreamMusicChanged, _1));
00495 gSavedSettings.getControl("MuteAudio")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
00496 gSavedSettings.getControl("MuteMusic")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
00497 gSavedSettings.getControl("MuteMedia")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
00498 gSavedSettings.getControl("MuteVoice")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
00499 gSavedSettings.getControl("MuteAmbient")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
00500 gSavedSettings.getControl("MuteUI")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
00501 gSavedSettings.getControl("RenderVBOEnable")->getSignal()->connect(boost::bind(&handleRenderUseVBOChanged, _1));
00502 gSavedSettings.getControl("WLSkyDetail")->getSignal()->connect(boost::bind(&handleWLSkyDetailChanged, _1));
00503 gSavedSettings.getControl("RenderLightingDetail")->getSignal()->connect(boost::bind(&handleRenderLightingDetailChanged, _1));
00504 gSavedSettings.getControl("NumpadControl")->getSignal()->connect(boost::bind(&handleNumpadControlChanged, _1));
00505 gSavedSettings.getControl("JoystickAxis0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00506 gSavedSettings.getControl("JoystickAxis1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00507 gSavedSettings.getControl("JoystickAxis2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00508 gSavedSettings.getControl("JoystickAxis3")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00509 gSavedSettings.getControl("JoystickAxis4")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00510 gSavedSettings.getControl("JoystickAxis5")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00511 gSavedSettings.getControl("JoystickAxis6")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00512 gSavedSettings.getControl("FlycamAxisScale0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00513 gSavedSettings.getControl("FlycamAxisScale1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00514 gSavedSettings.getControl("FlycamAxisScale2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00515 gSavedSettings.getControl("FlycamAxisScale3")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00516 gSavedSettings.getControl("FlycamAxisScale4")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00517 gSavedSettings.getControl("FlycamAxisScale5")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00518 gSavedSettings.getControl("FlycamAxisScale6")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00519 gSavedSettings.getControl("FlycamAxisDeadZone0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00520 gSavedSettings.getControl("FlycamAxisDeadZone1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00521 gSavedSettings.getControl("FlycamAxisDeadZone2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00522 gSavedSettings.getControl("FlycamAxisDeadZone3")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00523 gSavedSettings.getControl("FlycamAxisDeadZone4")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00524 gSavedSettings.getControl("FlycamAxisDeadZone5")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00525 gSavedSettings.getControl("FlycamAxisDeadZone6")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00526 gSavedSettings.getControl("AvatarAxisScale0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00527 gSavedSettings.getControl("AvatarAxisScale1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00528 gSavedSettings.getControl("AvatarAxisScale2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00529 gSavedSettings.getControl("AvatarAxisScale3")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00530 gSavedSettings.getControl("AvatarAxisScale4")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00531 gSavedSettings.getControl("AvatarAxisScale5")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00532 gSavedSettings.getControl("AvatarAxisDeadZone0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00533 gSavedSettings.getControl("AvatarAxisDeadZone1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00534 gSavedSettings.getControl("AvatarAxisDeadZone2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00535 gSavedSettings.getControl("AvatarAxisDeadZone3")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00536 gSavedSettings.getControl("AvatarAxisDeadZone4")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00537 gSavedSettings.getControl("AvatarAxisDeadZone5")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00538 gSavedSettings.getControl("BuildAxisScale0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00539 gSavedSettings.getControl("BuildAxisScale1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00540 gSavedSettings.getControl("BuildAxisScale2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00541 gSavedSettings.getControl("BuildAxisScale3")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00542 gSavedSettings.getControl("BuildAxisScale4")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00543 gSavedSettings.getControl("BuildAxisScale5")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00544 gSavedSettings.getControl("BuildAxisDeadZone0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00545 gSavedSettings.getControl("BuildAxisDeadZone1")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00546 gSavedSettings.getControl("BuildAxisDeadZone2")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00547 gSavedSettings.getControl("BuildAxisDeadZone3")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00548 gSavedSettings.getControl("BuildAxisDeadZone4")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00549 gSavedSettings.getControl("BuildAxisDeadZone5")->getSignal()->connect(boost::bind(&handleJoystickChanged, _1));
00550 gSavedSettings.getControl("DebugViews")->getSignal()->connect(boost::bind(&handleDebugViewsChanged, _1));
00551 gSavedSettings.getControl("UserLogFile")->getSignal()->connect(boost::bind(&handleLogFileChanged, _1));
00552 gSavedSettings.getControl("RenderHideGroupTitle")->getSignal()->connect(boost::bind(handleHideGroupTitleChanged, _1));
00553 gSavedSettings.getControl("EffectColor")->getSignal()->connect(boost::bind(handleEffectColorChanged, _1));
00554 gSavedSettings.getControl("MiniMapRotate")->getSignal()->connect(boost::bind(handleRotateNetMapChanged, _1));
00555 gSavedSettings.getControl("VectorizePerfTest")->getSignal()->connect(boost::bind(&handleVectorizeChanged, _1));
00556 gSavedSettings.getControl("VectorizeEnable")->getSignal()->connect(boost::bind(&handleVectorizeChanged, _1));
00557 gSavedSettings.getControl("VectorizeProcessor")->getSignal()->connect(boost::bind(&handleVectorizeChanged, _1));
00558 gSavedSettings.getControl("VectorizeSkin")->getSignal()->connect(boost::bind(&handleVectorizeChanged, _1));
00559 gSavedSettings.getControl("EnableVoiceChat")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
00560 gSavedSettings.getControl("PTTCurrentlyEnabled")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
00561 gSavedSettings.getControl("PushToTalkButton")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
00562 gSavedSettings.getControl("PushToTalkToggle")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
00563 gSavedSettings.getControl("VoiceEarLocation")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
00564 gSavedSettings.getControl("VivoxDebugServerName")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
00565 gSavedSettings.getControl("VoiceInputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
00566 gSavedSettings.getControl("VoiceOutputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
00567 gSavedSettings.getControl("LipSyncEnabled")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
00568 }
00569