MAINT-8344 Day cycle editor (part 1)
parent
3c18de2136
commit
cef4e29b90
|
|
@ -483,7 +483,7 @@ void LLSettingsDay::updateSettings()
|
|||
//=========================================================================
|
||||
LLSettingsDay::KeyframeList_t LLSettingsDay::getTrackKeyframes(S32 trackno)
|
||||
{
|
||||
if ((trackno < 1) || (trackno >= TRACK_MAX))
|
||||
if ((trackno < 0) || (trackno >= TRACK_MAX))
|
||||
{
|
||||
LL_WARNS("DAYCYCLE") << "Attempt get track (#" << trackno << ") out of range!" << LL_ENDL;
|
||||
return KeyframeList_t();
|
||||
|
|
@ -508,6 +508,17 @@ void LLSettingsDay::setWaterAtKeyframe(const LLSettingsWaterPtr_t &water, F32 ke
|
|||
setDirtyFlag(true);
|
||||
}
|
||||
|
||||
const LLSettingsWaterPtr_t LLSettingsDay::getWaterAtKeyframe(F32 keyframe)
|
||||
{
|
||||
// todo: better way to identify keyframes?
|
||||
CycleTrack_t::iterator iter = mDayTracks[TRACK_WATER].find(keyframe);
|
||||
if (iter != mDayTracks[TRACK_WATER].end())
|
||||
{
|
||||
return std::dynamic_pointer_cast<LLSettingsWater>(iter->second);
|
||||
}
|
||||
|
||||
return LLSettingsWaterPtr_t(NULL);
|
||||
}
|
||||
|
||||
void LLSettingsDay::setSkyAtKeyframe(const LLSettingsSkyPtr_t &sky, F32 keyframe, S32 track)
|
||||
{
|
||||
|
|
@ -521,6 +532,42 @@ void LLSettingsDay::setSkyAtKeyframe(const LLSettingsSkyPtr_t &sky, F32 keyframe
|
|||
setDirtyFlag(true);
|
||||
}
|
||||
|
||||
const LLSettingsSkyPtr_t LLSettingsDay::getSkyAtKeyframe(F32 keyframe, S32 track)
|
||||
{
|
||||
if ((track < 1) || (track >= TRACK_MAX))
|
||||
{
|
||||
LL_WARNS("DAYCYCLE") << "Attempt to set sky track (#" << track << ") out of range!" << LL_ENDL;
|
||||
return LLSettingsSkyPtr_t(NULL);
|
||||
}
|
||||
|
||||
// todo: better way to identify keyframes?
|
||||
CycleTrack_t::iterator iter = mDayTracks[track].find(keyframe);
|
||||
if (iter != mDayTracks[track].end())
|
||||
{
|
||||
return std::dynamic_pointer_cast<LLSettingsSky>(iter->second);
|
||||
}
|
||||
|
||||
return LLSettingsSkyPtr_t(NULL);
|
||||
}
|
||||
|
||||
const LLSettingsBase::ptr_t LLSettingsDay::getSettingsAtKeyframe(F32 keyframe, S32 track)
|
||||
{
|
||||
if ((track < 0) || (track >= TRACK_MAX))
|
||||
{
|
||||
LL_WARNS("DAYCYCLE") << "Attempt to set sky track (#" << track << ") out of range!" << LL_ENDL;
|
||||
return LLSettingsBase::ptr_t(NULL);
|
||||
}
|
||||
|
||||
// todo: better way to identify keyframes?
|
||||
CycleTrack_t::iterator iter = mDayTracks[track].find(keyframe);
|
||||
if (iter != mDayTracks[track].end())
|
||||
{
|
||||
return iter->second;
|
||||
}
|
||||
|
||||
return LLSettingsSkyPtr_t(NULL);
|
||||
}
|
||||
|
||||
LLSettingsDay::TrackBound_t LLSettingsDay::getBoundingEntries(LLSettingsDay::CycleTrack_t &track, F32 keyframe)
|
||||
{
|
||||
return TrackBound_t(get_wrapping_atbefore(track, keyframe), get_wrapping_atafter(track, keyframe));
|
||||
|
|
|
|||
|
|
@ -88,7 +88,10 @@ public:
|
|||
KeyframeList_t getTrackKeyframes(S32 track);
|
||||
|
||||
void setWaterAtKeyframe(const LLSettingsWaterPtr_t &water, F32 keyframe);
|
||||
const LLSettingsWaterPtr_t getWaterAtKeyframe(F32 keyframe);
|
||||
void setSkyAtKeyframe(const LLSettingsSkyPtr_t &sky, F32 keyframe, S32 track);
|
||||
const LLSettingsSkyPtr_t getSkyAtKeyframe(F32 keyframe, S32 track);
|
||||
const LLSettingsBase::ptr_t getSettingsAtKeyframe(F32 keyframe, S32 track);
|
||||
//---------------------------------------------------------------------
|
||||
void startDayCycle();
|
||||
|
||||
|
|
|
|||
|
|
@ -45,16 +45,26 @@
|
|||
#include "llagent.h"
|
||||
#include "llregioninfomodel.h"
|
||||
#include "llviewerregion.h"
|
||||
#include "llpaneleditwater.h"
|
||||
#include "llpaneleditsky.h"
|
||||
|
||||
#include "llenvironment.h"
|
||||
#include "lltrans.h"
|
||||
|
||||
static const std::string track_tabs[] = {
|
||||
"water_track",
|
||||
"sky4_track",
|
||||
"sky3_track",
|
||||
"sky2_track",
|
||||
"sky1_track",
|
||||
};
|
||||
|
||||
|
||||
LLFloaterEditExtDayCycle::LLFloaterEditExtDayCycle(const LLSD &key):
|
||||
LLFloater(key),
|
||||
mDayPresetsCombo(NULL),
|
||||
mSaveButton(NULL),
|
||||
mCancelButton(NULL)
|
||||
mCancelButton(NULL),
|
||||
mCurrentTrack(1)
|
||||
// mDayCyclesCombo(NULL)
|
||||
// , mTimeSlider(NULL)
|
||||
// , mKeysSlider(NULL)
|
||||
|
|
@ -62,32 +72,37 @@ LLFloaterEditExtDayCycle::LLFloaterEditExtDayCycle(const LLSD &key):
|
|||
// , mMakeDefaultCheckBox(NULL)
|
||||
// ,
|
||||
{
|
||||
mCommitCallbackRegistrar.add("DayCycle.Track", boost::bind(&LLFloaterEditExtDayCycle::onTrackSelectionCallback, this, _2));
|
||||
}
|
||||
|
||||
// virtual
|
||||
BOOL LLFloaterEditExtDayCycle::postBuild()
|
||||
{
|
||||
getChild<LLButton>("add_frame")->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onAddTrack, this));
|
||||
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");
|
||||
mDayPresetsCombo = getChild<LLComboBox>("day_cycle_preset_combo");
|
||||
// mTimeCtrl = getChild<LLTimeCtrl>("time");
|
||||
mSaveButton = getChild<LLButton>("save_btn");
|
||||
mCancelButton = getChild<LLButton>("cancel_btn");
|
||||
mUploadButton = getChild<LLButton>("upload_btn");
|
||||
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");
|
||||
|
||||
//initCallbacks();
|
||||
|
||||
mDayPresetsCombo->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onDayPresetChanged, this));
|
||||
mSaveButton->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onBtnSave, this));
|
||||
mCancelButton->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onBtnCancel, this));
|
||||
mUploadButton->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onUpload, this));
|
||||
|
||||
//initCallbacks();
|
||||
|
||||
// // add the time slider
|
||||
// mTimeSlider->addSlider();
|
||||
getChild<LLButton>("sky4_track", true)->setToggleState(true);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -97,7 +112,52 @@ void LLFloaterEditExtDayCycle::onOpen(const LLSD& key)
|
|||
LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_EDIT);
|
||||
LLEnvironment::instance().updateEnvironment();
|
||||
|
||||
refreshSkyPresetsList();
|
||||
|
||||
{
|
||||
// TODO/TEMP
|
||||
LLSettingsDay::ptr_t pday = LLEnvironment::instance().getEnvironmentDay(LLEnvironment::ENV_REGION);
|
||||
mEditDay = pday->buildClone(); // pday should be passed as parameter
|
||||
}
|
||||
|
||||
LLLineEditor* name_field = getChild<LLLineEditor>("day_cycle_name");
|
||||
name_field->setText(mEditDay->getName());
|
||||
|
||||
selectTrack(mCurrentTrack);
|
||||
|
||||
/* TODO
|
||||
if (mEditDay->hasSetting("cycle length")) // todo: figure out name
|
||||
{
|
||||
// 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);
|
||||
}
|
||||
else
|
||||
{
|
||||
std::string descr = LLTrans::getString("0_label", LLSD());
|
||||
getChild<LLView>("p0")->setLabel(descr);
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
/*list_name_id_t getSkyList() const;
|
||||
list_name_id_t getWaterList() const;
|
||||
|
||||
getChild<LLButton>("sky4_track", true)->setToggleState(true);*/
|
||||
}
|
||||
|
||||
void LLFloaterEditExtDayCycle::onClose(bool app_quitting)
|
||||
|
|
@ -183,22 +243,6 @@ void LLFloaterEditExtDayCycle::onVisibilityChange(BOOL new_visibility)
|
|||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
void LLFloaterEditExtDayCycle::onDayPresetChanged()
|
||||
{
|
||||
std::string dayname = mDayPresetsCombo->getSelectedValue().asString();
|
||||
|
||||
LLSettingsDay::ptr_t pday = LLEnvironment::instance().findDayCycleByName(dayname);
|
||||
|
||||
if (pday)
|
||||
{
|
||||
pday = pday->buildClone();
|
||||
LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_EDIT, pday, LLSettingsDay::DEFAULT_DAYLENGTH, LLSettingsDay::DEFAULT_DAYOFFSET);
|
||||
mEditDay = pday;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void LLFloaterEditExtDayCycle::onBtnSave()
|
||||
{
|
||||
if (!mCommitSignal.empty())
|
||||
|
|
@ -211,26 +255,134 @@ void LLFloaterEditExtDayCycle::onBtnCancel()
|
|||
closeFloater();
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
void LLFloaterEditExtDayCycle::refreshSkyPresetsList()
|
||||
void LLFloaterEditExtDayCycle::onAddTrack()
|
||||
{
|
||||
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)
|
||||
F32 frame = 0; // temp?
|
||||
mKeysSlider->addSlider(frame);
|
||||
if (mCurrentTrack == 0)
|
||||
{
|
||||
mDayPresetsCombo->add((*it).first);
|
||||
mEditDay->setWaterAtKeyframe(LLSettingsVOWater::buildDefaultWater(), frame);
|
||||
}
|
||||
else
|
||||
{
|
||||
mEditDay->setSkyAtKeyframe(LLSettingsVOSky::buildDefaultSky(), frame, mCurrentTrack);
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterEditExtDayCycle::onRemoveTrack()
|
||||
{
|
||||
//mKeysSlider->deleteCurSlider();
|
||||
}
|
||||
|
||||
void LLFloaterEditExtDayCycle::onCommitName(class LLLineEditor* caller, void* user_data)
|
||||
{
|
||||
mEditDay->setName(caller->getText());
|
||||
}
|
||||
|
||||
void LLFloaterEditExtDayCycle::onTrackSelectionCallback(const LLSD& user_data)
|
||||
{
|
||||
U32 track_index = user_data.asInteger(); // 1-5
|
||||
selectTrack(track_index);
|
||||
}
|
||||
|
||||
void LLFloaterEditExtDayCycle::selectTrack(U32 track_index)
|
||||
{
|
||||
mCurrentTrack = track_index;
|
||||
LLButton* button = getChild<LLButton>(track_tabs[track_index], true);
|
||||
if (button->getToggleState())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// set defaults on combo boxes
|
||||
mDayPresetsCombo->selectFirstItem();
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
getChild<LLButton>(track_tabs[i], true)->setToggleState(false);
|
||||
}
|
||||
|
||||
button->setToggleState(true);
|
||||
|
||||
updateTabs();
|
||||
updateSlider();
|
||||
}
|
||||
|
||||
void LLFloaterEditExtDayCycle::updateTabs()
|
||||
{
|
||||
bool show_water = mCurrentTrack == 0;
|
||||
mSkyTabContainer->setVisible(!show_water);
|
||||
mWaterTabContainer->setVisible(show_water);
|
||||
|
||||
if (show_water)
|
||||
{
|
||||
updateWaterTabs();
|
||||
}
|
||||
else
|
||||
{
|
||||
updateSkyTabs();
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterEditExtDayCycle::updateWaterTabs()
|
||||
{
|
||||
const LLSettingsWaterPtr_t p_water = mEditDay->getWaterAtKeyframe(mKeysSlider->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);
|
||||
if (panel)
|
||||
{
|
||||
panel->setWater(p_water); // todo: Null disables
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterEditExtDayCycle::updateSkyTabs()
|
||||
{
|
||||
const LLSettingsSkyPtr_t p_sky = mEditDay->getSkyAtKeyframe(mKeysSlider->getCurSliderValue(), mCurrentTrack);
|
||||
|
||||
// Compiler warnings from getChild about tabs...
|
||||
// Todo: fix class
|
||||
LLPanelSettingsSky* panel;
|
||||
panel = mSkyTabContainer->findChild<LLPanelSettingsSky>("atmosphere_panel", true);
|
||||
if (panel)
|
||||
{
|
||||
panel->setSky(p_sky); // todo: Null disables
|
||||
}
|
||||
panel = mSkyTabContainer->findChild<LLPanelSettingsSky>("clouds_panel", true);
|
||||
if (panel)
|
||||
{
|
||||
panel->setSky(p_sky);
|
||||
}
|
||||
panel = mSkyTabContainer->findChild<LLPanelSettingsSky>("moon_panel", true);
|
||||
if (panel)
|
||||
{
|
||||
panel->setSky(p_sky);
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterEditExtDayCycle::updateSlider()
|
||||
{
|
||||
mKeysSlider->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)
|
||||
{
|
||||
mKeysSlider->addSlider(*iter);
|
||||
iter++;
|
||||
}
|
||||
}
|
||||
|
||||
/*void LLFloaterEditExtDayCycle::updateTrack()
|
||||
{
|
||||
LLMultiSliderCtrl* slider = getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
|
||||
//mEditDay->getTrackKeyframes
|
||||
|
||||
// todo make tracks named to allow movement
|
||||
}*/
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
LLFloaterEditExtDayCycle::connection_t LLFloaterEditExtDayCycle::setEditCommitSignal(LLFloaterEditExtDayCycle::edit_commit_signal_t::slot_type cb)
|
||||
{
|
||||
return mCommitSignal.connect(cb);
|
||||
|
|
@ -503,28 +655,26 @@ LLFloaterEditExtDayCycle::connection_t LLFloaterEditExtDayCycle::setEditCommitSi
|
|||
// #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
|
||||
//
|
||||
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()
|
||||
// {
|
||||
|
|
|
|||
|
|
@ -37,6 +37,18 @@ class LLLineEditor;
|
|||
class LLMultiSliderCtrl;
|
||||
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.
|
||||
*/
|
||||
|
|
@ -75,18 +87,26 @@ private:
|
|||
// void applyTrack();
|
||||
//
|
||||
// /// refresh the sky presets combobox
|
||||
void refreshSkyPresetsList();
|
||||
|
||||
void onDayPresetChanged(); /// sky preset selected
|
||||
void onBtnSave();
|
||||
void onBtnCancel();
|
||||
void onAddTrack();
|
||||
void onRemoveTrack();
|
||||
void onCommitName(class LLLineEditor* caller, void* user_data);
|
||||
void onTrackSelectionCallback(const LLSD& user_data);
|
||||
|
||||
void onBtnSave();
|
||||
void onBtnCancel();
|
||||
void selectTrack(U32 track_index);
|
||||
void updateTabs();
|
||||
void updateSkyTabs();
|
||||
void updateWaterTabs();
|
||||
void updateSlider(); //track->slider
|
||||
//void updateTrack(); // slider->track, todo: better name
|
||||
|
||||
// /// refresh the day cycle combobox
|
||||
// void refreshDayCyclesList();
|
||||
//
|
||||
// /// add a slider to the track
|
||||
// // void addSliderKey(F32 time, LLWLParamKey keyframe);
|
||||
void addSliderKey(F32 time, const LLSettingsBasePtr_t key);
|
||||
//
|
||||
// void initCallbacks();
|
||||
// // LLWLParamKey getSelectedDayCycle();
|
||||
|
|
@ -123,8 +143,8 @@ private:
|
|||
|
||||
LLSettingsDay::ptr_t mSavedDay;
|
||||
LLSettingsDay::ptr_t mEditDay;
|
||||
U32 mCurrentTrack;
|
||||
|
||||
LLComboBox* mDayPresetsCombo;
|
||||
LLButton* mSaveButton;
|
||||
LLButton* mCancelButton;
|
||||
LLButton* mUploadButton;
|
||||
|
|
@ -133,12 +153,14 @@ private:
|
|||
|
||||
// LLComboBox* mDayCyclesCombo;
|
||||
// LLMultiSliderCtrl* mTimeSlider;
|
||||
// LLMultiSliderCtrl* mKeysSlider;
|
||||
LLMultiSliderCtrl* mKeysSlider;
|
||||
LLView* mSkyTabContainer;
|
||||
LLView* mWaterTabContainer;
|
||||
// LLTimeCtrl* mTimeCtrl;
|
||||
// LLCheckBoxCtrl* mMakeDefaultCheckBox;
|
||||
|
||||
// map of sliders to parameters
|
||||
// std::map<std::string, SliderKey> mSliderToKey;
|
||||
std::map<std::string, SliderKey> mSliderToKey;
|
||||
};
|
||||
|
||||
#endif // LL_LLFloaterEditExtDayCycle_H
|
||||
|
|
|
|||
|
|
@ -1719,7 +1719,7 @@ LLViewerWindow::LLViewerWindow(const Params& p)
|
|||
U32 fsaa_samples)
|
||||
*/
|
||||
// create window
|
||||
mWindow = LLWindowManager::createWindow(this,
|
||||
mWindow = LLWindowManager::createWindow(this,
|
||||
p.title, p.name, p.x, p.y, p.width, p.height, 0,
|
||||
p.fullscreen,
|
||||
gHeadlessClient,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater
|
||||
legacy_header_height="18"
|
||||
height="500"
|
||||
height="602"
|
||||
layout="topleft"
|
||||
name="env_edit_extdaycycle"
|
||||
help_topic="day_presets"
|
||||
|
|
@ -13,43 +12,53 @@
|
|||
<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>
|
||||
|
||||
<!-- 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>
|
||||
<string name="time_label"> ([TIME] hr)</string>
|
||||
|
||||
<layout_stack name="test_stack"
|
||||
width="705"
|
||||
height="500"
|
||||
height="602"
|
||||
follows="all"
|
||||
animate="false"
|
||||
top="0"
|
||||
orientation="vertical">
|
||||
<layout_panel name="temp"
|
||||
border="false"
|
||||
auto_resize="false"
|
||||
user_resize="true"
|
||||
height="45"
|
||||
min_height="45"
|
||||
height="29"
|
||||
min_height="29"
|
||||
background_visible="false">
|
||||
<!-- This layout_panel is for loading legacy presets -->
|
||||
<text
|
||||
follows="top|left|right"
|
||||
follows="top|left"
|
||||
font="SansSerif"
|
||||
height="10"
|
||||
layout="topleft"
|
||||
name="label"
|
||||
top_delta="70"
|
||||
width="120">
|
||||
Preset Name:
|
||||
left="15"
|
||||
top="5"
|
||||
width="105">
|
||||
Day Cycle Name:
|
||||
</text>
|
||||
<combo_box
|
||||
allow_text_entry="true"
|
||||
<line_editor
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
max_chars="100"
|
||||
name="day_cycle_preset_combo"
|
||||
top_delta="-5"
|
||||
width="200" />
|
||||
name="day_cycle_name"
|
||||
top="5"
|
||||
width="200"
|
||||
height="21" />
|
||||
</layout_panel>
|
||||
<layout_panel name="timeline"
|
||||
border="true"
|
||||
<layout_panel name="timeline_track_selection"
|
||||
border="false"
|
||||
bevel_style="in"
|
||||
auto_resize="false"
|
||||
user_resize="true"
|
||||
|
|
@ -58,74 +67,415 @@
|
|||
min_height="0"
|
||||
visible="true"
|
||||
background_visible="true">
|
||||
<text
|
||||
follows="top|left|right"
|
||||
font="SansSerif"
|
||||
<panel name="timeline_layers"
|
||||
border="false"
|
||||
follows="left|top"
|
||||
auto_resize="false"
|
||||
user_resize="true"
|
||||
bg_alpha_color="yellow"
|
||||
height="150"
|
||||
width="110"
|
||||
top_pad="0"
|
||||
min_height="0"
|
||||
visible="true"
|
||||
background_visible="true">
|
||||
<button
|
||||
follows="left|top"
|
||||
height="23"
|
||||
label="Sky 4"
|
||||
layout="topleft"
|
||||
top_pad="5"
|
||||
left="10"
|
||||
name="sky4_track"
|
||||
width="100">
|
||||
<button.commit_callback
|
||||
function="DayCycle.Track"
|
||||
parameter="1" />
|
||||
</button>
|
||||
<button
|
||||
follows="left|top"
|
||||
height="23"
|
||||
label="Sky 3"
|
||||
layout="topleft"
|
||||
top_pad="0"
|
||||
left="10"
|
||||
name="sky3_track"
|
||||
width="100">
|
||||
<button.commit_callback
|
||||
function="DayCycle.Track"
|
||||
parameter="2" />
|
||||
</button>
|
||||
<button
|
||||
follows="left|top"
|
||||
height="23"
|
||||
label="Sky 2"
|
||||
layout="topleft"
|
||||
top_pad="0"
|
||||
left="10"
|
||||
name="sky2_track"
|
||||
width="100">
|
||||
<button.commit_callback
|
||||
function="DayCycle.Track"
|
||||
parameter="3" />
|
||||
</button>
|
||||
<button
|
||||
follows="left|top"
|
||||
height="23"
|
||||
label="Sky 1"
|
||||
layout="topleft"
|
||||
top_pad="0"
|
||||
left="10"
|
||||
name="sky1_track"
|
||||
width="100">
|
||||
<button.commit_callback
|
||||
function="DayCycle.Track"
|
||||
parameter="4" />
|
||||
</button>
|
||||
<button
|
||||
follows="left|top"
|
||||
height="23"
|
||||
label="Water"
|
||||
layout="topleft"
|
||||
top_pad="0"
|
||||
left="10"
|
||||
name="water_track"
|
||||
width="100">
|
||||
<button.commit_callback
|
||||
function="DayCycle.Track"
|
||||
parameter="0" />
|
||||
</button>
|
||||
</panel>
|
||||
<panel name="timeline"
|
||||
border="true"
|
||||
follows="left|top"
|
||||
auto_resize="false"
|
||||
user_resize="true"
|
||||
height="150"
|
||||
min_height="0"
|
||||
width="595"
|
||||
min_width="595"
|
||||
left_pad="0"
|
||||
visible="true">
|
||||
<text
|
||||
follows="left|top"
|
||||
height="15"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
name="p0"
|
||||
top_pad="5"
|
||||
value="0%"
|
||||
width="50" />
|
||||
<text
|
||||
follows="left|top|right"
|
||||
height="15"
|
||||
layout="topleft"
|
||||
left_pad="69"
|
||||
name="p1"
|
||||
top_delta="0"
|
||||
value="25%"
|
||||
width="50" />
|
||||
<text
|
||||
follows="left|top|right"
|
||||
height="15"
|
||||
layout="topleft"
|
||||
left_pad="69"
|
||||
name="p2"
|
||||
top_delta="0"
|
||||
value="50%"
|
||||
width="50" />
|
||||
<text
|
||||
follows="left|top|right"
|
||||
height="15"
|
||||
layout="topleft"
|
||||
left_pad="69"
|
||||
name="p3"
|
||||
top_delta="0"
|
||||
value="75%"
|
||||
width="50" />
|
||||
<text
|
||||
follows="left|top|right"
|
||||
height="15"
|
||||
layout="topleft"
|
||||
left_pad="69"
|
||||
name="p4"
|
||||
top_delta="0"
|
||||
value="100%"
|
||||
width="50" />
|
||||
<multi_slider
|
||||
can_edit_text="true"
|
||||
decimal_digits="0"
|
||||
draw_track="false"
|
||||
follows="bottom"
|
||||
height="10"
|
||||
increment="0.0833333"
|
||||
initial_value="0"
|
||||
layout="topleft"
|
||||
name="label"
|
||||
top_offset="20"
|
||||
left_offset="10"
|
||||
width="120">
|
||||
Time Line Goes here
|
||||
</text>
|
||||
left="10"
|
||||
max_sliders="20"
|
||||
max_val="24"
|
||||
name="WLTimeSlider"
|
||||
show_text="false"
|
||||
top_pad="0"
|
||||
use_triangle="true"
|
||||
width="525"
|
||||
min_width="525"/>
|
||||
|
||||
<multi_slider
|
||||
can_edit_text="true"
|
||||
decimal_digits="0"
|
||||
follows="bottom"
|
||||
height="10"
|
||||
increment="0.0833333"
|
||||
initial_value="0"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
max_sliders="20"
|
||||
max_val="24"
|
||||
name="WLDayCycleKeys"
|
||||
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
|
||||
name="progress_control"
|
||||
follows="top|left"
|
||||
height="25"
|
||||
width="83"
|
||||
layout="topleft"
|
||||
animate="false"
|
||||
left="225"
|
||||
top_pad="40"
|
||||
orientation="horizontal">
|
||||
|
||||
<layout_panel
|
||||
name="skip_back"
|
||||
mouse_opaque="false"
|
||||
auto_resize="false"
|
||||
layout="topleft"
|
||||
top="0"
|
||||
height="25"
|
||||
min_width="25"
|
||||
width="25">
|
||||
<button
|
||||
name="skip_back_btn"
|
||||
follows="top"
|
||||
image_overlay="SkipBackward_Off"
|
||||
image_disabled="PushButton_Disabled"
|
||||
image_disabled_selected="PushButton_Disabled"
|
||||
image_selected="PushButton_Selected"
|
||||
image_unselected="PushButton_Off"
|
||||
hover_glow_amount="0.15"
|
||||
auto_resize="false"
|
||||
width="25"
|
||||
height="25"
|
||||
layout="topleft"
|
||||
tool_tip="Step back"
|
||||
top="0"
|
||||
left="0"/>
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
name="play"
|
||||
mouse_opaque="false"
|
||||
auto_resize="false"
|
||||
layout="topleft"
|
||||
top="0"
|
||||
height="25"
|
||||
min_width="25"
|
||||
width="25">
|
||||
<button
|
||||
name="play_btn"
|
||||
follows="top"
|
||||
image_overlay="Play_Off"
|
||||
image_disabled="PushButton_Disabled"
|
||||
image_disabled_selected="PushButton_Disabled"
|
||||
image_selected="PushButton_Selected"
|
||||
image_unselected="PushButton_Off"
|
||||
hover_glow_amount="0.15"
|
||||
auto_resize="false"
|
||||
layout="topleft"
|
||||
height="25"
|
||||
width="25"
|
||||
left="0"
|
||||
top="0" />
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
name="pause"
|
||||
mouse_opaque="false"
|
||||
auto_resize="false"
|
||||
layout="topleft"
|
||||
top="0"
|
||||
height="25"
|
||||
min_width="25"
|
||||
width="25"
|
||||
visible="false">
|
||||
<button
|
||||
name="pause_btn"
|
||||
follows="top"
|
||||
image_overlay="Pause_Off"
|
||||
image_disabled="PushButton_Disabled"
|
||||
image_disabled_selected="PushButton_Disabled"
|
||||
image_selected="PushButton_Selected"
|
||||
image_unselected="PushButton_Off"
|
||||
hover_glow_amount="0.15"
|
||||
auto_resize="false"
|
||||
layout="topleft"
|
||||
height="25"
|
||||
width="25"
|
||||
left="0"
|
||||
top="0"/>
|
||||
</layout_panel>
|
||||
|
||||
<layout_panel
|
||||
name="skip_forward"
|
||||
mouse_opaque="false"
|
||||
auto_resize="false"
|
||||
layout="topleft"
|
||||
top="0"
|
||||
height="25"
|
||||
min_width="25"
|
||||
width="25">
|
||||
<button
|
||||
name="skip_forward_btn"
|
||||
follows="top"
|
||||
image_overlay="SkipForward_Off"
|
||||
image_disabled="PushButton_Disabled"
|
||||
image_disabled_selected="PushButton_Disabled"
|
||||
image_selected="PushButton_Selected"
|
||||
image_unselected="PushButton_Off"
|
||||
hover_glow_amount="0.15"
|
||||
width="25"
|
||||
height="25"
|
||||
layout="topleft"
|
||||
tool_tip="Step forward"
|
||||
top="0" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
|
||||
<button
|
||||
follows="top|left"
|
||||
height="23"
|
||||
width="90"
|
||||
label="Add Frame"
|
||||
left_pad="175"
|
||||
top_delta="-12"
|
||||
name="add_frame" />
|
||||
<button
|
||||
follows="left|top"
|
||||
height="23"
|
||||
width="90"
|
||||
label="Delete Frame"
|
||||
top_pad="0"
|
||||
left_delta="0"
|
||||
name="delete_frame" />
|
||||
</panel>
|
||||
</layout_panel>
|
||||
<layout_panel name="flex"
|
||||
auto_resize="true"
|
||||
<layout_panel name="frame_settings_water"
|
||||
auto_resize="false"
|
||||
user_resize="true"
|
||||
bg_alpha_color="blue"
|
||||
height="11"
|
||||
height="386"
|
||||
width="700"
|
||||
min_height="0"
|
||||
visible="true"
|
||||
background_visible="true">
|
||||
visible="false">
|
||||
<tab_container
|
||||
follows="all"
|
||||
halign="left"
|
||||
height="386"
|
||||
layout="topleft"
|
||||
left_offset="0"
|
||||
name="landtab"
|
||||
left="0"
|
||||
name="water_tabs"
|
||||
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>
|
||||
top_pad="0"
|
||||
width="700">
|
||||
<panel
|
||||
border="true"
|
||||
filename="panel_settings_water.xml"
|
||||
label="Water_panel"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
top_pad="5"
|
||||
name="water_panel"/>
|
||||
</tab_container>
|
||||
</layout_panel>
|
||||
<layout_panel name="frame_settings_sky"
|
||||
auto_resize="false"
|
||||
user_resize="true"
|
||||
height="386"
|
||||
width="700"
|
||||
min_height="0"
|
||||
visible="true">
|
||||
<tab_container
|
||||
follows="all"
|
||||
halign="left"
|
||||
height="386"
|
||||
visible="true"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="sky_tabs"
|
||||
tab_position="top"
|
||||
tab_width="140"
|
||||
tab_padding_right="3"
|
||||
top_pad="0"
|
||||
width="700">
|
||||
<panel
|
||||
border="true"
|
||||
filename="panel_settings_sky_atmos.xml"
|
||||
label="Atmosphere & Lighting"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
top_pad="5"
|
||||
name="atmosphere_panel" />
|
||||
<panel
|
||||
border="true"
|
||||
filename="panel_settings_sky_clouds.xml"
|
||||
label="Clouds"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
top_pad="5"
|
||||
name="clouds_panel" />
|
||||
<panel
|
||||
border="true"
|
||||
filename="panel_settings_sky_sunmoon.xml"
|
||||
label="Sun & Moon"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
top_pad="5"
|
||||
name="moon_panel" />
|
||||
</tab_container>
|
||||
</layout_panel>
|
||||
<layout_panel name="buttons"
|
||||
auto_resize="false"
|
||||
user_resize="true"
|
||||
height="43"
|
||||
height="26"
|
||||
min_height="0"
|
||||
background_visible="false">
|
||||
visible="true"
|
||||
width="700">
|
||||
<button
|
||||
follows="top|left"
|
||||
height="23"
|
||||
label="Save"
|
||||
left_offset="160"
|
||||
top_offset="60"
|
||||
left="5"
|
||||
top_pad="0"
|
||||
name="save_btn"
|
||||
width="100" />
|
||||
<button
|
||||
|
|
@ -138,7 +488,7 @@
|
|||
width="100" />
|
||||
|
||||
<button
|
||||
follows="top|right"
|
||||
follows="top|left"
|
||||
height="23"
|
||||
label="Upload"
|
||||
layout="topleft"
|
||||
|
|
|
|||
Loading…
Reference in New Issue