summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRider Linden <rider@lindenlab.com>2018-05-22 13:08:35 -0700
committerRider Linden <rider@lindenlab.com>2018-05-22 13:08:35 -0700
commit656967b326c59a3966261cd75e256e3a7a27cc0a (patch)
tree1c2c4c8f2adae7f17930843913a286fc1fd784b4
parent044b80e4e1a7b55f46e6f3b52c9cae6d9c6df3eb (diff)
parentb6ba9dd565b59e516571445e56f9dafe3bdf4061 (diff)
Merge PR
-rw-r--r--indra/newview/llfloatereditextdaycycle.cpp255
-rw-r--r--indra/newview/llfloatereditextdaycycle.h59
-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/skins/default/xui/en/floater_edit_ext_day_cycle.xml35
7 files changed, 216 insertions, 176 deletions
diff --git a/indra/newview/llfloatereditextdaycycle.cpp b/indra/newview/llfloatereditextdaycycle.cpp
index 1c9b42d03f..d87ea83fe7 100644
--- a/indra/newview/llfloatereditextdaycycle.cpp
+++ b/indra/newview/llfloatereditextdaycycle.cpp
@@ -44,13 +44,11 @@
#include "llinventorymodel.h"
// 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"
@@ -64,13 +62,14 @@ 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");*/
//=========================================================================
// **RIDER**
@@ -83,14 +82,12 @@ const std::string LLFloaterEditExtDayCycle::KEY_DAY_LENGTH("day_length");
LLFloaterEditExtDayCycle::LLFloaterEditExtDayCycle(const LLSD &key):
LLFloater(key),
- mSaveButton(NULL),
+ mFlyoutControl(NULL),
mCancelButton(NULL),
- mUploadButton(NULL),
mDayLength(0),
mCurrentTrack(4),
mTimeSlider(NULL),
mFramesSlider(NULL),
- //mFlyoutControl(NULL),
mCurrentTimeLabel(NULL),
// **RIDER**
mInventoryId(),
@@ -109,28 +106,17 @@ 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)
-// {
-// mEditDay = settings->buildClone();
-// mDayLength = daylength;
-// mDayOffset = dayoffset;
-// LLFloater::openFloater();
-// }
-
// virtual
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");
@@ -139,12 +125,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));
@@ -203,7 +187,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++)
{
@@ -211,19 +194,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 = mDayLength;
minutes = mDayLength - 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());
@@ -240,12 +216,12 @@ 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)
+ {
+ LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL);
+ }
}
void LLFloaterEditExtDayCycle::onVisibilityChange(BOOL new_visibility)
@@ -257,60 +233,64 @@ void LLFloaterEditExtDayCycle::onVisibilityChange(BOOL new_visibility)
}
else
{
- /* TODO: don't restore this environment. We may have gotten here from land or region. */
LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL);
}
}
-/*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);
}
else
{
- LL_WARNS("ENVIRONMENT") << "Unknown settings action '" << ctrl_action << "'" << LL_ENDL;
- }
+ LLEnvironment::EnvSelection_t env(LLEnvironment::ENV_DEFAULT);
+ bool updateSimulator(ctrl_action != ACTION_APPLY_LOCAL);
- if (!mCommitSignal.empty())
- mCommitSignal(mEditDay);
- closeFloater();
- }*/
-
-void LLFloaterEditExtDayCycle::onBtnSave()
-{
- //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;
+ }
- closeFloater();
+ LLEnvironment::instance().setEnvironment(env, mEditDay);
+ if (updateSimulator)
+ {
+ LL_WARNS("ENVIRONMENT") << "Attempting to apply " << env << LL_ENDL;
+ }
+ }
}
void LLFloaterEditExtDayCycle::onBtnCancel()
{
- closeFloater();
-}
-
-void LLFloaterEditExtDayCycle::onBtnUpload()
-{
- LLSettingsVOBase::createInventoryItem(mEditDay);
- //closeFloater();
+ closeFloater(); // will restore env
}
void LLFloaterEditExtDayCycle::onAddTrack()
@@ -414,14 +394,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)
{
- iter->second.first = new_frame;
+ 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;
+ }
}
}
@@ -450,7 +460,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;
@@ -458,14 +468,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())
@@ -488,7 +498,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);
@@ -505,12 +515,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 for duplicating if there are any
+// setWaterTabsEnabled(FALSE);
+// setSkyTabsEnabled(FALSE);
// }
// else if (mCurrentTrack == LLSettingsDay::TRACK_WATER)
// {
@@ -562,6 +572,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();
@@ -575,29 +621,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();
}
}
@@ -609,11 +650,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);
S32Hours hrs = total;
S32Minutes minutes = total - hrs;
@@ -630,16 +666,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()
@@ -653,9 +692,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();
@@ -699,6 +738,7 @@ void LLFloaterEditExtDayCycle::loadInventoryItem(const LLUUID &inventoryId)
void LLFloaterEditExtDayCycle::onAssetLoaded(LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status)
{
mEditDay = std::dynamic_pointer_cast<LLSettingsDay>(settings);
+ mOriginalDay = mEditDay->buildClone();
updateEditEnvironment();
syncronizeTabs();
refresh();
@@ -713,6 +753,7 @@ void LLFloaterEditExtDayCycle::loadLiveEnvironment(LLEnvironment::EnvSelection_t
if (day)
{
+ mOriginalDay = day;
mEditDay = day->buildClone();
break;
}
diff --git a/indra/newview/llfloatereditextdaycycle.h b/indra/newview/llfloatereditextdaycycle.h
index 80e5850558..287d2fe2dc 100644
--- a/indra/newview/llfloatereditextdaycycle.h
+++ b/indra/newview/llfloatereditextdaycycle.h
@@ -35,11 +35,11 @@
class LLCheckBoxCtrl;
class LLComboBox;
+class LLFlyoutComboBtnCtrl;
class LLLineEditor;
class LLMultiSliderCtrl;
class LLTextBox;
class LLTimeCtrl;
-//class LLFlyoutComboBtnCtrl;
class LLInventoryItem;
@@ -62,53 +62,44 @@ 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();
// **RIDER**
@@ -120,15 +111,18 @@ private:
void syncronizeTabs();
void reblendSettings();
// **RIDER**
+
+ // data for restoring previous displayed environment
- LLSettingsDay::ptr_t mEditDay;
+ S32 mSavedEnvironment;
+
+ LLSettingsDay::ptr_t mEditDay; // edited copy
+ LLSettingsDay::ptr_t mOriginalDay; // the one we are editing
S64Seconds mDayLength;
U32 mCurrentTrack;
std::string mLastFrameSlider;
- LLButton* mSaveButton;
LLButton* mCancelButton;
- LLButton* mUploadButton;
LLButton* mAddFrameButton;
LLButton* mDeleteFrameButton;
@@ -148,14 +142,21 @@ private:
LLSettingsWater::ptr_t mScratchWater;
// **RIDER**
-// 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 8365311179..d5fc34a04b 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 6f1030e6ed..ef47941555 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/skins/default/xui/en/floater_edit_ext_day_cycle.xml b/indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml
index 3a3779e753..ba4e15e7db 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>