SL-10165: Using Load Sky/Water when over an existing keyframe replaces the old frame.

master
Rider Linden 2019-02-25 14:23:46 -08:00
parent 0aa46bb013
commit c42a364841
2 changed files with 26 additions and 10 deletions

View File

@ -1368,7 +1368,7 @@ void LLFloaterEditExtDayCycle::updateTimeAndLabel()
// Update blender here:
}
void LLFloaterEditExtDayCycle::addSliderFrame(const F32 frame, const LLSettingsBase::ptr_t &setting, bool update_ui)
void LLFloaterEditExtDayCycle::addSliderFrame(F32 frame, const 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
@ -1408,6 +1408,19 @@ void LLFloaterEditExtDayCycle::removeCurrentSliderFrame()
updateTabs();
}
void LLFloaterEditExtDayCycle::removeSliderFrame(F32 frame)
{
keymap_t::iterator it = std::find_if(mSliderKeyMap.begin(), mSliderKeyMap.end(),
[frame](const keymap_t::value_type &value) { return fabs(value.second.mFrame - frame) < LLSettingsDay::DEFAULT_FRAME_SLOP_FACTOR; });
if (it != mSliderKeyMap.end())
{
mFramesSlider->deleteSlider((*it).first);
mSliderKeyMap.erase(it);
}
}
//-------------------------------------------------------------------------
LLFloaterEditExtDayCycle::connection_t LLFloaterEditExtDayCycle::setEditCommitSignal(LLFloaterEditExtDayCycle::edit_commit_signal_t::slot_type cb)
@ -1997,18 +2010,20 @@ void LLFloaterEditExtDayCycle::onAssetLoadedForInsertion(LLUUID item_id, LLUUID
}
else
{
// load single frame
if ((mEditDay->getSettingsNearKeyframe(frame, dest_track, LLSettingsDay::DEFAULT_FRAME_SLOP_FACTOR)).second)
{
LL_WARNS("ENVDAYEDIT") << "Attempt to add new frame too close to existing frame." << LL_ENDL;
return;
}
if (!mFramesSlider->canAddSliders())
{
LL_WARNS("ENVDAYEDIT") << "Attempt to add new frame when slider is full." << LL_ENDL;
return;
}
// load or replace single frame
LLSettingsDay::CycleTrack_t::value_type nearest = mEditDay->getSettingsNearKeyframe(frame, dest_track, LLSettingsDay::DEFAULT_FRAME_SLOP_FACTOR);
if (nearest.first != LLSettingsDay::INVALID_TRACKPOS)
{ // There is already a frame near the target location. Remove it so we can put the new one in its place.
mEditDay->removeTrackKeyframe(dest_track, nearest.first);
removeSliderFrame(nearest.first);
}
// Don't forget to clone (we might reuse/load it couple times)
if (settings->getSettingsType() == "sky")
{

View File

@ -144,8 +144,9 @@ private:
void updateLabels();
void updateSlider(); //generate sliders from current track
void updateTimeAndLabel();
void addSliderFrame(const F32 frame, const LLSettingsBase::ptr_t &setting, bool update_ui = true);
void removeCurrentSliderFrame();
void addSliderFrame(F32 frame, const LLSettingsBase::ptr_t &setting, bool update_ui = true);
void removeCurrentSliderFrame();
void removeSliderFrame(F32 frame);
void loadInventoryItem(const LLUUID &inventoryId);
void onAssetLoaded(LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status);