diff options
| author | andreykproductengine <andreykproductengine@lindenlab.com> | 2018-08-15 18:31:07 +0300 | 
|---|---|---|
| committer | andreykproductengine <andreykproductengine@lindenlab.com> | 2018-08-15 18:31:07 +0300 | 
| commit | 584fec695bc8d6bafc38ff6ed3b435f133fdca2b (patch) | |
| tree | b0b465c2e21bd76442037081ed8f38b6d5ae99d9 | |
| parent | 2a7600fbd2a29cb6ac34767ed82eeef1fa4a1fbe (diff) | |
MAINT-8952 EEP 'uncompress' day tracks before editing
| -rw-r--r-- | indra/llinventory/llsettingsdaycycle.cpp | 7 | ||||
| -rw-r--r-- | indra/llinventory/llsettingsdaycycle.h | 1 | ||||
| -rw-r--r-- | indra/newview/llfloatereditextdaycycle.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llsettingsvo.cpp | 24 | ||||
| -rw-r--r-- | indra/newview/llsettingsvo.h | 1 | 
5 files changed, 29 insertions, 8 deletions
diff --git a/indra/llinventory/llsettingsdaycycle.cpp b/indra/llinventory/llsettingsdaycycle.cpp index ea57c8987f..4a99be0c4b 100644 --- a/indra/llinventory/llsettingsdaycycle.cpp +++ b/indra/llinventory/llsettingsdaycycle.cpp @@ -366,12 +366,7 @@ bool LLSettingsDay::initialize(bool validate_frames)                          }                      }                  } - -                // Build clone since: -                // - can use settings from "used" multiple times -                // - settings can reuse LLSDs they were initialized from -                // - LLSDs are 'smart' and can reuse them self multiple times -                mDayTracks[i][keyframe] = setting->buildDerivedClone(); +                mDayTracks[i][keyframe] = setting;              }          }      } diff --git a/indra/llinventory/llsettingsdaycycle.h b/indra/llinventory/llsettingsdaycycle.h index 974ca8660d..0ee5ce3e0b 100644 --- a/indra/llinventory/llsettingsdaycycle.h +++ b/indra/llinventory/llsettingsdaycycle.h @@ -81,6 +81,7 @@ public:      bool                        initialize(bool validate_frames = false);      virtual ptr_t               buildClone() = 0; +    virtual ptr_t               buildDeepCloneAndUncompress() = 0;      virtual LLSD                getSettings() const SETTINGS_OVERRIDE;      virtual LLSettingsType::type_e  getSettingsTypeValue() const SETTINGS_OVERRIDE { return LLSettingsType::ST_DAYCYCLE; } diff --git a/indra/newview/llfloatereditextdaycycle.cpp b/indra/newview/llfloatereditextdaycycle.cpp index 85bcf086e5..84a2e0687f 100644 --- a/indra/newview/llfloatereditextdaycycle.cpp +++ b/indra/newview/llfloatereditextdaycycle.cpp @@ -908,7 +908,7 @@ void LLFloaterEditExtDayCycle::onAssetLoaded(LLUUID asset_id, LLSettingsBase::pt          closeFloater();          return;      } -    mEditDay = std::dynamic_pointer_cast<LLSettingsDay>(settings); +    mEditDay = std::dynamic_pointer_cast<LLSettingsDay>(settings)->buildDeepCloneAndUncompress();      updateEditEnvironment();      LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_EDIT, LLEnvironment::TRANSITION_INSTANT);      LLEnvironment::instance().updateEnvironment(LLEnvironment::TRANSITION_INSTANT); @@ -925,7 +925,7 @@ void LLFloaterEditExtDayCycle::loadLiveEnvironment(LLEnvironment::EnvSelection_t          if (day)          { -            mEditDay = day->buildClone(); +            mEditDay = day->buildDeepCloneAndUncompress();              break;          }      } diff --git a/indra/newview/llsettingsvo.cpp b/indra/newview/llsettingsvo.cpp index 80797ae21c..2cdc3e79c3 100644 --- a/indra/newview/llsettingsvo.cpp +++ b/indra/newview/llsettingsvo.cpp @@ -1092,6 +1092,30 @@ LLSettingsDay::ptr_t LLSettingsVODay::buildClone()      return dayp;  } +LLSettingsDay::ptr_t LLSettingsVODay::buildDeepCloneAndUncompress() +{ +    // no need for SETTING_TRACKS or SETTING_FRAMES, so take base LLSD +    LLSD settings = llsd_clone(mSettings); + +    LLSettingsDay::ptr_t day_clone = std::make_shared<LLSettingsVODay>(settings); + +    for (S32 i = 0; i < LLSettingsDay::TRACK_MAX; ++i) +    { +        LLSettingsDay::CycleTrack_t track = getCycleTrack(i); +        LLSettingsDay::CycleTrack_t::iterator iter = track.begin(); +        while (iter != track.end()) +        {
 +            // 'Unpack', usually for editing
 +            // - frames 'share' settings multiple times
 +            // - settings can reuse LLSDs they were initialized from +            // We do not want for edited frame to change multiple frames in same track, so do a clone +            day_clone->setSettingsAtKeyframe(iter->second->buildDerivedClone(), iter->first, i); +            iter++; +        } +    } +    return day_clone; +} +  LLSD LLSettingsVODay::convertToLegacy(const LLSettingsVODay::ptr_t &pday)  {      CycleTrack_t &trackwater = pday->getCycleTrack(TRACK_WATER); diff --git a/indra/newview/llsettingsvo.h b/indra/newview/llsettingsvo.h index 15b51d0988..fedb758b48 100644 --- a/indra/newview/llsettingsvo.h +++ b/indra/newview/llsettingsvo.h @@ -156,6 +156,7 @@ public:      static ptr_t    buildDefaultDayCycle();      static ptr_t    buildFromEnvironmentMessage(LLSD settings);      virtual ptr_t   buildClone() override; +    virtual ptr_t   buildDeepCloneAndUncompress();      static LLSD     convertToLegacy(const ptr_t &);  | 
