summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llfloatereditextdaycycle.cpp292
-rw-r--r--indra/newview/llfloatereditextdaycycle.h55
-rw-r--r--indra/newview/llviewerfloaterreg.cpp3
-rw-r--r--indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml528
-rw-r--r--indra/newview/skins/default/xui/en/floater_settings_picker.xml11
5 files changed, 473 insertions, 416 deletions
diff --git a/indra/newview/llfloatereditextdaycycle.cpp b/indra/newview/llfloatereditextdaycycle.cpp
index 34e49c73d0..506e03fddc 100644
--- a/indra/newview/llfloatereditextdaycycle.cpp
+++ b/indra/newview/llfloatereditextdaycycle.cpp
@@ -68,6 +68,31 @@ namespace {
"sky4_track",
};
+ const std::string ICN_LOCK_EDIT("icn_lock_edit");
+ const std::string BTN_SAVE("save_btn");
+ const std::string BTN_FLYOUT("btn_flyout");
+ const std::string BTN_CANCEL("cancel_btn");
+ const std::string BTN_ADDFRAME("add_frame");
+ const std::string BTN_DELFRAME("delete_frame");
+ const std::string BTN_IMPORT("btn_import");
+ const std::string BTN_LOADFRAME("btn_load_frame");
+ const std::string SLDR_TIME("WLTimeSlider");
+ const std::string SLDR_KEYFRAMES("WLDayCycleFrames");
+ const std::string VIEW_SKY_SETTINGS("frame_settings_sky");
+ const std::string VIEW_WATER_SETTINGS("frame_settings_water");
+ const std::string LBL_CURRENT_TIME("current_time");
+ const std::string TXT_DAY_NAME("day_cycle_name");
+ const std::string TABS_SKYS("sky_tabs");
+ const std::string TABS_WATER("water_tabs");
+
+ const std::string EVNT_DAYTRACK("DayCycle.Track");
+ const std::string EVNT_PLAY("DayCycle.PlayActions");
+
+ const std::string ACTION_PLAY("play");
+ const std::string ACTION_PAUSE("pause");
+ const std::string ACTION_FORWARD("forward");
+ const std::string ACTION_BACK("back");
+
// For flyout
const std::string XML_FLYOUTMENU_FILE("menu_save_settings.xml");
// From menu_save_settings.xml, consider moving into flyout since it should be supported by flyout either way
@@ -90,16 +115,16 @@ const std::string LLFloaterEditExtDayCycle::KEY_DAY_LENGTH("day_length");
//=========================================================================
LLFloaterEditExtDayCycle::LLFloaterEditExtDayCycle(const LLSD &key) :
LLFloater(key),
- mFlyoutControl(NULL),
- mCancelButton(NULL),
+ mFlyoutControl(nullptr),
mDayLength(0),
mCurrentTrack(4),
- mTimeSlider(NULL),
- mFramesSlider(NULL),
- mCurrentTimeLabel(NULL),
+ mTimeSlider(nullptr),
+ mFramesSlider(nullptr),
+ mCurrentTimeLabel(nullptr),
mImportButton(nullptr),
mInventoryId(),
mInventoryItem(nullptr),
+ mLoadFrame(nullptr),
mSkyBlender(),
mWaterBlender(),
mScratchSky(),
@@ -107,8 +132,8 @@ LLFloaterEditExtDayCycle::LLFloaterEditExtDayCycle(const LLSD &key) :
mIsPlaying(false)
{
- mCommitCallbackRegistrar.add("DayCycle.Track", [this](LLUICtrl *ctrl, const LLSD &data) { onTrackSelectionCallback(data); });
- mCommitCallbackRegistrar.add("DayCycle.PlayActions", [this](LLUICtrl *ctrl, const LLSD &data) { onPlayActionCallback(data); });
+ mCommitCallbackRegistrar.add(EVNT_DAYTRACK, [this](LLUICtrl *ctrl, const LLSD &data) { onTrackSelectionCallback(data); });
+ mCommitCallbackRegistrar.add(EVNT_PLAY, [this](LLUICtrl *ctrl, const LLSD &data) { onPlayActionCallback(data); });
mScratchSky = LLSettingsVOSky::buildDefaultSky();
mScratchWater = LLSettingsVOWater::buildDefaultWater();
@@ -124,26 +149,27 @@ LLFloaterEditExtDayCycle::~LLFloaterEditExtDayCycle()
// virtual
BOOL LLFloaterEditExtDayCycle::postBuild()
{
- getChild<LLLineEditor>("day_cycle_name")->setKeystrokeCallback(boost::bind(&LLFloaterEditExtDayCycle::onCommitName, this, _1, _2), NULL);
-
- mCancelButton = getChild<LLButton>("cancel_btn", true);
- mAddFrameButton = getChild<LLButton>("add_frame", true);
- mDeleteFrameButton = getChild<LLButton>("delete_frame", true);
- 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);
- mImportButton = getChild<LLButton>("btn_import", true);
-
- mFlyoutControl = new LLFlyoutComboBtnCtrl(this, "save_btn", "btn_flyout", XML_FLYOUTMENU_FILE);
+ getChild<LLLineEditor>(TXT_DAY_NAME)->setKeystrokeCallback(boost::bind(&LLFloaterEditExtDayCycle::onCommitName, this, _1, _2), NULL);
+
+ mAddFrameButton = getChild<LLButton>(BTN_ADDFRAME, true);
+ mDeleteFrameButton = getChild<LLButton>(BTN_DELFRAME, true);
+ mTimeSlider = getChild<LLMultiSliderCtrl>(SLDR_TIME);
+ mFramesSlider = getChild<LLMultiSliderCtrl>(SLDR_KEYFRAMES);
+ mSkyTabLayoutContainer = getChild<LLView>(VIEW_SKY_SETTINGS, true);
+ mWaterTabLayoutContainer = getChild<LLView>(VIEW_WATER_SETTINGS, true);
+ mCurrentTimeLabel = getChild<LLTextBox>(LBL_CURRENT_TIME, true);
+ mImportButton = getChild<LLButton>(BTN_IMPORT, true);
+ mLoadFrame = getChild<LLButton>(BTN_LOADFRAME, true);
+
+ mFlyoutControl = new LLFlyoutComboBtnCtrl(this, BTN_SAVE, BTN_FLYOUT, XML_FLYOUTMENU_FILE);
mFlyoutControl->setAction([this](LLUICtrl *ctrl, const LLSD &data) { onButtonApply(ctrl, data); });
- mCancelButton->setCommitCallback([this](LLUICtrl *ctrl, const LLSD &data) { onBtnCancel(); });
+ getChild<LLButton>(BTN_CANCEL, true)->setCommitCallback([this](LLUICtrl *ctrl, const LLSD &data) { onBtnCancel(); });
mTimeSlider->setCommitCallback([this](LLUICtrl *ctrl, const LLSD &data) { onTimeSliderMoved(); });
mAddFrameButton->setCommitCallback([this](LLUICtrl *ctrl, const LLSD &data) { onAddTrack(); });
mDeleteFrameButton->setCommitCallback([this](LLUICtrl *ctrl, const LLSD &data) { onRemoveTrack(); });
mImportButton->setCommitCallback([this](LLUICtrl *, const LLSD &){ onButtonImport(); });
+ mLoadFrame->setCommitCallback([this](LLUICtrl *, const LLSD &){ onButtonLoadFrame(); });
mFramesSlider->setCommitCallback([this](LLUICtrl *, const LLSD &data) { onFrameSliderCallback(data); });
mFramesSlider->setDoubleClickCallback([this](LLUICtrl*, S32 x, S32 y, MASK mask){ onFrameSliderDoubleClick(x, y, mask); });
@@ -162,7 +188,6 @@ void LLFloaterEditExtDayCycle::onOpen(const LLSD& key)
LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_EDIT);
LLEnvironment::instance().updateEnvironment();
- mEditingEnv = LLEnvironment::ENV_NONE;
mEditDay.reset();
if (key.has(KEY_INVENTORY_ID))
{
@@ -259,7 +284,7 @@ void LLFloaterEditExtDayCycle::refresh()
{
if (mEditDay)
{
- LLLineEditor* name_field = getChild<LLLineEditor>("day_cycle_name");
+ LLLineEditor* name_field = getChild<LLLineEditor>(TXT_DAY_NAME);
name_field->setText(mEditDay->getName());
}
@@ -308,29 +333,35 @@ void LLFloaterEditExtDayCycle::onButtonImport()
doImportFromDisk();
}
+void LLFloaterEditExtDayCycle::onButtonLoadFrame()
+{
+
+}
+
void LLFloaterEditExtDayCycle::onAddTrack()
{
// todo: 2.5% safety zone
std::string sldr_key = mFramesSlider->getCurSlider();
LLSettingsBase::Seconds frame(mTimeSlider->getCurSliderValue());
LLSettingsBase::ptr_t setting;
- if (mEditDay->getSettingsAtKeyframe(frame, mCurrentTrack) != nullptr)
+ if ((mEditDay->getSettingsNearKeyfarme(frame, mCurrentTrack, FRAME_SLOP_FACTOR)).second)
{
+ LL_WARNS("SETTINGS") << "Attempt to add new frame too close to existing frame." << LL_ENDL;
return;
}
if (mCurrentTrack == LLSettingsDay::TRACK_WATER)
{
// scratch water should always have the current water settings.
- setting = mScratchWater->buildClone();
- LLSettingsWater::ptr_t water((LLSettingsWater*)setting.get());
- mEditDay->setWaterAtKeyframe(water, frame);
+ LLSettingsWater::ptr_t water(mScratchWater->buildClone());
+ setting = water;
+ mEditDay->setWaterAtKeyframe( std::static_pointer_cast<LLSettingsWater>(setting), frame);
}
else
{
// scratch sky should always have the current sky settings.
- setting = mScratchSky->buildClone();
- LLSettingsSky::ptr_t sky((LLSettingsSky*)setting.get());
+ LLSettingsSky::ptr_t sky(mScratchSky->buildClone());
+ setting = sky;
mEditDay->setSkyAtKeyframe(sky, frame, mCurrentTrack);
}
@@ -364,22 +395,22 @@ void LLFloaterEditExtDayCycle::onPlayActionCallback(const LLSD& user_data)
{
std::string action = user_data.asString();
F32 frame = mTimeSlider->getCurSliderValue();
- if (action == "play")
+ if (action == ACTION_PLAY)
{
startPlay();
}
- else if (action == "pause")
+ else if (action == ACTION_PAUSE)
{
stopPlay();
}
else if (mSliderKeyMap.size() != 0)
{
F32 new_frame = 0;
- if (action == "forward")
+ if (action == ACTION_FORWARD)
{
new_frame = mEditDay->getUpperBoundFrame(mCurrentTrack, frame);
}
- else if (action == "back")
+ else if (action == ACTION_BACK)
{
new_frame = mEditDay->getLowerBoundFrame(mCurrentTrack, frame - (mTimeSlider->getIncrement() / 2));
}
@@ -397,6 +428,7 @@ void LLFloaterEditExtDayCycle::onFrameSliderCallback(const LLSD &data)
LL_WARNS("LAPRAS") << "Current slider set to \"" << curslider << "\"" << LL_ENDL;
F32 sliderpos(0.0);
+
if (curslider.empty())
{
S32 x(0), y(0);
@@ -407,78 +439,55 @@ void LLFloaterEditExtDayCycle::onFrameSliderCallback(const LLSD &data)
else
{
sliderpos = mFramesSlider->getCurSliderValue();
+
+ keymap_t::iterator it = mSliderKeyMap.find(curslider);
+ if (it != mSliderKeyMap.end())
+ {
+ // if (gKeyboard->currentMask(TRUE) == MASK_SHIFT)
+ // {
+ // LL_DEBUGS() << "Copying frame from " << iter->second.mFrame << " to " << new_frame << LL_ENDL;
+ // LLSettingsBase::ptr_t new_settings;
+ //
+ // // mEditDay still remembers old position, add copy at new position
+ // if (mCurrentTrack == LLSettingsDay::TRACK_WATER)
+ // {
+ // LLSettingsWaterPtr_t water_ptr = std::dynamic_pointer_cast<LLSettingsWater>(iter->second.pSettings)->buildClone();
+ // mEditDay->setWaterAtKeyframe(water_ptr, new_frame);
+ // new_settings = water_ptr;
+ // }
+ // else
+ // {
+ // LLSettingsSkyPtr_t sky_ptr = std::dynamic_pointer_cast<LLSettingsSky>(iter->second.pSettings)->buildClone();
+ // mEditDay->setSkyAtKeyframe(sky_ptr, new_frame, mCurrentTrack);
+ // new_settings = sky_ptr;
+ // }
+ //
+ // // mSliderKeyMap still remembers old position, for simplicity, just move it to be identical to slider
+ // F32 old_frame = iter->second.mFrame;
+ // iter->second.mFrame = new_frame;
+ // // slider already moved old frame, create new one in old place
+ // addSliderFrame(old_frame, new_settings, false /*because we are going to reselect new one*/);
+ // // reselect new frame
+ // mFramesSlider->setCurSlider(iter->first);
+ // }
+ // else
+ // {
+ LL_WARNS("LAPRAS") << "Moving frame from " << (*it).second.mFrame << " to " << sliderpos << LL_ENDL;
+ if (mEditDay->moveTrackKeyframe(mCurrentTrack, (*it).second.mFrame, sliderpos))
+ {
+ (*it).second.mFrame = sliderpos;
+ }
+ else
+ {
+ mFramesSlider->setCurSliderValue((*it).second.mFrame);
+ }
+ }
+
}
+
+
mTimeSlider->setCurSliderValue(sliderpos);
-// if (mSliderKeyMap.size() == 0)
-// {
-// mLastFrameSlider.clear();
-// return;
-// }
-// // make sure we have a slider
-// const std::string& cur_sldr = mFramesSlider->getCurSlider();
-// if (cur_sldr.empty())
-// {
-// mLastFrameSlider.clear();
-// return;
-// }
-//
-// F32 new_frame = mFramesSlider->getCurSliderValue();
-// // todo: add safety 2.5% checks
-// keymap_t::iterator iter = mSliderKeyMap.find(cur_sldr);
-// if (iter != mSliderKeyMap.end() && mEditDay->getSettingsAtKeyframe(new_frame, mCurrentTrack).get() == NULL)
-// {
-// if (gKeyboard->currentMask(TRUE) == MASK_SHIFT)
-// {
-// LL_DEBUGS() << "Copying frame from " << iter->second.mFrame << " to " << new_frame << LL_ENDL;
-// LLSettingsBase::ptr_t new_settings;
-//
-// // mEditDay still remembers old position, add copy at new position
-// if (mCurrentTrack == LLSettingsDay::TRACK_WATER)
-// {
-// LLSettingsWaterPtr_t water_ptr = std::dynamic_pointer_cast<LLSettingsWater>(iter->second.pSettings)->buildClone();
-// mEditDay->setWaterAtKeyframe(water_ptr, new_frame);
-// new_settings = water_ptr;
-// }
-// else
-// {
-// LLSettingsSkyPtr_t sky_ptr = std::dynamic_pointer_cast<LLSettingsSky>(iter->second.pSettings)->buildClone();
-// mEditDay->setSkyAtKeyframe(sky_ptr, new_frame, mCurrentTrack);
-// new_settings = sky_ptr;
-// }
-//
-// // mSliderKeyMap still remembers old position, for simplicity, just move it to be identical to slider
-// F32 old_frame = iter->second.mFrame;
-// iter->second.mFrame = new_frame;
-// // slider already moved old frame, create new one in old place
-// addSliderFrame(old_frame, new_settings, false /*because we are going to reselect new one*/);
-// // reselect new frame
-// mFramesSlider->setCurSlider(iter->first);
-// }
-// else
-// {
-// LL_DEBUGS() << "Moving frame from " << iter->second.mFrame << " to " << new_frame << LL_ENDL;
-// if (mEditDay->moveTrackKeyframe(mCurrentTrack, iter->second.mFrame, new_frame))
-// {
-// iter->second.mFrame = new_frame;
-// }
-// }
-// }
-//
-// mTimeSlider->setCurSliderValue(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();
-// }
-// else
-// {
-// updateButtons();
-// updateTimeAndLabel();
-// }
}
void LLFloaterEditExtDayCycle::onFrameSliderDoubleClick(S32 x, S32 y, MASK mask)
@@ -592,7 +601,7 @@ void LLFloaterEditExtDayCycle::updateTabs()
void LLFloaterEditExtDayCycle::updateWaterTabs(const LLSettingsWaterPtr_t &p_water)
{
- LLView* tab_container = mWaterTabLayoutContainer->getChild<LLView>("water_tabs"); //can't extract panels directly, since it is in 'tuple'
+ LLView* tab_container = mWaterTabLayoutContainer->getChild<LLView>(TABS_WATER); //can't extract panels directly, since it is in 'tuple'
LLPanelSettingsWaterMainTab* panel = dynamic_cast<LLPanelSettingsWaterMainTab*>(tab_container->getChildView("water_panel"));
if (panel)
{
@@ -602,7 +611,7 @@ void LLFloaterEditExtDayCycle::updateWaterTabs(const LLSettingsWaterPtr_t &p_wat
void LLFloaterEditExtDayCycle::updateSkyTabs(const LLSettingsSkyPtr_t &p_sky)
{
- LLView* tab_container = mSkyTabLayoutContainer->getChild<LLView>("sky_tabs"); //can't extract panels directly, since they are in 'tuple'
+ LLView* tab_container = mSkyTabLayoutContainer->getChild<LLView>(TABS_SKYS); //can't extract panels directly, since they are in 'tuple'
LLPanelSettingsSky* panel;
panel = dynamic_cast<LLPanelSettingsSky*>(tab_container->getChildView("atmosphere_panel"));
@@ -624,7 +633,7 @@ void LLFloaterEditExtDayCycle::updateSkyTabs(const LLSettingsSkyPtr_t &p_sky)
void LLFloaterEditExtDayCycle::setWaterTabsEnabled(BOOL enable)
{
- LLView* tab_container = mWaterTabLayoutContainer->getChild<LLView>("water_tabs"); //can't extract panels directly, since it is in 'tuple'
+ LLView* tab_container = mWaterTabLayoutContainer->getChild<LLView>(TABS_WATER); //can't extract panels directly, since it is in 'tuple'
LLPanelSettingsWaterMainTab* panel = dynamic_cast<LLPanelSettingsWaterMainTab*>(tab_container->getChildView("water_panel"));
if (panel)
{
@@ -635,7 +644,7 @@ void LLFloaterEditExtDayCycle::setWaterTabsEnabled(BOOL enable)
void LLFloaterEditExtDayCycle::setSkyTabsEnabled(BOOL enable)
{
- LLView* tab_container = mSkyTabLayoutContainer->getChild<LLView>("sky_tabs"); //can't extract panels directly, since they are in 'tuple'
+ LLView* tab_container = mSkyTabLayoutContainer->getChild<LLView>(TABS_SKYS); //can't extract panels directly, since they are in 'tuple'
LLPanelSettingsSky* panel;
panel = dynamic_cast<LLPanelSettingsSky*>(tab_container->getChildView("atmosphere_panel"));
@@ -662,7 +671,7 @@ void LLFloaterEditExtDayCycle::updateButtons()
{
LLSettingsBase::Seconds frame(mTimeSlider->getCurSliderValue());
LLSettingsBase::ptr_t settings = mEditDay->getSettingsAtKeyframe(frame, mCurrentTrack);
- bool can_add = settings.get() == NULL;
+ bool can_add = static_cast<bool>(settings);
mAddFrameButton->setEnabled(can_add);
mDeleteFrameButton->setEnabled(!can_add);
}
@@ -815,7 +824,6 @@ void LLFloaterEditExtDayCycle::onAssetLoaded(LLUUID asset_id, LLSettingsBase::pt
void LLFloaterEditExtDayCycle::loadLiveEnvironment(LLEnvironment::EnvSelection_t env)
{
- mEditingEnv = env;
for (S32 idx = static_cast<S32>(env); idx <= LLEnvironment::ENV_DEFAULT; ++idx)
{
LLSettingsDay::ptr_t day = LLEnvironment::instance().getEnvironmentDay(static_cast<LLEnvironment::EnvSelection_t>(idx));
@@ -855,75 +863,73 @@ void LLFloaterEditExtDayCycle::updateEditEnvironment(void)
void LLFloaterEditExtDayCycle::syncronizeTabs()
{
// This should probably get moved into "updateTabs"
-
LLSettingsBase::Seconds frame(mTimeSlider->getCurSliderValue());
bool canedit(false);
- LLSettingsWater::ptr_t psettingWater;
- LLTabContainer * tabs = mWaterTabLayoutContainer->getChild<LLTabContainer>("water_tabs");
+ LLSettingsWater::ptr_t psettingW;
+ LLTabContainer * tabs = mWaterTabLayoutContainer->getChild<LLTabContainer>(TABS_WATER);
if (mCurrentTrack == LLSettingsDay::TRACK_WATER)
{
- canedit = true;
- psettingWater = std::static_pointer_cast<LLSettingsWater>(mEditDay->getSettingsAtKeyframe(frame, LLSettingsDay::TRACK_WATER));
- if (!psettingWater)
+ canedit = !mIsPlaying;
+ LLSettingsDay::CycleTrack_t::value_type found = mEditDay->getSettingsNearKeyfarme(frame, LLSettingsDay::TRACK_WATER, FRAME_SLOP_FACTOR);
+ psettingW = std::static_pointer_cast<LLSettingsWater>(found.second);
+ if (!psettingW)
{
canedit = false;
- psettingWater = mScratchWater;
+ psettingW = mScratchWater;
}
+
+ getChild<LLUICtrl>(ICN_LOCK_EDIT)->setVisible(!canedit);
}
else
{
- psettingWater = mScratchWater;
+ psettingW = mScratchWater;
}
- S32 count = tabs->getTabCount();
- for (S32 idx = 0; idx < count; ++idx)
- {
- LLSettingsEditPanel *panel = static_cast<LLSettingsEditPanel *>(tabs->getPanelByIndex(idx));
- if (panel)
- {
- panel->setSettings(psettingWater);
- panel->setEnabled(canedit);
- panel->setAllChildrenEnabled(canedit);
- panel->refresh();
- }
- }
-
- LLSettingsSky::ptr_t psettingSky;
+ setTabsData(tabs, psettingW, canedit);
+ LLSettingsSky::ptr_t psettingS;
canedit = false;
- tabs = mSkyTabLayoutContainer->getChild<LLTabContainer>("sky_tabs");
+ tabs = mSkyTabLayoutContainer->getChild<LLTabContainer>(TABS_SKYS);
if (mCurrentTrack != LLSettingsDay::TRACK_WATER)
{
- canedit = true;
- psettingSky = std::static_pointer_cast<LLSettingsSky>(mEditDay->getSettingsAtKeyframe(frame, mCurrentTrack));
- if (!psettingSky)
+ canedit = !mIsPlaying;
+ LLSettingsDay::CycleTrack_t::value_type found = mEditDay->getSettingsNearKeyfarme(frame, mCurrentTrack, FRAME_SLOP_FACTOR);
+ psettingS = std::static_pointer_cast<LLSettingsSky>(found.second);
+ if (!psettingS)
{
canedit = false;
- psettingSky = mScratchSky;
+ psettingS = mScratchSky;
}
+
+ getChild<LLUICtrl>(ICN_LOCK_EDIT)->setVisible(!canedit);
}
else
{
- psettingSky = mScratchSky;
+ psettingS = mScratchSky;
}
- count = tabs->getTabCount();
+ setTabsData(tabs, psettingS, canedit);
+ LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_EDIT, psettingS, psettingW);
+}
+
+void LLFloaterEditExtDayCycle::setTabsData(LLTabContainer * tabcontainer, const LLSettingsBase::ptr_t &settings, bool editable)
+{
+ S32 count = tabcontainer->getTabCount();
for (S32 idx = 0; idx < count; ++idx)
{
- LLSettingsEditPanel *panel = static_cast<LLSettingsEditPanel *>(tabs->getPanelByIndex(idx));
+ LLSettingsEditPanel *panel = static_cast<LLSettingsEditPanel *>(tabcontainer->getPanelByIndex(idx));
if (panel)
{
- panel->setSettings(psettingSky);
- panel->setEnabled(canedit);
- panel->setAllChildrenEnabled(canedit);
+ panel->setSettings(settings);
+ panel->setEnabled(editable);
panel->refresh();
+ panel->setAllChildrenEnabled(editable);
}
}
-
- LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_EDIT, psettingSky, psettingWater);
}
+
void LLFloaterEditExtDayCycle::reblendSettings()
{
F64 position = mTimeSlider->getCurSliderValue();
diff --git a/indra/newview/llfloatereditextdaycycle.h b/indra/newview/llfloatereditextdaycycle.h
index fc0b4f5106..ea9f1e1882 100644
--- a/indra/newview/llfloatereditextdaycycle.h
+++ b/indra/newview/llfloatereditextdaycycle.h
@@ -40,6 +40,7 @@ class LLLineEditor;
class LLMultiSliderCtrl;
class LLTextBox;
class LLTimeCtrl;
+class LLTabContainer;
class LLInventoryItem;
@@ -83,6 +84,7 @@ private:
void onButtonApply(LLUICtrl *ctrl, const LLSD &data);
void onBtnCancel();
void onButtonImport();
+ void onButtonLoadFrame();
void onAddTrack();
void onRemoveTrack();
void onCommitName(class LLLineEditor* caller, void* user_data);
@@ -130,46 +132,41 @@ private:
void syncronizeTabs();
void reblendSettings();
- // **RIDER**
+ void setTabsData(LLTabContainer * tabcontainer, const LLSettingsBase::ptr_t &settings, bool editable);
// play functions
void startPlay();
void stopPlay();
static void onIdlePlay(void *);
- LLSettingsDay::ptr_t mEditDay; // edited copy
- LLSettingsDay::Seconds mDayLength;
- U32 mCurrentTrack;
- std::string mLastFrameSlider;
-
- LLButton* mCancelButton;
- LLButton* mAddFrameButton;
- LLButton* mDeleteFrameButton;
- LLButton* mImportButton;
-
- LLMultiSliderCtrl* mTimeSlider;
- LLMultiSliderCtrl* mFramesSlider;
- LLView* mSkyTabLayoutContainer;
- LLView* mWaterTabLayoutContainer;
- LLTextBox* mCurrentTimeLabel;
+ LLSettingsDay::ptr_t mEditDay; // edited copy
+ LLSettingsDay::Seconds mDayLength;
+ U32 mCurrentTrack;
+ std::string mLastFrameSlider;
+
+ LLButton* mAddFrameButton;
+ LLButton* mDeleteFrameButton;
+ LLButton* mImportButton;
+ LLButton* mLoadFrame;
+ LLMultiSliderCtrl* mTimeSlider;
+ LLMultiSliderCtrl* mFramesSlider;
+ LLView* mSkyTabLayoutContainer;
+ LLView* mWaterTabLayoutContainer;
+ LLTextBox* mCurrentTimeLabel;
+ LLUUID mInventoryId;
+ LLInventoryItem * mInventoryItem;
+ LLFlyoutComboBtnCtrl * mFlyoutControl;
- // **RIDER**
- LLUUID mInventoryId;
- LLInventoryItem * mInventoryItem;
- LLEnvironment::EnvSelection_t mEditingEnv;
LLTrackBlenderLoopingManual::ptr_t mSkyBlender;
LLTrackBlenderLoopingManual::ptr_t mWaterBlender;
- LLSettingsSky::ptr_t mScratchSky;
- LLSettingsWater::ptr_t mScratchWater;
- // **RIDER**
-
- LLFlyoutComboBtnCtrl * mFlyoutControl;
+ LLSettingsSky::ptr_t mScratchSky;
+ LLSettingsWater::ptr_t mScratchWater;
- LLFrameTimer mPlayTimer;
- F32 mPlayStartFrame; // an env frame
- bool mIsPlaying;
+ LLFrameTimer mPlayTimer;
+ F32 mPlayStartFrame; // an env frame
+ bool mIsPlaying;
- edit_commit_signal_t mCommitSignal;
+ edit_commit_signal_t mCommitSignal;
// For map of sliders to parameters
class FrameData
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 528987f3bf..78c868c6f4 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -253,6 +253,9 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("inventory", "floater_my_inventory.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSidePanelContainer>);
LLFloaterReg::add("inspect", "floater_inspect.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterInspect>);
LLFloaterReg::add("item_properties", "floater_item_properties.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterItemProperties>);
+
+// LLFloaterReg::add("floater_settings_picker", "floater_settings_picker.xml" , (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterItemProperties>);
+
LLInspectAvatarUtil::registerFloater();
LLInspectGroupUtil::registerFloater();
LLInspectObjectUtil::registerFloater();
diff --git a/indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml b/indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml
index 86c580f354..a1140b2532 100644
--- a/indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml
+++ b/indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml
@@ -41,7 +41,7 @@
left="15"
top="5"
width="105">
- Day Cycle Name:
+ Day Cycle Name:
</text>
<line_editor
follows="top|left"
@@ -89,8 +89,8 @@
name="sky4_track"
width="100">
<button.commit_callback
- function="DayCycle.Track"
- parameter="4" />
+ function="DayCycle.Track"
+ parameter="4" />
</button>
<button
follows="left|top"
@@ -102,8 +102,8 @@
name="sky3_track"
width="100">
<button.commit_callback
- function="DayCycle.Track"
- parameter="3" />
+ function="DayCycle.Track"
+ parameter="3" />
</button>
<button
follows="left|top"
@@ -115,8 +115,8 @@
name="sky2_track"
width="100">
<button.commit_callback
- function="DayCycle.Track"
- parameter="2" />
+ function="DayCycle.Track"
+ parameter="2" />
</button>
<button
follows="left|top"
@@ -128,8 +128,8 @@
name="sky1_track"
width="100">
<button.commit_callback
- function="DayCycle.Track"
- parameter="1" />
+ function="DayCycle.Track"
+ parameter="1" />
</button>
<button
follows="left|top"
@@ -141,8 +141,8 @@
name="water_track"
width="100">
<button.commit_callback
- function="DayCycle.Track"
- parameter="0" />
+ function="DayCycle.Track"
+ parameter="0" />
</button>
</panel>
<panel name="timeline"
@@ -154,249 +154,289 @@
min_width="595"
left_pad="0"
visible="true">
- <!-- Todo: These 5 tests might be subjected to a change to be dynamically generated, consider using layout_stack to get dynamic width adjustment-->
+ <!-- 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%[DSC]"
- width="80" />
+ follows="left|top"
+ height="15"
+ layout="topleft"
+ left="10"
+ name="p0"
+ top_pad="5"
+ value="0%[DSC]"
+ width="80" />
<text
- follows="left|top|right"
- height="15"
- layout="topleft"
- left_pad="39"
- name="p1"
- top_delta="0"
- value="25%[DSC]"
- width="80" />
+ follows="left|top|right"
+ height="15"
+ layout="topleft"
+ left_pad="39"
+ name="p1"
+ top_delta="0"
+ value="25%[DSC]"
+ width="80" />
<text
- follows="left|top|right"
- height="15"
- layout="topleft"
- left_pad="39"
- name="p2"
- top_delta="0"
- value="50%[DSC]"
- width="80" />
+ follows="left|top|right"
+ height="15"
+ layout="topleft"
+ left_pad="39"
+ name="p2"
+ top_delta="0"
+ value="50%[DSC]"
+ width="80" />
<text
- follows="left|top|right"
- height="15"
- layout="topleft"
- left_pad="39"
- name="p3"
- top_delta="0"
- value="75%[DSC]"
- width="80" />
+ follows="left|top|right"
+ height="15"
+ layout="topleft"
+ left_pad="39"
+ name="p3"
+ top_delta="0"
+ value="75%[DSC]"
+ width="80" />
<text
- follows="left|top|right"
- height="15"
- layout="topleft"
- left_pad="39"
- name="p4"
- top_delta="0"
- value="100%[DSC]"
- width="80" />
+ follows="left|top|right"
+ height="15"
+ layout="topleft"
+ left_pad="39"
+ name="p4"
+ top_delta="0"
+ value="100%[DSC]"
+ width="80" />
<multi_slider
- decimal_digits="0"
- draw_track="false"
- follows="bottom"
- height="10"
- increment="0.01"
- initial_value="0"
- layout="topleft"
- left="10"
- max_sliders="1"
- max_val="1"
- name="WLTimeSlider"
- show_text="false"
- top_pad="0"
- use_triangle="true"
- width="525" />
+ decimal_digits="0"
+ draw_track="false"
+ follows="bottom"
+ height="10"
+ increment="0.01"
+ initial_value="0"
+ layout="topleft"
+ left="10"
+ max_sliders="1"
+ max_val="1"
+ name="WLTimeSlider"
+ show_text="false"
+ top_pad="0"
+ use_triangle="true"
+ width="525" />
<multi_slider
- decimal_digits="0"
- follows="bottom"
- height="10"
- increment="0.01"
- initial_value="0"
- layout="topleft"
- left="10"
- max_sliders="20"
- max_val="1"
- name="WLDayCycleFrames"
- show_text="false"
- top_pad="15"
- width="525" />
+ decimal_digits="0"
+ follows="bottom"
+ height="10"
+ increment="0.01"
+ initial_value="0"
+ layout="topleft"
+ left="10"
+ max_sliders="20"
+ max_val="1"
+ name="WLDayCycleFrames"
+ show_text="false"
+ top_pad="15"
+ width="525" />
<text
- follows="left|bottom"
- height="20"
- layout="topleft"
- left_pad="0"
- name="current_time"
- value="[PRCNT]%[DSC]"
- top_delta="-5"
- width="70" />
+ follows="left|bottom"
+ height="20"
+ layout="topleft"
+ left_pad="0"
+ name="current_time"
+ value="[PRCNT]%[DSC]"
+ top_delta="-5"
+ width="70" />
<layout_stack
- name="progress_control"
- follows="top|left"
- height="25"
- width="83"
- layout="topleft"
- animate="false"
- left="225"
- top_pad="40"
- orientation="horizontal">
+ 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">
+ 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">
+ 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">
<button.commit_callback
- function="DayCycle.PlayActions"
- parameter="back" />
+ function="DayCycle.PlayActions"
+ parameter="back" />
</button>
</layout_panel>
<layout_panel
- name="play_layout"
- mouse_opaque="false"
- auto_resize="false"
- layout="topleft"
- top="0"
- height="25"
- min_width="25"
- width="25">
+ name="play_layout"
+ 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">
+ 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">
<button.commit_callback
- function="DayCycle.PlayActions"
- parameter="play" />
+ function="DayCycle.PlayActions"
+ parameter="play" />
</button>
</layout_panel>
<layout_panel
- name="pause_layout"
- mouse_opaque="false"
- auto_resize="false"
- layout="topleft"
- top="0"
- height="25"
- min_width="25"
- width="25"
- visible="false">
+ name="pause_layout"
+ 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">
+ 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">
<button.commit_callback
- function="DayCycle.PlayActions"
- parameter="pause" />
+ function="DayCycle.PlayActions"
+ parameter="pause" />
</button>
</layout_panel>
<layout_panel
- name="skip_forward"
- mouse_opaque="false"
- auto_resize="false"
- layout="topleft"
- top="0"
- height="25"
- min_width="25"
- width="25">
+ 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">
+ 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">
<button.commit_callback
- function="DayCycle.PlayActions"
- parameter="forward" />
+ function="DayCycle.PlayActions"
+ parameter="forward" />
</button>
</layout_panel>
</layout_stack>
<button
- follows="top|left"
- height="23"
- width="90"
- label="Add Frame"
- left_pad="175"
- top_delta="-12"
- name="add_frame" />
+ 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" />
+ 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="frame_edit_controls"
+ auto_resize="false"
+ user_resize="true"
+ height="30"
+ width="700"
+ min_height="30"
+ visible="true">
+ <!--bg_alpha_color="blue"
+ background_visible="true" -->
+ <icon
+ border="1"
+ bevel_style="out"
+ name="icn_lock_edit"
+ layout="bottomleft"
+ follows="bottom"
+ image_name="Locked_Icon"
+ bottom="4"
+ left="5"
+ height="15"
+ width="15"
+ tab_stop="false"
+ visible="false"
+ tool_tip="Select a key frame above to edit settings"/>
+ <button
+ name="btn_load_frame"
+ follows="top"
+ image_overlay="Command_Inventory_Icon"
+ 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="30"
+ width="30"
+ left="25"
+ top="1"
+ tool_tip="Replace frame with settings from inventory"/>
+ </layout_panel>
<layout_panel name="frame_settings_water"
auto_resize="false"
user_resize="true"
- height="386"
+ height="351"
width="700"
min_height="0"
visible="false">
@@ -413,20 +453,20 @@
top_pad="0"
width="700">
<panel
- border="true"
- class="panel_settings_water"
- filename="panel_settings_water.xml"
- label="Water"
- layout="topleft"
- left_delta="0"
- top_pad="5"
- name="water_panel"/>
+ border="true"
+ class="panel_settings_water"
+ filename="panel_settings_water.xml"
+ label="Water"
+ 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"
+ height="351"
width="700"
min_height="0"
visible="true">
@@ -444,32 +484,32 @@
top_pad="0"
width="700">
<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" />
+ 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
- border="true"
- class="panel_settings_cloud"
- filename="panel_settings_sky_clouds.xml"
- label="Clouds"
- layout="topleft"
- left_delta="0"
- top_pad="5"
- name="clouds_panel" />
+ border="true"
+ class="panel_settings_cloud"
+ filename="panel_settings_sky_clouds.xml"
+ label="Clouds"
+ layout="topleft"
+ left_delta="0"
+ top_pad="5"
+ name="clouds_panel" />
<panel
- border="true"
- class="panel_settings_sunmoon"
- filename="panel_settings_sky_sunmoon.xml"
- label="Sun &amp; Moon"
- layout="topleft"
- left_delta="0"
- top_pad="5"
- name="moon_panel" />
+ border="true"
+ class="panel_settings_sunmoon"
+ filename="panel_settings_sky_sunmoon.xml"
+ label="Sun &amp; Moon"
+ layout="topleft"
+ left_delta="0"
+ top_pad="5"
+ name="moon_panel" />
</tab_container>
</layout_panel>
<layout_panel name="buttons"
@@ -486,7 +526,7 @@
left="5"
top_pad="0"
name="save_btn"
- width="100" />
+ width="150" />
<button
follows="top|left"
@@ -510,7 +550,7 @@
layout="topleft"
left_pad="10"
name="cancel_btn"
- width="100" />
+ width="150" />
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/en/floater_settings_picker.xml b/indra/newview/skins/default/xui/en/floater_settings_picker.xml
new file mode 100644
index 0000000000..75bef9f680
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_settings_picker.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ height="602"
+ layout="topleft"
+ name="floater_settings_picker"
+ help_topic=""
+ save_rect="true"
+ title="Settings Selector"
+ width="705">
+
+</floater>