MAINT-8344 Day cycle editor (part 2)

master
andreykproductengine 2018-05-16 20:25:42 +03:00
parent 3925e37532
commit 28d0fa0c69
11 changed files with 331 additions and 241 deletions

View File

@ -502,6 +502,53 @@ LLSettingsDay::KeyframeList_t LLSettingsDay::getTrackKeyframes(S32 trackno)
return keyframes;
}
bool LLSettingsDay::moveTrackKeyframe(S32 trackno, F32 old_frame, F32 new_frame)
{
if ((trackno < 0) || (trackno >= TRACK_MAX))
{
LL_WARNS("DAYCYCLE") << "Attempt get track (#" << trackno << ") out of range!" << LL_ENDL;
return false;
}
if (old_frame == new_frame)
{
return false;
}
CycleTrack_t &track = mDayTracks[trackno];
CycleTrack_t::iterator iter = track.find(old_frame);
if (iter != track.end())
{
LLSettingsBase::ptr_t base = iter->second;
track.erase(iter);
track[llclamp(new_frame, 0.0f, 1.0f)] = base;
return true;
}
return false;
}
bool LLSettingsDay::removeTrackKeyframe(S32 trackno, F32 frame)
{
if ((trackno < 0) || (trackno >= TRACK_MAX))
{
LL_WARNS("DAYCYCLE") << "Attempt get track (#" << trackno << ") out of range!" << LL_ENDL;
return false;
}
CycleTrack_t &track = mDayTracks[trackno];
CycleTrack_t::iterator iter = track.find(frame);
if (iter != track.end())
{
LLSettingsBase::ptr_t base = iter->second;
track.erase(iter);
return true;
}
return false;
}
void LLSettingsDay::setWaterAtKeyframe(const LLSettingsWaterPtr_t &water, F32 keyframe)
{
mDayTracks[TRACK_WATER][llclamp(keyframe, 0.0f, 1.0f)] = water;

View File

@ -86,6 +86,8 @@ public:
//---------------------------------------------------------------------
KeyframeList_t getTrackKeyframes(S32 track);
bool moveTrackKeyframe(S32 track, F32 old_frame, F32 new_frame);
bool removeTrackKeyframe(S32 track, F32 frame);
void setWaterAtKeyframe(const LLSettingsWaterPtr_t &water, F32 keyframe);
const LLSettingsWaterPtr_t getWaterAtKeyframe(F32 keyframe);

View File

@ -52,22 +52,24 @@
#include "lltrans.h"
static const std::string track_tabs[] = {
"water_track",
"sky4_track",
"sky3_track",
"sky2_track",
"sky1_track",
};
"water_track",
"sky1_track",
"sky2_track",
"sky3_track",
"sky4_track",
};
LLFloaterEditExtDayCycle::LLFloaterEditExtDayCycle(const LLSD &key):
LLFloater(key),
mSaveButton(NULL),
mCancelButton(NULL),
mCurrentTrack(1)
// mDayCyclesCombo(NULL)
// , mTimeSlider(NULL)
// , mKeysSlider(NULL)
mDayLength(0),
mDayOffset(0),
mCurrentTrack(4),
mTimeSlider(NULL),
mFramesSlider(NULL),
mCurrentTimeLabel(NULL)
// , mTimeCtrl(NULL)
// , mMakeDefaultCheckBox(NULL)
// ,
@ -82,24 +84,24 @@ BOOL LLFloaterEditExtDayCycle::postBuild()
getChild<LLButton>("delete_frame")->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onRemoveTrack, this));
getChild<LLLineEditor>("day_cycle_name")->setKeystrokeCallback(boost::bind(&LLFloaterEditExtDayCycle::onCommitName, this, _1, _2), NULL);
// mDayCyclesCombo = getChild<LLComboBox>("day_cycle_preset_combo");
// mTimeSlider = getChild<LLMultiSliderCtrl>("WLTimeSlider");
// mKeysSlider = getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
// mTimeCtrl = getChild<LLTimeCtrl>("time");
mSaveButton = getChild<LLButton>("save_btn", true);
mCancelButton = getChild<LLButton>("cancel_btn", true);
mUploadButton = getChild<LLButton>("upload_btn", true);
mKeysSlider = getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
mSkyTabContainer = getChild<LLView>("frame_settings_sky", true);
mWaterTabContainer = getChild<LLView>("frame_settings_water", true);
// mMakeDefaultCheckBox = getChild<LLCheckBoxCtrl>("make_default_cb");
mTimeSlider = getChild<LLMultiSliderCtrl>("WLTimeSlider");
mFramesSlider = getChild<LLMultiSliderCtrl>("WLDayCycleFrames");
mSkyTabLayoutContainer = getChild<LLView>("frame_settings_sky", true);
mWaterTabLayoutContainer = getChild<LLView>("frame_settings_water", true);
mCurrentTimeLabel = getChild<LLTextBox>("current_time", true);
//initCallbacks();
mSaveButton->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onBtnSave, this));
mCancelButton->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onBtnCancel, this));
mUploadButton->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onUpload, this));
mTimeSlider->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onTimeSliderMoved, this));
mFramesSlider->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onFrameSliderCallback, this));
mTimeSlider->addSlider(0);
getChild<LLButton>("sky4_track", true)->setToggleState(true);
@ -115,8 +117,14 @@ void LLFloaterEditExtDayCycle::onOpen(const LLSD& key)
{
// TODO/TEMP
LLSettingsDay::ptr_t pday = LLEnvironment::instance().getEnvironmentDay(LLEnvironment::ENV_REGION);
LLEnvironment::EnvSelection_t env = LLEnvironment::ENV_REGION; // should not be used
LLSettingsDay::ptr_t pday = LLEnvironment::instance().getEnvironmentDay(env);
mEditDay = pday->buildClone(); // pday should be passed as parameter
S64Seconds daylength = LLEnvironment::instance().getEnvironmentDayLength(env);
S64Seconds dayoffset = LLEnvironment::instance().getEnvironmentDayOffset(env);
mDayLength = daylength; // should be passed as parameter
mDayOffset = dayoffset; // should be passed as parameter
}
LLLineEditor* name_field = getChild<LLLineEditor>("day_cycle_name");
@ -124,35 +132,34 @@ void LLFloaterEditExtDayCycle::onOpen(const LLSD& key)
selectTrack(mCurrentTrack);
/* TODO
if (mEditDay->hasSetting("cycle length")) // todo: figure out name
// time labels
mCurrentTimeLabel->setTextArg("[PRCNT]", std::string("0"));
const S32 max_elm = 5;
if (mDayLength.value() != 0)
{
// extract setting
S32 extracted_time =
std::string time = LLTrans::getString("time_label", LLSD("TIME",(extracted_time * 0..100%) + offset));
std::string descr = LLTrans::getString("0_label", LLSD("DSC",time));
getChild<LLView>("p0")->setLabel(descr);
...
getChild<LLView>("p1")->setLabel(descr);
time =
descr =
getChild<LLView>("p2")->setLabel(descr);
time =
descr =
getChild<LLView>("p3")->setLabel(descr);
time =
descr =
getChild<LLView>("p4")->setLabel(descr);
F32Hours hrs;
LLUIString formatted_label = getString("time_label");
for (int i = 0; i < max_elm; i++)
{
// Todo: if possible, find a better way, both to get string and child names
hrs = ((mDayLength / (max_elm - 1)) * i) + mDayOffset;
formatted_label.setArg("[TIME]", llformat("%.1f", hrs.value()));
getChild<LLTextBox>("p" + llformat("%d", i), true)->setTextArg("[DSC]", formatted_label.getString());
}
hrs = mDayOffset;
formatted_label.setArg("[TIME]", llformat("%.1f", hrs.value()));
mCurrentTimeLabel->setTextArg("[DSC]", formatted_label.getString());
}
else
{
std::string descr = LLTrans::getString("0_label", LLSD());
getChild<LLView>("p0")->setLabel(descr);
for (int i = 0; i < max_elm; i++)
{
getChild<LLTextBox>("p" + llformat("%d", i), true)->setTextArg("[DSC]", std::string());
}
mCurrentTimeLabel->setTextArg("[DSC]", std::string());
}
*/
//todo: add time slider setting
/*list_name_id_t getSkyList() const;
list_name_id_t getWaterList() const;
@ -257,21 +264,33 @@ void LLFloaterEditExtDayCycle::onBtnCancel()
void LLFloaterEditExtDayCycle::onAddTrack()
{
F32 frame = 0; // temp?
mKeysSlider->addSlider(frame);
F32 frame = mTimeSlider->getCurSliderValue();
LLSettingsBase::ptr_t setting;
// todo: expand to generate from panels instead of using defaults
if (mEditDay->getSettingsAtKeyframe(frame, mCurrentTrack).get() != NULL) //temp check? todo: disable button in such cases
{
return;
}
if (mCurrentTrack == 0)
{
mEditDay->setWaterAtKeyframe(LLSettingsVOWater::buildDefaultWater(), frame);
setting = LLSettingsVOWater::buildDefaultWater();
mEditDay->setWaterAtKeyframe(std::dynamic_pointer_cast<LLSettingsWater>(setting), frame);
}
else
{
mEditDay->setSkyAtKeyframe(LLSettingsVOSky::buildDefaultSky(), frame, mCurrentTrack);
setting = LLSettingsVOSky::buildDefaultSky();
mEditDay->setSkyAtKeyframe(std::dynamic_pointer_cast<LLSettingsSky>(setting), frame, mCurrentTrack);
}
addSliderFrame(frame, setting);
updateTabs();
}
void LLFloaterEditExtDayCycle::onRemoveTrack()
{
//mKeysSlider->deleteCurSlider();
F32 frame = mTimeSlider->getCurSliderValue();
mEditDay->removeTrackKeyframe(mCurrentTrack, frame);
removeCurrentSliderFrame();
//mFramesSlider->deleteCurSlider();
}
void LLFloaterEditExtDayCycle::onCommitName(class LLLineEditor* caller, void* user_data)
@ -285,8 +304,68 @@ void LLFloaterEditExtDayCycle::onTrackSelectionCallback(const LLSD& user_data)
selectTrack(track_index);
}
void LLFloaterEditExtDayCycle::onFrameSliderCallback()
{
if (mFramesSlider->getValue().size() == 0)
{
mLastFrameSlider.clear();
return;
}
// make sure we have a slider
const std::string& cur_sldr = mFramesSlider->getCurSlider();
if (cur_sldr == "")
{
mLastFrameSlider.clear();
return;
}
F32 new_frame = mFramesSlider->getCurSliderValue();
// todo: add safety checks, user shouldn't be capable of moving one frame over another or move missing frame
keymap_t::iterator iter = mSliderKeyMap.find(cur_sldr);
if (iter != mSliderKeyMap.end() && /*temp? until disabling mechanics*/ mEditDay->getSettingsAtKeyframe(new_frame, mCurrentTrack).get() == NULL)
{
LL_DEBUGS() << "Moving frame from " << iter->second.first << " to " << new_frame << LL_ENDL;
if (mEditDay->moveTrackKeyframe(mCurrentTrack, iter->second.first, new_frame))
{
iter->second.first = new_frame;
}
}
if (mLastFrameSlider != cur_sldr)
{
// technically should not be possible for both frame and slider to change
// but for safety, assume that they can change independently and both
mLastFrameSlider = cur_sldr;
updateTabs();
}
// updateTrack();
// reset last known position
}
void LLFloaterEditExtDayCycle::onTimeSliderMoved()
{
// Todo: safety checks
// Update label
F32 time = mTimeSlider->getCurSliderValue();
mCurrentTimeLabel->setTextArg("[PRCNT]", llformat("%.0f", time * 100));
if (mDayLength.value() != 0)
{
F32Hours hrs = (mDayLength * time) + mDayOffset;
LLUIString formatted_label = getString("time_label");
formatted_label.setArg("[TIME]", llformat("%.1f", hrs.value()));
mCurrentTimeLabel->setTextArg("[DSC]", formatted_label.getString());
}
else
{
mCurrentTimeLabel->setTextArg("[DSC]", std::string());
}
//Todo: update something related to time/play?
}
void LLFloaterEditExtDayCycle::selectTrack(U32 track_index)
{
// todo: safety checks
mCurrentTrack = track_index;
LLButton* button = getChild<LLButton>(track_tabs[track_index], true);
if (button->getToggleState())
@ -294,24 +373,22 @@ void LLFloaterEditExtDayCycle::selectTrack(U32 track_index)
return;
}
for (int i = 0; i < 5; i++)
for (int i = 0; i < 5; i++) // yse max value
{
getChild<LLButton>(track_tabs[i], true)->setToggleState(false);
}
button->setToggleState(true);
updateTabs();
bool show_water = mCurrentTrack == 0;
mSkyTabLayoutContainer->setVisible(!show_water);
mWaterTabLayoutContainer->setVisible(show_water);
updateSlider();
}
void LLFloaterEditExtDayCycle::updateTabs()
{
bool show_water = mCurrentTrack == 0;
mSkyTabContainer->setVisible(!show_water);
mWaterTabContainer->setVisible(show_water);
if (show_water)
if (mCurrentTrack == 0)
{
updateWaterTabs();
}
@ -323,11 +400,13 @@ void LLFloaterEditExtDayCycle::updateTabs()
void LLFloaterEditExtDayCycle::updateWaterTabs()
{
const LLSettingsWaterPtr_t p_water = mEditDay->getWaterAtKeyframe(mKeysSlider->getCurSliderValue());
// todo: substitute with mSliderKeyMap?
const LLSettingsWaterPtr_t p_water = mEditDay->getWaterAtKeyframe(mFramesSlider->getCurSliderValue());
// Compiler warnings from getChild about LLPanelSettingsWaterMainTab not being complete/missing params constructor...
// Todo: fix class to work with getChild()
LLPanelSettingsWaterMainTab* panel = mWaterTabContainer->findChild<LLPanelSettingsWaterMainTab>("water_panel", true);
// Todo: fix class to work with getChild()?
LLView* tab_container = mWaterTabLayoutContainer->getChild<LLView>("water_tabs"); //can't extract panels directly, since they are in 'tuple'
LLPanelSettingsWaterMainTab* panel = dynamic_cast<LLPanelSettingsWaterMainTab*>(tab_container->getChildView("water_panel"));
if (panel)
{
panel->setWater(p_water); // todo: Null disables
@ -336,22 +415,25 @@ void LLFloaterEditExtDayCycle::updateWaterTabs()
void LLFloaterEditExtDayCycle::updateSkyTabs()
{
const LLSettingsSkyPtr_t p_sky = mEditDay->getSkyAtKeyframe(mKeysSlider->getCurSliderValue(), mCurrentTrack);
// todo: substitute with mSliderKeyMap?
const LLSettingsSkyPtr_t p_sky = mEditDay->getSkyAtKeyframe(mFramesSlider->getCurSliderValue(), mCurrentTrack);
LLView* tab_container = mSkyTabLayoutContainer->getChild<LLView>("sky_tabs"); //can't extract panels directly, since they are in 'tuple'
// Compiler warnings from getChild about tabs...
// Todo: fix class
LLPanelSettingsSky* panel;
panel = mSkyTabContainer->findChild<LLPanelSettingsSky>("atmosphere_panel", true);
panel = dynamic_cast<LLPanelSettingsSky*>(tab_container->getChildView("atmosphere_panel"));
if (panel)
{
panel->setSky(p_sky); // todo: Null disables
}
panel = mSkyTabContainer->findChild<LLPanelSettingsSky>("clouds_panel", true);
panel = dynamic_cast<LLPanelSettingsSky*>(tab_container->getChildView("clouds_panel"));
if (panel)
{
panel->setSky(p_sky);
}
panel = mSkyTabContainer->findChild<LLPanelSettingsSky>("moon_panel", true);
panel = dynamic_cast<LLPanelSettingsSky*>(tab_container->getChildView("moon_panel"));
if (panel)
{
panel->setSky(p_sky);
@ -360,19 +442,41 @@ void LLFloaterEditExtDayCycle::updateSkyTabs()
void LLFloaterEditExtDayCycle::updateSlider()
{
mKeysSlider->clear();
mFramesSlider->clear();
mSliderKeyMap.clear();
LLSettingsDay::KeyframeList_t keyframes = mEditDay->getTrackKeyframes(mCurrentTrack);
LLSettingsDay::KeyframeList_t::iterator iter = keyframes.begin();
LLSettingsDay::KeyframeList_t::iterator end = keyframes.end();
while (iter != end)
LLSettingsDay::CycleTrack_t track = mEditDay->getCycleTrack(mCurrentTrack);
for (auto &frame : track)
{
mKeysSlider->addSlider(*iter);
iter++;
addSliderFrame(frame.first, frame.second);
}
}
void LLFloaterEditExtDayCycle::addSliderFrame(const F32 frame, LLSettingsBase::ptr_t setting)
{
// multi slider distinguishes elements by key/name in string format
// store names to map to be able to recal dependencies
std::string new_slider = mFramesSlider->addSlider(frame);
mSliderKeyMap[new_slider] = framedata_t(frame, setting);
mLastFrameSlider = new_slider;
updateTabs();
}
void LLFloaterEditExtDayCycle::removeCurrentSliderFrame()
{
std::string sldr = mFramesSlider->getCurSlider();
mFramesSlider->deleteCurSlider();
keymap_t::iterator iter = mSliderKeyMap.find(sldr);
if (iter != mSliderKeyMap.end())
{
LL_DEBUGS() << "Removing frame from " << iter->second.first << LL_ENDL;
mSliderKeyMap.erase(iter);
}
updateTabs();
}
/*void LLFloaterEditExtDayCycle::updateTrack()
{
LLMultiSliderCtrl* slider = getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
@ -540,52 +644,7 @@ LLFloaterEditExtDayCycle::connection_t LLFloaterEditExtDayCycle::setEditCommitSi
// #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()
// {
@ -655,25 +714,6 @@ LLFloaterEditExtDayCycle::connection_t LLFloaterEditExtDayCycle::setEditCommitSi
// #endif
// }
//
void LLFloaterEditExtDayCycle::addSliderKey(F32 time, const std::shared_ptr<LLSettingsBase> 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());
}
// #if 0
// LLWLParamKey LLFloaterEditExtDayCycle::getSelectedDayCycle()

View File

@ -35,20 +35,11 @@ class LLCheckBoxCtrl;
class LLComboBox;
class LLLineEditor;
class LLMultiSliderCtrl;
class LLTextBox;
class LLTimeCtrl;
typedef std::shared_ptr<LLSettingsBase> LLSettingsBasePtr_t;
class SliderKey
{
public:
SliderKey(LLSettingsBasePtr_t kf, F32 t) : keyframe(kf), time(t) {}
LLSettingsBasePtr_t keyframe;
F32 time;
};
/**
* Floater for creating or editing a day cycle.
*/
@ -94,19 +85,22 @@ private:
void onRemoveTrack();
void onCommitName(class LLLineEditor* caller, void* user_data);
void onTrackSelectionCallback(const LLSD& user_data);
void onTimeSliderMoved(); /// time slider moved
void onFrameSliderCallback(); /// a frame moved or frame selection changed
void selectTrack(U32 track_index);
void updateTabs();
void updateSkyTabs();
void updateWaterTabs();
void updateSlider(); //track->slider
void updateSlider(); //track to slider
void addSliderFrame(const F32 frame, LLSettingsBase::ptr_t setting);
void removeCurrentSliderFrame();
//void updateTrack(); // slider->track, todo: better name
// /// refresh the day cycle combobox
// void refreshDayCyclesList();
//
// /// add a slider to the track
void addSliderKey(F32 time, const LLSettingsBasePtr_t key);
//
// void initCallbacks();
// // LLWLParamKey getSelectedDayCycle();
@ -119,8 +113,6 @@ private:
// 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
@ -143,7 +135,10 @@ private:
LLSettingsDay::ptr_t mSavedDay;
LLSettingsDay::ptr_t mEditDay;
U32 mCurrentTrack;
S64Seconds mDayLength;
S64Seconds mDayOffset;
U32 mCurrentTrack;
std::string mLastFrameSlider;
LLButton* mSaveButton;
LLButton* mCancelButton;
@ -151,16 +146,16 @@ private:
edit_commit_signal_t mCommitSignal;
// LLComboBox* mDayCyclesCombo;
// LLMultiSliderCtrl* mTimeSlider;
LLMultiSliderCtrl* mKeysSlider;
LLView* mSkyTabContainer;
LLView* mWaterTabContainer;
// LLTimeCtrl* mTimeCtrl;
// LLCheckBoxCtrl* mMakeDefaultCheckBox;
LLMultiSliderCtrl* mTimeSlider;
LLMultiSliderCtrl* mFramesSlider;
LLView* mSkyTabLayoutContainer;
LLView* mWaterTabLayoutContainer;
LLTextBox* mCurrentTimeLabel;
// map of sliders to parameters
std::map<std::string, SliderKey> mSliderToKey;
// map of sliders to parameters
typedef std::pair<F32, LLSettingsBase::ptr_t> framedata_t;
typedef std::map<std::string, framedata_t> keymap_t;
keymap_t mSliderKeyMap;
};
#endif // LL_LLFloaterEditExtDayCycle_H

View File

@ -74,6 +74,10 @@ namespace
const F32 SLIDER_SCALE_GLOW_B(-5.0f);
}
static LLPanelInjector<LLPanelSettingsSkyAtmosTab> t_settings_atmos("panel_settings_atmos");
static LLPanelInjector<LLPanelSettingsSkyCloudTab> t_settings_cloud("panel_settings_cloud");
static LLPanelInjector<LLPanelSettingsSkySunMoonTab> t_settings_sunmoon("panel_settings_sunmoon");
//==========================================================================
LLPanelSettingsSky::LLPanelSettingsSky() :
LLSettingsEditPanel(),

View File

@ -57,6 +57,8 @@ namespace
const std::string FIELD_WATER_BLUR_MULTIP("water_blur_multip");
}
static LLPanelInjector<LLPanelSettingsWaterMainTab> t_settings_water("panel_settings_water");
//==========================================================================
LLPanelSettingsWater::LLPanelSettingsWater() :
LLSettingsEditPanel(),

View File

@ -8,17 +8,13 @@
title="Edit Day Cycle"
width="705">
<!-- obsolete?, add as hint for 'save' button? -->
<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>
<!-- Todo: These 5 strings might be subjected to a change to get dynamic labels-->
<string name="0_label">0%[DSC]</string>
<string name="1_label">25%[DSC]</string>
<string name="2_label">50%[DSC]</string>
<string name="3_label">75%[DSC]</string>
<string name="4_label">100%[DSC]</string>
<!-- Todo: These 5 strings might be subjected to a change to get dynamic labels, consider using layout_stack to get dynamic width adjustment-->
<string name="time_label"> ([TIME] hr)</string>
<layout_stack name="test_stack"
@ -90,7 +86,7 @@
width="100">
<button.commit_callback
function="DayCycle.Track"
parameter="1" />
parameter="4" />
</button>
<button
follows="left|top"
@ -103,7 +99,7 @@
width="100">
<button.commit_callback
function="DayCycle.Track"
parameter="2" />
parameter="3" />
</button>
<button
follows="left|top"
@ -116,7 +112,7 @@
width="100">
<button.commit_callback
function="DayCycle.Track"
parameter="3" />
parameter="2" />
</button>
<button
follows="left|top"
@ -129,7 +125,7 @@
width="100">
<button.commit_callback
function="DayCycle.Track"
parameter="4" />
parameter="1" />
</button>
<button
follows="left|top"
@ -156,104 +152,100 @@
min_width="595"
left_pad="0"
visible="true">
<text
<!-- Todo: These 5 tests might be subjected to a change to be dynamically generated, consider using layout_stack to get dynamic width adjustment-->
<text
follows="left|top"
height="15"
layout="topleft"
left="10"
name="p0"
top_pad="5"
value="0%"
width="50" />
<text
value="0%[DSC]"
width="70" />
<text
follows="left|top|right"
height="15"
layout="topleft"
left_pad="69"
left_pad="49"
name="p1"
top_delta="0"
value="25%"
width="50" />
<text
value="25%[DSC]"
width="70" />
<text
follows="left|top|right"
height="15"
layout="topleft"
left_pad="69"
left_pad="49"
name="p2"
top_delta="0"
value="50%"
width="50" />
<text
value="50%[DSC]"
width="70" />
<text
follows="left|top|right"
height="15"
layout="topleft"
left_pad="69"
left_pad="49"
name="p3"
top_delta="0"
value="75%"
width="50" />
<text
value="75%[DSC]"
width="70" />
<text
follows="left|top|right"
height="15"
layout="topleft"
left_pad="69"
left_pad="49"
name="p4"
top_delta="0"
value="100%"
width="50" />
<multi_slider
value="100%[DSC]"
width="70" />
<multi_slider
can_edit_text="true"
decimal_digits="0"
draw_track="false"
follows="bottom"
height="10"
increment="0.0833333"
increment="0.01"
initial_value="0"
layout="topleft"
left="10"
max_sliders="20"
max_val="24"
max_sliders="1"
max_val="1"
name="WLTimeSlider"
show_text="false"
top_pad="0"
use_triangle="true"
width="525"
min_width="525"/>
<multi_slider
<multi_slider
can_edit_text="true"
decimal_digits="0"
follows="bottom"
height="10"
increment="0.0833333"
increment="0.01"
initial_value="0"
layout="topleft"
left="10"
max_sliders="20"
max_val="24"
name="WLDayCycleKeys"
max_val="1"
name="WLDayCycleFrames"
show_text="false"
top_pad="15"
width="525"
min_width="525" />
<line_editor
border_style="line"
border_thickness="1"
follows="left|bottom"
font="SansSerif"
height="20"
layout="topleft"
left_pad="0"
max_length_bytes="300"
name="timeline_field"
select_on_focus="true"
value="%"
tool_tip="The full path to an editor (executable) to edit floater XML files (quotes not necessary)"
top_delta="-5"
width="35" />
<layout_stack
<text
follows="left|bottom"
height="20"
layout="topleft"
left_pad="0"
name="current_time"
select_on_focus="true"
value="[PRCNT]%[DSC]"
top_delta="-5"
width="70" />
<layout_stack
name="progress_control"
follows="top|left"
height="25"
@ -264,7 +256,7 @@
top_pad="40"
orientation="horizontal">
<layout_panel
<layout_panel
name="skip_back"
mouse_opaque="false"
auto_resize="false"
@ -273,7 +265,7 @@
height="25"
min_width="25"
width="25">
<button
<button
name="skip_back_btn"
follows="top"
image_overlay="SkipBackward_Off"
@ -289,9 +281,9 @@
tool_tip="Step back"
top="0"
left="0"/>
</layout_panel>
</layout_panel>
<layout_panel
<layout_panel
name="play"
mouse_opaque="false"
auto_resize="false"
@ -300,7 +292,7 @@
height="25"
min_width="25"
width="25">
<button
<button
name="play_btn"
follows="top"
image_overlay="Play_Off"
@ -315,9 +307,9 @@
width="25"
left="0"
top="0" />
</layout_panel>
</layout_panel>
<layout_panel
<layout_panel
name="pause"
mouse_opaque="false"
auto_resize="false"
@ -327,7 +319,7 @@
min_width="25"
width="25"
visible="false">
<button
<button
name="pause_btn"
follows="top"
image_overlay="Pause_Off"
@ -342,9 +334,9 @@
width="25"
left="0"
top="0"/>
</layout_panel>
</layout_panel>
<layout_panel
<layout_panel
name="skip_forward"
mouse_opaque="false"
auto_resize="false"
@ -353,7 +345,7 @@
height="25"
min_width="25"
width="25">
<button
<button
name="skip_forward_btn"
follows="top"
image_overlay="SkipForward_Off"
@ -367,10 +359,10 @@
layout="topleft"
tool_tip="Step forward"
top="0" />
</layout_panel>
</layout_stack>
<button
</layout_panel>
</layout_stack>
<button
follows="top|left"
height="23"
width="90"
@ -378,7 +370,7 @@
left_pad="175"
top_delta="-12"
name="add_frame" />
<button
<button
follows="left|top"
height="23"
width="90"
@ -407,10 +399,11 @@
tab_padding_right="3"
top_pad="0"
width="700">
<panel
<panel
border="true"
class="panel_settings_water"
filename="panel_settings_water.xml"
label="Water_panel"
label="Water"
layout="topleft"
left_delta="0"
top_pad="5"
@ -437,24 +430,27 @@
tab_padding_right="3"
top_pad="0"
width="700">
<panel
<panel
border="true"
class="panel_settings_atmos"
filename="panel_settings_sky_atmos.xml"
label="Atmosphere &amp; Lighting"
layout="topleft"
left_delta="0"
top_pad="5"
name="atmosphere_panel" />
<panel
<panel
border="true"
class="panel_settings_clouds"
filename="panel_settings_sky_clouds.xml"
label="Clouds"
layout="topleft"
left_delta="0"
top_pad="5"
name="clouds_panel" />
<panel
<panel
border="true"
class="panel_settings_sunmoon"
filename="panel_settings_sky_sunmoon.xml"
label="Sun &amp; Moon"
layout="topleft"
@ -495,7 +491,7 @@
left_pad="10"
name="upload_btn"
width="100" />
</layout_panel>
</layout_stack>

View File

@ -7,12 +7,13 @@
left="0"
name="panel_settings_sky_atmos"
top="0">
<layout_stack
<layout_stack
follows="all"
layout="topleft"
left="5"
top="5"
right="-5"
bottom="-5"
follows="left|top|right|bottom"
orientation="vertical">
<layout_panel
border="true"

View File

@ -9,11 +9,12 @@
name="panel_settings_sky_clouds"
top="0">
<layout_stack
follows="all"
layout="topleft"
left="5"
top="5"
right="-5"
bottom="-5"
follows="left|top|right|bottom"
orientation="hoizontal">
<layout_panel
border="true"

View File

@ -8,11 +8,12 @@
name="panel_settings_sky_hbodies"
top="0">
<layout_stack
follows="all"
layout="topleft"
left="5"
top="5"
right="-5"
bottom="-5"
follows="left|top|right|bottom"
orientation="hoizontal">
<layout_panel
border="true"

View File

@ -9,11 +9,12 @@
name="panel_settings_water"
top="0">
<layout_stack name="water_stack1"
follows="all"
layout="topleft"
left="5"
top="5"
right="-5"
bottom="-5"
follows="left|top|right|bottom"
orientation="vertical">
<layout_panel
border="true"