diff --git a/indra/newview/llenvmanager.cpp b/indra/newview/llenvmanager.cpp index 8d54e8434f..ed9c6d076d 100644 --- a/indra/newview/llenvmanager.cpp +++ b/indra/newview/llenvmanager.cpp @@ -187,7 +187,7 @@ bool LLEnvManagerNew::useRegionSettings() bool LLEnvManagerNew::useWaterPreset(const std::string& name) { // Quickprefs integration - FloaterQuickPrefs::updateParam(QP_PARAM_WATER, LLSD(name)); + FloaterQuickPrefs::updateParam(QP_PARAM_WATER, name); LL_DEBUGS("Windlight") << "Displaying water preset " << name << LL_ENDL; LLWaterParamManager& water_mgr = LLWaterParamManager::instance(); @@ -215,7 +215,7 @@ bool LLEnvManagerNew::useSkyPreset(const std::string& name, bool interpolate /*= } // Quickprefs integration - FloaterQuickPrefs::updateParam(QP_PARAM_SKY, LLSD(name)); + FloaterQuickPrefs::updateParam(QP_PARAM_SKY, name); LL_DEBUGS("Windlight") << "Displaying sky preset " << name << LL_ENDL; sky_mgr.applySkyParams(param_set.getAll(), interpolate); @@ -239,7 +239,7 @@ bool LLEnvManagerNew::useDayCycle(const std::string& name, LLEnvKey::EScope scop params = getRegionSettings().getWLDayCycle(); // Quickprefs integration - FloaterQuickPrefs::updateParam(QP_PARAM_DAYCYCLE, LLSD(PRESET_NAME_REGION_DEFAULT)); + FloaterQuickPrefs::updateParam(QP_PARAM_DAYCYCLE, PRESET_NAME_REGION_DEFAULT); } else { @@ -252,7 +252,7 @@ bool LLEnvManagerNew::useDayCycle(const std::string& name, LLEnvKey::EScope scop } // Quickprefs integration - FloaterQuickPrefs::updateParam(QP_PARAM_DAYCYCLE, LLSD(name)); + FloaterQuickPrefs::updateParam(QP_PARAM_DAYCYCLE, name); } bool rslt = LLWLParamManager::instance().applyDayCycleParams(params, scope); @@ -597,7 +597,7 @@ void LLEnvManagerNew::updateWaterFromPrefs(bool interpolate) target_water_params = default_water.getAll(); // Quickprefs integration - FloaterQuickPrefs::updateParam(QP_PARAM_WATER, LLSD("Default")); + FloaterQuickPrefs::updateParam(QP_PARAM_WATER, "Default"); } if (getUseRegionSettings()) @@ -610,7 +610,7 @@ void LLEnvManagerNew::updateWaterFromPrefs(bool interpolate) target_water_params = region_water_params; // Quickprefs integration - FloaterQuickPrefs::updateParam(QP_PARAM_WATER, LLSD(PRESET_NAME_REGION_DEFAULT)); + FloaterQuickPrefs::updateParam(QP_PARAM_WATER, PRESET_NAME_REGION_DEFAULT); } else { @@ -632,7 +632,7 @@ void LLEnvManagerNew::updateWaterFromPrefs(bool interpolate) // Quickprefs integration else { - FloaterQuickPrefs::updateParam(QP_PARAM_WATER, LLSD(water)); + FloaterQuickPrefs::updateParam(QP_PARAM_WATER, water); } // Quickprefs integration @@ -675,7 +675,7 @@ bool LLEnvManagerNew::useRegionSky() // *TODO: Support fixed sky from region. // Quickprefs integration - FloaterQuickPrefs::updateParam(QP_PARAM_SKY, LLSD(PRESET_NAME_REGION_DEFAULT)); + FloaterQuickPrefs::updateParam(QP_PARAM_SKY, PRESET_NAME_REGION_DEFAULT); // Otherwise apply region day cycle. LL_DEBUGS("Windlight") << "Applying region sky" << LL_ENDL; diff --git a/indra/newview/quickprefs.cpp b/indra/newview/quickprefs.cpp index ec3ed898e0..0a7591fb52 100644 --- a/indra/newview/quickprefs.cpp +++ b/indra/newview/quickprefs.cpp @@ -247,113 +247,124 @@ void FloaterQuickPrefs::initCallbacks() mRlvBehaviorCallbackConnection = gRlvHandler.setBehaviourCallback(boost::bind(&FloaterQuickPrefs::updateRlvRestrictions, this, _1, _2)); gSavedSettings.getControl("IndirectMaxNonImpostors")->getCommitSignal()->connect(boost::bind(&FloaterQuickPrefs::updateMaxNonImpostors, this, _2)); + + LLWLParamManager::instance().setPresetListChangeCallback(boost::bind(&FloaterQuickPrefs::reloadPresetsAndSelect, QP_PARAM_SKY)); + LLWaterParamManager::instance().setPresetListChangeCallback(boost::bind(&FloaterQuickPrefs::reloadPresetsAndSelect, QP_PARAM_WATER)); + LLDayCycleManager::instance().setModifyCallback(boost::bind(&FloaterQuickPrefs::reloadPresetsAndSelect, QP_PARAM_DAYCYCLE)); +} + +void FloaterQuickPrefs::loadDayCyclePresets() +{ + LLDayCycleManager::preset_name_list_t user_presets, sys_presets; + LLDayCycleManager::instance().getPresetNames(user_presets, sys_presets); + + mDayCyclePresetsCombo->operateOnAll(LLComboBox::OP_DELETE); + mDayCyclePresetsCombo->add(LLTrans::getString("QP_WL_Region_Default"), LLSD(PRESET_NAME_REGION_DEFAULT)); + mDayCyclePresetsCombo->add(LLTrans::getString("QP_WL_None"), LLSD(PRESET_NAME_NONE)); + mDayCyclePresetsCombo->addSeparator(); + + // Add user presets. + for (LLDayCycleManager::preset_name_list_t::const_iterator it = user_presets.begin(); it != user_presets.end(); ++it) + { + std::string preset_name = *it; + if (!preset_name.empty()) + { + mDayCyclePresetsCombo->add(preset_name, LLSD(preset_name)); + } + } + + if (!user_presets.empty() && !sys_presets.empty()) + { + mDayCyclePresetsCombo->addSeparator(); + } + + // Add system presets. + for (LLDayCycleManager::preset_name_list_t::const_iterator it = sys_presets.begin(); it != sys_presets.end(); ++it) + { + std::string preset_name = *it; + if (!preset_name.empty()) + { + mDayCyclePresetsCombo->add(preset_name, LLSD(preset_name)); + } + } +} + +void FloaterQuickPrefs::loadSkyPresets() +{ + LLWLParamManager::preset_name_list_t user_presets, sys_presets, region_presets; + LLWLParamManager::instance().getPresetNames(region_presets, user_presets, sys_presets); + + mWLPresetsCombo->operateOnAll(LLComboBox::OP_DELETE); + mWLPresetsCombo->add(LLTrans::getString("QP_WL_Region_Default"), LLSD(PRESET_NAME_REGION_DEFAULT)); + mWLPresetsCombo->add(LLTrans::getString("QP_WL_Day_Cycle_Based"), LLSD(PRESET_NAME_SKY_DAY_CYCLE)); + mWLPresetsCombo->addSeparator(); + + // Add user presets. + for (LLWLParamManager::preset_name_list_t::const_iterator it = user_presets.begin(); it != user_presets.end(); ++it) + { + std::string preset_name = *it; + if (!preset_name.empty()) + { + mWLPresetsCombo->add(preset_name, LLSD(preset_name)); + } + } + + if (!user_presets.empty() && !sys_presets.empty()) + { + mWLPresetsCombo->addSeparator(); + } + + // Add system presets. + for (LLWLParamManager::preset_name_list_t::const_iterator it = sys_presets.begin(); it != sys_presets.end(); ++it) + { + std::string preset_name = *it; + if (!preset_name.empty()) + { + mWLPresetsCombo->add(preset_name, LLSD(preset_name)); + } + } +} + +void FloaterQuickPrefs::loadWaterPresets() +{ + std::list user_presets, system_presets; + LLWaterParamManager::instance().getPresetNames(user_presets, system_presets); + + mWaterPresetsCombo->operateOnAll(LLComboBox::OP_DELETE); + mWaterPresetsCombo->add(LLTrans::getString("QP_WL_Region_Default"), LLSD(PRESET_NAME_REGION_DEFAULT)); + mWaterPresetsCombo->addSeparator(); + + // Add user presets first. + for (std::list::const_iterator mIt = user_presets.begin(); mIt != user_presets.end(); ++mIt) + { + std::string preset_name = *mIt; + if (!preset_name.empty()) + { + mWaterPresetsCombo->add(preset_name, LLSD(preset_name)); + } + } + + if (!user_presets.empty() && !system_presets.empty()) + { + mWaterPresetsCombo->addSeparator(); + } + + // Add system presets. + for (std::list::const_iterator mIt = system_presets.begin(); mIt != system_presets.end(); ++mIt) + { + std::string preset_name = *mIt; + if (!preset_name.empty()) + { + mWaterPresetsCombo->add(preset_name, LLSD(preset_name)); + } + } } void FloaterQuickPrefs::loadPresets() { - // WL Water combo box - { - std::list user_presets, system_presets; - LLWaterParamManager::instance().getPresetNames(user_presets, system_presets); - - mWaterPresetsCombo->add(LLTrans::getString("QP_WL_Region_Default"), LLSD(PRESET_NAME_REGION_DEFAULT)); - mWaterPresetsCombo->addSeparator(); - - // Add user presets first. - for (std::list::const_iterator mIt = user_presets.begin(); mIt != user_presets.end(); ++mIt) - { - std::string preset_name = *mIt; - if (!preset_name.empty()) - { - mWaterPresetsCombo->add(preset_name, LLSD(preset_name)); - } - } - - if (!user_presets.empty() && !system_presets.empty()) - { - mWaterPresetsCombo->addSeparator(); - } - - // Add system presets. - for (std::list::const_iterator mIt = system_presets.begin(); mIt != system_presets.end(); ++mIt) - { - std::string preset_name = *mIt; - if (!preset_name.empty()) - { - mWaterPresetsCombo->add(preset_name, LLSD(preset_name)); - } - } - } - - // WL Sky combo box - { - LLWLParamManager::preset_name_list_t user_presets, sys_presets, region_presets; - LLWLParamManager::instance().getPresetNames(region_presets, user_presets, sys_presets); - - mWLPresetsCombo->add(LLTrans::getString("QP_WL_Region_Default"), LLSD(PRESET_NAME_REGION_DEFAULT)); - mWLPresetsCombo->add(LLTrans::getString("QP_WL_Day_Cycle_Based"), LLSD(PRESET_NAME_SKY_DAY_CYCLE)); - mWLPresetsCombo->addSeparator(); - - // Add user presets. - for (LLWLParamManager::preset_name_list_t::const_iterator it = user_presets.begin(); it != user_presets.end(); ++it) - { - std::string preset_name = *it; - if (!preset_name.empty()) - { - mWLPresetsCombo->add(preset_name, LLSD(preset_name)); - } - } - - if (!user_presets.empty() && !sys_presets.empty()) - { - mWLPresetsCombo->addSeparator(); - } - - // Add system presets. - for (LLWLParamManager::preset_name_list_t::const_iterator it = sys_presets.begin(); it != sys_presets.end(); ++it) - { - std::string preset_name = *it; - if (!preset_name.empty()) - { - mWLPresetsCombo->add(preset_name, LLSD(preset_name)); - } - } - } - - // WL Day Cycle combo box - { - LLDayCycleManager::preset_name_list_t user_presets, sys_presets; - LLDayCycleManager::instance().getPresetNames(user_presets, sys_presets); - - mDayCyclePresetsCombo->add(LLTrans::getString("QP_WL_Region_Default"), LLSD(PRESET_NAME_REGION_DEFAULT)); - mDayCyclePresetsCombo->add(LLTrans::getString("QP_WL_None"), LLSD(PRESET_NAME_NONE)); - mDayCyclePresetsCombo->addSeparator(); - - // Add user presets. - for (LLDayCycleManager::preset_name_list_t::const_iterator it = user_presets.begin(); it != user_presets.end(); ++it) - { - std::string preset_name = *it; - if (!preset_name.empty()) - { - mDayCyclePresetsCombo->add(preset_name, LLSD(preset_name)); - } - } - - if (!user_presets.empty() && !sys_presets.empty()) - { - mDayCyclePresetsCombo->addSeparator(); - } - - // Add system presets. - for (LLDayCycleManager::preset_name_list_t::const_iterator it = sys_presets.begin(); it != sys_presets.end(); ++it) - { - std::string preset_name = *it; - if (!preset_name.empty()) - { - mDayCyclePresetsCombo->add(preset_name, LLSD(preset_name)); - } - } - } + loadWaterPresets(); + loadSkyPresets(); + loadDayCyclePresets(); } BOOL FloaterQuickPrefs::postBuild() @@ -766,7 +777,7 @@ void FloaterQuickPrefs::onClickResetToRegionDefault() // This method is invoked by LLEnvManagerNew when a particular preset is applied // static -void FloaterQuickPrefs::updateParam(EQuickPrefUpdateParam param, const LLSD& value) +void FloaterQuickPrefs::updateParam(EQuickPrefUpdateParam param, const std::string& preset_name) { FloaterQuickPrefs* qp_floater = LLFloaterReg::getTypedInstance("quickprefs"); FloaterQuickPrefs* pt_floater = LLFloaterReg::getTypedInstance(PHOTOTOOLS_FLOATER); @@ -774,22 +785,53 @@ void FloaterQuickPrefs::updateParam(EQuickPrefUpdateParam param, const LLSD& val switch (param) { case QP_PARAM_SKY: - qp_floater->setSelectedSky(value.asString()); - pt_floater->setSelectedSky(value.asString()); + qp_floater->setSelectedSky(preset_name); + pt_floater->setSelectedSky(preset_name); break; case QP_PARAM_WATER: - qp_floater->setSelectedWater(value.asString()); - pt_floater->setSelectedWater(value.asString()); + qp_floater->setSelectedWater(preset_name); + pt_floater->setSelectedWater(preset_name); break; case QP_PARAM_DAYCYCLE: - qp_floater->setSelectedDayCycle(value.asString()); - pt_floater->setSelectedDayCycle(value.asString()); + qp_floater->setSelectedDayCycle(preset_name); + pt_floater->setSelectedDayCycle(preset_name); break; default: break; } } +// static +void FloaterQuickPrefs::reloadPresetsAndSelect(EQuickPrefUpdateParam param) +{ + FloaterQuickPrefs* qp_floater = LLFloaterReg::getTypedInstance("quickprefs"); + FloaterQuickPrefs* pt_floater = LLFloaterReg::getTypedInstance(PHOTOTOOLS_FLOATER); + + std::string preset_name; + + switch (param) + { + case QP_PARAM_SKY: + qp_floater->loadSkyPresets(); + pt_floater->loadSkyPresets(); + preset_name = LLEnvManagerNew::instance().getSkyPresetName(); + break; + case QP_PARAM_WATER: + qp_floater->loadWaterPresets(); + pt_floater->loadWaterPresets(); + preset_name = LLEnvManagerNew::instance().getWaterPresetName(); + break; + case QP_PARAM_DAYCYCLE: + qp_floater->loadDayCyclePresets(); + pt_floater->loadDayCyclePresets(); + preset_name = LLEnvManagerNew::instance().getDayCycleName(); + break; + default: + break; + } + + updateParam(param, preset_name); +} void FloaterQuickPrefs::setSelectedSky(const std::string& preset_name) { diff --git a/indra/newview/quickprefs.h b/indra/newview/quickprefs.h index d1343d4d6a..9ab8539ded 100644 --- a/indra/newview/quickprefs.h +++ b/indra/newview/quickprefs.h @@ -78,6 +78,9 @@ private: void initCallbacks(); void loadPresets(); + void loadDayCyclePresets(); + void loadSkyPresets(); + void loadWaterPresets(); void onChangeUseRegionWindlight(); void onChangeWaterPreset(); @@ -101,8 +104,8 @@ public: /*virtual*/ void draw(); virtual void onOpen(const LLSD& key); - - static void updateParam(EQuickPrefUpdateParam param, const LLSD& value); + static void updateParam(EQuickPrefUpdateParam param, const std::string& preset_name); + static void reloadPresetsAndSelect(EQuickPrefUpdateParam param); void setSelectedSky(const std::string& preset_name); void setSelectedWater(const std::string& preset_name); void setSelectedDayCycle(const std::string& preset_name);