summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorandreykproductengine <andreykproductengine@lindenlab.com>2018-05-22 20:32:56 +0300
committerandreykproductengine <andreykproductengine@lindenlab.com>2018-05-22 20:32:56 +0300
commitb6ba9dd565b59e516571445e56f9dafe3bdf4061 (patch)
treeb6c016eb8f9745498a54317ed5f152e9d03f1eb7 /indra/newview
parente4973e0f92b524e7f9c2d10745f4c5e3a8557284 (diff)
MAINT-8344 Day Cycle Editor (part 4, finalization)
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llfloatereditextdaycycle.cpp288
-rw-r--r--indra/newview/llfloatereditextdaycycle.h64
-rw-r--r--indra/newview/llfloaterfixedenvironment.cpp2
-rw-r--r--indra/newview/llfloaterfixedenvironment.h2
-rw-r--r--indra/newview/llflyoutcombobtn.cpp24
-rw-r--r--indra/newview/llflyoutcombobtn.h15
-rw-r--r--indra/newview/llpanelenvironment.cpp2
-rw-r--r--indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml35
8 files changed, 254 insertions, 178 deletions
diff --git a/indra/newview/llfloatereditextdaycycle.cpp b/indra/newview/llfloatereditextdaycycle.cpp
index ad759d13ff..747a20bbbd 100644
--- a/indra/newview/llfloatereditextdaycycle.cpp
+++ b/indra/newview/llfloatereditextdaycycle.cpp
@@ -43,13 +43,11 @@
// newview
#include "llagent.h"
-//#include "llflyoutcombobtnctrl.h" //Todo: get rid of this and LLSaveOutfitComboBtn, make a proper UI element/button/pannel instead
+#include "llflyoutcombobtn.h" //Todo: make a proper UI element/button/panel instead
#include "llregioninfomodel.h"
#include "llviewerregion.h"
#include "llpaneleditwater.h"
#include "llpaneleditsky.h"
-//#include "llsettingsvo.h"
-//#include "llinventorymodel.h"
#include "llenvironment.h"
#include "lltrans.h"
@@ -63,26 +61,24 @@ static const std::string track_tabs[] = {
};
// For flyout
-/*const std::string ACTION_SAVE("save_settings");
+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
+const std::string ACTION_SAVE("save_settings");
const std::string ACTION_SAVEAS("save_as_new_settings");
const std::string ACTION_APPLY_LOCAL("apply_local");
const std::string ACTION_APPLY_PARCEL("apply_parcel");
const std::string ACTION_APPLY_REGION("apply_region");
-const std::string XML_FLYOUTMENU_FILE("menu_save_settings.xml");*/
-
LLFloaterEditExtDayCycle::LLFloaterEditExtDayCycle(const LLSD &key):
LLFloater(key),
- mSaveButton(NULL),
+ mFlyoutControl(NULL),
mCancelButton(NULL),
- mUploadButton(NULL),
mDayLength(0),
mDayOffset(0),
mCurrentTrack(4),
mTimeSlider(NULL),
mFramesSlider(NULL),
- //mFlyoutControl(NULL),
mCurrentTimeLabel(NULL)
{
mCommitCallbackRegistrar.add("DayCycle.Track", boost::bind(&LLFloaterEditExtDayCycle::onTrackSelectionCallback, this, _2));
@@ -90,15 +86,14 @@ LLFloaterEditExtDayCycle::LLFloaterEditExtDayCycle(const LLSD &key):
LLFloaterEditExtDayCycle::~LLFloaterEditExtDayCycle()
{
- // Todo: consider remaking mFlyoutControl into class that initializes intself with floater,
- // completes at postbuild, e t c...
- // (make it into actual button?, In such case XML_FLYOUTMENU_FILE will be specified in xml)
- //delete mFlyoutControl;
+ // Todo: consider remaking mFlyoutControl into full view class that initializes intself with floater,
+ // complete with postbuild, e t c...
+ delete mFlyoutControl;
}
void LLFloaterEditExtDayCycle::openFloater(LLSettingsDay::ptr_t settings, S64Seconds daylength, S64Seconds dayoffset)
{
- mSavedDay = settings;
+ mOriginalDay = settings;
mEditDay = settings->buildClone();
mDayLength = daylength;
mDayOffset = dayoffset;
@@ -110,9 +105,7 @@ BOOL LLFloaterEditExtDayCycle::postBuild()
{
getChild<LLLineEditor>("day_cycle_name")->setKeystrokeCallback(boost::bind(&LLFloaterEditExtDayCycle::onCommitName, this, _1, _2), NULL);
- mSaveButton = getChild<LLButton>("save_btn", true);
mCancelButton = getChild<LLButton>("cancel_btn", true);
- mUploadButton = getChild<LLButton>("upload_btn", true);
mAddFrameButton = getChild<LLButton>("add_frame", true);
mDeleteFrameButton = getChild<LLButton>("delete_frame", true);
mTimeSlider = getChild<LLMultiSliderCtrl>("WLTimeSlider");
@@ -121,12 +114,10 @@ BOOL LLFloaterEditExtDayCycle::postBuild()
mWaterTabLayoutContainer = getChild<LLView>("frame_settings_water", true);
mCurrentTimeLabel = getChild<LLTextBox>("current_time", true);
- //mFlyoutControl = new LLFlyoutComboBtnCtrl(this, "save_btn", "btn_flyout", XML_FLYOUTMENU_FILE);
- //mFlyoutControl->setAction([this](LLUICtrl *ctrl, const LLSD &data) { onButtonApply(ctrl, data); });
+ mFlyoutControl = new LLFlyoutComboBtnCtrl(this, "save_btn", "btn_flyout", XML_FLYOUTMENU_FILE);
+ mFlyoutControl->setAction([this](LLUICtrl *ctrl, const LLSD &data) { onButtonApply(ctrl, data); });
- mUploadButton->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onBtnSave, this));
mCancelButton->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onBtnCancel, this));
- mUploadButton->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onBtnUpload, this));
mTimeSlider->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onTimeSliderMoved, this));
mFramesSlider->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onFrameSliderCallback, this));
mAddFrameButton->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onAddTrack, this));
@@ -147,8 +138,21 @@ void LLFloaterEditExtDayCycle::onOpen(const LLSD& key)
LL_WARNS() << "Uninitialized day settings, closing floater" << LL_ENDL;
closeFloater();
}
- LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_EDIT);
- LLEnvironment::instance().updateEnvironment();
+
+ // Save previous data
+ LLEnvironment::EnvSelection_t env = LLEnvironment::instance().getSelectedEnvironment();
+ mSavedEnvironment = env;
+ if (mSavedEnvironment == LLEnvironment::ENV_EDIT)
+ {
+ // Flawed in case of multiple edits (if multiple edits are possible), also check onClose()
+ LL_WARNS() << "Opening up Day editor when already editing day!" << LL_ENDL;
+ }
+ mSavedDay = LLEnvironment::instance().getEnvironmentDay(env);
+ mSavedDayLength = LLEnvironment::instance().getEnvironmentDayLength(env);
+ mSavedDayOffset = LLEnvironment::instance().getEnvironmentDayOffset(env);
+
+ // set environment for editing (display the one we are editing)
+ setEditingEnv();
LLLineEditor* name_field = getChild<LLLineEditor>("day_cycle_name");
name_field->setText(mEditDay->getName());
@@ -163,7 +167,6 @@ void LLFloaterEditExtDayCycle::onOpen(const LLSD& key)
S32Hours hrs;
S32Minutes minutes;
S64Seconds total;
- //LLDate date;
LLUIString formatted_label = getString("time_label");
for (int i = 0; i < max_elm; i++)
{
@@ -171,19 +174,12 @@ void LLFloaterEditExtDayCycle::onOpen(const LLSD& key)
hrs = total;
minutes = total - hrs;
- //date = LLDate(((mDayLength / (max_elm - 1)) * i) + mDayOffset);
- //formatted_label.setArg("[TIME]", date.toHTTPDateString(std::string("%H:%M")));
- //formatted_label.setArg("[TIME]", llformat("%.1f", hrs.value()));
-
formatted_label.setArg("[HH]", llformat("%d", hrs.value()));
formatted_label.setArg("[MM]", llformat("%d", abs(minutes.value())));
getChild<LLTextBox>("p" + llformat("%d", i), true)->setTextArg("[DSC]", formatted_label.getString());
}
hrs = mDayOffset;
minutes = mDayOffset - hrs;
- //formatted_label.setArg("[TIME]", llformat("%.1f", hrs.value()));
- //date = LLDate(mDayOffset);
- //formatted_label.setArg("[TIME]", date.toHTTPDateString(std::string("%H:%M")));
formatted_label.setArg("[HH]", llformat("%d", hrs.value()));
formatted_label.setArg("[MM]", llformat("%d", abs(minutes.value())));
mCurrentTimeLabel->setTextArg("[DSC]", formatted_label.getString());
@@ -200,79 +196,82 @@ void LLFloaterEditExtDayCycle::onOpen(const LLSD& key)
void LLFloaterEditExtDayCycle::onClose(bool app_quitting)
{
- if (!app_quitting) // there's no point to change environment if we're quitting
- {
- /* TODO: don't restore this environment. We may have gotten here from land or region. */
- LLEnvironment::instance().clearEnvironment(LLEnvironment::ENV_EDIT);
- LLEnvironment::instance().updateEnvironment();
- }
+ // there's no point to change environment if we're quitting
+ // or if we already restored environment
+ if (!app_quitting && LLEnvironment::instance().getSelectedEnvironment() == LLEnvironment::ENV_EDIT)
+ {
+ restoreSavedEnv();
+ }
}
void LLFloaterEditExtDayCycle::onVisibilityChange(BOOL new_visibility)
{
if (new_visibility)
{
- LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_EDIT, mEditDay, LLSettingsDay::DEFAULT_DAYLENGTH, LLSettingsDay::DEFAULT_DAYOFFSET);
- LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_EDIT);
+ setEditingEnv();
}
else
{
- /* TODO: don't restore this environment. We may have gotten here from land or region. */
- LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL);
+ restoreSavedEnv();
}
}
-/*void LLFloaterEditExtDayCycle::onButtonApply(LLUICtrl *ctrl, const LLSD &data)
+void LLFloaterEditExtDayCycle::onButtonApply(LLUICtrl *ctrl, const LLSD &data)
{
std::string ctrl_action = ctrl->getName();
if (ctrl_action == ACTION_SAVE)
{
- mSavedDay = mEditDay;
- //doApplyUpdateInventory();
+ if (mSavedDay.get() != mOriginalDay.get())
+ {
+ restoreSavedEnv();
+ }
+ else
+ {
+ S64Seconds day_length = mDayLength.value() > 0 ? mDayLength : LLSettingsDay::DEFAULT_DAYLENGTH;
+ S64Seconds day_offset = mDayLength.value() > 0 ? mDayOffset : LLSettingsDay::DEFAULT_DAYOFFSET;
+ LLEnvironment::instance().setEnvironment((LLEnvironment::EnvSelection_t)mSavedEnvironment, mEditDay, day_length, day_offset);
+ LLEnvironment::instance().setSelectedEnvironment((LLEnvironment::EnvSelection_t)mSavedEnvironment);
+ LLEnvironment::instance().updateEnvironment();
+ }
+ mOriginalDay = mEditDay; // to kill the pointer
+
+ if (!mCommitSignal.empty())
+ mCommitSignal(mEditDay);
}
else if (ctrl_action == ACTION_SAVEAS)
{
- //doApplyCreateNewInventory();
- LLSettingsVOBase::createInventoryItem(mEditDay, NULL);
- }
- else if ((ctrl_action == ACTION_APPLY_LOCAL) ||
- (ctrl_action == ACTION_APPLY_PARCEL) ||
- (ctrl_action == ACTION_APPLY_REGION))
- {
- //doApplyEnvironment(ctrl_action);
- // Shouldn't be supported?
+ LLSettingsVOBase::createInventoryItem(mEditDay);
+ restoreSavedEnv();
}
else
{
- LL_WARNS("ENVIRONMENT") << "Unknown settings action '" << ctrl_action << "'" << LL_ENDL;
- }
-
- if (!mCommitSignal.empty())
- mCommitSignal(mEditDay);
- closeFloater();
- }*/
-
-void LLFloaterEditExtDayCycle::onBtnSave()
-{
- mSavedDay = mEditDay;
+ LLEnvironment::EnvSelection_t env(LLEnvironment::ENV_DEFAULT);
+ bool updateSimulator(ctrl_action != ACTION_APPLY_LOCAL);
- //no longer needed?
- if (!mCommitSignal.empty())
- mCommitSignal(mEditDay);
+ if (ctrl_action == ACTION_APPLY_LOCAL)
+ env = LLEnvironment::ENV_LOCAL;
+ else if (ctrl_action == ACTION_APPLY_PARCEL)
+ env = LLEnvironment::ENV_PARCEL;
+ else if (ctrl_action == ACTION_APPLY_REGION)
+ env = LLEnvironment::ENV_REGION;
+ else
+ {
+ LL_WARNS("ENVIRONMENT") << "Unknown apply '" << ctrl_action << "'" << LL_ENDL;
+ }
+ LLEnvironment::instance().setEnvironment(env, mEditDay);
+ if (updateSimulator)
+ {
+ LL_WARNS("ENVIRONMENT") << "Attempting to apply " << env << LL_ENDL;
+ }
+ }
closeFloater();
}
void LLFloaterEditExtDayCycle::onBtnCancel()
{
- closeFloater();
-}
-
-void LLFloaterEditExtDayCycle::onBtnUpload()
-{
- LLSettingsVOBase::createInventoryItem(mEditDay);
- //closeFloater();
+ closeFloater(); // will restore env
}
void LLFloaterEditExtDayCycle::onAddTrack()
@@ -368,14 +367,44 @@ void LLFloaterEditExtDayCycle::onFrameSliderCallback()
}
F32 new_frame = mFramesSlider->getCurSliderValue();
- // todo: add safety checks, user shouldn't be capable of moving one frame over another or move missing frame
+ // 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)
{
- LL_DEBUGS() << "Moving frame from " << iter->second.first << " to " << new_frame << LL_ENDL;
- if (mEditDay->moveTrackKeyframe(mCurrentTrack, iter->second.first, new_frame))
+ 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
{
- iter->second.first = new_frame;
+ 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;
+ }
}
}
@@ -404,7 +433,7 @@ void LLFloaterEditExtDayCycle::onTimeSliderMoved()
F32 frame = mTimeSlider->getCurSliderValue();
while (iter != end_iter)
{
- if (iter->second.first == frame)
+ if (iter->second.mFrame == frame)
{
mFramesSlider->setCurSlider(iter->first);
break;
@@ -412,14 +441,14 @@ void LLFloaterEditExtDayCycle::onTimeSliderMoved()
iter++;
}
- // Todo: safety checks
+ // block or update tabs according to new selection
updateTabs();
- //Todo: update something related to time/play/blending?
+
+ // blending:
}
void LLFloaterEditExtDayCycle::selectTrack(U32 track_index)
{
- // todo: safety checks
mCurrentTrack = track_index;
LLButton* button = getChild<LLButton>(track_tabs[track_index], true);
if (button->getToggleState())
@@ -442,7 +471,7 @@ void LLFloaterEditExtDayCycle::selectTrack(U32 track_index)
void LLFloaterEditExtDayCycle::clearTabs()
{
- // todo: instead init with defaults?
+ // Note: If this doesn't look good, init panels with default settings. It might be better looking
if (mCurrentTrack == LLSettingsDay::TRACK_WATER)
{
const LLSettingsWaterPtr_t p_water = LLSettingsWaterPtr_t(NULL);
@@ -459,12 +488,12 @@ void LLFloaterEditExtDayCycle::clearTabs()
void LLFloaterEditExtDayCycle::updateTabs()
{
- // TODO: either prevent user from editing existing settings or clone them to not affect saved frames
std::string sldr = mFramesSlider->getCurSlider();
if (sldr.empty())
{
- // keep old settings for duplicating if there are any
- // TODO: disable tabs to prevent editing without nulling settings
+ // keep old settings if there are any for duplicating later, just disable panels
+ setWaterTabsEnabled(FALSE);
+ setSkyTabsEnabled(FALSE);
}
else if (mCurrentTrack == LLSettingsDay::TRACK_WATER)
{
@@ -512,6 +541,42 @@ 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'
+ LLPanelSettingsWaterMainTab* panel = dynamic_cast<LLPanelSettingsWaterMainTab*>(tab_container->getChildView("water_panel"));
+ if (panel)
+ {
+ panel->setEnabled(enable);
+ panel->setAllChildrenEnabled(enable);
+ }
+}
+
+void LLFloaterEditExtDayCycle::setSkyTabsEnabled(BOOL enable)
+{
+ LLView* tab_container = mSkyTabLayoutContainer->getChild<LLView>("sky_tabs"); //can't extract panels directly, since they are in 'tuple'
+
+ LLPanelSettingsSky* panel;
+ panel = dynamic_cast<LLPanelSettingsSky*>(tab_container->getChildView("atmosphere_panel"));
+ if (panel)
+ {
+ panel->setEnabled(enable);
+ panel->setAllChildrenEnabled(enable);
+ }
+ panel = dynamic_cast<LLPanelSettingsSky*>(tab_container->getChildView("clouds_panel"));
+ if (panel)
+ {
+ panel->setEnabled(enable);
+ panel->setAllChildrenEnabled(enable);
+ }
+ panel = dynamic_cast<LLPanelSettingsSky*>(tab_container->getChildView("moon_panel"));
+ if (panel)
+ {
+ panel->setEnabled(enable);
+ panel->setAllChildrenEnabled(enable);
+ }
+}
+
void LLFloaterEditExtDayCycle::updateButtons()
{
F32 frame = mTimeSlider->getCurSliderValue();
@@ -525,29 +590,24 @@ void LLFloaterEditExtDayCycle::updateSlider()
mFramesSlider->clear();
mSliderKeyMap.clear();
- std::string new_slider;
- F32 frame = 0;
LLSettingsDay::CycleTrack_t track = mEditDay->getCycleTrack(mCurrentTrack);
for (auto &track_frame : track)
{
- // multi slider distinguishes elements by key/name in string format
- // store names to map to be able to recall dependencies
- frame = track_frame.first;
- new_slider = mFramesSlider->addSlider(frame);
- mSliderKeyMap[new_slider] = framedata_t(frame, track_frame.second);
+ addSliderFrame(track_frame.first, track_frame.second, false);
}
- mLastFrameSlider = new_slider;
-
if (mSliderKeyMap.size() > 0)
{
- mTimeSlider->setCurSliderValue(frame);
+ // update positions
+ mLastFrameSlider = mFramesSlider->getCurSlider();
+ mTimeSlider->setCurSliderValue(mFramesSlider->getCurSliderValue());
updateTabs();
}
else
{
// disable panels
clearTabs();
+ mLastFrameSlider.clear();
}
}
@@ -559,11 +619,6 @@ void LLFloaterEditExtDayCycle::updateTimeAndLabel()
{
LLUIString formatted_label = getString("time_label");
- //F32Hours hrs = (mDayLength * time) + mDayOffset;
- //LLDate date((mDayLength * time) + mDayOffset);
- //formatted_label.setArg("[TIME]", llformat("%.1f", hrs.value()));
- //formatted_label.setArg("[TIME]", date.toHTTPDateString(std::string("%H:%M")));
-
S64Seconds total = (mDayLength * time) + mDayOffset;
S32Hours hrs = total;
S32Minutes minutes = total - hrs;
@@ -580,16 +635,19 @@ void LLFloaterEditExtDayCycle::updateTimeAndLabel()
// Update blender here:
}
-void LLFloaterEditExtDayCycle::addSliderFrame(const F32 frame, LLSettingsBase::ptr_t setting)
+void LLFloaterEditExtDayCycle::addSliderFrame(const F32 frame, LLSettingsBase::ptr_t &setting, bool update_ui)
{
// multi slider distinguishes elements by key/name in string format
// store names to map to be able to recall dependencies
std::string new_slider = mFramesSlider->addSlider(frame);
- mSliderKeyMap[new_slider] = framedata_t(frame, setting);
- mLastFrameSlider = new_slider;
+ mSliderKeyMap[new_slider] = FrameData(frame, setting);
- mTimeSlider->setCurSliderValue(frame);
- updateTabs();
+ if (update_ui)
+ {
+ mLastFrameSlider = new_slider;
+ mTimeSlider->setCurSliderValue(frame);
+ updateTabs();
+ }
}
void LLFloaterEditExtDayCycle::removeCurrentSliderFrame()
@@ -603,9 +661,9 @@ void LLFloaterEditExtDayCycle::removeCurrentSliderFrame()
keymap_t::iterator iter = mSliderKeyMap.find(sldr);
if (iter != mSliderKeyMap.end())
{
- LL_DEBUGS() << "Removing frame from " << iter->second.first << LL_ENDL;
+ LL_DEBUGS() << "Removing frame from " << iter->second.mFrame << LL_ENDL;
mSliderKeyMap.erase(iter);
- mEditDay->removeTrackKeyframe(mCurrentTrack, iter->second.first);
+ mEditDay->removeTrackKeyframe(mCurrentTrack, iter->second.mFrame);
}
mLastFrameSlider = mFramesSlider->getCurSlider();
@@ -613,6 +671,22 @@ void LLFloaterEditExtDayCycle::removeCurrentSliderFrame()
updateTabs();
}
+void LLFloaterEditExtDayCycle::setEditingEnv()
+{
+ S64Seconds day_length = mDayLength.value() > 0 ? mDayLength : LLSettingsDay::DEFAULT_DAYLENGTH;
+ S64Seconds day_offset = mDayLength.value() > 0 ? mDayOffset : LLSettingsDay::DEFAULT_DAYOFFSET;
+ LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_EDIT, mEditDay, day_length, day_offset);
+ LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_EDIT);
+ LLEnvironment::instance().updateEnvironment();
+}
+
+void LLFloaterEditExtDayCycle::restoreSavedEnv()
+{
+ //LLEnvironment::instance().setEnvironment((LLEnvironment::EnvSelection_t)mSavedEnvironment, mSavedDay, mSavedDayLength, mSavedDayOffset);
+ LLEnvironment::instance().setSelectedEnvironment((LLEnvironment::EnvSelection_t)mSavedEnvironment);
+ LLEnvironment::instance().updateEnvironment();
+}
+
//-------------------------------------------------------------------------
LLFloaterEditExtDayCycle::connection_t LLFloaterEditExtDayCycle::setEditCommitSignal(LLFloaterEditExtDayCycle::edit_commit_signal_t::slot_type cb)
diff --git a/indra/newview/llfloatereditextdaycycle.h b/indra/newview/llfloatereditextdaycycle.h
index 46b34de5c7..0b48b51b5d 100644
--- a/indra/newview/llfloatereditextdaycycle.h
+++ b/indra/newview/llfloatereditextdaycycle.h
@@ -33,11 +33,11 @@
class LLCheckBoxCtrl;
class LLComboBox;
+class LLFlyoutComboBtnCtrl;
class LLLineEditor;
class LLMultiSliderCtrl;
class LLTextBox;
class LLTimeCtrl;
-//class LLFlyoutComboBtnCtrl;
typedef std::shared_ptr<LLSettingsBase> LLSettingsBasePtr_t;
@@ -52,66 +52,63 @@ public:
typedef boost::signals2::signal<void(LLSettingsDay::ptr_t)> edit_commit_signal_t;
typedef boost::signals2::connection connection_t;
- LLFloaterEditExtDayCycle(const LLSD &key);
+ LLFloaterEditExtDayCycle(const LLSD &key);
~LLFloaterEditExtDayCycle();
void openFloater(LLSettingsDay::ptr_t settings, S64Seconds daylength = S64Seconds(0), S64Seconds dayoffset = S64Seconds(0));
BOOL postBuild();
void onOpen(const LLSD& key);
- void onClose(bool app_quitting);
+ void onClose(bool app_quitting);
void onVisibilityChange(BOOL new_visibility);
-// /*virtual*/ void draw();
connection_t setEditCommitSignal(edit_commit_signal_t::slot_type cb);
private:
-// /// sync the time slider with day cycle structure
-// void syncTimeSlider();
-//
-// // makes sure key slider has what's in day cycle
-// void loadTrack();
-//
-// /// makes sure day cycle data structure has what's in menu
-// void applyTrack();
-//
-// /// refresh the sky presets combobox
-
-// void onButtonApply(LLUICtrl *ctrl, const LLSD &data);
- void onBtnSave();
+ // flyout response/click
+ void onButtonApply(LLUICtrl *ctrl, const LLSD &data);
void onBtnCancel();
- void onBtnUpload();
void onAddTrack();
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
+ // time slider moved
+ void onTimeSliderMoved();
+ // a frame moved or frame selection changed
+ void onFrameSliderCallback();
void selectTrack(U32 track_index);
void clearTabs();
void updateTabs();
void updateWaterTabs(const LLSettingsWaterPtr_t &p_water);
void updateSkyTabs(const LLSettingsSkyPtr_t &p_sky);
+ void setWaterTabsEnabled(BOOL enable);
+ void setSkyTabsEnabled(BOOL enable);
void updateButtons();
void updateSlider(); //track to slider
void updateTimeAndLabel();
- void addSliderFrame(const F32 frame, LLSettingsBase::ptr_t setting);
+ void addSliderFrame(const F32 frame, LLSettingsBase::ptr_t &setting, bool update_ui = true);
void removeCurrentSliderFrame();
+ void setEditingEnv();
+ void restoreSavedEnv();
- LLSettingsDay::ptr_t mSavedDay;
- LLSettingsDay::ptr_t mEditDay;
+ // data for restoring previous displayed environment
+ LLSettingsDay::ptr_t mSavedDay; // the one currently on screen
+ S32 mSavedEnvironment;
+ S64Seconds mSavedDayLength;
+ S64Seconds mSavedDayOffset;
+
+ LLSettingsDay::ptr_t mEditDay; // edited copy
+ LLSettingsDay::ptr_t mOriginalDay; // the one we are editing
S64Seconds mDayLength;
S64Seconds mDayOffset;
U32 mCurrentTrack;
std::string mLastFrameSlider;
- LLButton* mSaveButton;
LLButton* mCancelButton;
- LLButton* mUploadButton;
LLButton* mAddFrameButton;
LLButton* mDeleteFrameButton;
@@ -121,14 +118,21 @@ private:
LLView* mWaterTabLayoutContainer;
LLTextBox* mCurrentTimeLabel;
-// LLFlyoutComboBtnCtrl * mFlyoutControl; // not a View!
+ LLFlyoutComboBtnCtrl * mFlyoutControl;
edit_commit_signal_t mCommitSignal;
- // 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; //slider keys[old_frames], shadows mFramesSlider
+ // For map of sliders to parameters
+ class FrameData
+ {
+ public:
+ FrameData() : mFrame(0) {};
+ FrameData(F32 frame, LLSettingsBase::ptr_t settings) : mFrame(frame), pSettings(settings) {};
+ F32 mFrame;
+ LLSettingsBase::ptr_t pSettings;
+ };
+ typedef std::map<std::string, FrameData> keymap_t;
+ keymap_t mSliderKeyMap; //slider's keys vs old_frames&settings, shadows mFramesSlider
};
#endif // LL_LLFloaterEditExtDayCycle_H
diff --git a/indra/newview/llfloaterfixedenvironment.cpp b/indra/newview/llfloaterfixedenvironment.cpp
index f03c8ba7d1..84d80bc32f 100644
--- a/indra/newview/llfloaterfixedenvironment.cpp
+++ b/indra/newview/llfloaterfixedenvironment.cpp
@@ -103,7 +103,7 @@ BOOL LLFloaterFixedEnvironment::postBuild()
getChild<LLButton>(BUTTON_NAME_IMPORT)->setClickedCallback([this](LLUICtrl *, const LLSD &) { onButtonImport(); });
getChild<LLButton>(BUTTON_NAME_CANCEL)->setClickedCallback([this](LLUICtrl *, const LLSD &) { onButtonCancel(); });
- mFlyoutControl = new LLFlyoutComboBtn(this, BUTTON_NAME_COMMIT, BUTTON_NAME_FLYOUT, XML_FLYOUTMENU_FILE);
+ mFlyoutControl = new LLFlyoutComboBtnCtrl(this, BUTTON_NAME_COMMIT, BUTTON_NAME_FLYOUT, XML_FLYOUTMENU_FILE);
mFlyoutControl->setAction([this](LLUICtrl *ctrl, const LLSD &data) { onButtonApply(ctrl, data); });
return TRUE;
diff --git a/indra/newview/llfloaterfixedenvironment.h b/indra/newview/llfloaterfixedenvironment.h
index 782dc9e61c..0590a80e57 100644
--- a/indra/newview/llfloaterfixedenvironment.h
+++ b/indra/newview/llfloaterfixedenvironment.h
@@ -80,7 +80,7 @@ protected:
bool canApplyRegion() const;
bool canApplyParcel() const;
- LLFlyoutComboBtn * mFlyoutControl;
+ LLFlyoutComboBtnCtrl * mFlyoutControl;
LLUUID mInventoryId;
LLInventoryItem * mInventoryItem;
diff --git a/indra/newview/llflyoutcombobtn.cpp b/indra/newview/llflyoutcombobtn.cpp
index efe76b5653..a736fcafa3 100644
--- a/indra/newview/llflyoutcombobtn.cpp
+++ b/indra/newview/llflyoutcombobtn.cpp
@@ -1,5 +1,5 @@
/**
- * @file llsaveoutfitcombobtn.cpp
+ * @file llflyoutcombobtn.cpp
* @brief Represents outfit save/save as combo button.
*
* $LicenseInfo:firstyear=2010&license=viewerlgpl$
@@ -29,7 +29,7 @@
#include "llflyoutcombobtn.h"
#include "llviewermenu.h"
-LLFlyoutComboBtn::LLFlyoutComboBtn(LLPanel* parent, const std::string &action_button, const std::string &flyout_button, const std::string &menu_file) :
+LLFlyoutComboBtnCtrl::LLFlyoutComboBtnCtrl(LLPanel* parent, const std::string &action_button, const std::string &flyout_button, const std::string &menu_file) :
mParent(parent),
mActionButton(action_button),
mFlyoutButton(flyout_button)
@@ -48,30 +48,30 @@ LLFlyoutComboBtn::LLFlyoutComboBtn(LLPanel* parent, const std::string &action_bu
setSelectedItem(0);
}
-void LLFlyoutComboBtn::setAction(LLUICtrl::commit_callback_t cb)
+void LLFlyoutComboBtnCtrl::setAction(LLUICtrl::commit_callback_t cb)
{
mActionSignal.connect(cb);
}
-U32 LLFlyoutComboBtn::getItemCount()
+U32 LLFlyoutComboBtnCtrl::getItemCount()
{
return mFlyoutMenu->getItemCount();
}
-void LLFlyoutComboBtn::setSelectedItem(S32 itemno)
+void LLFlyoutComboBtnCtrl::setSelectedItem(S32 itemno)
{
LLMenuItemGL *pitem = mFlyoutMenu->getItem(itemno);
setSelectedItem(pitem);
}
-void LLFlyoutComboBtn::setSelectedItem(const std::string &item)
+void LLFlyoutComboBtnCtrl::setSelectedItem(const std::string &item)
{
LLMenuItemGL *pitem = mFlyoutMenu->getChild<LLMenuItemGL>(item, false);
setSelectedItem(pitem);
}
-void LLFlyoutComboBtn::setSelectedItem(LLMenuItemGL *pitem)
+void LLFlyoutComboBtnCtrl::setSelectedItem(LLMenuItemGL *pitem)
{
if (!pitem)
{
@@ -86,7 +86,7 @@ void LLFlyoutComboBtn::setSelectedItem(LLMenuItemGL *pitem)
action_button->setLabel(pitem->getLabel());
}
-void LLFlyoutComboBtn::setMenuItemEnabled(const std::string& item, bool enabled)
+void LLFlyoutComboBtnCtrl::setMenuItemEnabled(const std::string& item, bool enabled)
{
mFlyoutMenu->setItemEnabled(item, enabled);
if (item == mSelectedName)
@@ -95,12 +95,12 @@ void LLFlyoutComboBtn::setMenuItemEnabled(const std::string& item, bool enabled)
}
}
-void LLFlyoutComboBtn::setShownBtnEnabled(bool enabled)
+void LLFlyoutComboBtnCtrl::setShownBtnEnabled(bool enabled)
{
mParent->getChildView(mActionButton)->setEnabled(enabled);
}
-void LLFlyoutComboBtn::onFlyoutButton(LLUICtrl *ctrl, const LLSD &data)
+void LLFlyoutComboBtnCtrl::onFlyoutButton(LLUICtrl *ctrl, const LLSD &data)
{
S32 x, y;
LLUI::getMousePositionLocal(mParent, &x, &y);
@@ -109,7 +109,7 @@ void LLFlyoutComboBtn::onFlyoutButton(LLUICtrl *ctrl, const LLSD &data)
LLMenuGL::showPopup(mParent, mFlyoutMenu, x, y);
}
-void LLFlyoutComboBtn::onFlyoutItemSelected(LLUICtrl *ctrl, const LLSD &data)
+void LLFlyoutComboBtnCtrl::onFlyoutItemSelected(LLUICtrl *ctrl, const LLSD &data)
{
LLMenuItemGL *pmenuitem = static_cast<LLMenuItemGL*>(ctrl);
setSelectedItem(pmenuitem);
@@ -117,7 +117,7 @@ void LLFlyoutComboBtn::onFlyoutItemSelected(LLUICtrl *ctrl, const LLSD &data)
onFlyoutAction(pmenuitem, data);
}
-void LLFlyoutComboBtn::onFlyoutAction(LLUICtrl *ctrl, const LLSD &data)
+void LLFlyoutComboBtnCtrl::onFlyoutAction(LLUICtrl *ctrl, const LLSD &data)
{
LLMenuItemGL *pmenuitem = mFlyoutMenu->getChild<LLMenuItemGL>(mSelectedName);
diff --git a/indra/newview/llflyoutcombobtn.h b/indra/newview/llflyoutcombobtn.h
index ebf7564422..517752d8db 100644
--- a/indra/newview/llflyoutcombobtn.h
+++ b/indra/newview/llflyoutcombobtn.h
@@ -24,8 +24,8 @@
* $/LicenseInfo$
*/
-#ifndef LL_LLSAVECOMBOBTN_H
-#define LL_LLSAVECOMBOBTN_H
+#ifndef LL_LLFLYOUTCOMBOBTN_H
+#define LL_LLFLYOUTCOMBOBTN_H
/*TODO: Make this button generic */
@@ -33,14 +33,11 @@ class LLButton;
#include "lltoggleablemenu.h"
-/**
- * Represents outfit Save/Save As combo button.
- */
-class LLFlyoutComboBtn
+class LLFlyoutComboBtnCtrl
{
- LOG_CLASS(LLFlyoutComboBtn);
+ LOG_CLASS(LLFlyoutComboBtnCtrl);
public:
- LLFlyoutComboBtn(LLPanel* parent, const std::string &action_button, const std::string &flyout_button, const std::string &menu_file);
+ LLFlyoutComboBtnCtrl(LLPanel* parent, const std::string &action_button, const std::string &flyout_button, const std::string &menu_file);
void setMenuItemEnabled(const std::string &item, bool enabled);
void setShownBtnEnabled(bool enabled);
@@ -68,4 +65,4 @@ private:
LLUICtrl::commit_signal_t mActionSignal;
};
-#endif // LL_LLSAVEOUTFITCOMBOBTN_H
+#endif // LL_LLFLYOUTCOMBOBTN_H
diff --git a/indra/newview/llpanelenvironment.cpp b/indra/newview/llpanelenvironment.cpp
index afbbbd424e..8e846fe6ef 100644
--- a/indra/newview/llpanelenvironment.cpp
+++ b/indra/newview/llpanelenvironment.cpp
@@ -360,7 +360,7 @@ void LLPanelEnvironmentInfo::onBtnEdit()
if (dayeditor)
{
- dayeditor->setEditCommitSignal(boost::bind(&LLPanelEnvironmentInfo::onEditiCommited, this, _1)); //Not needed?
+ dayeditor->setEditCommitSignal(boost::bind(&LLPanelEnvironmentInfo::onEditiCommited, this, _1));
dayeditor->openFloater(mEditingDayCycle, F32Hours(mDayLengthSlider->getValue().asReal()), F32Hours(mDayOffsetSlider->getValue().asReal()));
}
}
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 bab902001f..ad11bded6a 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
@@ -470,6 +470,22 @@
top_pad="0"
name="save_btn"
width="100" />
+
+ <button
+ follows="top|left"
+ height="23"
+ name="btn_flyout"
+ label=""
+ layout="topleft"
+ left_pad="-20"
+ top="0"
+ image_selected="SegmentedBtn_Right_Selected_Press"
+ image_unselected="SegmentedBtn_Right_Off"
+ image_pressed="SegmentedBtn_Right_Press"
+ image_pressed_selected="SegmentedBtn_Right_Selected_Press"
+ image_overlay="Arrow_Small_Up"
+ width="20"/>
+
<button
follows="top|left"
height="23"
@@ -479,29 +495,14 @@
name="cancel_btn"
width="100" />
- <button
+ <!--<button
follows="top|left"
height="23"
label="Upload"
layout="topleft"
left_pad="10"
name="upload_btn"
- width="100" />
-
- <!--<button
- follows="top|left"
- height="23"
- name="btn_flyout"
- label=""
- layout="topleft"
- left_pad="-20"
- top="0"
- image_selected="SegmentedBtn_Right_Selected_Press"
- image_unselected="SegmentedBtn_Right_Off"
- image_pressed="SegmentedBtn_Right_Press"
- image_pressed_selected="SegmentedBtn_Right_Selected_Press"
- image_overlay="Arrow_Small_Up"
- width="20"/>-->
+ width="100" />-->
</layout_panel>
</layout_stack>