00001
00032 #include "llviewerprecompiledheaders.h"
00033
00034 #include "llfloaterwater.h"
00035
00036 #include "pipeline.h"
00037 #include "llsky.h"
00038
00039 #include "llsliderctrl.h"
00040 #include "llspinctrl.h"
00041 #include "llcolorswatch.h"
00042 #include "llcheckboxctrl.h"
00043 #include "lltexturectrl.h"
00044 #include "lluictrlfactory.h"
00045 #include "llviewercamera.h"
00046 #include "llcombobox.h"
00047 #include "lllineeditor.h"
00048 #include "llfloaterdaycycle.h"
00049 #include "llboost.h"
00050 #include "llmultisliderctrl.h"
00051
00052 #include "v4math.h"
00053 #include "llviewerdisplay.h"
00054 #include "llviewercontrol.h"
00055 #include "llviewerwindow.h"
00056 #include "llsavedsettingsglue.h"
00057
00058 #include "llwaterparamset.h"
00059 #include "llwaterparammanager.h"
00060 #include "llpostprocess.h"
00061
00062 #undef max
00063
00064 LLFloaterWater* LLFloaterWater::sWaterMenu = NULL;
00065
00066 std::set<std::string> LLFloaterWater::sDefaultPresets;
00067
00068 LLFloaterWater::LLFloaterWater() : LLFloater("water floater")
00069 {
00070 LLUICtrlFactory::getInstance()->buildFloater(this, "floater_water.xml");
00071
00072
00073 LLComboBox* comboBox = getChild<LLComboBox>("WaterPresetsCombo");
00074
00075 if(comboBox != NULL) {
00076
00077 std::map<std::string, LLWaterParamSet>::iterator mIt =
00078 LLWaterParamManager::instance()->mParamList.begin();
00079 for(; mIt != LLWaterParamManager::instance()->mParamList.end(); mIt++)
00080 {
00081 comboBox->add(mIt->first);
00082 }
00083
00084
00085 comboBox->selectByValue(LLSD("Default"));
00086 }
00087
00088 LLString def_water = getString("WLDefaultWaterNames");
00089
00090
00091 sDefaultPresets.insert("");
00092 boost_tokenizer tokens(def_water, boost::char_separator<char>(":"));
00093 for (boost_tokenizer::iterator token_iter = tokens.begin(); token_iter != tokens.end(); ++token_iter)
00094 {
00095 LLString tok(*token_iter);
00096 sDefaultPresets.insert(tok);
00097 }
00098
00099
00100 initCallbacks();
00101 }
00102
00103 LLFloaterWater::~LLFloaterWater()
00104 {
00105 }
00106
00107 void LLFloaterWater::initCallbacks(void) {
00108
00109
00110 initHelpBtn("WaterFogColorHelp", "HelpWaterFogColor");
00111 initHelpBtn("WaterFogDensityHelp", "HelpWaterFogDensity");
00112 initHelpBtn("WaterUnderWaterFogModHelp", "HelpUnderWaterFogMod");
00113 initHelpBtn("WaterGlowHelp", "HelpWaterGlow");
00114 initHelpBtn("WaterNormalScaleHelp", "HelpWaterNormalScale");
00115 initHelpBtn("WaterFresnelScaleHelp", "HelpWaterFresnelScale");
00116 initHelpBtn("WaterFresnelOffsetHelp", "HelpWaterFresnelOffset");
00117
00118 initHelpBtn("WaterBlurMultiplierHelp", "HelpWaterBlurMultiplier");
00119 initHelpBtn("WaterScaleBelowHelp", "HelpWaterScaleBelow");
00120 initHelpBtn("WaterScaleAboveHelp", "HelpWaterScaleAbove");
00121
00122 initHelpBtn("WaterNormalMapHelp", "HelpWaterNormalMap");
00123 initHelpBtn("WaterWave1Help", "HelpWaterWave1");
00124 initHelpBtn("WaterWave2Help", "HelpWaterWave2");
00125
00126 LLWaterParamManager * param_mgr = LLWaterParamManager::instance();
00127
00128 childSetCommitCallback("WaterFogColor", onWaterFogColorMoved, ¶m_mgr->mFogColor);
00129
00130
00131 childSetCommitCallback("WaterGlow", onColorControlAMoved, ¶m_mgr->mFogColor);
00132
00133
00134 childSetCommitCallback("WaterFogDensity", onExpFloatControlMoved, ¶m_mgr->mFogDensity);
00135 childSetCommitCallback("WaterUnderWaterFogMod", onFloatControlMoved, ¶m_mgr->mUnderWaterFogMod);
00136
00137
00138 childSetCommitCallback("WaterNormalScaleX", onVector3ControlXMoved, ¶m_mgr->mNormalScale);
00139 childSetCommitCallback("WaterNormalScaleY", onVector3ControlYMoved, ¶m_mgr->mNormalScale);
00140 childSetCommitCallback("WaterNormalScaleZ", onVector3ControlZMoved, ¶m_mgr->mNormalScale);
00141
00142
00143 childSetCommitCallback("WaterFresnelScale", onFloatControlMoved, ¶m_mgr->mFresnelScale);
00144 childSetCommitCallback("WaterFresnelOffset", onFloatControlMoved, ¶m_mgr->mFresnelOffset);
00145
00146
00147 childSetCommitCallback("WaterScaleAbove", onFloatControlMoved, ¶m_mgr->mScaleAbove);
00148 childSetCommitCallback("WaterScaleBelow", onFloatControlMoved, ¶m_mgr->mScaleBelow);
00149
00150
00151 childSetCommitCallback("WaterBlurMult", onFloatControlMoved, ¶m_mgr->mBlurMultiplier);
00152
00153
00154 LLComboBox* comboBox = getChild<LLComboBox>("WaterPresetsCombo");
00155
00156
00157 childSetAction("WaterNewPreset", onNewPreset, comboBox);
00158 childSetAction("WaterSavePreset", onSavePreset, comboBox);
00159 childSetAction("WaterDeletePreset", onDeletePreset, comboBox);
00160
00161
00162 childSetCommitCallback("WaterWave1DirX", onVector2ControlXMoved, ¶m_mgr->mWave1Dir);
00163 childSetCommitCallback("WaterWave1DirY", onVector2ControlYMoved, ¶m_mgr->mWave1Dir);
00164 childSetCommitCallback("WaterWave2DirX", onVector2ControlXMoved, ¶m_mgr->mWave2Dir);
00165 childSetCommitCallback("WaterWave2DirY", onVector2ControlYMoved, ¶m_mgr->mWave2Dir);
00166
00167 comboBox->setCommitCallback(onChangePresetName);
00168
00169 LLTextureCtrl* textCtrl = getChild<LLTextureCtrl>("WaterNormalMap");
00170 textCtrl->setDefaultImageAssetID(DEFAULT_WATER_NORMAL);
00171 childSetCommitCallback("WaterNormalMap", onNormalMapPicked, NULL);
00172 }
00173
00174 void LLFloaterWater::onClickHelp(void* data)
00175 {
00176 LLFloaterWater* self = LLFloaterWater::instance();
00177
00178 const char* xml_alert = (const char*) data;
00179 LLAlertDialog* dialogp = gViewerWindow->alertXml(xml_alert);
00180 if (dialogp)
00181 {
00182 LLFloater* root_floater = gFloaterView->getParentFloater(self);
00183 if (root_floater)
00184 {
00185 root_floater->addDependentFloater(dialogp);
00186 }
00187 }
00188 }
00189
00190 void LLFloaterWater::initHelpBtn(const char* name, const char* xml_alert)
00191 {
00192 childSetAction(name, onClickHelp, (void*)xml_alert);
00193 }
00194
00195 void LLFloaterWater::newPromptCallback(S32 option, const LLString& text, void* userData)
00196 {
00197 if(text == "")
00198 {
00199 return;
00200 }
00201
00202 if(option == 0) {
00203 LLComboBox* comboBox = sWaterMenu->getChild<LLComboBox>( "WaterPresetsCombo");
00204
00205 LLWaterParamManager * param_mgr = LLWaterParamManager::instance();
00206
00207
00208
00209 std::map<std::string, LLWaterParamSet>::iterator mIt =
00210 param_mgr->mParamList.find(text.c_str());
00211
00212
00213 if(mIt == param_mgr->mParamList.end())
00214 {
00215 param_mgr->addParamSet(text.c_str(),
00216 param_mgr->mCurParams);
00217 comboBox->add(text);
00218 comboBox->sortByName();
00219
00220 comboBox->setSelectedByValue(text, true);
00221
00222 param_mgr->savePreset(text);
00223
00224
00225 }
00226 else
00227 {
00228 gViewerWindow->alertXml("ExistsWaterPresetAlert");
00229 }
00230 }
00231 }
00232
00233 void LLFloaterWater::syncMenu()
00234 {
00235 bool err;
00236
00237 LLWaterParamManager * param_mgr = LLWaterParamManager::instance();
00238
00239 LLWaterParamSet & current_params = param_mgr->mCurParams;
00240
00241
00242 param_mgr->mFogColor = current_params.getVector4(param_mgr->mFogColor.mName, err);
00243
00244 LLColor4 col = param_mgr->getFogColor();
00245 childSetValue("WaterGlow", col.mV[3]);
00246 col.mV[3] = 1.0f;
00247 LLColorSwatchCtrl* colCtrl = sWaterMenu->getChild<LLColorSwatchCtrl>("WaterFogColor");
00248
00249 colCtrl->set(col);
00250
00251
00252 param_mgr->mFogDensity.mExp =
00253 log(current_params.getFloat(param_mgr->mFogDensity.mName, err)) /
00254 log(param_mgr->mFogDensity.mBase);
00255 param_mgr->setDensitySliderValue(param_mgr->mFogDensity.mExp);
00256 childSetValue("WaterFogDensity", param_mgr->mFogDensity.mExp);
00257
00258 param_mgr->mUnderWaterFogMod.mX =
00259 current_params.getFloat(param_mgr->mUnderWaterFogMod.mName, err);
00260 childSetValue("WaterUnderWaterFogMod", param_mgr->mUnderWaterFogMod.mX);
00261
00262 param_mgr->mNormalScale = current_params.getVector3(param_mgr->mNormalScale.mName, err);
00263 childSetValue("WaterNormalScaleX", param_mgr->mNormalScale.mX);
00264 childSetValue("WaterNormalScaleY", param_mgr->mNormalScale.mY);
00265 childSetValue("WaterNormalScaleZ", param_mgr->mNormalScale.mZ);
00266
00267
00268 param_mgr->mFresnelScale.mX = current_params.getFloat(param_mgr->mFresnelScale.mName, err);
00269 childSetValue("WaterFresnelScale", param_mgr->mFresnelScale.mX);
00270 param_mgr->mFresnelOffset.mX = current_params.getFloat(param_mgr->mFresnelOffset.mName, err);
00271 childSetValue("WaterFresnelOffset", param_mgr->mFresnelOffset.mX);
00272
00273
00274 param_mgr->mScaleAbove.mX = current_params.getFloat(param_mgr->mScaleAbove.mName, err);
00275 childSetValue("WaterScaleAbove", param_mgr->mScaleAbove.mX);
00276 param_mgr->mScaleBelow.mX = current_params.getFloat(param_mgr->mScaleBelow.mName, err);
00277 childSetValue("WaterScaleBelow", param_mgr->mScaleBelow.mX);
00278
00279
00280 param_mgr->mBlurMultiplier.mX = current_params.getFloat(param_mgr->mBlurMultiplier.mName, err);
00281 childSetValue("WaterBlurMult", param_mgr->mBlurMultiplier.mX);
00282
00283
00284 param_mgr->mWave1Dir = current_params.getVector2(param_mgr->mWave1Dir.mName, err);
00285 childSetValue("WaterWave1DirX", param_mgr->mWave1Dir.mX);
00286 childSetValue("WaterWave1DirY", param_mgr->mWave1Dir.mY);
00287
00288 param_mgr->mWave2Dir = current_params.getVector2(param_mgr->mWave2Dir.mName, err);
00289 childSetValue("WaterWave2DirX", param_mgr->mWave2Dir.mX);
00290 childSetValue("WaterWave2DirY", param_mgr->mWave2Dir.mY);
00291
00292 LLTextureCtrl* textCtrl = sWaterMenu->getChild<LLTextureCtrl>("WaterNormalMap");
00293 textCtrl->setImageAssetID(param_mgr->getNormalMapID());
00294 }
00295
00296
00297
00298 LLFloaterWater* LLFloaterWater::instance()
00299 {
00300 if (!sWaterMenu)
00301 {
00302 sWaterMenu = new LLFloaterWater();
00303 sWaterMenu->open();
00304 sWaterMenu->setFocus(TRUE);
00305 }
00306 return sWaterMenu;
00307 }
00308 void LLFloaterWater::show()
00309 {
00310 LLFloaterWater* water = instance();
00311 water->syncMenu();
00312
00313
00314
00315
00316
00317 water->open();
00318 }
00319
00320 bool LLFloaterWater::isOpen()
00321 {
00322 if (sWaterMenu != NULL) {
00323 return true;
00324 }
00325 return false;
00326 }
00327
00328
00329 void LLFloaterWater::onClose(bool app_quitting)
00330 {
00331 if (sWaterMenu)
00332 {
00333 sWaterMenu->setVisible(FALSE);
00334 }
00335 }
00336
00337
00338 void LLFloaterWater::onVector3ControlXMoved(LLUICtrl* ctrl, void* userData)
00339 {
00340 LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
00341 WaterVector3Control * vectorControl = static_cast<WaterVector3Control *>(userData);
00342
00343 vectorControl->mX = sldrCtrl->getValueF32();
00344
00345 vectorControl->update(LLWaterParamManager::instance()->mCurParams);
00346
00347 LLWaterParamManager::instance()->propagateParameters();
00348 }
00349
00350
00351 void LLFloaterWater::onVector3ControlYMoved(LLUICtrl* ctrl, void* userData)
00352 {
00353 LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
00354 WaterVector3Control * vectorControl = static_cast<WaterVector3Control *>(userData);
00355
00356 vectorControl->mY = sldrCtrl->getValueF32();
00357
00358 vectorControl->update(LLWaterParamManager::instance()->mCurParams);
00359
00360 LLWaterParamManager::instance()->propagateParameters();
00361 }
00362
00363
00364 void LLFloaterWater::onVector3ControlZMoved(LLUICtrl* ctrl, void* userData)
00365 {
00366 LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
00367 WaterVector3Control * vectorControl = static_cast<WaterVector3Control *>(userData);
00368
00369 vectorControl->mZ = sldrCtrl->getValueF32();
00370
00371 vectorControl->update(LLWaterParamManager::instance()->mCurParams);
00372
00373 LLWaterParamManager::instance()->propagateParameters();
00374 }
00375
00376
00377
00378 void LLFloaterWater::onVector2ControlXMoved(LLUICtrl* ctrl, void* userData)
00379 {
00380 LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
00381 WaterVector2Control * vectorControl = static_cast<WaterVector2Control *>(userData);
00382
00383 vectorControl->mX = sldrCtrl->getValueF32();
00384
00385 vectorControl->update(LLWaterParamManager::instance()->mCurParams);
00386
00387 LLWaterParamManager::instance()->propagateParameters();
00388 }
00389
00390
00391 void LLFloaterWater::onVector2ControlYMoved(LLUICtrl* ctrl, void* userData)
00392 {
00393 LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
00394 WaterVector2Control * vectorControl = static_cast<WaterVector2Control *>(userData);
00395
00396 vectorControl->mY = sldrCtrl->getValueF32();
00397
00398 vectorControl->update(LLWaterParamManager::instance()->mCurParams);
00399
00400 LLWaterParamManager::instance()->propagateParameters();
00401 }
00402
00403
00404 void LLFloaterWater::onColorControlRMoved(LLUICtrl* ctrl, void* userData)
00405 {
00406 LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
00407 WaterColorControl * colorControl = static_cast<WaterColorControl *>(userData);
00408
00409 colorControl->mR = sldrCtrl->getValueF32();
00410
00411
00412 if(colorControl->mR >= colorControl->mG
00413 && colorControl->mR >= colorControl->mB
00414 && colorControl->mHasSliderName)
00415 {
00416 colorControl->mI = colorControl->mR;
00417 std::string name = colorControl->mSliderName;
00418 name.append("I");
00419
00420 sWaterMenu->childSetValue(name, colorControl->mR);
00421 }
00422
00423 colorControl->update(LLWaterParamManager::instance()->mCurParams);
00424
00425 LLWaterParamManager::instance()->propagateParameters();
00426 }
00427
00428 void LLFloaterWater::onColorControlGMoved(LLUICtrl* ctrl, void* userData)
00429 {
00430 LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
00431 WaterColorControl * colorControl = static_cast<WaterColorControl *>(userData);
00432
00433 colorControl->mG = sldrCtrl->getValueF32();
00434
00435
00436 if(colorControl->mG >= colorControl->mR
00437 && colorControl->mG >= colorControl->mB
00438 && colorControl->mHasSliderName)
00439 {
00440 colorControl->mI = colorControl->mG;
00441 std::string name = colorControl->mSliderName;
00442 name.append("I");
00443
00444 sWaterMenu->childSetValue(name, colorControl->mG);
00445
00446 }
00447
00448 colorControl->update(LLWaterParamManager::instance()->mCurParams);
00449
00450 LLWaterParamManager::instance()->propagateParameters();
00451 }
00452
00453 void LLFloaterWater::onColorControlBMoved(LLUICtrl* ctrl, void* userData)
00454 {
00455 LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
00456 WaterColorControl * colorControl = static_cast<WaterColorControl *>(userData);
00457
00458 colorControl->mB = sldrCtrl->getValueF32();
00459
00460
00461 if(colorControl->mB >= colorControl->mR
00462 && colorControl->mB >= colorControl->mG
00463 && colorControl->mHasSliderName)
00464 {
00465 colorControl->mI = colorControl->mB;
00466 std::string name = colorControl->mSliderName;
00467 name.append("I");
00468
00469 sWaterMenu->childSetValue(name, colorControl->mB);
00470 }
00471
00472 colorControl->update(LLWaterParamManager::instance()->mCurParams);
00473
00474 LLWaterParamManager::instance()->propagateParameters();
00475 }
00476
00477 void LLFloaterWater::onColorControlAMoved(LLUICtrl* ctrl, void* userData)
00478 {
00479 LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
00480 WaterColorControl * colorControl = static_cast<WaterColorControl *>(userData);
00481
00482 colorControl->mA = sldrCtrl->getValueF32();
00483
00484 colorControl->update(LLWaterParamManager::instance()->mCurParams);
00485
00486 LLWaterParamManager::instance()->propagateParameters();
00487 }
00488
00489
00490 void LLFloaterWater::onColorControlIMoved(LLUICtrl* ctrl, void* userData)
00491 {
00492 LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
00493 WaterColorControl * colorControl = static_cast<WaterColorControl *>(userData);
00494
00495 colorControl->mI = sldrCtrl->getValueF32();
00496
00497
00498 if(colorControl->mHasSliderName)
00499 {
00500
00501 F32 maxVal = std::max(std::max(colorControl->mR, colorControl->mG), colorControl->mB);
00502 F32 iVal;
00503
00504 iVal = colorControl->mI;
00505
00506
00507 std::string rName = colorControl->mSliderName;
00508 rName.append("R");
00509 std::string gName = colorControl->mSliderName;
00510 gName.append("G");
00511 std::string bName = colorControl->mSliderName;
00512 bName.append("B");
00513
00514
00515 if(iVal == 0)
00516 {
00517 colorControl->mR = 0;
00518 colorControl->mG = 0;
00519 colorControl->mB = 0;
00520
00521
00522
00523 }
00524 else if (maxVal == 0)
00525 {
00526 colorControl->mR = iVal;
00527 colorControl->mG = iVal;
00528 colorControl->mB = iVal;
00529 }
00530 else
00531 {
00532
00533 F32 delta = (iVal - maxVal) / maxVal;
00534 colorControl->mR *= (1.0f + delta);
00535 colorControl->mG *= (1.0f + delta);
00536 colorControl->mB *= (1.0f + delta);
00537 }
00538
00539
00540 sWaterMenu->childSetValue(rName.c_str(), colorControl->mR);
00541 sWaterMenu->childSetValue(gName.c_str(), colorControl->mG);
00542 sWaterMenu->childSetValue(bName.c_str(), colorControl->mB);
00543 }
00544
00545
00546 colorControl->update(LLWaterParamManager::instance()->mCurParams);
00547 LLWaterParamManager::instance()->propagateParameters();
00548 }
00549
00550 void LLFloaterWater::onExpFloatControlMoved(LLUICtrl* ctrl, void* userData)
00551 {
00552 LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
00553 WaterExpFloatControl * expFloatControl = static_cast<WaterExpFloatControl *>(userData);
00554
00555 F32 val = sldrCtrl->getValueF32();
00556 expFloatControl->mExp = val;
00557 LLWaterParamManager::instance()->setDensitySliderValue(val);
00558
00559 expFloatControl->update(LLWaterParamManager::instance()->mCurParams);
00560 LLWaterParamManager::instance()->propagateParameters();
00561 }
00562
00563 void LLFloaterWater::onFloatControlMoved(LLUICtrl* ctrl, void* userData)
00564 {
00565 LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
00566 WaterFloatControl * floatControl = static_cast<WaterFloatControl *>(userData);
00567
00568 floatControl->mX = sldrCtrl->getValueF32() / floatControl->mMult;
00569
00570 floatControl->update(LLWaterParamManager::instance()->mCurParams);
00571 LLWaterParamManager::instance()->propagateParameters();
00572 }
00573 void LLFloaterWater::onWaterFogColorMoved(LLUICtrl* ctrl, void* userData)
00574 {
00575 LLColorSwatchCtrl* swatch = static_cast<LLColorSwatchCtrl*>(ctrl);
00576 WaterColorControl * colorControl = static_cast<WaterColorControl *>(userData);
00577 *colorControl = swatch->get();
00578
00579 colorControl->update(LLWaterParamManager::instance()->mCurParams);
00580 LLWaterParamManager::instance()->propagateParameters();
00581 }
00582
00583 void LLFloaterWater::onBoolToggle(LLUICtrl* ctrl, void* userData)
00584 {
00585 LLCheckBoxCtrl* cbCtrl = static_cast<LLCheckBoxCtrl*>(ctrl);
00586
00587 bool value = cbCtrl->get();
00588 (*(static_cast<BOOL *>(userData))) = value;
00589 }
00590
00591 void LLFloaterWater::onNormalMapPicked(LLUICtrl* ctrl, void* userData)
00592 {
00593 LLTextureCtrl* textCtrl = static_cast<LLTextureCtrl*>(ctrl);
00594 LLUUID textID = textCtrl->getImageAssetID();
00595 LLWaterParamManager::instance()->setNormalMapID(textID);
00596 }
00597
00598 void LLFloaterWater::onNewPreset(void* userData)
00599 {
00600 gViewerWindow->alertXmlEditText("NewWaterPreset", LLString::format_map_t(),
00601 NULL, NULL, newPromptCallback, NULL);
00602 }
00603
00604 void LLFloaterWater::onSavePreset(void* userData)
00605 {
00606
00607 LLComboBox* comboBox = sWaterMenu->getChild<LLComboBox>("WaterPresetsCombo");
00608
00609
00610 if(comboBox->getSelectedItemLabel() == "")
00611 {
00612 return;
00613 }
00614
00615 LLWaterParamManager::instance()->mCurParams.mName =
00616 comboBox->getSelectedItemLabel();
00617
00618
00619 std::set<std::string>::iterator sIt = sDefaultPresets.find(
00620 comboBox->getSelectedItemLabel().c_str());
00621 if(sIt != sDefaultPresets.end() && !gSavedSettings.getBOOL("WaterEditPresets"))
00622 {
00623 gViewerWindow->alertXml("WLNoEditDefault");
00624 return;
00625 }
00626
00627 gViewerWindow->alertXml("WLSavePresetAlert", saveAlertCallback, sWaterMenu);
00628 }
00629
00630 void LLFloaterWater::saveAlertCallback(S32 option, void* userdata)
00631 {
00632
00633 if(option == 0)
00634 {
00635 LLWaterParamManager * param_mgr = LLWaterParamManager::instance();
00636
00637 param_mgr->setParamSet(
00638 param_mgr->mCurParams.mName,
00639 param_mgr->mCurParams);
00640
00641
00642 param_mgr->savePreset(param_mgr->mCurParams.mName);
00643 }
00644
00645 }
00646
00647 void LLFloaterWater::onDeletePreset(void* userData)
00648 {
00649 LLComboBox* combo_box = sWaterMenu->getChild<LLComboBox>("WaterPresetsCombo");
00650
00651 if(combo_box->getSelectedValue().asString() == "")
00652 {
00653 return;
00654 }
00655
00656 LLString::format_map_t args;
00657 args["[SKY]"] = combo_box->getSelectedValue().asString();
00658 gViewerWindow->alertXml("WLDeletePresetAlert", args, deleteAlertCallback, sWaterMenu);
00659 }
00660
00661 void LLFloaterWater::deleteAlertCallback(S32 option, void* userdata)
00662 {
00663
00664 if(option == 0)
00665 {
00666 LLComboBox* combo_box = sWaterMenu->getChild<LLComboBox>("WaterPresetsCombo");
00667 LLFloaterDayCycle* day_cycle = NULL;
00668 LLComboBox* key_combo = NULL;
00669 LLMultiSliderCtrl* mult_sldr = NULL;
00670
00671 if(LLFloaterDayCycle::isOpen())
00672 {
00673 day_cycle = LLFloaterDayCycle::instance();
00674 key_combo = day_cycle->getChild<LLComboBox>("WaterKeyPresets");
00675 mult_sldr = day_cycle->getChild<LLMultiSliderCtrl>("WaterDayCycleKeys");
00676 }
00677
00678 LLString name = combo_box->getSelectedValue().asString();
00679
00680
00681 std::set<std::string>::iterator sIt = sDefaultPresets.find(name.c_str());
00682 if(sIt != sDefaultPresets.end())
00683 {
00684 gViewerWindow->alertXml("WaterNoEditDefault");
00685 return;
00686 }
00687
00688 LLWaterParamManager::instance()->removeParamSet(name, true);
00689
00690
00691 S32 new_index = combo_box->getCurrentIndex();
00692
00693 combo_box->remove(name);
00694
00695 if(key_combo != NULL)
00696 {
00697 key_combo->remove(name);
00698
00699
00700 day_cycle->deletePreset(name);
00701 }
00702
00703
00704 if(new_index > 0)
00705 {
00706 new_index--;
00707 }
00708
00709 if(combo_box->getItemCount() > 0)
00710 {
00711 combo_box->setCurrentByIndex(new_index);
00712 }
00713 }
00714 }
00715
00716
00717 void LLFloaterWater::onChangePresetName(LLUICtrl* ctrl, void * userData)
00718 {
00719 LLComboBox * combo_box = static_cast<LLComboBox*>(ctrl);
00720
00721 if(combo_box->getSimple() == "")
00722 {
00723 return;
00724 }
00725
00726 LLWaterParamManager::instance()->loadPreset(
00727 combo_box->getSelectedValue().asString());
00728 sWaterMenu->syncMenu();
00729 }
00730