FIRE-19422: Newly created Windlight presets don't appear in Quickprefs until relog

meow-7.2.2
Ansariel 2016-06-06 11:56:15 +02:00
parent b9e0662cb5
commit 67b2092cc2
3 changed files with 165 additions and 120 deletions

View File

@ -187,7 +187,7 @@ bool LLEnvManagerNew::useRegionSettings()
bool LLEnvManagerNew::useWaterPreset(const std::string& name)
{
// <FS:Ansariel> 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 /*=
}
// <FS:Ansariel> 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();
// <FS:Ansariel> 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
}
// <FS:Ansariel> 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();
// <FS:Ansariel> 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;
// <FS:Ansariel> 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)
// <FS:Ansariel> Quickprefs integration
else
{
FloaterQuickPrefs::updateParam(QP_PARAM_WATER, LLSD(water));
FloaterQuickPrefs::updateParam(QP_PARAM_WATER, water);
}
// </FS:Ansariel> Quickprefs integration
@ -675,7 +675,7 @@ bool LLEnvManagerNew::useRegionSky()
// *TODO: Support fixed sky from region.
// <FS:Ansariel> 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;

View File

@ -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<std::string> 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<std::string>::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<std::string>::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<std::string> 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<std::string>::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<std::string>::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<FloaterQuickPrefs>("quickprefs");
FloaterQuickPrefs* pt_floater = LLFloaterReg::getTypedInstance<FloaterQuickPrefs>(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<FloaterQuickPrefs>("quickprefs");
FloaterQuickPrefs* pt_floater = LLFloaterReg::getTypedInstance<FloaterQuickPrefs>(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)
{

View File

@ -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);