diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llinventory/llsettingsdaycycle.cpp | 47 | ||||
| -rw-r--r-- | indra/llinventory/llsettingsdaycycle.h | 2 | ||||
| -rw-r--r-- | indra/newview/llfloatereditextdaycycle.cpp | 306 | ||||
| -rw-r--r-- | indra/newview/llfloatereditextdaycycle.h | 43 | ||||
| -rw-r--r-- | indra/newview/llpaneleditsky.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llpaneleditwater.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml | 152 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_settings_sky_atmos.xml | 5 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_settings_sky_clouds.xml | 3 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_settings_sky_sunmoon.xml | 3 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_settings_water.xml | 3 | 
11 files changed, 330 insertions, 240 deletions
| diff --git a/indra/llinventory/llsettingsdaycycle.cpp b/indra/llinventory/llsettingsdaycycle.cpp index 3f60430715..5a6280884d 100644 --- a/indra/llinventory/llsettingsdaycycle.cpp +++ b/indra/llinventory/llsettingsdaycycle.cpp @@ -502,6 +502,53 @@ LLSettingsDay::KeyframeList_t LLSettingsDay::getTrackKeyframes(S32 trackno)      return keyframes;  } +bool LLSettingsDay::moveTrackKeyframe(S32 trackno, F32 old_frame, F32 new_frame) +{ +    if ((trackno < 0) || (trackno >= TRACK_MAX)) +    { +        LL_WARNS("DAYCYCLE") << "Attempt get track (#" << trackno << ") out of range!" << LL_ENDL; +        return false; +    } + +    if (old_frame == new_frame) +    { +        return false; +    } + +    CycleTrack_t &track = mDayTracks[trackno]; +    CycleTrack_t::iterator iter = track.find(old_frame); +    if (iter != track.end()) +    { +        LLSettingsBase::ptr_t base = iter->second; +        track.erase(iter); +        track[llclamp(new_frame, 0.0f, 1.0f)] = base; +        return true; +    } + +    return false; + +} + +bool LLSettingsDay::removeTrackKeyframe(S32 trackno, F32 frame) +{ +    if ((trackno < 0) || (trackno >= TRACK_MAX)) +    { +        LL_WARNS("DAYCYCLE") << "Attempt get track (#" << trackno << ") out of range!" << LL_ENDL; +        return false; +    } + +    CycleTrack_t &track = mDayTracks[trackno]; +    CycleTrack_t::iterator iter = track.find(frame); +    if (iter != track.end()) +    { +        LLSettingsBase::ptr_t base = iter->second; +        track.erase(iter); +        return true; +    } + +    return false; +} +  void LLSettingsDay::setWaterAtKeyframe(const LLSettingsWaterPtr_t &water, F32 keyframe)  {      mDayTracks[TRACK_WATER][llclamp(keyframe, 0.0f, 1.0f)] = water; diff --git a/indra/llinventory/llsettingsdaycycle.h b/indra/llinventory/llsettingsdaycycle.h index 93c275bfb8..a869d4970c 100644 --- a/indra/llinventory/llsettingsdaycycle.h +++ b/indra/llinventory/llsettingsdaycycle.h @@ -86,6 +86,8 @@ public:      //---------------------------------------------------------------------      KeyframeList_t              getTrackKeyframes(S32 track); +    bool                        moveTrackKeyframe(S32 track, F32 old_frame, F32 new_frame); +    bool                        removeTrackKeyframe(S32 track, F32 frame);      void                        setWaterAtKeyframe(const LLSettingsWaterPtr_t &water, F32 keyframe);      const LLSettingsWaterPtr_t  getWaterAtKeyframe(F32 keyframe); diff --git a/indra/newview/llfloatereditextdaycycle.cpp b/indra/newview/llfloatereditextdaycycle.cpp index e41259feb3..c57add32fe 100644 --- a/indra/newview/llfloatereditextdaycycle.cpp +++ b/indra/newview/llfloatereditextdaycycle.cpp @@ -52,22 +52,24 @@  #include "lltrans.h"  static const std::string track_tabs[] = { -	"water_track", -	"sky4_track", -	"sky3_track", -	"sky2_track", -	"sky1_track", -	}; +    "water_track", +    "sky1_track", +    "sky2_track", +    "sky3_track", +    "sky4_track", +};  LLFloaterEditExtDayCycle::LLFloaterEditExtDayCycle(const LLSD &key):	      LLFloater(key),      mSaveButton(NULL),      mCancelButton(NULL), -	mCurrentTrack(1) -//    mDayCyclesCombo(NULL) -// ,	mTimeSlider(NULL) -// ,	mKeysSlider(NULL) +    mDayLength(0), +    mDayOffset(0), +    mCurrentTrack(4), +    mTimeSlider(NULL), +    mFramesSlider(NULL), +    mCurrentTimeLabel(NULL)  // ,	mTimeCtrl(NULL)  // ,	mMakeDefaultCheckBox(NULL)  // ,	 @@ -82,24 +84,24 @@ BOOL LLFloaterEditExtDayCycle::postBuild()      getChild<LLButton>("delete_frame")->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onRemoveTrack, this));      getChild<LLLineEditor>("day_cycle_name")->setKeystrokeCallback(boost::bind(&LLFloaterEditExtDayCycle::onCommitName, this, _1, _2), NULL); -//	mDayCyclesCombo = getChild<LLComboBox>("day_cycle_preset_combo"); - -// 	mTimeSlider = getChild<LLMultiSliderCtrl>("WLTimeSlider"); -// 	mKeysSlider = getChild<LLMultiSliderCtrl>("WLDayCycleKeys"); -// 	mTimeCtrl = getChild<LLTimeCtrl>("time");      mSaveButton = getChild<LLButton>("save_btn", true);      mCancelButton = getChild<LLButton>("cancel_btn", true);      mUploadButton = getChild<LLButton>("upload_btn", true); -    mKeysSlider = getChild<LLMultiSliderCtrl>("WLDayCycleKeys"); -    mSkyTabContainer = getChild<LLView>("frame_settings_sky", true); -    mWaterTabContainer = getChild<LLView>("frame_settings_water", true); -// 	mMakeDefaultCheckBox = getChild<LLCheckBoxCtrl>("make_default_cb"); +    mTimeSlider = getChild<LLMultiSliderCtrl>("WLTimeSlider"); +    mFramesSlider = getChild<LLMultiSliderCtrl>("WLDayCycleFrames"); +    mSkyTabLayoutContainer = getChild<LLView>("frame_settings_sky", true); +    mWaterTabLayoutContainer = getChild<LLView>("frame_settings_water", true); +    mCurrentTimeLabel = getChild<LLTextBox>("current_time", true);      //initCallbacks();      mSaveButton->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onBtnSave, this));      mCancelButton->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onBtnCancel, this));      mUploadButton->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onUpload, this)); +    mTimeSlider->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onTimeSliderMoved, this)); +    mFramesSlider->setCommitCallback(boost::bind(&LLFloaterEditExtDayCycle::onFrameSliderCallback, this)); + +    mTimeSlider->addSlider(0);      getChild<LLButton>("sky4_track", true)->setToggleState(true); @@ -115,8 +117,14 @@ void LLFloaterEditExtDayCycle::onOpen(const LLSD& key)      {          // TODO/TEMP -        LLSettingsDay::ptr_t pday = LLEnvironment::instance().getEnvironmentDay(LLEnvironment::ENV_REGION); +        LLEnvironment::EnvSelection_t env = LLEnvironment::ENV_REGION; // should not be used +        LLSettingsDay::ptr_t pday = LLEnvironment::instance().getEnvironmentDay(env);          mEditDay = pday->buildClone(); // pday should be passed as parameter +         +        S64Seconds daylength = LLEnvironment::instance().getEnvironmentDayLength(env); +        S64Seconds dayoffset = LLEnvironment::instance().getEnvironmentDayOffset(env); +        mDayLength = daylength; // should be passed as parameter +        mDayOffset = dayoffset; // should be passed as parameter      }      LLLineEditor* name_field = getChild<LLLineEditor>("day_cycle_name"); @@ -124,35 +132,34 @@ void LLFloaterEditExtDayCycle::onOpen(const LLSD& key)      selectTrack(mCurrentTrack); -    /* TODO -    if (mEditDay->hasSetting("cycle length")) // todo: figure out name +    // time labels +    mCurrentTimeLabel->setTextArg("[PRCNT]", std::string("0")); +    const S32 max_elm = 5; +    if (mDayLength.value() != 0)      { -    // extract setting -    S32 extracted_time = -    std::string time = LLTrans::getString("time_label", LLSD("TIME",(extracted_time * 0..100%) + offset)); -    std::string descr = LLTrans::getString("0_label", LLSD("DSC",time)); -    getChild<LLView>("p0")->setLabel(descr); -    ... - -    getChild<LLView>("p1")->setLabel(descr); -    time = -    descr =  -    getChild<LLView>("p2")->setLabel(descr); -    time = -    descr =  -    getChild<LLView>("p3")->setLabel(descr); -    time = -    descr = -    getChild<LLView>("p4")->setLabel(descr); +        F32Hours hrs; +        LLUIString formatted_label = getString("time_label"); +        for (int i = 0; i < max_elm; i++) +        { +            // Todo: if possible, find a better way, both to get string and child names +            hrs = ((mDayLength / (max_elm - 1)) * i) + mDayOffset; +            formatted_label.setArg("[TIME]", llformat("%.1f", hrs.value())); +            getChild<LLTextBox>("p" + llformat("%d", i), true)->setTextArg("[DSC]", formatted_label.getString()); +        } +        hrs = mDayOffset; +        formatted_label.setArg("[TIME]", llformat("%.1f", hrs.value())); +        mCurrentTimeLabel->setTextArg("[DSC]", formatted_label.getString());      }      else      { -    std::string descr = LLTrans::getString("0_label", LLSD()); -    getChild<LLView>("p0")->setLabel(descr); - +        for (int i = 0; i < max_elm; i++) +        { +            getChild<LLTextBox>("p" + llformat("%d", i), true)->setTextArg("[DSC]", std::string()); +        } +        mCurrentTimeLabel->setTextArg("[DSC]", std::string());      } -    */ +	//todo: add time slider setting      /*list_name_id_t              getSkyList() const;      list_name_id_t              getWaterList() const; @@ -257,21 +264,33 @@ void LLFloaterEditExtDayCycle::onBtnCancel()  void LLFloaterEditExtDayCycle::onAddTrack()  { -    F32 frame = 0; // temp? -    mKeysSlider->addSlider(frame); +    F32 frame = mTimeSlider->getCurSliderValue(); +    LLSettingsBase::ptr_t setting; +    // todo: expand to generate from panels instead of using defaults +    if (mEditDay->getSettingsAtKeyframe(frame, mCurrentTrack).get() != NULL) //temp check? todo: disable button in such cases +    { +        return; +    }      if (mCurrentTrack == 0)      { -        mEditDay->setWaterAtKeyframe(LLSettingsVOWater::buildDefaultWater(), frame); +        setting = LLSettingsVOWater::buildDefaultWater(); +        mEditDay->setWaterAtKeyframe(std::dynamic_pointer_cast<LLSettingsWater>(setting), frame);      }      else      { -        mEditDay->setSkyAtKeyframe(LLSettingsVOSky::buildDefaultSky(), frame, mCurrentTrack); +        setting = LLSettingsVOSky::buildDefaultSky(); +        mEditDay->setSkyAtKeyframe(std::dynamic_pointer_cast<LLSettingsSky>(setting), frame, mCurrentTrack);      } +    addSliderFrame(frame, setting); +    updateTabs();  }  void LLFloaterEditExtDayCycle::onRemoveTrack()  { -    //mKeysSlider->deleteCurSlider(); +    F32 frame = mTimeSlider->getCurSliderValue(); +    mEditDay->removeTrackKeyframe(mCurrentTrack, frame); +    removeCurrentSliderFrame(); +    //mFramesSlider->deleteCurSlider();  }  void LLFloaterEditExtDayCycle::onCommitName(class LLLineEditor* caller, void* user_data) @@ -285,8 +304,68 @@ void LLFloaterEditExtDayCycle::onTrackSelectionCallback(const LLSD& user_data)      selectTrack(track_index);  } +void LLFloaterEditExtDayCycle::onFrameSliderCallback() +{ +    if (mFramesSlider->getValue().size() == 0) +    { +        mLastFrameSlider.clear(); +        return; +    } +    // make sure we have a slider +    const std::string& cur_sldr = mFramesSlider->getCurSlider(); +    if (cur_sldr == "") +    { +        mLastFrameSlider.clear(); +        return; +    } + +    F32 new_frame = mFramesSlider->getCurSliderValue(); +    // todo: add safety checks, user shouldn't be capable of moving one frame over another or move missing frame +    keymap_t::iterator iter = mSliderKeyMap.find(cur_sldr); +    if (iter != mSliderKeyMap.end() && /*temp? until disabling mechanics*/ mEditDay->getSettingsAtKeyframe(new_frame, mCurrentTrack).get() == NULL) +    { +        LL_DEBUGS() << "Moving frame from " << iter->second.first << " to " << new_frame << LL_ENDL; +        if (mEditDay->moveTrackKeyframe(mCurrentTrack, iter->second.first, new_frame)) +        { +            iter->second.first = new_frame; +        } +    } + +    if (mLastFrameSlider != cur_sldr) +    { +        // technically should not be possible for both frame and slider to change +        // but for safety, assume that they can change independently and both +        mLastFrameSlider = cur_sldr; +        updateTabs(); +    } +    // 	updateTrack(); +    // reset last known position +} + +void LLFloaterEditExtDayCycle::onTimeSliderMoved() +{ +    // Todo: safety checks +    // Update label +    F32 time = mTimeSlider->getCurSliderValue(); +    mCurrentTimeLabel->setTextArg("[PRCNT]", llformat("%.0f", time * 100)); +    if (mDayLength.value() != 0) +    { +        F32Hours hrs = (mDayLength  * time) + mDayOffset; +        LLUIString formatted_label = getString("time_label"); +        formatted_label.setArg("[TIME]", llformat("%.1f", hrs.value())); +        mCurrentTimeLabel->setTextArg("[DSC]", formatted_label.getString()); +    } +    else +    { +        mCurrentTimeLabel->setTextArg("[DSC]", std::string()); +    } + +    //Todo: update something related to time/play? +} +  void LLFloaterEditExtDayCycle::selectTrack(U32 track_index)  { +    // todo: safety checks      mCurrentTrack = track_index;      LLButton* button = getChild<LLButton>(track_tabs[track_index], true);      if (button->getToggleState()) @@ -294,24 +373,22 @@ void LLFloaterEditExtDayCycle::selectTrack(U32 track_index)          return;      } -    for (int i = 0; i < 5; i++) +    for (int i = 0; i < 5; i++) // yse max value      {          getChild<LLButton>(track_tabs[i], true)->setToggleState(false);      }      button->setToggleState(true); -    updateTabs(); +    bool show_water = mCurrentTrack == 0; +    mSkyTabLayoutContainer->setVisible(!show_water); +    mWaterTabLayoutContainer->setVisible(show_water);      updateSlider();  }  void LLFloaterEditExtDayCycle::updateTabs()  { -    bool show_water = mCurrentTrack == 0; -    mSkyTabContainer->setVisible(!show_water); -    mWaterTabContainer->setVisible(show_water); - -    if (show_water) +    if (mCurrentTrack == 0)      {          updateWaterTabs();      } @@ -323,11 +400,13 @@ void LLFloaterEditExtDayCycle::updateTabs()  void LLFloaterEditExtDayCycle::updateWaterTabs()  { -    const LLSettingsWaterPtr_t p_water = mEditDay->getWaterAtKeyframe(mKeysSlider->getCurSliderValue()); +    // todo: substitute with mSliderKeyMap? +    const LLSettingsWaterPtr_t p_water = mEditDay->getWaterAtKeyframe(mFramesSlider->getCurSliderValue());      // Compiler warnings from getChild about LLPanelSettingsWaterMainTab not being complete/missing params constructor... -    // Todo: fix class to work with getChild() -    LLPanelSettingsWaterMainTab* panel = mWaterTabContainer->findChild<LLPanelSettingsWaterMainTab>("water_panel", true); +    // Todo: fix class to work with getChild()? +    LLView* tab_container = mWaterTabLayoutContainer->getChild<LLView>("water_tabs"); //can't extract panels directly, since they are in 'tuple' +    LLPanelSettingsWaterMainTab* panel = dynamic_cast<LLPanelSettingsWaterMainTab*>(tab_container->getChildView("water_panel"));      if (panel)      {          panel->setWater(p_water); // todo: Null disables @@ -336,22 +415,25 @@ void LLFloaterEditExtDayCycle::updateWaterTabs()  void LLFloaterEditExtDayCycle::updateSkyTabs()  { -    const LLSettingsSkyPtr_t p_sky = mEditDay->getSkyAtKeyframe(mKeysSlider->getCurSliderValue(), mCurrentTrack); +    // todo: substitute with mSliderKeyMap? +    const LLSettingsSkyPtr_t p_sky = mEditDay->getSkyAtKeyframe(mFramesSlider->getCurSliderValue(), mCurrentTrack); + +    LLView* tab_container = mSkyTabLayoutContainer->getChild<LLView>("sky_tabs"); //can't extract panels directly, since they are in 'tuple'      // Compiler warnings from getChild about tabs...      // Todo: fix class      LLPanelSettingsSky* panel; -    panel = mSkyTabContainer->findChild<LLPanelSettingsSky>("atmosphere_panel", true); +    panel = dynamic_cast<LLPanelSettingsSky*>(tab_container->getChildView("atmosphere_panel"));      if (panel)      {          panel->setSky(p_sky); // todo: Null disables      } -    panel = mSkyTabContainer->findChild<LLPanelSettingsSky>("clouds_panel", true); +    panel = dynamic_cast<LLPanelSettingsSky*>(tab_container->getChildView("clouds_panel"));      if (panel)      {          panel->setSky(p_sky);      } -    panel = mSkyTabContainer->findChild<LLPanelSettingsSky>("moon_panel", true); +    panel = dynamic_cast<LLPanelSettingsSky*>(tab_container->getChildView("moon_panel"));      if (panel)      {          panel->setSky(p_sky); @@ -360,17 +442,39 @@ void LLFloaterEditExtDayCycle::updateSkyTabs()  void LLFloaterEditExtDayCycle::updateSlider()  { -    mKeysSlider->clear(); +    mFramesSlider->clear(); +    mSliderKeyMap.clear(); -    LLSettingsDay::KeyframeList_t keyframes = mEditDay->getTrackKeyframes(mCurrentTrack); -    LLSettingsDay::KeyframeList_t::iterator iter = keyframes.begin(); -    LLSettingsDay::KeyframeList_t::iterator end = keyframes.end(); +    LLSettingsDay::CycleTrack_t track = mEditDay->getCycleTrack(mCurrentTrack); +    for (auto &frame : track) +    { +        addSliderFrame(frame.first, frame.second); +    } +} + +void LLFloaterEditExtDayCycle::addSliderFrame(const F32 frame, LLSettingsBase::ptr_t setting) +{ +    // multi slider distinguishes elements by key/name in string format +    // store names to map to be able to recal dependencies +    std::string new_slider = mFramesSlider->addSlider(frame); +    mSliderKeyMap[new_slider] = framedata_t(frame, setting); +    mLastFrameSlider = new_slider; + +    updateTabs(); +} -    while (iter != end) +void LLFloaterEditExtDayCycle::removeCurrentSliderFrame() +{ +    std::string sldr = mFramesSlider->getCurSlider(); +    mFramesSlider->deleteCurSlider(); +    keymap_t::iterator iter = mSliderKeyMap.find(sldr); +    if (iter != mSliderKeyMap.end())      { -        mKeysSlider->addSlider(*iter); -        iter++; +        LL_DEBUGS() << "Removing frame from " << iter->second.first << LL_ENDL; +        mSliderKeyMap.erase(iter);      } + +    updateTabs();  }  /*void LLFloaterEditExtDayCycle::updateTrack() @@ -540,52 +644,7 @@ LLFloaterEditExtDayCycle::connection_t LLFloaterEditExtDayCycle::setEditCommitSi  // #endif  // }  //  -// void LLFloaterEditExtDayCycle::onTimeSliderMoved() -// { -// #if 0 -// 	/// get the slider value -// 	F32 val = mTimeSlider->getCurSliderValue() / sHoursPerDay; -//  -// 	// set the value, turn off animation -// 	LLWLParamManager::getInstance()->mAnimator.setDayTime((F64)val); -// 	LLWLParamManager::getInstance()->mAnimator.deactivate(); -//  -// 	// then call update once -// 	LLWLParamManager::getInstance()->mAnimator.update( -// 		LLWLParamManager::getInstance()->mCurParams); -// #endif -// } -//  -// void LLFloaterEditExtDayCycle::onKeyTimeMoved() -// { -// #if 0 -// 	if (mKeysSlider->getValue().size() == 0) -// 	{ -// 		return; -// 	} -//  -// 	// make sure we have a slider -// 	const std::string& cur_sldr = mKeysSlider->getCurSlider(); -// 	if (cur_sldr == "") -// 	{ -// 		return; -// 	} -//  -// 	F32 time24 = mKeysSlider->getCurSliderValue(); -//  -// 	// check to see if a key exists -// 	LLWLParamKey key = mSliderToKey[cur_sldr].keyframe; -// 	LL_DEBUGS() << "Setting key time: " << time24 << LL_ENDL; -// 	mSliderToKey[cur_sldr].time = time24; -//  -// 	// if it exists, turn on check box -// 	mSkyPresetsCombo->selectByValue(key.toStringVal()); -//  -// 	mTimeCtrl->setTime24(time24);  //  -// 	applyTrack(); -// #endif -// }  //   // void LLFloaterEditExtDayCycle::onKeyTimeChanged()  // { @@ -655,25 +714,6 @@ LLFloaterEditExtDayCycle::connection_t LLFloaterEditExtDayCycle::setEditCommitSi  // #endif  // }  //  -void LLFloaterEditExtDayCycle::addSliderKey(F32 time, const std::shared_ptr<LLSettingsBase> keyframe) -{ -	// make a slider -	const std::string& sldr_name = mKeysSlider->addSlider(time); -	if (sldr_name.empty()) -	{ -		return; -	} - -	// set the key -	SliderKey newKey(keyframe, mKeysSlider->getCurSliderValue()); - -	llassert_always(sldr_name != LLStringUtil::null); - -	// add to map -	mSliderToKey.insert(std::pair<std::string, SliderKey>(sldr_name, newKey)); - -	llassert_always(mSliderToKey.size() == mKeysSlider->getValue().size()); -}  // #if 0  // LLWLParamKey LLFloaterEditExtDayCycle::getSelectedDayCycle() diff --git a/indra/newview/llfloatereditextdaycycle.h b/indra/newview/llfloatereditextdaycycle.h index a9004087c9..c67cfdd274 100644 --- a/indra/newview/llfloatereditextdaycycle.h +++ b/indra/newview/llfloatereditextdaycycle.h @@ -35,20 +35,11 @@ class LLCheckBoxCtrl;  class LLComboBox;  class LLLineEditor;  class LLMultiSliderCtrl; +class LLTextBox;  class LLTimeCtrl;  typedef std::shared_ptr<LLSettingsBase> LLSettingsBasePtr_t; -class SliderKey -{ -public: -	SliderKey(LLSettingsBasePtr_t kf, F32 t) : keyframe(kf), time(t) {} - -	LLSettingsBasePtr_t keyframe; -	F32 time; -}; - -  /**   * Floater for creating or editing a day cycle.   */ @@ -94,19 +85,22 @@ private:  	void onRemoveTrack();  	void onCommitName(class LLLineEditor* caller, void* user_data);  	void onTrackSelectionCallback(const LLSD& user_data); +	void onTimeSliderMoved();	/// time slider moved +	void onFrameSliderCallback();		/// a frame moved or frame selection changed  	void selectTrack(U32 track_index);  	void updateTabs();  	void updateSkyTabs();  	void updateWaterTabs(); -	void updateSlider(); //track->slider +	void updateSlider(); //track to slider +	void addSliderFrame(const F32 frame, LLSettingsBase::ptr_t setting); +	void removeCurrentSliderFrame();  	//void updateTrack(); // slider->track, todo: better name  // 	/// refresh the day cycle combobox  // 	void refreshDayCyclesList();  //   // 	/// add a slider to the track -	void addSliderKey(F32 time, const LLSettingsBasePtr_t key);  //   // 	void initCallbacks();  // //	LLWLParamKey getSelectedDayCycle(); @@ -119,8 +113,6 @@ private:  // 	void setApplyProgress(bool started);  // 	bool getApplyProgress() const;  //  -// 	void onTimeSliderMoved();	/// time slider moved -// 	void onKeyTimeMoved();		/// a key frame moved  // 	void onKeyTimeChanged();	/// a key frame's time changed  // 	void onAddKey();			/// new key added on slider  // 	void onDeleteKey();			/// a key frame deleted @@ -143,7 +135,10 @@ private:      LLSettingsDay::ptr_t    mSavedDay;      LLSettingsDay::ptr_t    mEditDay; -	U32 mCurrentTrack; +    S64Seconds              mDayLength; +    S64Seconds              mDayOffset; +    U32                     mCurrentTrack; +    std::string             mLastFrameSlider;      LLButton*			mSaveButton;      LLButton*			mCancelButton; @@ -151,16 +146,16 @@ private:      edit_commit_signal_t    mCommitSignal; -//	LLComboBox*			mDayCyclesCombo; -// 	LLMultiSliderCtrl*	mTimeSlider; -    LLMultiSliderCtrl*  mKeysSlider; -    LLView*             mSkyTabContainer; -    LLView*             mWaterTabContainer; -    // 	LLTimeCtrl*			mTimeCtrl; -// 	LLCheckBoxCtrl*		mMakeDefaultCheckBox; +    LLMultiSliderCtrl*	mTimeSlider; +    LLMultiSliderCtrl*  mFramesSlider; +    LLView*             mSkyTabLayoutContainer; +    LLView*             mWaterTabLayoutContainer; +    LLTextBox*          mCurrentTimeLabel; -	// map of sliders to parameters -	std::map<std::string, SliderKey> mSliderToKey; +    // map of sliders to parameters +    typedef std::pair<F32, LLSettingsBase::ptr_t> framedata_t; +    typedef std::map<std::string, framedata_t> keymap_t; +    keymap_t mSliderKeyMap;  };  #endif // LL_LLFloaterEditExtDayCycle_H diff --git a/indra/newview/llpaneleditsky.cpp b/indra/newview/llpaneleditsky.cpp index e10af29e82..e5c6116c4f 100644 --- a/indra/newview/llpaneleditsky.cpp +++ b/indra/newview/llpaneleditsky.cpp @@ -74,6 +74,10 @@ namespace      const F32 SLIDER_SCALE_GLOW_B(-5.0f);  } +static LLPanelInjector<LLPanelSettingsSkyAtmosTab> t_settings_atmos("panel_settings_atmos"); +static LLPanelInjector<LLPanelSettingsSkyCloudTab> t_settings_cloud("panel_settings_cloud"); +static LLPanelInjector<LLPanelSettingsSkySunMoonTab> t_settings_sunmoon("panel_settings_sunmoon"); +  //==========================================================================  LLPanelSettingsSky::LLPanelSettingsSky() :      LLSettingsEditPanel(), diff --git a/indra/newview/llpaneleditwater.cpp b/indra/newview/llpaneleditwater.cpp index 3cb1dcfda4..5904b5a542 100644 --- a/indra/newview/llpaneleditwater.cpp +++ b/indra/newview/llpaneleditwater.cpp @@ -57,6 +57,8 @@ namespace      const std::string   FIELD_WATER_BLUR_MULTIP("water_blur_multip");  } +static LLPanelInjector<LLPanelSettingsWaterMainTab> t_settings_water("panel_settings_water"); +  //==========================================================================  LLPanelSettingsWater::LLPanelSettingsWater() :      LLSettingsEditPanel(), 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 70f5e21327..3b63d0018c 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 @@ -8,17 +8,13 @@          title="Edit Day Cycle"          width="705"> +    <!-- obsolete?, add as hint for 'save' button? -->      <string name="title_new">Create a New Day Cycle</string>      <string name="title_edit">Edit Day Cycle</string>      <string name="hint_new">Name your day cycle, adjust the controls to create it, and click "Save".</string>      <string name="hint_edit">To edit your day cycle, adjust the controls below and click "Save".</string> -   -    <!-- Todo: These 5 strings might be subjected to a change to get dynamic labels--> -    <string name="0_label">0%[DSC]</string> -    <string name="1_label">25%[DSC]</string> -    <string name="2_label">50%[DSC]</string> -    <string name="3_label">75%[DSC]</string> -    <string name="4_label">100%[DSC]</string> + +    <!-- Todo: These 5 strings might be subjected to a change to get dynamic labels, consider using layout_stack to get dynamic width adjustment-->      <string name="time_label"> ([TIME] hr)</string>      <layout_stack name="test_stack" @@ -90,7 +86,7 @@                          width="100">                       <button.commit_callback                        function="DayCycle.Track" -                      parameter="1" /> +                      parameter="4" />                  </button>                  <button                          follows="left|top" @@ -103,7 +99,7 @@                          width="100">                       <button.commit_callback                        function="DayCycle.Track" -                      parameter="2" /> +                      parameter="3" />                  </button>                  <button                          follows="left|top" @@ -116,7 +112,7 @@                          width="100">                       <button.commit_callback                        function="DayCycle.Track" -                      parameter="3" /> +                      parameter="2" />                  </button>                  <button                          follows="left|top" @@ -129,7 +125,7 @@                          width="100">                       <button.commit_callback                        function="DayCycle.Track" -                      parameter="4" /> +                      parameter="1" />                  </button>                  <button                          follows="left|top" @@ -156,104 +152,100 @@                      min_width="595"                      left_pad="0"                      visible="true">               -                        <text +    <!-- Todo: These 5 tests might be subjected to a change to be dynamically generated, consider using layout_stack to get dynamic width adjustment--> +                <text                           follows="left|top"                           height="15"                           layout="topleft"                           left="10"                           name="p0"                           top_pad="5" -                         value="0%" -                         width="50" /> -                        <text +                         value="0%[DSC]" +                         width="70" /> +                <text                           follows="left|top|right"                           height="15"                           layout="topleft" -                         left_pad="69" +                         left_pad="49"                           name="p1"                           top_delta="0" -                         value="25%" -                         width="50" /> -                        <text +                         value="25%[DSC]" +                         width="70" /> +                <text                           follows="left|top|right"                           height="15"                           layout="topleft" -                         left_pad="69" +                         left_pad="49"                           name="p2"                           top_delta="0" -                         value="50%" -                         width="50" /> -                        <text +                         value="50%[DSC]" +                         width="70" /> +                <text                           follows="left|top|right"                           height="15"                           layout="topleft" -                         left_pad="69" +                         left_pad="49"                           name="p3"                           top_delta="0" -                         value="75%" -                         width="50" /> -                        <text +                         value="75%[DSC]" +                         width="70" /> +                <text                           follows="left|top|right"                           height="15"                           layout="topleft" -                         left_pad="69" +                         left_pad="49"                           name="p4"                           top_delta="0" -                         value="100%" -                         width="50" /> -                  <multi_slider +                         value="100%[DSC]" +                         width="70" /> +                <multi_slider                      can_edit_text="true"                      decimal_digits="0"                      draw_track="false"                      follows="bottom"                      height="10" -                    increment="0.0833333" +                    increment="0.01"                      initial_value="0"                      layout="topleft"                      left="10" -                    max_sliders="20" -                    max_val="24" +                    max_sliders="1" +                    max_val="1"                      name="WLTimeSlider"                      show_text="false"                      top_pad="0"                      use_triangle="true"                      width="525"                      min_width="525"/> -           -                  <multi_slider + +                <multi_slider                        can_edit_text="true"                        decimal_digits="0"                        follows="bottom"                        height="10" -                      increment="0.0833333" +                      increment="0.01"                        initial_value="0"                        layout="topleft"                        left="10"                        max_sliders="20" -                      max_val="24" -                      name="WLDayCycleKeys" +                      max_val="1" +                      name="WLDayCycleFrames"                        show_text="false"                        top_pad="15"                        width="525"                        min_width="525" /> -               -            <line_editor -             border_style="line" -             border_thickness="1" -             follows="left|bottom" -             font="SansSerif" -             height="20" -             layout="topleft" -             left_pad="0" -             max_length_bytes="300" -             name="timeline_field" -             select_on_focus="true" -             value="%" -             tool_tip="The full path to an editor (executable) to edit floater XML files (quotes not necessary)" -             top_delta="-5" -             width="35" /> -              <layout_stack +                <text +                      follows="left|bottom" +                      height="20" +                      layout="topleft" +                      left_pad="0" +                      name="current_time" +                      select_on_focus="true" +                      value="[PRCNT]%[DSC]" +                      top_delta="-5" +                      width="70" /> + +                <layout_stack                  name="progress_control"                  follows="top|left"                  height="25" @@ -264,7 +256,7 @@                  top_pad="40"                  orientation="horizontal"> -                <layout_panel +                    <layout_panel                    name="skip_back"                    mouse_opaque="false"                    auto_resize="false" @@ -273,7 +265,7 @@                    height="25"                    min_width="25"                    width="25"> -                  <button +                        <button                      name="skip_back_btn"                      follows="top"                      image_overlay="SkipBackward_Off" @@ -289,9 +281,9 @@                      tool_tip="Step back"                      top="0"                      left="0"/> -                </layout_panel> +                    </layout_panel> -                <layout_panel +                    <layout_panel                    name="play"                    mouse_opaque="false"                    auto_resize="false" @@ -300,7 +292,7 @@                    height="25"                    min_width="25"                    width="25"> -                  <button +                        <button                          name="play_btn"                          follows="top"                          image_overlay="Play_Off" @@ -315,9 +307,9 @@                          width="25"                          left="0"                          top="0" /> -                </layout_panel> +                    </layout_panel> -                <layout_panel +                    <layout_panel                    name="pause"                    mouse_opaque="false"                    auto_resize="false" @@ -327,7 +319,7 @@                    min_width="25"                    width="25"                    visible="false"> -                  <button +                        <button                          name="pause_btn"                          follows="top"                          image_overlay="Pause_Off" @@ -342,9 +334,9 @@                          width="25"                          left="0"                          top="0"/> -                </layout_panel> +                    </layout_panel> -                <layout_panel +                    <layout_panel                    name="skip_forward"                    mouse_opaque="false"                    auto_resize="false" @@ -353,7 +345,7 @@                    height="25"                    min_width="25"                    width="25"> -                  <button +                        <button                      name="skip_forward_btn"                      follows="top"                      image_overlay="SkipForward_Off" @@ -367,10 +359,10 @@                      layout="topleft"                      tool_tip="Step forward"                      top="0" /> -                </layout_panel> -              </layout_stack> -               -            <button +                    </layout_panel> +                </layout_stack> + +                <button                      follows="top|left"                      height="23"                      width="90" @@ -378,7 +370,7 @@                      left_pad="175"                      top_delta="-12"                      name="add_frame" /> -            <button +                <button                      follows="left|top"                      height="23"                      width="90" @@ -407,10 +399,11 @@                      tab_padding_right="3"                      top_pad="0"                      width="700"> -                       <panel +                <panel                           border="true" +                         class="panel_settings_water"                           filename="panel_settings_water.xml" -                         label="Water_panel" +                         label="Water"                           layout="topleft"                           left_delta="0"                           top_pad="5" @@ -437,24 +430,27 @@                      tab_padding_right="3"                      top_pad="0"                      width="700"> -                       <panel +                <panel                           border="true" +                         class="panel_settings_atmos"                           filename="panel_settings_sky_atmos.xml"                           label="Atmosphere & Lighting"                           layout="topleft"                           left_delta="0"                           top_pad="5"                           name="atmosphere_panel" /> -                       <panel +                <panel                           border="true" +                         class="panel_settings_clouds"                           filename="panel_settings_sky_clouds.xml"                           label="Clouds"                           layout="topleft"                           left_delta="0"                           top_pad="5"                           name="clouds_panel" /> -                       <panel +                <panel                           border="true" +                         class="panel_settings_sunmoon"                           filename="panel_settings_sky_sunmoon.xml"                           label="Sun & Moon"                           layout="topleft" @@ -495,7 +491,7 @@                      left_pad="10"                      name="upload_btn"                      width="100" />  -                     +          </layout_panel>      </layout_stack> diff --git a/indra/newview/skins/default/xui/en/panel_settings_sky_atmos.xml b/indra/newview/skins/default/xui/en/panel_settings_sky_atmos.xml index ffa7df209b..8317196e75 100644 --- a/indra/newview/skins/default/xui/en/panel_settings_sky_atmos.xml +++ b/indra/newview/skins/default/xui/en/panel_settings_sky_atmos.xml @@ -7,12 +7,13 @@          left="0"          name="panel_settings_sky_atmos"          top="0"> -    <layout_stack  +    <layout_stack +            follows="all" +            layout="topleft"              left="5"              top="5"              right="-5"              bottom="-5" -            follows="left|top|right|bottom"              orientation="vertical">          <layout_panel                  border="true" diff --git a/indra/newview/skins/default/xui/en/panel_settings_sky_clouds.xml b/indra/newview/skins/default/xui/en/panel_settings_sky_clouds.xml index b88ac64323..9bd931f9fb 100644 --- a/indra/newview/skins/default/xui/en/panel_settings_sky_clouds.xml +++ b/indra/newview/skins/default/xui/en/panel_settings_sky_clouds.xml @@ -9,11 +9,12 @@          name="panel_settings_sky_clouds"          top="0">      <layout_stack  +            follows="all" +            layout="topleft"              left="5"              top="5"              right="-5"              bottom="-5" -            follows="left|top|right|bottom"              orientation="hoizontal">          <layout_panel                  border="true" diff --git a/indra/newview/skins/default/xui/en/panel_settings_sky_sunmoon.xml b/indra/newview/skins/default/xui/en/panel_settings_sky_sunmoon.xml index 0eb4e5be94..9e5df59daf 100644 --- a/indra/newview/skins/default/xui/en/panel_settings_sky_sunmoon.xml +++ b/indra/newview/skins/default/xui/en/panel_settings_sky_sunmoon.xml @@ -8,11 +8,12 @@          name="panel_settings_sky_hbodies"          top="0">      <layout_stack  +            follows="all" +            layout="topleft"              left="5"              top="5"              right="-5"              bottom="-5" -            follows="left|top|right|bottom"              orientation="hoizontal">          <layout_panel                  border="true" diff --git a/indra/newview/skins/default/xui/en/panel_settings_water.xml b/indra/newview/skins/default/xui/en/panel_settings_water.xml index eb4664616e..59184b0f95 100644 --- a/indra/newview/skins/default/xui/en/panel_settings_water.xml +++ b/indra/newview/skins/default/xui/en/panel_settings_water.xml @@ -9,11 +9,12 @@          name="panel_settings_water"          top="0">      <layout_stack name="water_stack1" +            follows="all" +            layout="topleft"              left="5"              top="5"              right="-5"              bottom="-5" -            follows="left|top|right|bottom"              orientation="vertical">          <layout_panel                  border="true" | 
