summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llfloatereditextdaycycle.cpp1456
-rw-r--r--indra/newview/llfloatereditextdaycycle.h146
-rw-r--r--indra/newview/llfloaterregioninfo.cpp7
-rw-r--r--indra/newview/llfloaterregioninfo.h61
-rw-r--r--indra/newview/llpanelenvironment.cpp27
-rw-r--r--indra/newview/llpanelenvironment.h3
-rw-r--r--indra/newview/llsettingsvo.cpp109
-rw-r--r--indra/newview/llviewerfloaterreg.cpp2
-rw-r--r--indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml611
-rw-r--r--indra/newview/skins/default/xui/en/floater_test_layout_stacks.xml353
10 files changed, 1202 insertions, 1573 deletions
diff --git a/indra/newview/llfloatereditextdaycycle.cpp b/indra/newview/llfloatereditextdaycycle.cpp
index c62ef85b02..76c275e47c 100644
--- a/indra/newview/llfloatereditextdaycycle.cpp
+++ b/indra/newview/llfloatereditextdaycycle.cpp
@@ -47,129 +47,180 @@
#include "llenvironment.h"
#include "lltrans.h"
-const F32 LLFloaterEditExtDayCycle::sHoursPerDay = 24.0f;
-
-LLFloaterEditExtDayCycle::LLFloaterEditExtDayCycle(const LLSD &key)
-: LLFloater(key)
-, mDayCycleNameEditor(NULL)
-, mDayCyclesCombo(NULL)
-, mTimeSlider(NULL)
-, mKeysSlider(NULL)
-, mSkyPresetsCombo(NULL)
-, mTimeCtrl(NULL)
-, mMakeDefaultCheckBox(NULL)
-, mSaveButton(NULL)
+
+LLFloaterEditExtDayCycle::LLFloaterEditExtDayCycle(const LLSD &key):
+ LLFloater(key),
+ mDayPresetsCombo(NULL),
+ mSaveButton(NULL),
+ mCancelButton(NULL)
+// mDayCyclesCombo(NULL)
+// , mTimeSlider(NULL)
+// , mKeysSlider(NULL)
+// , mTimeCtrl(NULL)
+// , mMakeDefaultCheckBox(NULL)
+// ,
{
}
// virtual
BOOL LLFloaterEditExtDayCycle::postBuild()
{
- mDayCycleNameEditor = getChild<LLLineEditor>("day_cycle_name");
- mDayCyclesCombo = getChild<LLComboBox>("day_cycle_combo");
+// mDayCyclesCombo = getChild<LLComboBox>("day_cycle_preset_combo");
+
+// mTimeSlider = getChild<LLMultiSliderCtrl>("WLTimeSlider");
+// mKeysSlider = getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
+ mDayPresetsCombo = getChild<LLComboBox>("day_cycle_preset_combo");
+// mTimeCtrl = getChild<LLTimeCtrl>("time");
+ mSaveButton = getChild<LLButton>("save_btn");
+ mCancelButton = getChild<LLButton>("cancel_btn");
+// mMakeDefaultCheckBox = getChild<LLCheckBoxCtrl>("make_default_cb");
- mTimeSlider = getChild<LLMultiSliderCtrl>("WLTimeSlider");
- mKeysSlider = getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
- mSkyPresetsCombo = getChild<LLComboBox>("WLSkyPresets");
- mTimeCtrl = getChild<LLTimeCtrl>("time");
- mSaveButton = getChild<LLButton>("save");
- mMakeDefaultCheckBox = getChild<LLCheckBoxCtrl>("make_default_cb");
- initCallbacks();
+ mDayPresetsCombo->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onDayPresetChanged, this));
+ mSaveButton->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onBtnSave, this));
+ mCancelButton->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onBtnCancel, this));
- // add the time slider
- mTimeSlider->addSlider();
+ //initCallbacks();
+
+// // add the time slider
+// mTimeSlider->addSlider();
return TRUE;
}
-// virtual
void LLFloaterEditExtDayCycle::onOpen(const LLSD& key)
{
- bool new_day = isNewDay();
- std::string param = key.asString();
- std::string floater_title = getString(std::string("title_") + param);
- std::string hint = getString(std::string("hint_" + param));
-
- // Update floater title.
- setTitle(floater_title);
-
- // Update the hint at the top.
- getChild<LLUICtrl>("hint")->setValue(hint);
-
- // Hide the hint to the right of the combo if we're invoked to create a new preset.
- getChildView("note")->setVisible(!new_day);
-
- // Switch between the day cycle presets combobox and day cycle name input field.
- mDayCyclesCombo->setVisible(!new_day);
- mDayCycleNameEditor->setVisible(new_day);
-
- // TODO: Make sure only one instance of the floater exists?
-
- reset();
+ refreshSkyPresetsList();
}
-// virtual
void LLFloaterEditExtDayCycle::onClose(bool app_quitting)
{
if (!app_quitting) // there's no point to change environment if we're quitting
{
+ /* TODO: don't restore this environment. We may have gotten here from land or region. */
LLEnvironment::instance().applyChosenEnvironment();
}
}
-// virtual
-void LLFloaterEditExtDayCycle::draw()
+void LLFloaterEditExtDayCycle::onVisibilityChange(BOOL new_visibility)
{
- syncTimeSlider();
- LLFloater::draw();
+ if (new_visibility)
+ {
+ LLEnvironment::instance().selectDayCycle(mEditDay, LLEnvironment::TRANSITION_FAST);
+ }
+ else
+ {
+ /* TODO: don't restore this environment. We may have gotten here from land or region. */
+ LLEnvironment::instance().applyChosenEnvironment();
+ }
}
-void LLFloaterEditExtDayCycle::initCallbacks(void)
+//-------------------------------------------------------------------------
+void LLFloaterEditExtDayCycle::onDayPresetChanged()
{
-#if 0
- mDayCycleNameEditor->setKeystrokeCallback(boost::bind(&LLFloaterEditExtDayCycle::onDayCycleNameEdited, this), NULL);
- mDayCyclesCombo->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onDayCycleSelected, this));
- mDayCyclesCombo->setTextEntryCallback(boost::bind(&LLFloaterEditExtDayCycle::onDayCycleNameEdited, this));
- mTimeSlider->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onTimeSliderMoved, this));
- mKeysSlider->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onKeyTimeMoved, this));
- mTimeCtrl->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onKeyTimeChanged, this));
- mSkyPresetsCombo->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onKeyPresetChanged, this));
-
- getChild<LLButton>("WLAddKey")->setClickedCallback(boost::bind(&LLFloaterEditExtDayCycle::onAddKey, this));
- getChild<LLButton>("WLDeleteKey")->setClickedCallback(boost::bind(&LLFloaterEditExtDayCycle::onDeleteKey, this));
-
- mSaveButton->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onBtnSave, this));
- mSaveButton->setRightMouseDownCallback(boost::bind(&LLFloaterEditExtDayCycle::dumpTrack, this));
- getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onBtnCancel, this));
-
- // Connect to env manager events.
- LLEnvManagerNew& env_mgr = LLEnvManagerNew::instance();
- env_mgr.setRegionSettingsChangeCallback(boost::bind(&LLFloaterEditExtDayCycle::onRegionSettingsChange, this));
- gAgent.addRegionChangedCallback(boost::bind(&LLFloaterEditExtDayCycle::onRegionChange, this));
- env_mgr.setRegionSettingsAppliedCallback(boost::bind(&LLFloaterEditExtDayCycle::onRegionSettingsApplied, this, _1));
- // Connect to day cycle manager events.
- LLDayCycleManager::instance().setModifyCallback(boost::bind(&LLFloaterEditExtDayCycle::onDayCycleListChange, this));
-
- // Connect to sky preset list changes.
- LLWLParamManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterEditExtDayCycle::onSkyPresetListChange, this));
-
-
- // Connect to region info updates.
- LLRegionInfoModel::instance().setUpdateCallback(boost::bind(&LLFloaterEditExtDayCycle::onRegionInfoUpdate, this));
-#endif
+ std::string dayname = mDayPresetsCombo->getSelectedValue().asString();
+
+ LLSettingsDay::ptr_t pday = LLEnvironment::instance().findDayCycleByName(dayname);
+
+ if (pday)
+ {
+ pday = pday->buildClone();
+ LLEnvironment::instance().selectDayCycle(pday, LLEnvironment::TRANSITION_INSTANT);
+ mEditDay = pday;
+ }
+
}
-void LLFloaterEditExtDayCycle::syncTimeSlider()
+void LLFloaterEditExtDayCycle::onBtnSave()
+{
+ if (!mCommitSignal.empty())
+ mCommitSignal(mEditDay);
+ closeFloater();
+}
+
+void LLFloaterEditExtDayCycle::onBtnCancel()
{
-#if 0
- // set time
- mTimeSlider->setCurSliderValue((F32)LLWLParamManager::getInstance()->mAnimator.getDayTime() * sHoursPerDay);
-#endif
+ closeFloater();
}
-void LLFloaterEditExtDayCycle::loadTrack()
+
+//-------------------------------------------------------------------------
+void LLFloaterEditExtDayCycle::refreshSkyPresetsList()
{
+ mDayPresetsCombo->removeall();
+
+ LLEnvironment::list_name_id_t cyclelist = LLEnvironment::instance().getDayCycleList();
+
+ mDayPresetsCombo->removeall();
+
+
+ for (LLEnvironment::list_name_id_t::iterator it = cyclelist.begin(); it != cyclelist.end(); ++it)
+ {
+ mDayPresetsCombo->add((*it).first);
+ }
+
+ // set defaults on combo boxes
+ mDayPresetsCombo->selectFirstItem();
+}
+
+LLFloaterEditExtDayCycle::connection_t LLFloaterEditExtDayCycle::setEditCommitSignal(LLFloaterEditExtDayCycle::edit_commit_signal_t::slot_type cb)
+{
+ return mCommitSignal.connect(cb);
+}
+
+//
+// virtual
+// void LLFloaterEditExtDayCycle::draw()
+// {
+// syncTimeSlider();
+// LLFloater::draw();
+// }
+//
+// void LLFloaterEditExtDayCycle::initCallbacks(void)
+// {
+// #if 0
+// mDayCycleNameEditor->setKeystrokeCallback(boost::bind(&LLFloaterEditExtDayCycle::onDayCycleNameEdited, this), NULL);
+// mDayCyclesCombo->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onDayCycleSelected, this));
+// mDayCyclesCombo->setTextEntryCallback(boost::bind(&LLFloaterEditExtDayCycle::onDayCycleNameEdited, this));
+// mTimeSlider->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onTimeSliderMoved, this));
+// mKeysSlider->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onKeyTimeMoved, this));
+// mTimeCtrl->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onKeyTimeChanged, this));
+// mSkyPresetsCombo->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onKeyPresetChanged, this));
+//
+// getChild<LLButton>("WLAddKey")->setClickedCallback(boost::bind(&LLFloaterEditExtDayCycle::onAddKey, this));
+// getChild<LLButton>("WLDeleteKey")->setClickedCallback(boost::bind(&LLFloaterEditExtDayCycle::onDeleteKey, this));
+//
+// mSaveButton->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onBtnSave, this));
+// mSaveButton->setRightMouseDownCallback(boost::bind(&LLFloaterEditExtDayCycle::dumpTrack, this));
+// getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onBtnCancel, this));
+//
+// // Connect to env manager events.
+// LLEnvManagerNew& env_mgr = LLEnvManagerNew::instance();
+// env_mgr.setRegionSettingsChangeCallback(boost::bind(&LLFloaterEditExtDayCycle::onRegionSettingsChange, this));
+// gAgent.addRegionChangedCallback(boost::bind(&LLFloaterEditExtDayCycle::onRegionChange, this));
+// env_mgr.setRegionSettingsAppliedCallback(boost::bind(&LLFloaterEditExtDayCycle::onRegionSettingsApplied, this, _1));
+// // Connect to day cycle manager events.
+// LLDayCycleManager::instance().setModifyCallback(boost::bind(&LLFloaterEditExtDayCycle::onDayCycleListChange, this));
+//
+// // Connect to sky preset list changes.
+// LLWLParamManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterEditExtDayCycle::onSkyPresetListChange, this));
+//
+//
+// // Connect to region info updates.
+// LLRegionInfoModel::instance().setUpdateCallback(boost::bind(&LLFloaterEditExtDayCycle::onRegionInfoUpdate, this));
+// #endif
+// }
+//
+// void LLFloaterEditExtDayCycle::syncTimeSlider()
+// {
+// #if 0
+// // set time
+// mTimeSlider->setCurSliderValue((F32)LLWLParamManager::getInstance()->mAnimator.getDayTime() * sHoursPerDay);
+// #endif
+// }
+//
+// void LLFloaterEditExtDayCycle::loadTrack()
+// {
// // clear the slider
// mKeysSlider->clear();
// mSliderToKey.clear();
@@ -192,681 +243,556 @@ void LLFloaterEditExtDayCycle::loadTrack()
// }
//
// syncTimeSlider();
-}
-
-void LLFloaterEditExtDayCycle::applyTrack()
-{
-#if 0
- LL_DEBUGS() << "Applying track (" << mSliderToKey.size() << ")" << LL_ENDL;
-
- // if no keys, do nothing
- if (mSliderToKey.size() == 0)
- {
- LL_DEBUGS() << "No keys, not syncing" << LL_ENDL;
- return;
- }
-
- llassert_always(mSliderToKey.size() == mKeysSlider->getValue().size());
-
- // create a new animation track
- LLWLParamManager::getInstance()->mDay.clearKeyframes();
-
- // add the keys one by one
- for (std::map<std::string, SliderKey>::iterator it = mSliderToKey.begin();
- it != mSliderToKey.end(); ++it)
- {
- LLWLParamManager::getInstance()->mDay.addKeyframe(it->second.time / sHoursPerDay,
- it->second.keyframe);
- }
-
- // set the param manager's track to the new one
- LLWLParamManager::getInstance()->resetAnimator(
- mTimeSlider->getCurSliderValue() / sHoursPerDay, false);
-
- LLWLParamManager::getInstance()->mAnimator.update(
- LLWLParamManager::getInstance()->mCurParams);
-#endif
-}
-
-void LLFloaterEditExtDayCycle::refreshSkyPresetsList()
-{
-#if 0
- // Don't allow selecting region skies for a local day cycle,
- // because thus we may end up with invalid day cycle.
- bool include_region_skies = getSelectedDayCycle().scope == LLEnvKey::SCOPE_REGION;
-
- mSkyPresetsCombo->removeall();
-
- LLWLParamManager::preset_name_list_t region_presets;
- LLWLParamManager::preset_name_list_t user_presets, sys_presets;
- LLWLParamManager::instance().getPresetNames(region_presets, user_presets, sys_presets);
-
- if (include_region_skies)
- {
- // Add region presets.
- for (LLWLParamManager::preset_name_list_t::const_iterator it = region_presets.begin(); it != region_presets.end(); ++it)
- {
- std::string preset_name = *it;
- std::string item_title = preset_name + " (" + getRegionName() + ")";
- mSkyPresetsCombo->add(preset_name, LLWLParamKey(*it, LLEnvKey::SCOPE_REGION).toStringVal());
- }
-
- if (!region_presets.empty())
- {
- mSkyPresetsCombo->addSeparator();
- }
- }
-
- // Add user presets.
- for (LLWLParamManager::preset_name_list_t::const_iterator it = user_presets.begin(); it != user_presets.end(); ++it)
- {
- mSkyPresetsCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toStringVal());
- }
-
- if (!user_presets.empty())
- {
- mSkyPresetsCombo->addSeparator();
- }
-
- // Add system presets.
- for (LLWLParamManager::preset_name_list_t::const_iterator it = sys_presets.begin(); it != sys_presets.end(); ++it)
- {
- mSkyPresetsCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toStringVal());
- }
-
- // set defaults on combo boxes
- mSkyPresetsCombo->selectFirstItem();
-#endif
-}
-
-void LLFloaterEditExtDayCycle::refreshDayCyclesList()
-{
-#if 0
- llassert(isNewDay() == false);
-
- mDayCyclesCombo->removeall();
-
-#if 0 // Disable editing existing day cycle until the workflow is clear enough.
- const LLSD& region_day = LLEnvManagerNew::instance().getRegionSettings().getWLDayCycle();
- if (region_day.size() > 0)
- {
- LLWLParamKey key(getRegionName(), LLEnvKey::SCOPE_REGION);
- mDayCyclesCombo->add(key.name, key.toLLSD());
- mDayCyclesCombo->addSeparator();
- }
-#endif
-
- LLDayCycleManager::preset_name_list_t user_days, sys_days;
- LLDayCycleManager::instance().getPresetNames(user_days, sys_days);
-
- // Add user days.
- for (LLDayCycleManager::preset_name_list_t::const_iterator it = user_days.begin(); it != user_days.end(); ++it)
- {
- mDayCyclesCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toLLSD());
- }
-
- if (user_days.size() > 0)
- {
- mDayCyclesCombo->addSeparator();
- }
-
- // Add system days.
- for (LLDayCycleManager::preset_name_list_t::const_iterator it = sys_days.begin(); it != sys_days.end(); ++it)
- {
- mDayCyclesCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toLLSD());
- }
-
- mDayCyclesCombo->setLabel(getString("combo_label"));
-#endif
-}
-
-void LLFloaterEditExtDayCycle::onTimeSliderMoved()
-{
-#if 0
- /// get the slider value
- F32 val = mTimeSlider->getCurSliderValue() / sHoursPerDay;
-
- // set the value, turn off animation
- LLWLParamManager::getInstance()->mAnimator.setDayTime((F64)val);
- LLWLParamManager::getInstance()->mAnimator.deactivate();
-
- // then call update once
- LLWLParamManager::getInstance()->mAnimator.update(
- LLWLParamManager::getInstance()->mCurParams);
-#endif
-}
-
-void LLFloaterEditExtDayCycle::onKeyTimeMoved()
-{
-#if 0
- if (mKeysSlider->getValue().size() == 0)
- {
- return;
- }
-
- // make sure we have a slider
- const std::string& cur_sldr = mKeysSlider->getCurSlider();
- if (cur_sldr == "")
- {
- return;
- }
-
- F32 time24 = mKeysSlider->getCurSliderValue();
-
- // check to see if a key exists
- LLWLParamKey key = mSliderToKey[cur_sldr].keyframe;
- LL_DEBUGS() << "Setting key time: " << time24 << LL_ENDL;
- mSliderToKey[cur_sldr].time = time24;
-
- // if it exists, turn on check box
- mSkyPresetsCombo->selectByValue(key.toStringVal());
-
- mTimeCtrl->setTime24(time24);
-
- applyTrack();
-#endif
-}
-
-void LLFloaterEditExtDayCycle::onKeyTimeChanged()
-{
-#if 0
- // if no keys, skipped
- if (mSliderToKey.size() == 0)
- {
- return;
- }
-
- F32 time24 = mTimeCtrl->getTime24();
-
- const std::string& cur_sldr = mKeysSlider->getCurSlider();
- mKeysSlider->setCurSliderValue(time24, TRUE);
- F32 time = mKeysSlider->getCurSliderValue() / sHoursPerDay;
-
- // now set the key's time in the sliderToKey map
- LL_DEBUGS() << "Setting key time: " << time << LL_ENDL;
- mSliderToKey[cur_sldr].time = time;
-
- applyTrack();
-#endif
-}
-
-void LLFloaterEditExtDayCycle::onKeyPresetChanged()
-{
-#if 0
- // do nothing if no sliders
- if (mKeysSlider->getValue().size() == 0)
- {
- return;
- }
-
- // change the map
-
- std::string stringVal = mSkyPresetsCombo->getSelectedValue().asString();
- LLWLParamKey new_key(stringVal);
- llassert(!new_key.name.empty());
- const std::string& cur_sldr = mKeysSlider->getCurSlider();
-
- // if null, don't use
- if (cur_sldr == "")
- {
- return;
- }
-
- mSliderToKey[cur_sldr].keyframe = new_key;
-
- // Apply changes to current day cycle.
- applyTrack();
-#endif
-}
-
-void LLFloaterEditExtDayCycle::onAddKey()
-{
-#if 0
- llassert_always(mSliderToKey.size() == mKeysSlider->getValue().size());
-
- S32 max_sliders;
- LLEnvKey::EScope scope = LLEnvKey::SCOPE_LOCAL; // *TODO: editing region day cycle
- switch (scope)
- {
- case LLEnvKey::SCOPE_LOCAL:
- max_sliders = 20; // *HACK this should be LLWLPacketScrubber::MAX_LOCAL_KEY_FRAMES;
- break;
- case LLEnvKey::SCOPE_REGION:
- max_sliders = 12; // *HACK this should be LLWLPacketScrubber::MAX_REGION_KEY_FRAMES;
- break;
- default:
- max_sliders = (S32) mKeysSlider->getMaxValue();
- break;
- }
-
-#if 0
- if ((S32)mSliderToKey.size() >= max_sliders)
- {
- LLSD args;
- args["SCOPE"] = LLEnvManagerNew::getScopeString(scope);
- args["MAX"] = max_sliders;
- LLNotificationsUtil::add("DayCycleTooManyKeyframes", args, LLSD(), LLNotificationFunctorRegistry::instance().DONOTHING);
- return;
- }
-#endif
-
- // add the slider key
- std::string key_val = mSkyPresetsCombo->getSelectedValue().asString();
- LLWLParamKey sky_params(key_val);
- llassert(!sky_params.name.empty());
-
- F32 time = mTimeSlider->getCurSliderValue();
- addSliderKey(time, sky_params);
-
- // apply the change to current day cycles
- applyTrack();
-#endif
-}
-
-#if 0
-void LLFloaterEditExtDayCycle::addSliderKey(F32 time, LLWLParamKey keyframe)
-{
- // make a slider
- const std::string& sldr_name = mKeysSlider->addSlider(time);
- if (sldr_name.empty())
- {
- return;
- }
-
- // set the key
- SliderKey newKey(keyframe, mKeysSlider->getCurSliderValue());
-
- llassert_always(sldr_name != LLStringUtil::null);
-
- // add to map
- mSliderToKey.insert(std::pair<std::string, SliderKey>(sldr_name, newKey));
-
- llassert_always(mSliderToKey.size() == mKeysSlider->getValue().size());
-}
-#endif
-
-#if 0
-LLWLParamKey LLFloaterEditExtDayCycle::getSelectedDayCycle()
-{
- LLWLParamKey dc_key;
-
- if (mDayCycleNameEditor->getVisible())
- {
- dc_key.name = mDayCycleNameEditor->getText();
- dc_key.scope = LLEnvKey::SCOPE_LOCAL;
- }
- else
- {
- LLSD combo_val = mDayCyclesCombo->getValue();
-
- if (!combo_val.isArray()) // manually typed text
- {
- dc_key.name = combo_val.asString();
- dc_key.scope = LLEnvKey::SCOPE_LOCAL;
- }
- else
- {
- dc_key.fromLLSD(combo_val);
- }
- }
-
- return dc_key;
-}
-#endif
-
-bool LLFloaterEditExtDayCycle::isNewDay() const
-{
- return mKey.asString() == "new";
-}
-
-void LLFloaterEditExtDayCycle::dumpTrack()
-{
-#if 0
- LL_DEBUGS("Windlight") << "Dumping day cycle" << LL_ENDL;
-
- LLWLDayCycle& cur_dayp = LLWLParamManager::instance().mDay;
- for (std::map<F32, LLWLParamKey>::iterator it = cur_dayp.mTimeMap.begin(); it != cur_dayp.mTimeMap.end(); ++it)
- {
- F32 time = it->first * 24.0f;
- S32 h = (S32) time;
- S32 m = (S32) ((time - h) * 60.0f);
- LL_DEBUGS("Windlight") << llformat("(%.3f) %02d:%02d", time, h, m) << " => " << it->second.name << LL_ENDL;
- }
-#endif
-}
-
-void LLFloaterEditExtDayCycle::enableEditing(bool enable)
-{
- mSkyPresetsCombo->setEnabled(enable);
- mTimeCtrl->setEnabled(enable);
- getChild<LLPanel>("day_cycle_slider_panel")->setCtrlsEnabled(enable);
- mSaveButton->setEnabled(enable);
- mMakeDefaultCheckBox->setEnabled(enable);
-}
-
-void LLFloaterEditExtDayCycle::reset()
-{
-#if 0
- // clear the slider
- mKeysSlider->clear();
- mSliderToKey.clear();
-
- refreshSkyPresetsList();
-
- if (isNewDay())
- {
- mDayCycleNameEditor->setValue(LLSD());
- F32 time = 0.5f * sHoursPerDay;
- mSaveButton->setEnabled(FALSE); // will be enabled as soon as users enters a name
- mTimeSlider->setCurSliderValue(time);
-
- addSliderKey(time, LLWLParamKey("Default", LLEnvKey::SCOPE_LOCAL));
- onKeyTimeMoved(); // update the time control and sky sky combo
-
- applyTrack();
- }
- else
- {
- refreshDayCyclesList();
-
- // Disable controls until a day cycle to edit is selected.
- enableEditing(false);
- }
-#endif
-}
-
-void LLFloaterEditExtDayCycle::saveRegionDayCycle()
-{
-#if 0
- LLEnvManagerNew& env_mgr = LLEnvManagerNew::instance();
- LLWLDayCycle& cur_dayp = LLWLParamManager::instance().mDay; // the day cycle being edited
-
- // Get current day cycle and the sky preset it references.
- LLSD day_cycle = cur_dayp.asLLSD();
- LLSD sky_map;
- cur_dayp.getSkyMap(sky_map);
-
- // Apply it to the region.
- LLEnvironmentSettings new_region_settings;
- new_region_settings.saveParams(day_cycle, sky_map, env_mgr.getRegionSettings().getWaterParams(), 0.0f);
-
-#if 1
- LLEnvManagerNew::instance().setRegionSettings(new_region_settings);
-#else // Temporary disabled ability to upload new region settings from the Day Cycle Editor.
- if (!LLEnvManagerNew::instance().sendRegionSettings(new_region_settings))
- {
- LL_WARNS() << "Error applying region environment settings" << LL_ENDL;
- return;
- }
-
- setApplyProgress(true);
-#endif
-#endif
-}
-
-void LLFloaterEditExtDayCycle::setApplyProgress(bool started)
-{
- LLLoadingIndicator* indicator = getChild<LLLoadingIndicator>("progress_indicator");
-
- indicator->setVisible(started);
-
- if (started)
- {
- indicator->start();
- }
- else
- {
- indicator->stop();
- }
-}
-
-bool LLFloaterEditExtDayCycle::getApplyProgress() const
-{
- return getChild<LLLoadingIndicator>("progress_indicator")->getVisible();
-}
-
-void LLFloaterEditExtDayCycle::onDeleteKey()
-{
-#if 0
- if (mSliderToKey.size() == 0)
- {
- return;
- }
- else if (mSliderToKey.size() == 1)
- {
- LLNotifications::instance().add("EnvCannotDeleteLastDayCycleKey", LLSD(), LLSD());
- return;
- }
-
- // delete from map
- const std::string& sldr_name = mKeysSlider->getCurSlider();
- std::map<std::string, SliderKey>::iterator mIt = mSliderToKey.find(sldr_name);
- mSliderToKey.erase(mIt);
-
- mKeysSlider->deleteCurSlider();
-
- if (mSliderToKey.size() == 0)
- {
- return;
- }
-
- const std::string& name = mKeysSlider->getCurSlider();
- mSkyPresetsCombo->selectByValue(mSliderToKey[name].keyframe.toStringVal());
- F32 time24 = mSliderToKey[name].time;
-
- mTimeCtrl->setTime24(time24);
-
- applyTrack();
-#endif
-}
-
-void LLFloaterEditExtDayCycle::onRegionSettingsChange()
-{
-#if 0
- LL_DEBUGS("Windlight") << "Region settings changed" << LL_ENDL;
-
- if (getApplyProgress()) // our region settings have being applied
- {
- setApplyProgress(false);
-
- // Change preference if requested.
- if (mMakeDefaultCheckBox->getValue())
- {
- LL_DEBUGS("Windlight") << "Changed environment preference to region settings" << LL_ENDL;
- LLEnvManagerNew::instance().setUseRegionSettings(true);
- }
-
- closeFloater();
- }
-#endif
-}
-
-void LLFloaterEditExtDayCycle::onRegionChange()
-{
-#if 0
- LL_DEBUGS("Windlight") << "Region changed" << LL_ENDL;
-
- // If we're editing the region day cycle
- if (getSelectedDayCycle().scope == LLEnvKey::SCOPE_REGION)
- {
- reset(); // undoes all unsaved changes
- }
-#endif
-}
-
-void LLFloaterEditExtDayCycle::onRegionSettingsApplied(bool success)
-{
- LL_DEBUGS("Windlight") << "Region settings applied: " << success << LL_ENDL;
-
- if (!success)
- {
- // stop progress indicator
- setApplyProgress(false);
- }
-}
-
-void LLFloaterEditExtDayCycle::onRegionInfoUpdate()
-{
-#if 0
- LL_DEBUGS("Windlight") << "Region info updated" << LL_ENDL;
- bool can_edit = true;
-
- // If we've selected the region day cycle for editing.
- if (getSelectedDayCycle().scope == LLEnvKey::SCOPE_REGION)
- {
- // check whether we have the access
- can_edit = LLEnvManagerNew::canEditRegionSettings();
- }
-
- enableEditing(can_edit);
-#endif
-}
-
-void LLFloaterEditExtDayCycle::onDayCycleNameEdited()
-{
-#if 0
- // Disable saving a day cycle having empty name.
- LLWLParamKey key = getSelectedDayCycle();
- mSaveButton->setEnabled(!key.name.empty());
-#endif
-}
-
-void LLFloaterEditExtDayCycle::onDayCycleSelected()
-{
-#if 0
-
- LLSD day_data;
- LLWLParamKey dc_key = getSelectedDayCycle();
- bool can_edit = true;
-
- if (dc_key.scope == LLEnvKey::SCOPE_LOCAL)
- {
- if (!LLDayCycleManager::instance().getPreset(dc_key.name, day_data))
- {
- LL_WARNS() << "No day cycle named " << dc_key.name << LL_ENDL;
- return;
- }
- }
- else
- {
- day_data = LLEnvManagerNew::instance().getRegionSettings().getWLDayCycle();
- if (day_data.size() == 0)
- {
- LL_WARNS() << "Empty region day cycle" << LL_ENDL;
- llassert(day_data.size() > 0);
- return;
- }
-
- can_edit = LLEnvManagerNew::canEditRegionSettings();
- }
-
- // We may need to add or remove region skies from the list.
- refreshSkyPresetsList();
-
- F32 slider_time = mTimeSlider->getCurSliderValue() / sHoursPerDay;
- LLWLParamManager::instance().applyDayCycleParams(day_data, dc_key.scope, slider_time);
- loadTrack();
-#endif
- enableEditing(false);
-}
-
-void LLFloaterEditExtDayCycle::onBtnSave()
-{
-#if 0
- LLDayCycleManager& day_mgr = LLDayCycleManager::instance();
- LLWLParamKey selected_day = getSelectedDayCycle();
-
- if (selected_day.scope == LLEnvKey::SCOPE_REGION)
- {
- saveRegionDayCycle();
- closeFloater();
- return;
- }
-
- std::string name = selected_day.name;
- if (name.empty())
- {
- // *TODO: show an alert
- LL_WARNS() << "Empty day cycle name" << LL_ENDL;
- return;
- }
-
- // Don't allow overwriting system presets.
- if (day_mgr.isSystemPreset(name))
- {
- LLNotificationsUtil::add("WLNoEditDefault");
- return;
- }
-
- // Save, ask for confirmation for overwriting an existing preset.
- if (day_mgr.presetExists(name))
- {
- LLNotificationsUtil::add("WLSavePresetAlert", LLSD(), LLSD(), boost::bind(&LLFloaterEditExtDayCycle::onSaveAnswer, this, _1, _2));
- }
- else
- {
- // new preset, hence no confirmation needed
- onSaveConfirmed();
- }
-#endif
-}
-
-void LLFloaterEditExtDayCycle::onBtnCancel()
-{
- closeFloater();
-}
-
-bool LLFloaterEditExtDayCycle::onSaveAnswer(const LLSD& notification, const LLSD& response)
-{
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-
- // If they choose save, do it. Otherwise, don't do anything
- if (option == 0)
- {
- onSaveConfirmed();
- }
-
- return false;
-}
-
-void LLFloaterEditExtDayCycle::onSaveConfirmed()
-{
-#if 0
- std::string name = getSelectedDayCycle().name;
-
- // Save preset.
- LLSD data = LLWLParamManager::instance().mDay.asLLSD();
- LL_DEBUGS("Windlight") << "Saving day cycle " << name << ": " << data << LL_ENDL;
- LLDayCycleManager::instance().savePreset(name, data);
-
- // Change preference if requested.
- if (mMakeDefaultCheckBox->getValue())
- {
- LL_DEBUGS("Windlight") << name << " is now the new preferred day cycle" << LL_ENDL;
- LLEnvManagerNew::instance().setUseDayCycle(name);
- }
-#endif
- closeFloater();
-}
-
-void LLFloaterEditExtDayCycle::onDayCycleListChange()
-{
- if (!isNewDay())
- {
- refreshDayCyclesList();
- }
-}
-
-void LLFloaterEditExtDayCycle::onSkyPresetListChange()
-{
- refreshSkyPresetsList();
-
- // Refresh sliders from the currently visible day cycle.
- loadTrack();
-}
-
+// }
+//
+// void LLFloaterEditExtDayCycle::applyTrack()
+// {
+// #if 0
+// LL_DEBUGS() << "Applying track (" << mSliderToKey.size() << ")" << LL_ENDL;
+//
+// // if no keys, do nothing
+// if (mSliderToKey.size() == 0)
+// {
+// LL_DEBUGS() << "No keys, not syncing" << LL_ENDL;
+// return;
+// }
+//
+// llassert_always(mSliderToKey.size() == mKeysSlider->getValue().size());
+//
+// // create a new animation track
+// LLWLParamManager::getInstance()->mDay.clearKeyframes();
+//
+// // add the keys one by one
+// for (std::map<std::string, SliderKey>::iterator it = mSliderToKey.begin();
+// it != mSliderToKey.end(); ++it)
+// {
+// LLWLParamManager::getInstance()->mDay.addKeyframe(it->second.time / sHoursPerDay,
+// it->second.keyframe);
+// }
+//
+// // set the param manager's track to the new one
+// LLWLParamManager::getInstance()->resetAnimator(
+// mTimeSlider->getCurSliderValue() / sHoursPerDay, false);
+//
+// LLWLParamManager::getInstance()->mAnimator.update(
+// LLWLParamManager::getInstance()->mCurParams);
+// #endif
+// }
+
+// void LLFloaterEditExtDayCycle::refreshDayCyclesList()
+// {
+// #if 0
+// llassert(isNewDay() == false);
+//
+// mDayCyclesCombo->removeall();
+//
+// #if 0 // Disable editing existing day cycle until the workflow is clear enough.
+// const LLSD& region_day = LLEnvManagerNew::instance().getRegionSettings().getWLDayCycle();
+// if (region_day.size() > 0)
+// {
+// LLWLParamKey key(getRegionName(), LLEnvKey::SCOPE_REGION);
+// mDayCyclesCombo->add(key.name, key.toLLSD());
+// mDayCyclesCombo->addSeparator();
+// }
+// #endif
+//
+// LLDayCycleManager::preset_name_list_t user_days, sys_days;
+// LLDayCycleManager::instance().getPresetNames(user_days, sys_days);
+//
+// // Add user days.
+// for (LLDayCycleManager::preset_name_list_t::const_iterator it = user_days.begin(); it != user_days.end(); ++it)
+// {
+// mDayCyclesCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toLLSD());
+// }
+//
+// if (user_days.size() > 0)
+// {
+// mDayCyclesCombo->addSeparator();
+// }
+//
+// // Add system days.
+// for (LLDayCycleManager::preset_name_list_t::const_iterator it = sys_days.begin(); it != sys_days.end(); ++it)
+// {
+// mDayCyclesCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toLLSD());
+// }
+//
+// mDayCyclesCombo->setLabel(getString("combo_label"));
+// #endif
+// }
+//
+// void LLFloaterEditExtDayCycle::onTimeSliderMoved()
+// {
+// #if 0
+// /// get the slider value
+// F32 val = mTimeSlider->getCurSliderValue() / sHoursPerDay;
+//
+// // set the value, turn off animation
+// LLWLParamManager::getInstance()->mAnimator.setDayTime((F64)val);
+// LLWLParamManager::getInstance()->mAnimator.deactivate();
+//
+// // then call update once
+// LLWLParamManager::getInstance()->mAnimator.update(
+// LLWLParamManager::getInstance()->mCurParams);
+// #endif
+// }
+//
+// void LLFloaterEditExtDayCycle::onKeyTimeMoved()
+// {
+// #if 0
+// if (mKeysSlider->getValue().size() == 0)
+// {
+// return;
+// }
+//
+// // make sure we have a slider
+// const std::string& cur_sldr = mKeysSlider->getCurSlider();
+// if (cur_sldr == "")
+// {
+// return;
+// }
+//
+// F32 time24 = mKeysSlider->getCurSliderValue();
+//
+// // check to see if a key exists
+// LLWLParamKey key = mSliderToKey[cur_sldr].keyframe;
+// LL_DEBUGS() << "Setting key time: " << time24 << LL_ENDL;
+// mSliderToKey[cur_sldr].time = time24;
+//
+// // if it exists, turn on check box
+// mSkyPresetsCombo->selectByValue(key.toStringVal());
+//
+// mTimeCtrl->setTime24(time24);
+//
+// applyTrack();
+// #endif
+// }
+//
+// void LLFloaterEditExtDayCycle::onKeyTimeChanged()
+// {
+// #if 0
+// // if no keys, skipped
+// if (mSliderToKey.size() == 0)
+// {
+// return;
+// }
+//
+// F32 time24 = mTimeCtrl->getTime24();
+//
+// const std::string& cur_sldr = mKeysSlider->getCurSlider();
+// mKeysSlider->setCurSliderValue(time24, TRUE);
+// F32 time = mKeysSlider->getCurSliderValue() / sHoursPerDay;
+//
+// // now set the key's time in the sliderToKey map
+// LL_DEBUGS() << "Setting key time: " << time << LL_ENDL;
+// mSliderToKey[cur_sldr].time = time;
+//
+// applyTrack();
+// #endif
+// }
+//
+//
+// void LLFloaterEditExtDayCycle::onAddKey()
+// {
+// #if 0
+// llassert_always(mSliderToKey.size() == mKeysSlider->getValue().size());
+//
+// S32 max_sliders;
+// LLEnvKey::EScope scope = LLEnvKey::SCOPE_LOCAL; // *TODO: editing region day cycle
+// switch (scope)
+// {
+// case LLEnvKey::SCOPE_LOCAL:
+// max_sliders = 20; // *HACK this should be LLWLPacketScrubber::MAX_LOCAL_KEY_FRAMES;
+// break;
+// case LLEnvKey::SCOPE_REGION:
+// max_sliders = 12; // *HACK this should be LLWLPacketScrubber::MAX_REGION_KEY_FRAMES;
+// break;
+// default:
+// max_sliders = (S32) mKeysSlider->getMaxValue();
+// break;
+// }
+//
+// #if 0
+// if ((S32)mSliderToKey.size() >= max_sliders)
+// {
+// LLSD args;
+// args["SCOPE"] = LLEnvManagerNew::getScopeString(scope);
+// args["MAX"] = max_sliders;
+// LLNotificationsUtil::add("DayCycleTooManyKeyframes", args, LLSD(), LLNotificationFunctorRegistry::instance().DONOTHING);
+// return;
+// }
+// #endif
+//
+// // add the slider key
+// std::string key_val = mSkyPresetsCombo->getSelectedValue().asString();
+// LLWLParamKey sky_params(key_val);
+// llassert(!sky_params.name.empty());
+//
+// F32 time = mTimeSlider->getCurSliderValue();
+// addSliderKey(time, sky_params);
+//
+// // apply the change to current day cycles
+// applyTrack();
+// #endif
+// }
+//
+// #if 0
+// void LLFloaterEditExtDayCycle::addSliderKey(F32 time, LLWLParamKey keyframe)
+// {
+// // make a slider
+// const std::string& sldr_name = mKeysSlider->addSlider(time);
+// if (sldr_name.empty())
+// {
+// return;
+// }
+//
+// // set the key
+// SliderKey newKey(keyframe, mKeysSlider->getCurSliderValue());
+//
+// llassert_always(sldr_name != LLStringUtil::null);
+//
+// // add to map
+// mSliderToKey.insert(std::pair<std::string, SliderKey>(sldr_name, newKey));
+//
+// llassert_always(mSliderToKey.size() == mKeysSlider->getValue().size());
+// }
+// #endif
+//
+// #if 0
+// LLWLParamKey LLFloaterEditExtDayCycle::getSelectedDayCycle()
+// {
+// LLWLParamKey dc_key;
+//
+// if (mDayCycleNameEditor->getVisible())
+// {
+// dc_key.name = mDayCycleNameEditor->getText();
+// dc_key.scope = LLEnvKey::SCOPE_LOCAL;
+// }
+// else
+// {
+// LLSD combo_val = mDayCyclesCombo->getValue();
+//
+// if (!combo_val.isArray()) // manually typed text
+// {
+// dc_key.name = combo_val.asString();
+// dc_key.scope = LLEnvKey::SCOPE_LOCAL;
+// }
+// else
+// {
+// dc_key.fromLLSD(combo_val);
+// }
+// }
+//
+// return dc_key;
+// }
+// #endif
+//
+// bool LLFloaterEditExtDayCycle::isNewDay() const
+// {
+// return mKey.asString() == "new";
+// }
+//
+// void LLFloaterEditExtDayCycle::dumpTrack()
+// {
+// #if 0
+// LL_DEBUGS("Windlight") << "Dumping day cycle" << LL_ENDL;
+//
+// LLWLDayCycle& cur_dayp = LLWLParamManager::instance().mDay;
+// for (std::map<F32, LLWLParamKey>::iterator it = cur_dayp.mTimeMap.begin(); it != cur_dayp.mTimeMap.end(); ++it)
+// {
+// F32 time = it->first * 24.0f;
+// S32 h = (S32) time;
+// S32 m = (S32) ((time - h) * 60.0f);
+// LL_DEBUGS("Windlight") << llformat("(%.3f) %02d:%02d", time, h, m) << " => " << it->second.name << LL_ENDL;
+// }
+// #endif
+// }
+//
+// void LLFloaterEditExtDayCycle::enableEditing(bool enable)
+// {
+// mSkyPresetsCombo->setEnabled(enable);
+// mTimeCtrl->setEnabled(enable);
+// getChild<LLPanel>("day_cycle_slider_panel")->setCtrlsEnabled(enable);
+// mSaveButton->setEnabled(enable);
+// mMakeDefaultCheckBox->setEnabled(enable);
+// }
+//
+// void LLFloaterEditExtDayCycle::reset()
+// {
+// #if 0
+// // clear the slider
+// mKeysSlider->clear();
+// mSliderToKey.clear();
+//
+// refreshSkyPresetsList();
+//
+// if (isNewDay())
+// {
+// mDayCycleNameEditor->setValue(LLSD());
+// F32 time = 0.5f * sHoursPerDay;
+// mSaveButton->setEnabled(FALSE); // will be enabled as soon as users enters a name
+// mTimeSlider->setCurSliderValue(time);
+//
+// addSliderKey(time, LLWLParamKey("Default", LLEnvKey::SCOPE_LOCAL));
+// onKeyTimeMoved(); // update the time control and sky sky combo
+//
+// applyTrack();
+// }
+// else
+// {
+// refreshDayCyclesList();
+//
+// // Disable controls until a day cycle to edit is selected.
+// enableEditing(false);
+// }
+// #endif
+// }
+//
+// void LLFloaterEditExtDayCycle::saveRegionDayCycle()
+// {
+// #if 0
+// LLEnvManagerNew& env_mgr = LLEnvManagerNew::instance();
+// LLWLDayCycle& cur_dayp = LLWLParamManager::instance().mDay; // the day cycle being edited
+//
+// // Get current day cycle and the sky preset it references.
+// LLSD day_cycle = cur_dayp.asLLSD();
+// LLSD sky_map;
+// cur_dayp.getSkyMap(sky_map);
+//
+// // Apply it to the region.
+// LLEnvironmentSettings new_region_settings;
+// new_region_settings.saveParams(day_cycle, sky_map, env_mgr.getRegionSettings().getWaterParams(), 0.0f);
+//
+// #if 1
+// LLEnvManagerNew::instance().setRegionSettings(new_region_settings);
+// #else // Temporary disabled ability to upload new region settings from the Day Cycle Editor.
+// if (!LLEnvManagerNew::instance().sendRegionSettings(new_region_settings))
+// {
+// LL_WARNS() << "Error applying region environment settings" << LL_ENDL;
+// return;
+// }
+//
+// setApplyProgress(true);
+// #endif
+// #endif
+// }
+//
+// void LLFloaterEditExtDayCycle::setApplyProgress(bool started)
+// {
+// LLLoadingIndicator* indicator = getChild<LLLoadingIndicator>("progress_indicator");
+//
+// indicator->setVisible(started);
+//
+// if (started)
+// {
+// indicator->start();
+// }
+// else
+// {
+// indicator->stop();
+// }
+// }
+//
+// bool LLFloaterEditExtDayCycle::getApplyProgress() const
+// {
+// return getChild<LLLoadingIndicator>("progress_indicator")->getVisible();
+// }
+//
+// void LLFloaterEditExtDayCycle::onDeleteKey()
+// {
+// #if 0
+// if (mSliderToKey.size() == 0)
+// {
+// return;
+// }
+// else if (mSliderToKey.size() == 1)
+// {
+// LLNotifications::instance().add("EnvCannotDeleteLastDayCycleKey", LLSD(), LLSD());
+// return;
+// }
+//
+// // delete from map
+// const std::string& sldr_name = mKeysSlider->getCurSlider();
+// std::map<std::string, SliderKey>::iterator mIt = mSliderToKey.find(sldr_name);
+// mSliderToKey.erase(mIt);
+//
+// mKeysSlider->deleteCurSlider();
+//
+// if (mSliderToKey.size() == 0)
+// {
+// return;
+// }
+//
+// const std::string& name = mKeysSlider->getCurSlider();
+// mSkyPresetsCombo->selectByValue(mSliderToKey[name].keyframe.toStringVal());
+// F32 time24 = mSliderToKey[name].time;
+//
+// mTimeCtrl->setTime24(time24);
+//
+// applyTrack();
+// #endif
+// }
+//
+// void LLFloaterEditExtDayCycle::onRegionSettingsChange()
+// {
+// #if 0
+// LL_DEBUGS("Windlight") << "Region settings changed" << LL_ENDL;
+//
+// if (getApplyProgress()) // our region settings have being applied
+// {
+// setApplyProgress(false);
+//
+// // Change preference if requested.
+// if (mMakeDefaultCheckBox->getValue())
+// {
+// LL_DEBUGS("Windlight") << "Changed environment preference to region settings" << LL_ENDL;
+// LLEnvManagerNew::instance().setUseRegionSettings(true);
+// }
+//
+// closeFloater();
+// }
+// #endif
+// }
+//
+// void LLFloaterEditExtDayCycle::onRegionChange()
+// {
+// #if 0
+// LL_DEBUGS("Windlight") << "Region changed" << LL_ENDL;
+//
+// // If we're editing the region day cycle
+// if (getSelectedDayCycle().scope == LLEnvKey::SCOPE_REGION)
+// {
+// reset(); // undoes all unsaved changes
+// }
+// #endif
+// }
+//
+// void LLFloaterEditExtDayCycle::onRegionSettingsApplied(bool success)
+// {
+// LL_DEBUGS("Windlight") << "Region settings applied: " << success << LL_ENDL;
+//
+// if (!success)
+// {
+// // stop progress indicator
+// setApplyProgress(false);
+// }
+// }
+//
+// void LLFloaterEditExtDayCycle::onRegionInfoUpdate()
+// {
+// #if 0
+// LL_DEBUGS("Windlight") << "Region info updated" << LL_ENDL;
+// bool can_edit = true;
+//
+// // If we've selected the region day cycle for editing.
+// if (getSelectedDayCycle().scope == LLEnvKey::SCOPE_REGION)
+// {
+// // check whether we have the access
+// can_edit = LLEnvManagerNew::canEditRegionSettings();
+// }
+//
+// enableEditing(can_edit);
+// #endif
+// }
+//
+// void LLFloaterEditExtDayCycle::onDayCycleNameEdited()
+// {
+// #if 0
+// // Disable saving a day cycle having empty name.
+// LLWLParamKey key = getSelectedDayCycle();
+// mSaveButton->setEnabled(!key.name.empty());
+// #endif
+// }
+//
+// void LLFloaterEditExtDayCycle::onDayCycleSelected()
+// {
+// #if 0
+//
+// LLSD day_data;
+// LLWLParamKey dc_key = getSelectedDayCycle();
+// bool can_edit = true;
+//
+// if (dc_key.scope == LLEnvKey::SCOPE_LOCAL)
+// {
+// if (!LLDayCycleManager::instance().getPreset(dc_key.name, day_data))
+// {
+// LL_WARNS() << "No day cycle named " << dc_key.name << LL_ENDL;
+// return;
+// }
+// }
+// else
+// {
+// day_data = LLEnvManagerNew::instance().getRegionSettings().getWLDayCycle();
+// if (day_data.size() == 0)
+// {
+// LL_WARNS() << "Empty region day cycle" << LL_ENDL;
+// llassert(day_data.size() > 0);
+// return;
+// }
+//
+// can_edit = LLEnvManagerNew::canEditRegionSettings();
+// }
+//
+// // We may need to add or remove region skies from the list.
+// refreshSkyPresetsList();
+//
+// F32 slider_time = mTimeSlider->getCurSliderValue() / sHoursPerDay;
+// LLWLParamManager::instance().applyDayCycleParams(day_data, dc_key.scope, slider_time);
+// loadTrack();
+// #endif
+// enableEditing(false);
+// }
+//
+// bool LLFloaterEditExtDayCycle::onSaveAnswer(const LLSD& notification, const LLSD& response)
+// {
+// S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+//
+// // If they choose save, do it. Otherwise, don't do anything
+// if (option == 0)
+// {
+// onSaveConfirmed();
+// }
+//
+// return false;
+// }
+//
+// void LLFloaterEditExtDayCycle::onSaveConfirmed()
+// {
+// #if 0
+// std::string name = getSelectedDayCycle().name;
+//
+// // Save preset.
+// LLSD data = LLWLParamManager::instance().mDay.asLLSD();
+// LL_DEBUGS("Windlight") << "Saving day cycle " << name << ": " << data << LL_ENDL;
+// LLDayCycleManager::instance().savePreset(name, data);
+//
+// // Change preference if requested.
+// if (mMakeDefaultCheckBox->getValue())
+// {
+// LL_DEBUGS("Windlight") << name << " is now the new preferred day cycle" << LL_ENDL;
+// LLEnvManagerNew::instance().setUseDayCycle(name);
+// }
+// #endif
+// closeFloater();
+// }
+//
+// void LLFloaterEditExtDayCycle::onDayCycleListChange()
+// {
+// if (!isNewDay())
+// {
+// refreshDayCyclesList();
+// }
+// }
+//
+// void LLFloaterEditExtDayCycle::onSkyPresetListChange()
+// {
+// refreshSkyPresetsList();
+//
+// // Refresh sliders from the currently visible day cycle.
+// loadTrack();
+// }
+//
// static
-std::string LLFloaterEditExtDayCycle::getRegionName()
-{
- return gAgent.getRegion() ? gAgent.getRegion()->getName() : LLTrans::getString("Unknown");
-}
+// std::string LLFloaterEditExtDayCycle::getRegionName()
+// {
+// return gAgent.getRegion() ? gAgent.getRegion()->getName() : LLTrans::getString("Unknown");
+// }
diff --git a/indra/newview/llfloatereditextdaycycle.h b/indra/newview/llfloatereditextdaycycle.h
index bed5db14b2..8b5a087edb 100644
--- a/indra/newview/llfloatereditextdaycycle.h
+++ b/indra/newview/llfloatereditextdaycycle.h
@@ -28,6 +28,8 @@
#define LL_LLFLOATEREDITEXTDAYCYCLE_H
#include "llfloater.h"
+#include "llsettingsdaycycle.h"
+#include <boost/signals2.hpp>
class LLCheckBoxCtrl;
class LLComboBox;
@@ -43,90 +45,92 @@ class LLFloaterEditExtDayCycle : public LLFloater
LOG_CLASS(LLFloaterEditExtDayCycle);
public:
- LLFloaterEditExtDayCycle(const LLSD &key);
-
- /*virtual*/ BOOL postBuild();
- /*virtual*/ void onOpen(const LLSD& key);
- /*virtual*/ void onClose(bool app_quitting);
- /*virtual*/ void draw();
-
-private:
-
- /// sync the time slider with day cycle structure
- void syncTimeSlider();
-
- // makes sure key slider has what's in day cycle
- void loadTrack();
+ typedef boost::signals2::signal<void(LLSettingsDay::ptr_t)> edit_commit_signal_t;
+ typedef boost::signals2::connection connection_t;
- /// makes sure day cycle data structure has what's in menu
- void applyTrack();
+ LLFloaterEditExtDayCycle(const LLSD &key);
- /// refresh the sky presets combobox
- void refreshSkyPresetsList();
+ BOOL postBuild();
+ void onOpen(const LLSD& key);
+ void onClose(bool app_quitting);
- /// refresh the day cycle combobox
- void refreshDayCyclesList();
+ void onVisibilityChange(BOOL new_visibility);
- /// add a slider to the track
-// void addSliderKey(F32 time, LLWLParamKey keyframe);
+// /*virtual*/ void draw();
+ connection_t setEditCommitSignal(edit_commit_signal_t::slot_type cb);
- void initCallbacks();
-// LLWLParamKey getSelectedDayCycle();
- bool isNewDay() const;
- void dumpTrack();
- void enableEditing(bool enable);
- void reset();
- void saveRegionDayCycle();
+private:
- void setApplyProgress(bool started);
- bool getApplyProgress() const;
+// /// sync the time slider with day cycle structure
+// void syncTimeSlider();
+//
+// // makes sure key slider has what's in day cycle
+// void loadTrack();
+//
+// /// makes sure day cycle data structure has what's in menu
+// void applyTrack();
+//
+// /// refresh the sky presets combobox
+ void refreshSkyPresetsList();
- void onTimeSliderMoved(); /// time slider moved
- void onKeyTimeMoved(); /// a key frame moved
- void onKeyTimeChanged(); /// a key frame's time changed
- void onKeyPresetChanged(); /// sky preset selected
- void onAddKey(); /// new key added on slider
- void onDeleteKey(); /// a key frame deleted
+ void onDayPresetChanged(); /// sky preset selected
- void onRegionSettingsChange();
- void onRegionChange();
- void onRegionSettingsApplied(bool success);
- void onRegionInfoUpdate();
+ void onBtnSave();
+ void onBtnCancel();
- void onDayCycleNameEdited();
- void onDayCycleSelected();
- void onBtnSave();
- void onBtnCancel();
+// /// refresh the day cycle combobox
+// void refreshDayCyclesList();
+//
+// /// add a slider to the track
+// // void addSliderKey(F32 time, LLWLParamKey keyframe);
+//
+// void initCallbacks();
+// // LLWLParamKey getSelectedDayCycle();
+// bool isNewDay() const;
+// void dumpTrack();
+// void enableEditing(bool enable);
+// void reset();
+// void saveRegionDayCycle();
+//
+// void setApplyProgress(bool started);
+// bool getApplyProgress() const;
+//
+// void onTimeSliderMoved(); /// time slider moved
+// void onKeyTimeMoved(); /// a key frame moved
+// void onKeyTimeChanged(); /// a key frame's time changed
+// void onAddKey(); /// new key added on slider
+// void onDeleteKey(); /// a key frame deleted
+//
+// void onRegionSettingsChange();
+// void onRegionChange();
+// void onRegionSettingsApplied(bool success);
+// void onRegionInfoUpdate();
+//
+// void onDayCycleNameEdited();
+// void onDayCycleSelected();
+//
+// bool onSaveAnswer(const LLSD& notification, const LLSD& response);
+// void onSaveConfirmed();
+//
+// void onDayCycleListChange();
+// void onSkyPresetListChange();
+//
+// static std::string getRegionName();
- bool onSaveAnswer(const LLSD& notification, const LLSD& response);
- void onSaveConfirmed();
+ LLSettingsDay::ptr_t mSavedDay;
+ LLSettingsDay::ptr_t mEditDay;
- void onDayCycleListChange();
- void onSkyPresetListChange();
+ LLComboBox* mDayPresetsCombo;
+ LLButton* mSaveButton;
+ LLButton* mCancelButton;
- static std::string getRegionName();
+ edit_commit_signal_t mCommitSignal;
- /// convenience class for holding keyframes mapped to sliders
-// struct SliderKey
-// {
-// public:
-// SliderKey(LLWLParamKey kf, F32 t) : keyframe(kf), time(t) {}
-// SliderKey() : keyframe(), time(0.f) {} // Don't use this default constructor
-//
-// LLWLParamKey keyframe;
-// F32 time;
-// };
-
- static const F32 sHoursPerDay;
-
- LLLineEditor* mDayCycleNameEditor;
- LLComboBox* mDayCyclesCombo;
- LLMultiSliderCtrl* mTimeSlider;
- LLMultiSliderCtrl* mKeysSlider;
- LLComboBox* mSkyPresetsCombo;
- LLTimeCtrl* mTimeCtrl;
- LLCheckBoxCtrl* mMakeDefaultCheckBox;
- LLButton* mSaveButton;
+// LLComboBox* mDayCyclesCombo;
+// LLMultiSliderCtrl* mTimeSlider;
+// LLMultiSliderCtrl* mKeysSlider;
+ // LLTimeCtrl* mTimeCtrl;
+// LLCheckBoxCtrl* mMakeDefaultCheckBox;
// map of sliders to parameters
// std::map<std::string, SliderKey> mSliderToKey;
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index 578c85470e..bf965afbe1 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -190,6 +190,8 @@ public:
protected:
virtual void doApply();
+ virtual void doEditCommited(LLSettingsDay::ptr_t &newday);
+
private:
LLViewerRegion * mLastRegion;
};
@@ -3437,3 +3439,8 @@ void LLPanelRegionEnvironment::doApply()
LLEnvironment::instance().updateRegion(mEditingDayCycle, daylength.value(), dayoffset_s.value());
}
}
+
+void LLPanelRegionEnvironment::doEditCommited(LLSettingsDay::ptr_t &newday)
+{
+ mEditingDayCycle = newday;
+}
diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h
index 61bf33af2f..6d64ae1d60 100644
--- a/indra/newview/llfloaterregioninfo.h
+++ b/indra/newview/llfloaterregioninfo.h
@@ -412,67 +412,6 @@ protected:
/////////////////////////////////////////////////////////////////////////////
-#if 0
-class LLPanelEnvironmentInfo : public LLPanelRegionInfo
-{
- LOG_CLASS(LLPanelEnvironmentInfo);
-
-public:
- LLPanelEnvironmentInfo();
-
- // LLPanel
- /*virtual*/ BOOL postBuild();
- /*virtual*/ void onOpen(const LLSD& key);
-
- // LLView
- /*virtual*/ void onVisibilityChange(BOOL new_visibility);
-
- // LLPanelRegionInfo
- /*virtual*/ bool refreshFromRegion(LLViewerRegion* region);
-
-private:
- void refresh();
- void setControlsEnabled(bool enabled);
- void setApplyProgress(bool started);
- void setDirty(bool dirty);
-
- void sendRegionSunUpdate();
- void fixEstateSun();
-
- void populateWaterPresetsList();
- void populateSkyPresetsList();
- void populateDayCyclesList();
-
- bool getSelectedWaterParams(LLSD& water_params);
- bool getSelectedSkyParams(LLSD& sky_params, std::string& preset_name);
- bool getSelectedDayCycleParams(LLSD& day_cycle, LLSD& sky_map, short& scope);
-
- void onSwitchRegionSettings();
- void onSwitchDayCycle();
-
- void onSelectWaterPreset();
- void onSelectSkyPreset();
- void onSelectDayCycle();
-
- void onBtnApply();
- void onBtnCancel();
-
- void onRegionSettingschange();
- void onRegionSettingsApplied(bool ok);
-
- /// New environment settings that are being applied to the region.
-// LLEnvironmentSettings mNewRegionSettings;
-
- bool mEnableEditing;
-
- LLRadioGroup* mRegionSettingsRadioGroup;
- LLRadioGroup* mDayCycleSettingsRadioGroup;
-
- LLComboBox* mWaterPresetCombo;
- LLComboBox* mSkyPresetCombo;
- LLComboBox* mDayCyclePresetCombo;
-};
-#endif
class LLPanelRegionExperiences : public LLPanelRegionInfo
{
diff --git a/indra/newview/llpanelenvironment.cpp b/indra/newview/llpanelenvironment.cpp
index b606e1de08..c9e29e3e79 100644
--- a/indra/newview/llpanelenvironment.cpp
+++ b/indra/newview/llpanelenvironment.cpp
@@ -37,6 +37,10 @@
#include "llslurl.h"
#include "lllayoutstack.h"
+#include "llfloater.h"
+#include "llfloaterreg.h"
+#include "llfloatereditextdaycycle.h"
+
static LLPanelInjector<LLPanelEnvironmentInfo> register_environment_panel("environment_panel");
LLPanelEnvironmentInfo::LLPanelEnvironmentInfo():
@@ -329,7 +333,11 @@ void LLPanelEnvironmentInfo::setDirty(bool dirty)
void LLPanelEnvironmentInfo::onSwitchDefaultSelection()
{
bool use_defaults = mRegionSettingsRadioGroup->getSelectedIndex() == 0;
- getChild<LLView>("user_environment_settings")->setEnabled(!use_defaults);
+
+ getChild<LLView>("edit_btn")->setEnabled(!use_defaults);
+
+ mDayLengthSlider->setEnabled(!use_defaults);
+ mDayOffsetSlider->setEnabled(!use_defaults);
setDirty(true);
}
@@ -352,8 +360,25 @@ void LLPanelEnvironmentInfo::onBtnCancel()
void LLPanelEnvironmentInfo::onBtnEdit()
{
+ LLFloaterEditExtDayCycle *dayeditor = (LLFloaterEditExtDayCycle *)LLFloaterReg::getInstance("env_edit_extdaycycle");
+
+ if (dayeditor)
+ {
+ dayeditor->setEditCommitSignal(boost::bind(&LLPanelEnvironmentInfo::onEditiCommited, this, _1));
+ dayeditor->openFloater();
+ }
+}
+
+void LLPanelEnvironmentInfo::onEditiCommited(LLSettingsDay::ptr_t newday)
+{
+ doEditCommited(newday);
}
+void LLPanelEnvironmentInfo::doEditCommited(LLSettingsDay::ptr_t &newday)
+{
+ mEditingDayCycle = newday;
+ /*TODO pure virtual*/
+}
// void LLPanelEnvironmentInfo::onRegionSettingschange()
// {
diff --git a/indra/newview/llpanelenvironment.h b/indra/newview/llpanelenvironment.h
index 8b5238d3e2..4f62488f21 100644
--- a/indra/newview/llpanelenvironment.h
+++ b/indra/newview/llpanelenvironment.h
@@ -63,7 +63,10 @@ protected:
void onBtnCancel();
void onBtnEdit();
+ void onEditiCommited(LLSettingsDay::ptr_t newday);
+
virtual void doApply(); // = 0;
+ virtual void doEditCommited(LLSettingsDay::ptr_t &newday);
/// New environment settings that are being applied to the region.
// LLEnvironmentSettings mNewRegionSettings;
diff --git a/indra/newview/llsettingsvo.cpp b/indra/newview/llsettingsvo.cpp
index 7756d28879..80cb8c8357 100644
--- a/indra/newview/llsettingsvo.cpp
+++ b/indra/newview/llsettingsvo.cpp
@@ -263,8 +263,8 @@ LLSettingsWater::ptr_t LLSettingsVOWater::buildFromLegacyPreset(const std::strin
LLSD results = LLSettingsWater::settingValidation(newsettings, validations);
if (!results["success"].asBoolean())
{
- LL_WARNS("SETTINGS") << "Water setting validation failed!\n" << results << LL_ENDL;
- LLSettingsWater::ptr_t();
+ LL_WARNS("SETTINGS") << "Water setting validation failed!: " << results << LL_ENDL;
+ return LLSettingsWater::ptr_t();
}
LLSettingsWater::ptr_t waterp = boost::make_shared<LLSettingsVOWater>(newsettings);
@@ -292,8 +292,8 @@ LLSettingsWater::ptr_t LLSettingsVOWater::buildDefaultWater()
LLSD results = LLSettingsWater::settingValidation(settings, validations);
if (!results["success"].asBoolean())
{
- LL_WARNS("SETTINGS") << "Water setting validation failed!\n" << results << LL_ENDL;
- LLSettingsWater::ptr_t();
+ LL_WARNS("SETTINGS") << "Water setting validation failed!: " << results << LL_ENDL;
+ return LLSettingsWater::ptr_t();
}
LLSettingsWater::ptr_t waterp = boost::make_shared<LLSettingsVOWater>(settings);
@@ -308,8 +308,8 @@ LLSettingsWater::ptr_t LLSettingsVOWater::buildClone()
LLSD results = LLSettingsWater::settingValidation(settings, validations);
if (!results["success"].asBoolean())
{
- LL_WARNS("SETTINGS") << "Water setting validation failed!\n" << results << LL_ENDL;
- LLSettingsWater::ptr_t();
+ LL_WARNS("SETTINGS") << "Water setting validation failed!: " << results << LL_ENDL;
+ return LLSettingsWater::ptr_t();
}
LLSettingsWater::ptr_t waterp = boost::make_shared<LLSettingsVOWater>(settings);
@@ -414,31 +414,48 @@ LLSettingsVODay::LLSettingsVODay():
LLSettingsDay::ptr_t LLSettingsVODay::buildFromLegacyPreset(const std::string &name, const LLSD &oldsettings)
{
LLSD newsettings(defaults());
+ std::set<std::string> framenames;
newsettings[SETTING_NAME] = name;
- newsettings[SETTING_DAYLENGTH] = static_cast<S32>(MINIMUM_DAYLENGTH);
LLSD watertrack = LLSDArray(
LLSDMap(SETTING_KEYKFRAME, LLSD::Real(0.0f))
- (SETTING_KEYNAME, "Default"));
+ (SETTING_KEYNAME, "water:Default"));
LLSD skytrack = LLSD::emptyArray();
for (LLSD::array_const_iterator it = oldsettings.beginArray(); it != oldsettings.endArray(); ++it)
{
+ std::string framename = (*it)[1].asString();
LLSD entry = LLSDMap(SETTING_KEYKFRAME, (*it)[0].asReal())
- (SETTING_KEYNAME, (*it)[1].asString());
+ (SETTING_KEYNAME, "sky:" + framename);
+ framenames.insert(framename);
skytrack.append(entry);
}
newsettings[SETTING_TRACKS] = LLSDArray(watertrack)(skytrack);
+ LLSD frames(LLSD::emptyMap());
+
+ {
+ LLSettingsWater::ptr_t pwater = LLEnvironment::instance().findWaterByName("Default");
+ frames["water:Default"] = pwater->getSettings();
+ }
+
+ for (std::set<std::string>::iterator itn = framenames.begin(); itn != framenames.end(); ++itn)
+ {
+ LLSettingsSky::ptr_t psky = LLEnvironment::instance().findSkyByName(*itn);
+ frames["sky:" + (*itn)] = psky->getSettings();
+ }
+
+ newsettings[SETTING_FRAMES] = frames;
+
LLSettingsDay::validation_list_t validations = LLSettingsDay::validationList();
LLSD results = LLSettingsDay::settingValidation(newsettings, validations);
if (!results["success"].asBoolean())
{
- LL_WARNS("SETTINGS") << "Day setting validation failed!\n" << results << LL_ENDL;
- LLSettingsDay::ptr_t();
+ LL_WARNS("SETTINGS") << "Day setting validation failed!: " << results << LL_ENDL;
+ return LLSettingsDay::ptr_t();
}
@@ -463,51 +480,55 @@ LLSettingsDay::ptr_t LLSettingsVODay::buildFromLegacyPreset(const std::string &n
LLSettingsDay::ptr_t LLSettingsVODay::buildFromLegacyMessage(const LLUUID &regionId, LLSD daycycle, LLSD skydefs, LLSD waterdef)
{
- LLSettingsWater::ptr_t water = LLSettingsVOWater::buildFromLegacyPreset("Region", waterdef);
-
- if (!water)
- {
- LL_WARNS("WindlightCaps") << "Water construction failed." << LL_ENDL;
- return LLSettingsDay::ptr_t();
- }
-
- LLEnvironment::namedSettingMap_t skys;
+ LLSD frames(LLSD::emptyMap());
for (LLSD::map_iterator itm = skydefs.beginMap(); itm != skydefs.endMap(); ++itm)
{
- std::string name = (*itm).first;
- LLSettingsSky::ptr_t sky = LLSettingsVOSky::buildFromLegacyPreset(name, (*itm).second);
+ LLSD newsettings = LLSettingsSky::translateLegacySettings((*itm).second);
+ std::string newname = "sky:" + (*itm).first;
- if (!sky)
- {
- LL_WARNS("WindlightCaps") << "Sky construction failed." << LL_ENDL;
- return LLSettingsDay::ptr_t();
- }
+ newsettings[SETTING_NAME] = newname;
+ frames[newname] = newsettings;
- skys[name] = sky;
- LL_WARNS("WindlightCaps") << "created region sky '" << name << "'" << LL_ENDL;
+ LL_WARNS("SETTINGS") << "created region sky '" << newname << "'" << LL_ENDL;
}
- LLSettingsDay::ptr_t dayp = buildFromLegacyPreset("Region (legacy)", daycycle);
+ LLSD watersettings = LLSettingsWater::translateLegacySettings(waterdef);
+ std::string watername = "water:"+ watersettings[SETTING_NAME].asString();
+ watersettings[SETTING_NAME] = watername;
+ frames[watername] = watersettings;
- dayp->setWaterAtKeyframe(water, 0.0f);
+ LLSD watertrack = LLSDArray(
+ LLSDMap(SETTING_KEYKFRAME, LLSD::Real(0.0f))
+ (SETTING_KEYNAME, watername));
- for (LLSD::array_iterator ita = daycycle.beginArray(); ita != daycycle.endArray(); ++ita)
+ LLSD skytrack(LLSD::emptyArray());
+ for (LLSD::array_const_iterator it = daycycle.beginArray(); it != daycycle.endArray(); ++it)
{
- F32 frame = (*ita)[0].asReal();
- std::string name = (*ita)[1].asString();
-
- LLEnvironment::namedSettingMap_t::iterator it = skys.find(name);
+ LLSD entry = LLSDMap(SETTING_KEYKFRAME, (*it)[0].asReal())
+ (SETTING_KEYNAME, "sky:" + (*it)[1].asString());
+ skytrack.append(entry);
+ }
- if (it == skys.end())
- continue;
- dayp->setSkyAtKeyframe(boost::static_pointer_cast<LLSettingsSky>((*it).second), frame, 1);
+ LLSD newsettings = LLSDMap
+ ( SETTING_NAME, "Region (legacy)" )
+ ( SETTING_TRACKS, LLSDArray(watertrack)(skytrack))
+ ( SETTING_FRAMES, frames );
- LL_WARNS("WindlightCaps") << "Added '" << name << "' to region day cycle at " << frame << LL_ENDL;
+ LLSettingsSky::validation_list_t validations = LLSettingsSky::validationList();
+ LLSD results = LLSettingsDay::settingValidation(newsettings, validations);
+ if (!results["success"].asBoolean())
+ {
+ LL_WARNS("SETTINGS") << "Day setting validation failed!:" << results << LL_ENDL;
+ LLSettingsDay::ptr_t();
}
- dayp->setInitialized();
-
+ LLSettingsDay::ptr_t dayp = boost::make_shared<LLSettingsVODay>(newsettings);
+
+ if (dayp)
+ {
+ dayp->setInitialized();
+ }
return dayp;
}
@@ -555,13 +576,13 @@ LLSettingsDay::ptr_t LLSettingsVODay::buildClone()
LLSD results = LLSettingsDay::settingValidation(settings, validations);
if (!results["success"].asBoolean())
{
- LL_WARNS("SETTINGS") << "Water setting validation failed!\n" << results << LL_ENDL;
+ LL_WARNS("SETTINGS") << "Day setting validation failed!\n" << results << LL_ENDL;
LLSettingsDay::ptr_t();
}
-
LLSettingsDay::ptr_t dayp = boost::make_shared<LLSettingsVODay>(settings);
+ dayp->initialize();
return dayp;
}
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index e133ef22a1..63166fe4a8 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -226,7 +226,7 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("env_edit_water", "floater_edit_water_preset.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEditWater>);
LLFloaterReg::add("env_edit_day_cycle", "floater_edit_day_cycle.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEditDayCycle>);
- LLFloaterReg::add("env_edit_extdaycycle", "floater_edit_ext_daycycle.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEditExtDayCycle>);
+ LLFloaterReg::add("env_edit_extdaycycle", "floater_edit_ext_day_cycle.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEditExtDayCycle>);
LLFloaterReg::add("event", "floater_event.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEvent>);
diff --git a/indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml b/indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml
index d9a3ad0c4b..0f0acea832 100644
--- a/indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml
+++ b/indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
- legacy_header_height="18"
- height="381"
- layout="topleft"
- name="Edit Day cycle"
- help_topic="day_presets"
- save_rect="true"
- title="Edit Day Cycle"
- width="705">
+ legacy_header_height="18"
+ height="500"
+ layout="topleft"
+ name="env_edit_extdaycycle"
+ help_topic="day_presets"
+ save_rect="true"
+ title="Edit Day Cycle"
+ width="705">
<string name="title_new">Create a New Day Cycle</string>
<string name="title_edit">Edit Day Cycle</string>
@@ -15,471 +15,130 @@
<string name="hint_edit">To edit your day cycle, adjust the controls below and click "Save".</string>
<string name="combo_label">-Select a preset-</string>
- <text
- follows="top|left|right"
- height="10"
- layout="topleft"
- left="10"
- name="hint"
- top="25"
- width="685" />
- <text
- follows="top|left|right"
- font="SansSerif"
- height="10"
- layout="topleft"
- left="10"
- name="label"
- top_pad="25"
- width="120">
- Preset Name:
- </text>
- <combo_box
- allow_text_entry="true"
- follows="top|left"
- layout="topleft"
- left_pad="10"
- max_chars="100"
- name="day_cycle_combo"
- top_delta="-5"
- width="200" />
- <line_editor
- height="20"
- left_delta="0"
- name="day_cycle_name"
- top_delta="0"
- visible="true"
- width="200" />
- <text
- follows="top|left|right"
- height="95"
- layout="topleft"
- left_pad="10"
- name="note"
- top_delta="0"
- width="345"
- wrap="true">
- Note: if you change the name of your preset, you will be creating a new preset and the existing preset will not be changed.
- </text>
- <!--======== Controls panel ========-->
- <text
- follows="left|top|right"
- height="10"
- layout="topleft"
- left="10"
- name="hint_item1"
- top="100"
- width="300">
- - Click on a tab to edit the specific sky settings and time.
- </text>
- <text
- follows="left|top|right"
- height="10"
- layout="topleft"
- name="hint_item2"
- top_pad="10"
- width="300">
- - Click and drag the tabs to set the transition times.
- </text>
- <text
- follows="left|top|right"
- height="10"
- layout="topleft"
- name="hint_item3"
- top_pad="10"
- width="300">
- - Use the scrubber to preview your day cycle.
- </text>
- <panel
- follows="top|left"
- height="100"
- name="day_cycle_slider_panel"
- layout="topleft"
- left_delta="25"
- top_pad="15"
- width="660">
- <multi_slider
- can_edit_text="true"
- control_name="WLTimeSlider"
- decimal_digits="0"
- draw_track="false"
- follows="bottom"
- height="10"
- increment="0.0833333"
- initial_value="0"
- layout="topleft"
- left="20"
- max_sliders="20"
- max_val="24"
- name="WLTimeSlider"
- show_text="false"
- top_pad="0"
- use_triangle="true"
- width="525" />
- <multi_slider
- can_edit_text="true"
- control_name="WLDayCycleKeys"
- decimal_digits="0"
- follows="bottom"
- height="10"
- increment="0.0833333"
- initial_value="0"
- layout="topleft"
- left_delta="0"
- max_sliders="20"
- max_val="24"
- name="WLDayCycleKeys"
- show_text="false"
- top_pad="15"
- width="525" />
- <button
- height="20"
- label="Add Key"
- label_selected="Add Key"
- layout="topleft"
- left_pad="20"
- name="WLAddKey"
- top_delta="-18"
- width="96" />
- <button
- height="20"
- label="Delete Key"
- label_selected="Delete Key"
- layout="topleft"
- name="WLDeleteKey"
- top_pad="5"
- width="96" />
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left="8"
- name="WL12am"
- top="74"
- width="55">
- 12am
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_pad="10"
- name="WL3am"
- top_delta="0"
- width="55">
- 3am
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_pad="10"
- name="WL6am"
- top_delta="0"
- width="55">
- 6am
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_pad="10"
- name="WL9amHash"
- top_delta="0"
- width="55">
- 9am
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_pad="10"
- name="WL12pmHash"
- top_delta="0"
- width="55">
- 12pm
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_pad="10"
- name="WL3pm"
- top_delta="0"
- width="55">
- 3pm
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_pad="10"
- name="WL6pm"
- top_delta="0"
- width="55">
- 6pm
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_pad="10"
- name="WL9pm"
- top_delta="0"
- width="55">
- 9pm
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_pad="10"
- name="WL12am2"
- top_delta="0"
- width="55">
- 12am
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="14"
- layout="topleft"
- left="20"
- name="WL12amHash"
- top="54"
- width="6">
- |
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="11"
- layout="topleft"
- left_pad="59"
- name="WL3amHash"
- top_delta="3"
- width="6">
- I
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="14"
- layout="topleft"
- left_pad="59"
- name="WL6amHash"
- top_delta="-3"
- width="6">
- |
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="11"
- layout="topleft"
- left_pad="59"
- name="WL9amHash2"
- top_delta="3"
- width="6">
- I
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="14"
- layout="topleft"
- left_pad="59"
- name="WL12pmHash2"
- top_delta="-3"
- width="6">
- |
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="11"
- layout="topleft"
- left_pad="59"
- name="WL3pmHash"
- top_delta="3"
- width="6">
- I
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="14"
- layout="topleft"
- left_pad="59"
- name="WL6pmHash"
- top_delta="-3"
- width="6">
- |
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="11"
- layout="topleft"
- left_pad="59"
- name="WL9pmHash"
- top_delta="3"
- width="6">
- I
- </text>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="14"
- layout="topleft"
- left_pad="59"
- name="WL12amHash2"
- top_delta="-3"
- width="6">
- |
- </text>
- </panel>
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="192"
- name="WLCurKeyPresetText"
- top_pad="10"
- width="80">
- Sky Setting:
- </text>
- <combo_box
- height="18"
- label="Preset"
- layout="topleft"
- left_pad="5"
- name="WLSkyPresets"
- width="205" />
- <text
- type="string"
- length="1"
- border_visible="true"
- follows="left|top|right"
- font="SansSerif"
- height="16"
- layout="topleft"
- left_delta="-40"
- name="WLCurKeyTimeText"
- top_pad="15"
- width="35">
- Time:
- </text>
- <time
- follows="left|top"
- height="16"
- label_width="0"
- layout="topleft"
- left_pad="3"
- name="time"
- top_delta="-1"
- value="6:00 AM"
- width="75"/>
- <view_border
- bevel_style="none"
- follows="top|left"
- height="0"
- layout="topleft"
- left="10"
- name="horiz_separator"
- top_pad="20"
- width="685"/>
- <loading_indicator
- height="23"
- layout="topleft"
- left="25"
- name="progress_indicator"
- top="350"
- visible="false"
- width="23" />
- <check_box
- follows="top|left"
- height="10"
- label="Make this my new day cycle"
- layout="topleft"
- left="310"
- name="make_default_cb"
- top_delta="13"
- width="230"/>
- <button
- follows="bottom|right"
- height="23"
- label="Save"
- layout="topleft"
- left_pad="0"
- name="save"
- top_delta="-13"
- width="70"/>
- <button
- follows="bottom|right"
- height="23"
- label="Cancel"
- layout="topleft"
- left_pad="15"
- name="cancel"
- top_delta="0"
- width="70"/>
- </floater>
+ <layout_stack name="test_stack"
+ width="705"
+ height="500"
+ follows="all"
+ orientation="vertical">
+ <layout_panel name="temp"
+ border="false"
+ auto_resize="false"
+ user_resize="true"
+ height="30"
+ min_height="30"
+ background_visible="false">
+ <!-- This layout_panel is for loading legacy presets -->
+ <text
+ follows="top|left|right"
+ font="SansSerif"
+ height="10"
+ layout="topleft"
+ name="label"
+ top_offset="20"
+ left_offset="10"
+ width="120">
+ Preset Name:
+ </text>
+ <combo_box
+ allow_text_entry="true"
+ follows="top|left"
+ layout="topleft"
+ left_pad="10"
+ max_chars="100"
+ name="day_cycle_preset_combo"
+ top_delta="-5"
+ width="200" />
+ </layout_panel>
+ <layout_panel name="timeline"
+ border="true"
+ bevel_style="in"
+ auto_resize="false"
+ user_resize="true"
+ bg_alpha_color="red"
+ height="150"
+ min_height="0"
+ visible="true"
+ background_visible="true">
+ <text
+ follows="top|left|right"
+ font="SansSerif"
+ height="10"
+ layout="topleft"
+ name="label"
+ top_offset="20"
+ left_offset="10"
+ width="120">
+ Time Line Goes here
+ </text>
+ </layout_panel>
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ bg_alpha_color="blue"
+ height="11"
+ min_height="0"
+ visible="true"
+ background_visible="true">
+ <tab_container
+ follows="all"
+ halign="left"
+ height="386"
+ layout="topleft"
+ left_offset="0"
+ name="landtab"
+ tab_position="top"
+ tab_width="140"
+ tab_padding_right="3"
+ top_offset="6"
+ width="633">
+ <panel
+ border="true"
+ follows="all"
+ label="DUMMY"
+ layout="topleft"
+ left="0"
+ help_topic="land_general_tab"
+ name="land_general_panel"
+ top="0">
+ <text
+ follows="top|left|right"
+ font="SansSerif"
+ height="10"
+ layout="center"
+ name="label"
+ top_offset="20"
+ left_offset="10"
+ width="300">
+ Space For editing selected frame
+ </text>
+
+ </panel>
+ </tab_container>
+ </layout_panel>
+ <layout_panel name="buttons"
+ auto_resize="false"
+ user_resize="true"
+ height="43"
+ min_height="0"
+ background_visible="false">
+ <button
+ follows="top|left"
+ height="23"
+ label="Save"
+ left_offset="160"
+ top_offset="60"
+ name="save_btn"
+ width="100" />
+ <button
+ follows="top|left"
+ height="23"
+ label="Cancel"
+ layout="topleft"
+ left_pad="10"
+ name="cancel_btn"
+ width="100" />
+
+ </layout_panel>
+ </layout_stack>
+
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_test_layout_stacks.xml b/indra/newview/skins/default/xui/en/floater_test_layout_stacks.xml
index 82ad031959..a3ed22f422 100644
--- a/indra/newview/skins/default/xui/en/floater_test_layout_stacks.xml
+++ b/indra/newview/skins/default/xui/en/floater_test_layout_stacks.xml
@@ -10,172 +10,217 @@
name="Test Floater"
title="LAYOUTSTACK TESTS"
width="420">
- <layout_stack
+ <layout_stack name="test_stack"
left="0"
top="0"
- width="420"
+ width="100"
height="250"
- follows="left|right|top|bottom"
+ follows="left|top|bottom"
orientation="vertical">
- <layout_panel
+ <layout_panel name="flex"
auto_resize="true"
user_resize="true"
- bg_alpha_color="red"
- max_height="200"
- background_visible="false">
- <layout_stack
- left="5"
- top="5"
- right="-5"
- follows="left|right|top|bottom"
- orientation="horizontal">
- <layout_panel
- border="true"
- bevel_style="in"
- auto_resize="false"
- user_resize="false"
- width="160"
- background_visible="true">
- <text follows="top|left"
- halign="left"
- text_color="white">Environment Source</text>
- <radio_group
- follows="top|left"
- height="45"
- layout="topleft"
- left_delta="10"
- name="environment_select_radio_group"
- bottom_delta="50"
- max_width="200"
- width="200">
- <radio_item
- label="Default Environment"
- layout="topleft"
- name="use_default_setting"
- height="20"/>
- <radio_item
- label="Custom Environment"
- layout="topleft"
- height="20"
- name="use_custom_setting"/>
- </radio_group>
- <button
- follows="top|left"
- height="23"
- label="Edit Custom"
- left_delta="30"
- bottom_delta="30"
- width="100"
- name="edit_btn"/>
-
- </layout_panel>
- <layout_panel
- border="true"
- bevel_style="in"
- auto_resize="false"
- user_resize="true"
- height="11"
- width="220"
- background_visible="true">
- <text follows="top|left|right"
- halign="left"
- text_color="white">Day Settings</text>
- <text
- type="string"
- length="1"
- follows="left|top"
- height="12"
- layout="topleft"
- left_delta="10"
- top_pad="10"
- width="200">
- Day Length (hours)
- </text>
- <slider
- can_edit_text="true"
- control_name="DayLengthSLD"
- decimal_digits="1"
- follows="left|top"
- height="20"
- increment="0.5"
- initial_value="4"
- layout="topleft"
- left_delta="0"
- top_pad="6"
- name="day_length_sld"
- min_val="4"
- max_val="178"
- width="200" />
- <text
- type="string"
- length="1"
- follows="left|top"
- height="12"
- layout="topleft"
- left_delta="0"
- top_pad="10"
- width="200">
- Day Offset (hours)
- </text>
- <slider
- can_edit_text="true"
- control_name="DayOffsetSLD"
- decimal_digits="1"
- follows="left|top"
- height="20"
- increment="0.5"
- initial_value="-8"
- layout="topleft"
- left_delta="0"
- top_pad="6"
- name="day_offset_sld"
- min_val="-12"
- max_val="12"
- width="200" />
-
- </layout_panel>
- <layout_panel name="flex"
- auto_resize="true"
- user_resize="true"
- visible="false"
- bg_alpha_color="blue"
- height="100"
- background_visible="true">
- </layout_panel>
- </layout_stack>
+ bg_alpha_color="blue"
+ height="11"
+ min_height="0"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
</layout_panel>
<layout_panel name="flex"
auto_resize="true"
user_resize="true"
+ bg_alpha_color="blue"
height="11"
min_height="0"
- background_visible="false">
- <check_box
- control_name="may_override_chk"
- height="16"
- label="Parcel Owners May Override"
- layout="topleft"
- left="10"
- top="10"
- name="allow_override_chk"
- width="200" />
- <button
- follows="bottom|left"
- height="23"
- label="Apply"
- right="-160"
- bottom="-30"
- name="apply_btn"
- width="100" />
- <button
- follows="bottom|left"
- height="23"
- label="Cancel"
- layout="topleft"
- left_pad="10"
- name="cancel_btn"
- width="100" />
-
+ visible="false"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ bg_alpha_color="blue"
+ height="11"
+ min_height="0"
+ visible="true"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ bg_alpha_color="blue"
+ height="11"
+ min_height="0"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ </layout_stack>
+ <layout_stack name="test_stack"
+ left_pad="5"
+ top="0"
+ width="100"
+ height="250"
+ follows="left|top|bottom"
+ orientation="vertical">
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ bg_alpha_color="blue"
+ height="100"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ visible="false"
+ bg_alpha_color="blue"
+ height="100"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ <layout_panel name="fixed"
+ auto_resize="false"
+ user_resize="true"
+ height="50"
+ min_height="10"
+ bg_alpha_color="green"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="black">fixed</text>
+ </layout_panel>
+ <layout_panel name="fixed"
+ auto_resize="false"
+ user_resize="true"
+ height="50"
+ min_height="10"
+ bg_alpha_color="green"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="black">fixed</text>
+ </layout_panel>
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ bg_alpha_color="blue"
+ height="100"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ bg_alpha_color="blue"
+ height="100"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ bg_alpha_color="blue"
+ height="100"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ bg_alpha_color="blue"
+ height="100"
+ visible="true"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ </layout_stack>
+ <layout_stack name="test_stack"
+ left_pad="5"
+ top="0"
+ width="100"
+ height="250"
+ follows="left|top|bottom"
+ orientation="vertical">
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ height="11"
+ bg_alpha_color="blue"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ <layout_panel name="fixed"
+ auto_resize="false"
+ user_resize="true"
+ height="50"
+ bg_alpha_color="green"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="black">fixed</text>
+ </layout_panel>
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ bg_alpha_color="blue"
+ height="11"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ </layout_stack>
+ <layout_stack name="test_stack"
+ left_pad="5"
+ top="0"
+ width="100"
+ height="250"
+ follows="left|top|bottom"
+ orientation="vertical">
+ <layout_panel name="fixed"
+ auto_resize="false"
+ user_resize="true"
+ height="50"
+ bg_alpha_color="green"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="black">fixed</text>
+ </layout_panel>
+ <layout_panel name="fixed"
+ auto_resize="false"
+ user_resize="true"
+ height="50"
+ bg_alpha_color="green"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="black">fixed</text>
+ </layout_panel>
+ <layout_panel name="fixed"
+ auto_resize="false"
+ user_resize="true"
+ height="50"
+ bg_alpha_color="green"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="black">fixed</text>
+ </layout_panel>
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ bg_alpha_color="blue"
+ height="11"
+ min_height="0"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ bg_alpha_color="blue"
+ height="11"
+ min_height="0"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
+ </layout_panel>
+ <layout_panel name="flex"
+ auto_resize="true"
+ user_resize="true"
+ bg_alpha_color="blue"
+ height="11"
+ min_height="0"
+ background_visible="true">
+ <text follows="top|left|right" halign="center" text_color="white">flex</text>
</layout_panel>
</layout_stack>
</floater>