Adding a couple files that got skipped.
parent
6489598d57
commit
5e544ee35d
|
|
@ -224,6 +224,7 @@ set(viewer_SOURCE_FILES
|
|||
llfloaterdeleteprefpreset.cpp
|
||||
llfloaterdestinations.cpp
|
||||
llfloatereditdaycycle.cpp
|
||||
llfloatereditextdaycycle.cpp
|
||||
llfloatereditsky.cpp
|
||||
llfloatereditwater.cpp
|
||||
llfloaterenvironmentsettings.cpp
|
||||
|
|
@ -838,7 +839,7 @@ set(viewer_HEADER_FILES
|
|||
llfloaterconversationpreview.h
|
||||
llfloaterdeleteprefpreset.h
|
||||
llfloaterdestinations.h
|
||||
llfloatereditdaycycle.h
|
||||
llfloatereditextdaycycle.h
|
||||
llfloatereditsky.h
|
||||
llfloatereditwater.h
|
||||
llfloaterenvironmentsettings.h
|
||||
|
|
|
|||
|
|
@ -0,0 +1,872 @@
|
|||
/**
|
||||
* @file llfloatereditextdaycycle.cpp
|
||||
* @brief Floater to create or edit a day cycle
|
||||
*
|
||||
* $LicenseInfo:firstyear=2011&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2011, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "llfloatereditextdaycycle.h"
|
||||
|
||||
// libs
|
||||
#include "llbutton.h"
|
||||
#include "llcheckboxctrl.h"
|
||||
#include "llcombobox.h"
|
||||
#include "llloadingindicator.h"
|
||||
#include "llmultisliderctrl.h"
|
||||
#include "llnotifications.h"
|
||||
#include "llnotificationsutil.h"
|
||||
#include "llspinctrl.h"
|
||||
#include "lltimectrl.h"
|
||||
|
||||
// newview
|
||||
#include "llagent.h"
|
||||
#include "llregioninfomodel.h"
|
||||
#include "llviewerregion.h"
|
||||
|
||||
#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)
|
||||
{
|
||||
}
|
||||
|
||||
// virtual
|
||||
BOOL LLFloaterEditExtDayCycle::postBuild()
|
||||
{
|
||||
mDayCycleNameEditor = getChild<LLLineEditor>("day_cycle_name");
|
||||
mDayCyclesCombo = getChild<LLComboBox>("day_cycle_combo");
|
||||
|
||||
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();
|
||||
|
||||
// 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();
|
||||
}
|
||||
|
||||
// virtual
|
||||
void LLFloaterEditExtDayCycle::onClose(bool app_quitting)
|
||||
{
|
||||
if (!app_quitting) // there's no point to change environment if we're quitting
|
||||
{
|
||||
LLEnvironment::instance().applyChosenEnvironment();
|
||||
}
|
||||
}
|
||||
|
||||
// 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();
|
||||
//
|
||||
// // add sliders
|
||||
//
|
||||
// LL_DEBUGS() << "Adding " << LLWLParamManager::getInstance()->mDay.mTimeMap.size() << " keys to slider" << 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)
|
||||
// {
|
||||
// addSliderKey(it->first * sHoursPerDay, it->second);
|
||||
// }
|
||||
//
|
||||
// // set drop-down menu to match preset of currently-selected keyframe (one is automatically selected initially)
|
||||
// const std::string& cur_sldr = mKeysSlider->getCurSlider();
|
||||
// if (strlen(cur_sldr.c_str()) > 0) // only do this if there is a curSldr, otherwise we put an invalid entry into the map
|
||||
// {
|
||||
// mSkyPresetsCombo->selectByValue(mSliderToKey[cur_sldr].keyframe.toStringVal());
|
||||
// }
|
||||
//
|
||||
// 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();
|
||||
}
|
||||
|
||||
// static
|
||||
std::string LLFloaterEditExtDayCycle::getRegionName()
|
||||
{
|
||||
return gAgent.getRegion() ? gAgent.getRegion()->getName() : LLTrans::getString("Unknown");
|
||||
}
|
||||
|
|
@ -0,0 +1,135 @@
|
|||
/**
|
||||
* @file llfloatereditextdaycycle.h
|
||||
* @brief Floater to create or edit a day cycle
|
||||
*
|
||||
* $LicenseInfo:firstyear=2011&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2011, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLFLOATEREDITEXTDAYCYCLE_H
|
||||
#define LL_LLFLOATEREDITEXTDAYCYCLE_H
|
||||
|
||||
#include "llfloater.h"
|
||||
|
||||
class LLCheckBoxCtrl;
|
||||
class LLComboBox;
|
||||
class LLLineEditor;
|
||||
class LLMultiSliderCtrl;
|
||||
class LLTimeCtrl;
|
||||
|
||||
/**
|
||||
* Floater for creating or editing a day cycle.
|
||||
*/
|
||||
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();
|
||||
|
||||
/// makes sure day cycle data structure has what's in menu
|
||||
void applyTrack();
|
||||
|
||||
/// refresh the sky presets combobox
|
||||
void refreshSkyPresetsList();
|
||||
|
||||
/// 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 onKeyPresetChanged(); /// sky preset selected
|
||||
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();
|
||||
void onBtnSave();
|
||||
void onBtnCancel();
|
||||
|
||||
bool onSaveAnswer(const LLSD& notification, const LLSD& response);
|
||||
void onSaveConfirmed();
|
||||
|
||||
void onDayCycleListChange();
|
||||
void onSkyPresetListChange();
|
||||
|
||||
static std::string getRegionName();
|
||||
|
||||
/// 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;
|
||||
|
||||
// map of sliders to parameters
|
||||
// std::map<std::string, SliderKey> mSliderToKey;
|
||||
};
|
||||
|
||||
#endif // LL_LLFloaterEditExtDayCycle_H
|
||||
|
|
@ -0,0 +1,396 @@
|
|||
/**
|
||||
* @file llpanelenvironment.cpp
|
||||
* @brief LLPanelExperiences class implementation
|
||||
*
|
||||
* $LicenseInfo:firstyear=2013&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2013, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
|
||||
#include "llpanelprofile.h"
|
||||
#include "lluictrlfactory.h"
|
||||
#include "llexperiencecache.h"
|
||||
#include "llagent.h"
|
||||
|
||||
#include "llviewerregion.h"
|
||||
#include "llpanelenvironment.h"
|
||||
#include "llslurl.h"
|
||||
#include "lllayoutstack.h"
|
||||
|
||||
static LLPanelInjector<LLPanelEnvironmentInfo> register_environment_panel("environment_panel");
|
||||
|
||||
LLPanelEnvironmentInfo::LLPanelEnvironmentInfo():
|
||||
mEnableEditing(false),
|
||||
mRegionSettingsRadioGroup(NULL),
|
||||
mDayLengthSlider(NULL),
|
||||
mDayOffsetSlider(NULL),
|
||||
mAllowOverRide(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
// virtual
|
||||
BOOL LLPanelEnvironmentInfo::postBuild()
|
||||
{
|
||||
mRegionSettingsRadioGroup = getChild<LLRadioGroup>("environment_select_radio_group");
|
||||
mRegionSettingsRadioGroup->setCommitCallback(boost::bind(&LLPanelEnvironmentInfo::onSwitchDefaultSelection, this));
|
||||
|
||||
mDayLengthSlider = getChild<LLSliderCtrl>("day_length_sld");
|
||||
mDayOffsetSlider = getChild<LLSliderCtrl>("day_offset_sld");
|
||||
mAllowOverRide = getChild<LLCheckBoxCtrl>("allow_override_chk");
|
||||
|
||||
childSetCommitCallback("edit_btn", boost::bind(&LLPanelEnvironmentInfo::onBtnEdit, this), NULL);
|
||||
childSetCommitCallback("apply_btn", boost::bind(&LLPanelEnvironmentInfo::onBtnApply, this), NULL);
|
||||
childSetCommitCallback("cancel_btn", boost::bind(&LLPanelEnvironmentInfo::onBtnCancel, this), NULL);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// virtual
|
||||
void LLPanelEnvironmentInfo::onOpen(const LLSD& key)
|
||||
{
|
||||
LL_DEBUGS("Windlight") << "Panel opened, refreshing" << LL_ENDL;
|
||||
refresh();
|
||||
}
|
||||
|
||||
// virtual
|
||||
void LLPanelEnvironmentInfo::onVisibilityChange(BOOL new_visibility)
|
||||
{
|
||||
// If hiding (user switched to another tab or closed the floater),
|
||||
// display user's preferred environment.
|
||||
// switching back and forth between agent's environment and the one being edited.
|
||||
//
|
||||
}
|
||||
|
||||
void LLPanelEnvironmentInfo::refresh()
|
||||
{
|
||||
#if 0
|
||||
if (gDisconnected)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
populateWaterPresetsList();
|
||||
populateSkyPresetsList();
|
||||
populateDayCyclesList();
|
||||
|
||||
// Init radio groups.
|
||||
const LLEnvironmentSettings& settings = LLEnvManagerNew::instance().getRegionSettings();
|
||||
const LLSD& dc = settings.getWLDayCycle();
|
||||
LLSD::Real first_frame_time = dc.size() > 0 ? dc[0][0].asReal() : 0.0f;
|
||||
const bool use_fixed_sky = dc.size() == 1 && first_frame_time < 0;
|
||||
mRegionSettingsRadioGroup->setSelectedIndex(settings.getSkyMap().size() == 0 ? 0 : 1);
|
||||
mDayCycleSettingsRadioGroup->setSelectedIndex(use_fixed_sky ? 0 : 1);
|
||||
|
||||
setControlsEnabled(mEnableEditing);
|
||||
|
||||
setDirty(false);
|
||||
#endif
|
||||
}
|
||||
|
||||
void LLPanelEnvironmentInfo::setControlsEnabled(bool enabled)
|
||||
{
|
||||
mRegionSettingsRadioGroup->setEnabled(enabled);
|
||||
|
||||
mDayLengthSlider->setEnabled(false);
|
||||
mDayOffsetSlider->setEnabled(false);
|
||||
mAllowOverRide->setEnabled(enabled);
|
||||
|
||||
getChildView("edit_btn")->setEnabled(false);
|
||||
|
||||
getChildView("apply_btn")->setEnabled(enabled);
|
||||
getChildView("cancel_btn")->setEnabled(enabled);
|
||||
|
||||
if (enabled)
|
||||
{
|
||||
// Enable/disable some controls based on currently selected radio buttons.
|
||||
bool use_defaults = mRegionSettingsRadioGroup->getSelectedIndex() == 0;
|
||||
getChild<LLView>("edit_btn")->setEnabled(!use_defaults);
|
||||
|
||||
mDayLengthSlider->setEnabled(!use_defaults);
|
||||
mDayOffsetSlider->setEnabled(!use_defaults);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelEnvironmentInfo::setApplyProgress(bool started)
|
||||
{
|
||||
// LLLoadingIndicator* indicator = getChild<LLLoadingIndicator>("progress_indicator");
|
||||
//
|
||||
// indicator->setVisible(started);
|
||||
//
|
||||
// if (started)
|
||||
// {
|
||||
// indicator->start();
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// indicator->stop();
|
||||
// }
|
||||
}
|
||||
|
||||
void LLPanelEnvironmentInfo::setDirty(bool dirty)
|
||||
{
|
||||
getChildView("apply_btn")->setEnabled(dirty);
|
||||
getChildView("cancel_btn")->setEnabled(dirty);
|
||||
}
|
||||
|
||||
// void LLPanelEnvironmentInfo::sendRegionSunUpdate()
|
||||
// {
|
||||
// #if 0
|
||||
// LLRegionInfoModel& region_info = LLRegionInfoModel::instance();
|
||||
//
|
||||
// // If the region is being switched to fixed sky,
|
||||
// // change the region's sun hour according to the (fixed) sun position.
|
||||
// // This is needed for llGetSunDirection() LSL function to work properly (STORM-1330).
|
||||
// const LLSD& sky_map = mNewRegionSettings.getSkyMap();
|
||||
// bool region_use_fixed_sky = sky_map.size() == 1;
|
||||
// if (region_use_fixed_sky)
|
||||
// {
|
||||
// LLWLParamSet param_set;
|
||||
// llassert(sky_map.isMap());
|
||||
// param_set.setAll(sky_map.beginMap()->second);
|
||||
// F32 sun_angle = param_set.getSunAngle();
|
||||
//
|
||||
// LL_DEBUGS("Windlight Sync") << "Old sun hour: " << region_info.mSunHour << LL_ENDL;
|
||||
// // convert value range from 0..2pi to 6..30
|
||||
// region_info.mSunHour = fmodf((sun_angle / F_TWO_PI) * 24.f, 24.f) + 6.f;
|
||||
// }
|
||||
//
|
||||
// region_info.setUseFixedSun(region_use_fixed_sky);
|
||||
// region_info.mUseEstateSun = !region_use_fixed_sky;
|
||||
// LL_DEBUGS("Windlight Sync") << "Sun hour: " << region_info.mSunHour << LL_ENDL;
|
||||
//
|
||||
// region_info.sendRegionTerrain(LLFloaterRegionInfo::getLastInvoice());
|
||||
// #endif
|
||||
// }
|
||||
|
||||
// void LLPanelEnvironmentInfo::fixEstateSun()
|
||||
// {
|
||||
// // We don't support fixed sun estates anymore and need to fix
|
||||
// // such estates for region day cycle to take effect.
|
||||
// // *NOTE: Assuming that current estate settings have arrived already.
|
||||
// LLEstateInfoModel& estate_info = LLEstateInfoModel::instance();
|
||||
// if (estate_info.getUseFixedSun())
|
||||
// {
|
||||
// LL_INFOS() << "Switching estate to global sun" << LL_ENDL;
|
||||
// estate_info.setUseFixedSun(false);
|
||||
// estate_info.sendEstateInfo();
|
||||
// }
|
||||
// }
|
||||
|
||||
// void LLPanelEnvironmentInfo::populateWaterPresetsList()
|
||||
// {
|
||||
// #if 0
|
||||
// mWaterPresetCombo->removeall();
|
||||
//
|
||||
// // If the region already has water params, add them to the list.
|
||||
// const LLEnvironmentSettings& region_settings = LLEnvManagerNew::instance().getRegionSettings();
|
||||
// if (region_settings.getWaterParams().size() != 0)
|
||||
// {
|
||||
// const std::string& region_name = gAgent.getRegion()->getName();
|
||||
// mWaterPresetCombo->add(region_name, LLWLParamKey(region_name, LLEnvKey::SCOPE_REGION).toLLSD());
|
||||
// mWaterPresetCombo->addSeparator();
|
||||
// }
|
||||
//
|
||||
// std::list<std::string> user_presets, system_presets;
|
||||
// LLWaterParamManager::instance().getPresetNames(user_presets, system_presets);
|
||||
//
|
||||
// // Add local user presets first.
|
||||
// for (std::list<std::string>::const_iterator it = user_presets.begin(); it != user_presets.end(); ++it)
|
||||
// {
|
||||
// mWaterPresetCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toLLSD());
|
||||
// }
|
||||
//
|
||||
// if (user_presets.size() > 0)
|
||||
// {
|
||||
// mWaterPresetCombo->addSeparator();
|
||||
// }
|
||||
//
|
||||
// // Add local system presets.
|
||||
// for (std::list<std::string>::const_iterator it = system_presets.begin(); it != system_presets.end(); ++it)
|
||||
// {
|
||||
// mWaterPresetCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toLLSD());
|
||||
// }
|
||||
//
|
||||
// // There's no way to select current preset because its name is not stored on server.
|
||||
// #endif
|
||||
// }
|
||||
//
|
||||
// void LLPanelEnvironmentInfo::populateSkyPresetsList()
|
||||
// {
|
||||
// #if 0
|
||||
// mSkyPresetCombo->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);
|
||||
//
|
||||
// // Add region presets.
|
||||
// std::string region_name = gAgent.getRegion() ? gAgent.getRegion()->getName() : LLTrans::getString("Unknown");
|
||||
// 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 + " (" + region_name + ")";
|
||||
// mSkyPresetCombo->add(item_title, LLWLParamKey(preset_name, LLEnvKey::SCOPE_REGION).toStringVal());
|
||||
// }
|
||||
//
|
||||
// if (!region_presets.empty())
|
||||
// {
|
||||
// mSkyPresetCombo->addSeparator();
|
||||
// }
|
||||
//
|
||||
// // Add user presets.
|
||||
// for (LLWLParamManager::preset_name_list_t::const_iterator it = user_presets.begin(); it != user_presets.end(); ++it)
|
||||
// {
|
||||
// mSkyPresetCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toStringVal());
|
||||
// }
|
||||
//
|
||||
// if (!user_presets.empty())
|
||||
// {
|
||||
// mSkyPresetCombo->addSeparator();
|
||||
// }
|
||||
//
|
||||
// // Add system presets.
|
||||
// for (LLWLParamManager::preset_name_list_t::const_iterator it = sys_presets.begin(); it != sys_presets.end(); ++it)
|
||||
// {
|
||||
// mSkyPresetCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toStringVal());
|
||||
// }
|
||||
//
|
||||
// // Select current preset.
|
||||
// LLSD sky_map = LLEnvManagerNew::instance().getRegionSettings().getSkyMap();
|
||||
// if (sky_map.size() == 1) // if the region is set to fixed sky
|
||||
// {
|
||||
// std::string preset_name = sky_map.beginMap()->first;
|
||||
// mSkyPresetCombo->selectByValue(LLWLParamKey(preset_name, LLEnvKey::SCOPE_REGION).toStringVal());
|
||||
// }
|
||||
// #endif
|
||||
// }
|
||||
//
|
||||
// void LLPanelEnvironmentInfo::populateDayCyclesList()
|
||||
// {
|
||||
// #if 0
|
||||
// mDayCyclePresetCombo->removeall();
|
||||
//
|
||||
// // If the region already has env. settings, add its day cycle to the list.
|
||||
// const LLSD& cur_region_dc = LLEnvManagerNew::instance().getRegionSettings().getWLDayCycle();
|
||||
// if (cur_region_dc.size() != 0)
|
||||
// {
|
||||
// LLViewerRegion* region = gAgent.getRegion();
|
||||
// llassert(region != NULL);
|
||||
//
|
||||
// LLWLParamKey key(region->getName(), LLEnvKey::SCOPE_REGION);
|
||||
// mDayCyclePresetCombo->add(region->getName(), key.toStringVal());
|
||||
// mDayCyclePresetCombo->addSeparator();
|
||||
// }
|
||||
//
|
||||
// // Add local user day cycles.
|
||||
// LLDayCycleManager::preset_name_list_t user_days, sys_days;
|
||||
// LLDayCycleManager::instance().getPresetNames(user_days, sys_days);
|
||||
// for (LLDayCycleManager::preset_name_list_t::const_iterator it = user_days.begin(); it != user_days.end(); ++it)
|
||||
// {
|
||||
// mDayCyclePresetCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toStringVal());
|
||||
// }
|
||||
//
|
||||
// if (user_days.size() > 0)
|
||||
// {
|
||||
// mDayCyclePresetCombo->addSeparator();
|
||||
// }
|
||||
//
|
||||
// // Add local system day cycles.
|
||||
// for (LLDayCycleManager::preset_name_list_t::const_iterator it = sys_days.begin(); it != sys_days.end(); ++it)
|
||||
// {
|
||||
// mDayCyclePresetCombo->add(*it, LLWLParamKey(*it, LLEnvKey::SCOPE_LOCAL).toStringVal());
|
||||
// }
|
||||
//
|
||||
// // Current day cycle is already selected.
|
||||
// #endif
|
||||
// }
|
||||
|
||||
void LLPanelEnvironmentInfo::onSwitchDefaultSelection()
|
||||
{
|
||||
bool use_defaults = mRegionSettingsRadioGroup->getSelectedIndex() == 0;
|
||||
getChild<LLView>("user_environment_settings")->setEnabled(!use_defaults);
|
||||
|
||||
setDirty(true);
|
||||
}
|
||||
|
||||
|
||||
void LLPanelEnvironmentInfo::onBtnApply()
|
||||
{
|
||||
doApply();
|
||||
}
|
||||
|
||||
void LLPanelEnvironmentInfo::doApply()
|
||||
{
|
||||
}
|
||||
|
||||
void LLPanelEnvironmentInfo::onBtnCancel()
|
||||
{
|
||||
// Reload last saved region settings.
|
||||
refresh();
|
||||
}
|
||||
|
||||
void LLPanelEnvironmentInfo::onBtnEdit()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
// void LLPanelEnvironmentInfo::onRegionSettingschange()
|
||||
// {
|
||||
// LL_DEBUGS("Windlight") << "Region settings changed, refreshing" << LL_ENDL;
|
||||
// refresh();
|
||||
//
|
||||
// // Stop applying progress indicator (it may be running if it's us who initiated settings update).
|
||||
// setApplyProgress(false);
|
||||
// }
|
||||
//
|
||||
// void LLPanelEnvironmentInfo::onRegionSettingsApplied(bool ok)
|
||||
// {
|
||||
// // If applying new settings has failed, stop the indicator right away.
|
||||
// // Otherwise it will be stopped when we receive the updated settings from server.
|
||||
// if (ok)
|
||||
// {
|
||||
// // Set the region sun phase/flags according to the chosen new preferences.
|
||||
// //
|
||||
// // If we do this earlier we may get jerky transition from fixed sky to a day cycle (STORM-1481).
|
||||
// // That is caused by the simulator re-sending the region info, which in turn makes us
|
||||
// // re-request and display old region environment settings while the new ones haven't been applied yet.
|
||||
// sendRegionSunUpdate();
|
||||
//
|
||||
// // Switch estate to not using fixed sun for the region day cycle to work properly (STORM-1506).
|
||||
// fixEstateSun();
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// setApplyProgress(false);
|
||||
//
|
||||
// // We need to re-request environment setting here,
|
||||
// // otherwise our subsequent attempts to change region settings will fail with the following error:
|
||||
// // "Unable to update environment settings because the last update your viewer saw was not the same
|
||||
// // as the last update sent from the simulator. Try sending your update again, and if this
|
||||
// // does not work, try leaving and returning to the region."
|
||||
// // LLEnvManagerNew::instance().requestRegionSettings();
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
/**
|
||||
* @file llpanelenvironment.h
|
||||
* @brief LLPanelExperiences class definition
|
||||
*
|
||||
* $LicenseInfo:firstyear=2013&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2013, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLPANELENVIRONMENT_H
|
||||
#define LL_LLPANELENVIRONMENT_H
|
||||
|
||||
#include "llaccordionctrltab.h"
|
||||
#include "llradiogroup.h"
|
||||
#include "llcheckboxctrl.h"
|
||||
#include "llsliderctrl.h"
|
||||
#include "llsettingsdaycycle.h"
|
||||
|
||||
class LLViewerRegion;
|
||||
|
||||
class LLPanelEnvironmentInfo : public LLPanel
|
||||
{
|
||||
LOG_CLASS(LLPanelEnvironmentInfo);
|
||||
|
||||
public:
|
||||
LLPanelEnvironmentInfo();
|
||||
|
||||
// LLPanel
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ void onOpen(const LLSD& key);
|
||||
|
||||
// LLView
|
||||
/*virtual*/ void onVisibilityChange(BOOL new_visibility);
|
||||
|
||||
|
||||
virtual void refresh();
|
||||
|
||||
protected:
|
||||
void setControlsEnabled(bool enabled);
|
||||
void setApplyProgress(bool started);
|
||||
void setDirty(bool dirty);
|
||||
|
||||
void onSwitchDefaultSelection();
|
||||
|
||||
void onBtnApply();
|
||||
void onBtnCancel();
|
||||
void onBtnEdit();
|
||||
|
||||
virtual void doApply(); // = 0;
|
||||
|
||||
/// New environment settings that are being applied to the region.
|
||||
// LLEnvironmentSettings mNewRegionSettings;
|
||||
|
||||
bool mEnableEditing;
|
||||
|
||||
LLRadioGroup* mRegionSettingsRadioGroup;
|
||||
LLSliderCtrl* mDayLengthSlider;
|
||||
LLSliderCtrl* mDayOffsetSlider;
|
||||
LLCheckBoxCtrl* mAllowOverRide;
|
||||
|
||||
LLSettingsDay::ptr_t mEditingDayCycle;
|
||||
};
|
||||
#endif // LL_LLPANELEXPERIENCES_H
|
||||
|
|
@ -58,6 +58,7 @@
|
|||
#include "llfloaterdeleteprefpreset.h"
|
||||
#include "llfloaterdestinations.h"
|
||||
#include "llfloatereditdaycycle.h"
|
||||
#include "llfloatereditextdaycycle.h"
|
||||
#include "llfloatereditsky.h"
|
||||
#include "llfloatereditwater.h"
|
||||
#include "llfloaterenvironmentsettings.h"
|
||||
|
|
@ -225,6 +226,9 @@ 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("event", "floater_event.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterEvent>);
|
||||
LLFloaterReg::add("experiences", "floater_experiences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterExperiences>);
|
||||
LLFloaterReg::add("experience_profile", "floater_experienceprofile.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterExperienceProfile>);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,485 @@
|
|||
<?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">
|
||||
|
||||
<string name="title_new">Create a New Day Cycle</string>
|
||||
<string name="title_edit">Edit Day Cycle</string>
|
||||
<string name="hint_new">Name your day cycle, adjust the controls to create it, and click "Save".</string>
|
||||
<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>
|
||||
Loading…
Reference in New Issue