diff options
| author | andreykproductengine <andreykproductengine@lindenlab.com> | 2019-01-22 22:01:00 +0200 | 
|---|---|---|
| committer | andreykproductengine <andreykproductengine@lindenlab.com> | 2019-01-22 22:01:00 +0200 | 
| commit | d693c5350933e664e5131c98babc7fbb2b4571aa (patch) | |
| tree | 4705289b336823901052c149e0e6dd1f94d03b4b /indra | |
| parent | a5392bb8e822b3f75559275b3ccef7d4c55b0f9d (diff) | |
SL-1932 Day Cycle Edit feature "Load Track" Part 1
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/llfloatereditextdaycycle.cpp | 120 | ||||
| -rw-r--r-- | indra/newview/llfloatereditextdaycycle.h | 12 | ||||
| -rw-r--r-- | indra/newview/llfloaterfixedenvironment.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llsettingspicker.cpp | 34 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_settings_picker.xml | 46 | 
5 files changed, 173 insertions, 41 deletions
| diff --git a/indra/newview/llfloatereditextdaycycle.cpp b/indra/newview/llfloatereditextdaycycle.cpp index 9583f9f792..601b964410 100644 --- a/indra/newview/llfloatereditextdaycycle.cpp +++ b/indra/newview/llfloatereditextdaycycle.cpp @@ -287,8 +287,6 @@ BOOL LLFloaterEditExtDayCycle::postBuild()              panel->setOnDirtyFlagChanged([this](LLPanel *, bool val) { onPanelDirtyFlagChanged(val); });      } -    //getChild<LLButton>("sky1_track", true)->setToggleState(true); -  	return TRUE;  } @@ -751,7 +749,7 @@ void LLFloaterEditExtDayCycle::onButtonLoadFrame()      {           curitemId = LLFloaterSettingsPicker::findItemID(mCurrentEdit->getAssetId(), false, false);      } -     +      doOpenInventoryFloater((mCurrentTrack == LLSettingsDay::TRACK_WATER) ? LLSettingsType::ST_WATER : LLSettingsType::ST_SKY, curitemId);  } @@ -810,7 +808,14 @@ void LLFloaterEditExtDayCycle::onCloneTrack()  void LLFloaterEditExtDayCycle::onLoadTrack()  { +    LLUUID curitemId = mInventoryId; + +    if (mCurrentEdit && curitemId.notNull()) +    { +        curitemId = LLFloaterSettingsPicker::findItemID(mCurrentEdit->getAssetId(), false, false); +    } +    doOpenInventoryFloater(LLSettingsType::ST_DAYCYCLE, curitemId);  } @@ -1021,6 +1026,34 @@ void LLFloaterEditExtDayCycle::onTimeSliderCallback()      selectFrame(mTimeSlider->getCurSliderValue(), LLSettingsDay::DEFAULT_FRAME_SLOP_FACTOR);  } +void LLFloaterEditExtDayCycle::cloneTrack(U32 source_index, U32 dest_index) +{ +    cloneTrack(mEditDay, source_index, dest_index); +} + +void LLFloaterEditExtDayCycle::cloneTrack(const LLSettingsDay::ptr_t &source_day, U32 source_index, U32 dest_index) +{ +    if (source_index == LLSettingsDay::TRACK_WATER || dest_index == LLSettingsDay::TRACK_WATER) +    { +        LL_WARNS() << "water track can't be source or destination for copying" << LL_ENDL; +        return; +    } + +    // don't use replaceCycleTrack because we will end up with references, but we need to clone +    mEditDay->clearCycleTrack(dest_index); // because source can be empty +    LLSettingsDay::CycleTrack_t source_track = source_day->getCycleTrack(source_index); + +    for (auto &track_frame : source_track) +    { +        LLSettingsSky::ptr_t psky = std::static_pointer_cast<LLSettingsSky>(track_frame.second); +        mEditDay->setSettingsAtKeyframe(psky->buildDerivedClone(), track_frame.first, dest_index); +    } + +    updateSlider(); +    updateTabs(); +    updateButtons(); +} +  void LLFloaterEditExtDayCycle::selectTrack(U32 track_index, bool force )  {      if (track_index < LLSettingsDay::TRACK_MAX) @@ -1180,8 +1213,6 @@ void LLFloaterEditExtDayCycle::updateButtons()      bool can_load(true);      bool can_clear(true); -    can_clear = (mCurrentTrack > 1) ? (!mEditDay->getCycleTrack(mCurrentTrack).empty()) : (mEditDay->getCycleTrack(mCurrentTrack).size() > 1); -      if (mCurrentTrack == 0)      {          can_clone = false; @@ -1196,12 +1227,20 @@ void LLFloaterEditExtDayCycle::updateButtons()          }      } +    can_clear = (mCurrentTrack > 1) ? (!mEditDay->getCycleTrack(mCurrentTrack).empty()) : (mEditDay->getCycleTrack(mCurrentTrack).size() > 1);      mCloneTrack->setEnabled(can_clone && false);      mCloneTrack->setVisible(false); -    mLoadTrack->setEnabled(can_load && false); -    mLoadTrack->setVisible(false); +    mLoadTrack->setEnabled(can_load);      mClearTrack->setEnabled(can_clear); +    // update track buttons +    bool extended_env = LLEnvironment::instance().isExtendedEnvironmentEnabled(); +    for (S32 track = 0; track < LLSettingsDay::TRACK_MAX; ++track) +    { +        LLButton* button = getChild<LLButton>(track_tabs[track], true); +        button->setEnabled(extended_env); +        button->setToggleState(track == mCurrentTrack); +    }  }  void LLFloaterEditExtDayCycle::updateSlider() @@ -1788,7 +1827,7 @@ void LLFloaterEditExtDayCycle::doOpenInventoryFloater(LLSettingsType::type_e typ          mInventoryFloater = picker->getHandle(); -        picker->setCommitCallback([this](LLUICtrl *, const LLSD &data){ onPickerCommitSetting(data.asUUID()); }); +        picker->setCommitCallback([this](LLUICtrl *, const LLSD &data){ onPickerCommitSetting(data["ItemId"].asUUID(), data["Track"].asInteger()); });      }      picker->setSettingsFilter(type); @@ -1807,25 +1846,39 @@ void LLFloaterEditExtDayCycle::doCloseInventoryFloater(bool quitting)      }  } -void LLFloaterEditExtDayCycle::onPickerCommitSetting(LLUUID item_id) +void LLFloaterEditExtDayCycle::onPickerCommitSetting(LLUUID item_id, S32 track)  {      LLSettingsBase::TrackPosition frame(mTimeSlider->getCurSliderValue()); -    S32 track = mCurrentTrack;      LLViewerInventoryItem *itemp = gInventory.getItem(item_id);      if (itemp)      {          LLSettingsVOBase::getSettingsAsset(itemp->getAssetUUID(), -            [this, track, frame, item_id](LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, LLExtStat) { onAssetLoadedForFrame(item_id, asset_id, settings, status, track, frame); }); +            [this, track, frame, item_id](LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, LLExtStat) { onAssetLoadedForInsertion(item_id, asset_id, settings, status, track, mCurrentTrack, frame); });      }  } -void LLFloaterEditExtDayCycle::onAssetLoadedForFrame(LLUUID item_id, LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, S32 track, LLSettingsBase::TrackPosition frame) +void LLFloaterEditExtDayCycle::onAssetLoadedForInsertion(LLUUID item_id, LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, S32 source_track, S32 dest_track, LLSettingsBase::TrackPosition frame)  { -    std::function<void()> cb = [this, settings, frame, track]() +    std::function<void()> cb = [this, settings, frame, source_track, dest_track]()      { -        if (mFramesSlider->getCurSlider().empty()) +        if (settings->getSettingsType() == "daycycle") +        { +            // Load full track +            LLSettingsDay::ptr_t pday = std::dynamic_pointer_cast<LLSettingsDay>(settings); +            if (dest_track == LLSettingsDay::TRACK_WATER) +            { +                cloneTrack(pday, LLSettingsDay::TRACK_WATER, LLSettingsDay::TRACK_WATER); +            } +            else +            { +                cloneTrack(pday, source_track, dest_track); +            } +        } +        else          { -            if ((mEditDay->getSettingsNearKeyframe(frame, mCurrentTrack, LLSettingsDay::DEFAULT_FRAME_SLOP_FACTOR)).second) +            // 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; @@ -1835,23 +1888,36 @@ void LLFloaterEditExtDayCycle::onAssetLoadedForFrame(LLUUID item_id, LLUUID asse                  LL_WARNS("ENVDAYEDIT") << "Attempt to add new frame when slider is full." << LL_ENDL;                  return;              } -            mEditDay->setSettingsAtKeyframe(settings, frame, track); -            addSliderFrame(frame, settings, false); -            reblendSettings(); -            synchronizeTabs(); -        } -        else -        { -            if (mCurrentTrack == LLSettingsDay::TRACK_WATER) +            // Don't forget to clone (we might reuse/load it couple times) +            if (settings->getSettingsType() == "sky")              { -                mEditDay->setWaterAtKeyframe(std::static_pointer_cast<LLSettingsWater>(settings), frame); +                // Load sky to frame +                if (dest_track != LLSettingsDay::TRACK_WATER) +                { +                    mEditDay->setSettingsAtKeyframe(settings->buildDerivedClone(), frame, dest_track); +                    addSliderFrame(frame, settings, false); +                } +                else +                { +                    LL_WARNS("ENVDAYEDIT") << "Trying to load day settings as sky" << LL_ENDL; +                }              } -            else +            else if (settings->getSettingsType() == "water")              { -                mEditDay->setSkyAtKeyframe(std::static_pointer_cast<LLSettingsSky>(settings), frame, track); +                // Load water to frame +                if (dest_track == LLSettingsDay::TRACK_WATER) +                { +                    mEditDay->setSettingsAtKeyframe(settings->buildDerivedClone(), frame, dest_track); +                    addSliderFrame(frame, settings, false); +                } +                else +                { +                    LL_WARNS("ENVDAYEDIT") << "Trying to load water settings as sky" << LL_ENDL; +                }              } -            updateTabs();          } +        reblendSettings(); +        synchronizeTabs();      };      if (!settings || status) diff --git a/indra/newview/llfloatereditextdaycycle.h b/indra/newview/llfloatereditextdaycycle.h index 67a6f1e0e9..e808ab8a46 100644 --- a/indra/newview/llfloatereditextdaycycle.h +++ b/indra/newview/llfloatereditextdaycycle.h @@ -132,6 +132,8 @@ private:      void                        checkAndConfirmSettingsLoss(on_confirm_fn cb); +    void                        cloneTrack(U32 source_index, U32 dest_index); +    void                        cloneTrack(const LLSettingsDay::ptr_t &source_day, U32 source_index, U32 dest_index);  	void                        selectTrack(U32 track_index, bool force = false);  	void                        selectFrame(F32 frame, F32 slop_factor);  	void                        clearTabs(); @@ -160,8 +162,14 @@ private:      void                        doOpenInventoryFloater(LLSettingsType::type_e type, LLUUID curritem);      void                        doCloseInventoryFloater(bool quitting = false); -    void                        onPickerCommitSetting(LLUUID item_id); -    void                        onAssetLoadedForFrame(LLUUID item_id, LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, S32 track, LLSettingsBase::TrackPosition frame); +    void                        onPickerCommitSetting(LLUUID item_id, S32 track); +    void                        onAssetLoadedForInsertion(LLUUID item_id, +                                                          LLUUID asset_id, +                                                          LLSettingsBase::ptr_t settings, +                                                          S32 status, +                                                          S32 source_track, +                                                          S32 dest_track, +                                                          LLSettingsBase::TrackPosition dest_frame);      bool                        canUseInventory() const;      bool                        canApplyRegion() const; diff --git a/indra/newview/llfloaterfixedenvironment.cpp b/indra/newview/llfloaterfixedenvironment.cpp index 4e6bc6eae0..98cec04898 100644 --- a/indra/newview/llfloaterfixedenvironment.cpp +++ b/indra/newview/llfloaterfixedenvironment.cpp @@ -243,7 +243,7 @@ LLFloaterSettingsPicker * LLFloaterFixedEnvironment::getSettingsPicker()          mInventoryFloater = picker->getHandle(); -        picker->setCommitCallback([this](LLUICtrl *, const LLSD &data){ onPickerCommitSetting(data.asUUID()); }); +        picker->setCommitCallback([this](LLUICtrl *, const LLSD &data){ onPickerCommitSetting(data["ItemId"].asUUID() /*data["Track"]*/); });      }      return picker; diff --git a/indra/newview/llsettingspicker.cpp b/indra/newview/llsettingspicker.cpp index d115f6fa4f..d2824e04a9 100644 --- a/indra/newview/llsettingspicker.cpp +++ b/indra/newview/llsettingspicker.cpp @@ -28,6 +28,7 @@  #include "llsettingspicker.h" +#include "llcombobox.h"  #include "llfiltereditor.h"  #include "llfolderviewmodel.h"  #include "llinventory.h" @@ -47,7 +48,9 @@ namespace      const std::string FLOATER_DEFINITION_XML("floater_settings_picker.xml");      const std::string FLT_INVENTORY_SEARCH("flt_inventory_search"); +    const std::string CMB_TRACK_SELECTION("track_selection");      const std::string PNL_INVENTORY("pnl_inventory"); +    const std::string PNL_COMBO("pnl_combo");      const std::string BTN_SELECT("btn_select");      const std::string BTN_CANCEL("btn_cancel"); @@ -162,6 +165,8 @@ void LLFloaterSettingsPicker::setSettingsFilter(LLSettingsType::type_e type)          filter = static_cast<S64>(0x1) << static_cast<S64>(type);      } +    getChild<LLPanel>(PNL_COMBO)->setVisible(type != LLSettingsType::ST_WATER && type != LLSettingsType::ST_SKY); +      mInventoryPanel->setFilterSettingsTypes(filter);  } @@ -263,6 +268,7 @@ void LLFloaterSettingsPicker::onFilterEdit(const std::string& search_string)  void LLFloaterSettingsPicker::onSelectionChange(const LLFloaterSettingsPicker::itemlist_t &items, bool user_action)  { +    bool track_picker_enabled = false;      if (items.size())      {          LLFolderViewItem* first_item = items.front(); @@ -284,9 +290,16 @@ void LLFloaterSettingsPicker::onSelectionChange(const LLFloaterSettingsPicker::i                  {                      mChangeIDSignal(mSettingItemID);                  } + +                if (bridge_model->getSettingsType() == LLSettingsType::ST_DAYCYCLE +                    && !mNoCopySettingsSelected) +                { +                    track_picker_enabled = true; +                }              }          }      } +    getChild<LLView>(CMB_TRACK_SELECTION)->setEnabled(track_picker_enabled);  }  void LLFloaterSettingsPicker::onButtonCancel() @@ -297,7 +310,12 @@ void LLFloaterSettingsPicker::onButtonCancel()  void LLFloaterSettingsPicker::onButtonSelect()  {      if (mCommitSignal) -        (*mCommitSignal)(this, LLSD(mSettingItemID)); +    { +        LLSD res; +        res["ItemId"] = mSettingItemID; +        res["Track"] = getChild<LLComboBox>(CMB_TRACK_SELECTION)->getValue(); +        (*mCommitSignal)(this, res); +    }      closeFloater();  } @@ -321,7 +339,12 @@ BOOL LLFloaterSettingsPicker::handleDoubleClick(S32 x, S32 y, MASK mask)                  {                      // Quick-apply                      if (mCommitSignal) -                        (*mCommitSignal)(this, LLSD(mSettingItemID)); +                    { +                        LLSD res; +                        res["ItemId"] = mSettingItemID; +                        res["Track"] = getChild<LLComboBox>(CMB_TRACK_SELECTION)->getValue(); +                        (*mCommitSignal)(this, res); +                    }                      closeFloater();                  }              } @@ -346,7 +369,12 @@ BOOL LLFloaterSettingsPicker::handleKeyHere(KEY key, MASK mask)          {              // Quick-apply              if (mCommitSignal) -                (*mCommitSignal)(this, LLSD(mSettingItemID)); +            { +                LLSD res; +                res["ItemId"] = mSettingItemID; +                res["Track"] = getChild<LLComboBox>(CMB_TRACK_SELECTION)->getValue(); +                (*mCommitSignal)(this, res); +            }              closeFloater();              return TRUE;          } diff --git a/indra/newview/skins/default/xui/en/floater_settings_picker.xml b/indra/newview/skins/default/xui/en/floater_settings_picker.xml index 7cc2c517ca..9ea949088f 100644 --- a/indra/newview/skins/default/xui/en/floater_settings_picker.xml +++ b/indra/newview/skins/default/xui/en/floater_settings_picker.xml @@ -14,10 +14,6 @@      <!--  top static -->      <floater.string -            name="choose_picture"> -        Click to choose a picture -    </floater.string> -    <floater.string              name="pick title">          Pick:      </floater.string> @@ -30,10 +26,10 @@              right="-6"              bottom="-10"              orientation="vertical"> -        <layout_panel name="temp" +        <layout_panel name="inv_list"                  border="false"                  auto_resize="true" -                user_resize="true" +                user_resize="false"                  height="29"                  min_height="29"                  bg_alpha_color="blue" @@ -72,14 +68,48 @@                      filter_asset_type="settings" />              </panel>          </layout_panel> +        <layout_panel name="pnl_combo" +                border="false" +                auto_resize="false" +                user_resize="false" +                visible="true" +                height="29" +                bg_alpha_color="blue" +                background_visible="false"> +            <combo_box +             allow_text_entry="false" +             follows="left|top" +             height="23" +             left="10" +             max_chars="100" +             mouse_opaque="true" +             name="track_selection" +             top="1" +             width="190"> +                <combo_box.item +                 label="Sky4" +                 name="Sky4" +                 value="4" /> +                <combo_box.item +                 label="Sky3" +                 name="Sky3" +                 value="3" /> +                <combo_box.item +                 label="Sky2" +                 name="Sky2" +                 value="2" /> +                <combo_box.item +                 label="Ground" +                 name="Ground" +                 value="1" /> +            </combo_box> +        </layout_panel>          <layout_panel name="temp"                  border="false"                  auto_resize="false"                  user_resize="false"                  height="29"                  min_height="29"> -            <!--                bg_alpha_color="red" -                background_visible="true" -->              <button                      follows="top|left"                      height="20" | 
