diff options
| -rw-r--r-- | indra/newview/llenvironment.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llfloatereditextdaycycle.cpp | 51 | ||||
| -rw-r--r-- | indra/newview/llfloatereditextdaycycle.h | 1 | ||||
| -rw-r--r-- | indra/newview/llfloaterfixedenvironment.cpp | 96 | ||||
| -rw-r--r-- | indra/newview/llfloaterfixedenvironment.h | 2 | ||||
| -rw-r--r-- | indra/newview/llfloaterland.cpp | 18 | ||||
| -rw-r--r-- | indra/newview/llfloaterregioninfo.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llpanelenvironment.cpp | 19 | ||||
| -rw-r--r-- | indra/newview/llpanelenvironment.h | 4 | ||||
| -rw-r--r-- | indra/newview/llsettingspicker.cpp | 31 | ||||
| -rw-r--r-- | indra/newview/llsettingspicker.h | 1 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_region_environment.xml | 2 | 
12 files changed, 167 insertions, 66 deletions
| diff --git a/indra/newview/llenvironment.cpp b/indra/newview/llenvironment.cpp index 3b1990c850..ec2577d053 100644 --- a/indra/newview/llenvironment.cpp +++ b/indra/newview/llenvironment.cpp @@ -1768,6 +1768,8 @@ void LLEnvironment::DayTransition::animate()              if (!mBlenderSky && !mBlenderWater)                  LLEnvironment::instance().mCurrentEnvironment = mNextInstance; +            else +                setWater(mNextInstance->getWater());      });      mSky = mStartSky->buildClone(); @@ -1778,6 +1780,8 @@ void LLEnvironment::DayTransition::animate()          if (!mBlenderSky && !mBlenderWater)              LLEnvironment::instance().mCurrentEnvironment = mNextInstance; +        else +            setSky(mNextInstance->getSky());      });  } diff --git a/indra/newview/llfloatereditextdaycycle.cpp b/indra/newview/llfloatereditextdaycycle.cpp index 5bf34455bb..fa16648140 100644 --- a/indra/newview/llfloatereditextdaycycle.cpp +++ b/indra/newview/llfloatereditextdaycycle.cpp @@ -53,6 +53,7 @@  #include "llparcel.h"  #include "llflyoutcombobtn.h" //Todo: make a proper UI element/button/panel instead  #include "llregioninfomodel.h" +#include "llviewermenufile.h" // LLFilePickerReplyThread  #include "llviewerregion.h"  #include "llpaneleditwater.h"  #include "llpaneleditsky.h" @@ -277,8 +278,6 @@ void LLFloaterEditExtDayCycle::onOpen(const LLSD& key)      }      else      { -        mInventoryItem = nullptr; -        mInventoryId.setNull();          mCanCopy = true;          mCanMod = true;          mMakeNoTrans = false; @@ -449,6 +448,8 @@ void LLFloaterEditExtDayCycle::setEditDayCycle(const LLSettingsDay::ptr_t &pday)  void LLFloaterEditExtDayCycle::setEditDefaultDayCycle()  { +    mInventoryItem = nullptr; +    mInventoryId.setNull();      LLSettingsVOBase::getSettingsAsset(LLSettingsDay::GetDefaultAssetId(),          [this](LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, LLExtStat) { onAssetLoaded(asset_id, settings, status); });  } @@ -1065,6 +1066,13 @@ void LLFloaterEditExtDayCycle::loadInventoryItem(const LLUUID  &inventoryId)  void LLFloaterEditExtDayCycle::onAssetLoaded(LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status)  { +    if ((mInventoryItem && mInventoryItem->getAssetUUID() != asset_id) +        || (!mInventoryItem && LLSettingsDay::GetDefaultAssetId() != asset_id)) +    { +        LL_WARNS("ENVDAYEDIT") << "Discarding obsolete asset callback" << LL_ENDL; +        return; +    } +      if (!settings || status)      {          LLSD args; @@ -1084,6 +1092,9 @@ void LLFloaterEditExtDayCycle::onAssetLoaded(LLUUID asset_id, LLSettingsBase::pt      else          settings->setFlag(LLSettingsBase::FLAG_NOMOD); +    if (mInventoryItem) +        settings->setName(mInventoryItem->getName()); +      setEditDayCycle(std::dynamic_pointer_cast<LLSettingsDay>(settings));  } @@ -1326,28 +1337,28 @@ void LLFloaterEditExtDayCycle::onInventoryUpdated(LLUUID asset_id, LLUUID invent  void LLFloaterEditExtDayCycle::doImportFromDisk()  {   // Load a a legacy Windlight XML from disk. +    (new LLFilePickerReplyThread(boost::bind(&LLFloaterEditExtDayCycle::loadSettingFromFile, this, _1), LLFilePicker::FFLOAD_XML, false))->getFile(); +} -    LLFilePicker& picker = LLFilePicker::instance(); -    if (picker.getOpenFile(LLFilePicker::FFLOAD_XML)) -    { -        std::string filename = picker.getFirstFile(); - -        LL_WARNS("LAPRAS") << "Selected file: " << filename << LL_ENDL; -        LLSettingsDay::ptr_t legacyday = LLEnvironment::createDayCycleFromLegacyPreset(filename); +void LLFloaterEditExtDayCycle::loadSettingFromFile(const std::vector<std::string>& filenames) +{ +    if (filenames.size() < 1) return; +    std::string filename = filenames[0]; +    LL_WARNS("LAPRAS") << "Selected file: " << filename << LL_ENDL; +    LLSettingsDay::ptr_t legacyday = LLEnvironment::createDayCycleFromLegacyPreset(filename); -        if (!legacyday) -        {    -            LLSD args(LLSDMap("FILE", filename)); -            LLNotificationsUtil::add("WLImportFail", args); -            return; -        } +    if (!legacyday) +    {    +        LLSD args(LLSDMap("FILE", filename)); +        LLNotificationsUtil::add("WLImportFail", args); +        return; +    } -        loadInventoryItem(LLUUID::null); +    loadInventoryItem(LLUUID::null); -        mCurrentTrack = 1; -        setDirtyFlag(); -        setEditDayCycle(legacyday); -    } +    mCurrentTrack = 1; +    setDirtyFlag(); +    setEditDayCycle(legacyday);  }  bool LLFloaterEditExtDayCycle::canUseInventory() const diff --git a/indra/newview/llfloatereditextdaycycle.h b/indra/newview/llfloatereditextdaycycle.h index f03a69c200..185b27bff3 100644 --- a/indra/newview/llfloatereditextdaycycle.h +++ b/indra/newview/llfloatereditextdaycycle.h @@ -136,6 +136,7 @@ private:      void                        onAssetLoaded(LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status);      void                        doImportFromDisk(); +    void                        loadSettingFromFile(const std::vector<std::string>& filenames);      void doApplyCreateNewInventory(const LLSettingsDay::ptr_t &day);      void doApplyUpdateInventory(const LLSettingsDay::ptr_t &day);      void doApplyEnvironment(const std::string &where, const LLSettingsDay::ptr_t &day); diff --git a/indra/newview/llfloaterfixedenvironment.cpp b/indra/newview/llfloaterfixedenvironment.cpp index 09a05eb7e2..d65a578a6d 100644 --- a/indra/newview/llfloaterfixedenvironment.cpp +++ b/indra/newview/llfloaterfixedenvironment.cpp @@ -38,7 +38,7 @@  #include "lltabcontainer.h"  #include "llfilepicker.h"  #include "llsettingspicker.h" - +#include "llviewermenufile.h" // LLFilePickerReplyThread  #include "llviewerparcelmgr.h"  // newview @@ -292,12 +292,30 @@ void LLFloaterFixedEnvironment::checkAndConfirmSettingsLoss(LLFloaterFixedEnviro  void LLFloaterFixedEnvironment::onPickerCommitSetting(LLUUID asset_id)  { +    mInventoryItem = NULL; +    mInventoryId.setNull(); +    if (!mInventoryFloater.isDead()) +    { +        LLFloaterSettingsPicker *picker = static_cast<LLFloaterSettingsPicker *>(mInventoryFloater.get()); +        if (picker) +        { +            mInventoryId = picker->findItemID(asset_id, false); +            mInventoryItem = gInventory.getItem(mInventoryId); +        } +    } +      LLSettingsVOBase::getSettingsAsset(asset_id,          [this](LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, LLExtStat) { onAssetLoaded(asset_id, settings, status); });  }  void LLFloaterFixedEnvironment::onAssetLoaded(LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status)  { +    if (mInventoryItem && mInventoryItem->getAssetUUID() != asset_id) +    { +        LL_WARNS("ENVIRONMENT") << "Discarding obsolete asset callback" << LL_ENDL; +        return; +    } +      if (!settings || status)      {          LLSD args; @@ -581,30 +599,29 @@ void LLFloaterFixedEnvironmentWater::onOpen(const LLSD& key)  void LLFloaterFixedEnvironmentWater::doImportFromDisk()  {   // Load a a legacy Windlight XML from disk. +    (new LLFilePickerReplyThread(boost::bind(&LLFloaterFixedEnvironmentWater::loadWaterSettingFromFile, this, _1), LLFilePicker::FFLOAD_XML, false))->getFile(); +} -    LLFilePicker& picker = LLFilePicker::instance(); -    if (picker.getOpenFile(LLFilePicker::FFLOAD_XML)) -    { -        std::string filename = picker.getFirstFile(); - -        LL_WARNS("LAPRAS") << "Selected file: " << filename << LL_ENDL; -        LLSettingsWater::ptr_t legacywater = LLEnvironment::createWaterFromLegacyPreset(filename); - -        if (!legacywater) -        {    -            LLSD args(LLSDMap("FILE", filename)); -            LLNotificationsUtil::add("WLImportFail", args); -            return; -        } +void LLFloaterFixedEnvironmentWater::loadWaterSettingFromFile(const std::vector<std::string>& filenames) +{ +    if (filenames.size() < 1) return; +    std::string filename = filenames[0]; +    LL_WARNS("LAPRAS") << "Selected file: " << filename << LL_ENDL; +    LLSettingsWater::ptr_t legacywater = LLEnvironment::createWaterFromLegacyPreset(filename); -        loadInventoryItem(LLUUID::null); +    if (!legacywater) +    {    +        LLSD args(LLSDMap("FILE", filename)); +        LLNotificationsUtil::add("WLImportFail", args); +        return; +    } -        setDirtyFlag(); -        LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_EDIT, legacywater); -        setEditSettings(legacywater); -        LLEnvironment::instance().updateEnvironment(LLEnvironment::TRANSITION_FAST, true); +    loadInventoryItem(LLUUID::null); -    } +    setDirtyFlag(); +    LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_EDIT, legacywater); +    setEditSettings(legacywater); +    LLEnvironment::instance().updateEnvironment(LLEnvironment::TRANSITION_FAST, true);  }  //========================================================================= @@ -669,30 +686,31 @@ void LLFloaterFixedEnvironmentSky::onOpen(const LLSD& key)  void LLFloaterFixedEnvironmentSky::doImportFromDisk()  {   // Load a a legacy Windlight XML from disk. +    (new LLFilePickerReplyThread(boost::bind(&LLFloaterFixedEnvironmentSky::loadSkySettingFromFile, this, _1), LLFilePicker::FFLOAD_XML, false))->getFile(); +} -    LLFilePicker& picker = LLFilePicker::instance(); -    if (picker.getOpenFile(LLFilePicker::FFLOAD_XML)) -    { -        std::string filename = picker.getFirstFile(); +void LLFloaterFixedEnvironmentSky::loadSkySettingFromFile(const std::vector<std::string>& filenames) +{ +    if (filenames.size() < 1) return; +    std::string filename = filenames[0]; -        LL_WARNS("LAPRAS") << "Selected file: " << filename << LL_ENDL; -        LLSettingsSky::ptr_t legacysky = LLEnvironment::createSkyFromLegacyPreset(filename); +    LL_WARNS("LAPRAS") << "Selected file: " << filename << LL_ENDL; +    LLSettingsSky::ptr_t legacysky = LLEnvironment::createSkyFromLegacyPreset(filename); -        if (!legacysky) -        {    -            LLSD args(LLSDMap("FILE", filename)); -            LLNotificationsUtil::add("WLImportFail", args); +    if (!legacysky) +    {    +        LLSD args(LLSDMap("FILE", filename)); +        LLNotificationsUtil::add("WLImportFail", args); -            return; -        } +        return; +    } -        loadInventoryItem(LLUUID::null); +    loadInventoryItem(LLUUID::null); -        clearDirtyFlag(); -        LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_EDIT, legacysky); -        setEditSettings(legacysky); -        LLEnvironment::instance().updateEnvironment(LLEnvironment::TRANSITION_FAST, true); -    } +    clearDirtyFlag(); +    LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_EDIT, legacysky); +    setEditSettings(legacysky); +    LLEnvironment::instance().updateEnvironment(LLEnvironment::TRANSITION_FAST, true);  }  //========================================================================= diff --git a/indra/newview/llfloaterfixedenvironment.h b/indra/newview/llfloaterfixedenvironment.h index b7991ceb01..3181d4cbda 100644 --- a/indra/newview/llfloaterfixedenvironment.h +++ b/indra/newview/llfloaterfixedenvironment.h @@ -140,6 +140,7 @@ protected:      virtual void            updateEditEnvironment()     override;      virtual void            doImportFromDisk()          override; +    void                    loadWaterSettingFromFile(const std::vector<std::string>& filenames);  private:  }; @@ -159,6 +160,7 @@ protected:      virtual void            updateEditEnvironment()     override;      virtual void            doImportFromDisk()          override; +    void                    loadSkySettingFromFile(const std::vector<std::string>& filenames);  private:  }; diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 38ced18edf..453c9f1138 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -3304,6 +3304,14 @@ void LLPanelLandEnvironment::refreshFromSource()  {      LLParcel *parcel = getParcel(); +    if (!LLEnvironment::instance().isExtendedEnvironmentEnabled()) +    { +        setNoEnvironmentSupport(true); +        setControlsEnabled(false); +        return; +    } +    setNoEnvironmentSupport(false); +      if (!parcel)      {          setNoSelection(true); @@ -3316,8 +3324,16 @@ void LLPanelLandEnvironment::refreshFromSource()      {          setCrossRegion(false); +        LLHandle<LLPanel> that_h = getHandle(); +          LLEnvironment::instance().requestParcel(parcel->getLocalID(), -            [this](S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envifo) { mLastParcelId = parcel_id; onEnvironmentReceived(parcel_id, envifo); }); +            [that_h](S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envifo)  +            {   +                LLPanelLandEnvironment *that = (LLPanelLandEnvironment*)that_h.get(); +                if (!that) return; +                that->mLastParcelId = parcel_id;  +                that->onEnvironmentReceived(parcel_id, envifo);  +            });      }      else      { diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 6aa35b40b6..96ca7c1ac4 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -3447,8 +3447,10 @@ void LLPanelRegionEnvironment::refreshFromEstate()  void LLPanelRegionEnvironment::refreshFromSource()  { +    LLHandle<LLPanel> that_h = getHandle(); +      LLEnvironment::instance().requestRegion( -        [this](S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envifo) {onEnvironmentReceived(parcel_id, envifo); }); +        [that_h](S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envifo) { _onEnvironmentReceived(that_h, parcel_id, envifo); });  }  void LLPanelRegionEnvironment::doApply() diff --git a/indra/newview/llpanelenvironment.cpp b/indra/newview/llpanelenvironment.cpp index 8d7ec48d63..ecffa34ab9 100644 --- a/indra/newview/llpanelenvironment.cpp +++ b/indra/newview/llpanelenvironment.cpp @@ -119,6 +119,7 @@ LLPanelEnvironmentInfo::LLPanelEnvironmentInfo():      mDirtyFlag(0),      mCrossRegion(false),      mNoSelection(false), +    mNoEnvironment(false),      mSettingsFloater(),      mEditFloater()  { @@ -330,7 +331,7 @@ bool LLPanelEnvironmentInfo::setControlsEnabled(bool enabled)      bool is_unavailable(false);      bool is_legacy = (mCurrentEnvironment) ? mCurrentEnvironment->mIsLegacy : true; -    if (!LLEnvironment::instance().isExtendedEnvironmentEnabled() && !isRegion()) +    if (mNoEnvironment || (!LLEnvironment::instance().isExtendedEnvironmentEnabled() && !isRegion()))      {          is_unavailable = true;          getChild<LLTextBox>(TXT_DISABLED)->setText(getString(STR_LEGACY)); @@ -574,24 +575,26 @@ void LLPanelEnvironmentInfo::doApply()      if (getIsDirtyFlag(DIRTY_FLAG_MASK))      { +        LLHandle<LLPanel> that_h = getHandle(); +          S32 rdo_selection = getChild<LLRadioGroup>(RDG_ENVIRONMENT_SELECT)->getSelectedIndex();          if (rdo_selection == 0)          {              LLEnvironment::instance().resetParcel(parcel_id, -                [this](S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envifo) {onEnvironmentReceived(parcel_id, envifo); }); +                [that_h](S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envifo) { _onEnvironmentReceived(that_h, parcel_id, envifo); });          }          else if (rdo_selection == 1)          {              LLEnvironment::instance().updateParcel(parcel_id,                  mCurrentEnvironment->mDayCycle->getAssetId(), mCurrentEnvironment->mDayLength.value(), mCurrentEnvironment->mDayOffset.value(), -                [this](S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envifo) {onEnvironmentReceived(parcel_id, envifo); }); +                [that_h](S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envifo) { _onEnvironmentReceived(that_h, parcel_id, envifo); });          }          else          {              LLEnvironment::instance().updateParcel(parcel_id,                  mCurrentEnvironment->mDayCycle, mCurrentEnvironment->mDayLength.value(), mCurrentEnvironment->mDayOffset.value(),  -                [this](S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envifo) {onEnvironmentReceived(parcel_id, envifo); }); +                [that_h](S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envifo) { _onEnvironmentReceived(that_h, parcel_id, envifo); });          }          // Todo: save altitudes once LLEnvironment::setRegionAltitudes() gets implemented @@ -695,3 +698,11 @@ void LLPanelEnvironmentInfo::onEnvironmentReceived(S32 parcel_id, LLEnvironment:      clearDirtyFlag(DIRTY_FLAG_MASK);      refresh();  } + +void LLPanelEnvironmentInfo::_onEnvironmentReceived(LLHandle<LLPanel> that_h, S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envifo) +{ +    LLPanelEnvironmentInfo *that = (LLPanelEnvironmentInfo *)that_h.get(); +    if (!that) +        return; +    that->onEnvironmentReceived(parcel_id, envifo); +} diff --git a/indra/newview/llpanelenvironment.h b/indra/newview/llpanelenvironment.h index fdf0fe46a7..a632acfd03 100644 --- a/indra/newview/llpanelenvironment.h +++ b/indra/newview/llpanelenvironment.h @@ -121,6 +121,7 @@ protected:      void                        onEditCommitted(LLSettingsDay::ptr_t newday);      void                        onPickerAssetDownloaded(LLSettingsBase::ptr_t settings);      void                        onEnvironmentReceived(S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envifo); +    static void                 _onEnvironmentReceived(LLHandle<LLPanel> that_h, S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envifo);      virtual void                refreshFromSource() = 0; @@ -132,6 +133,7 @@ protected:      void                        setCrossRegion(bool val) { mCrossRegion = val; }      void                        setNoSelection(bool val) { mNoSelection = val; } +    void                        setNoEnvironmentSupport(bool val) { mNoEnvironment = val; }      LLEnvironment::EnvironmentInfo::ptr_t   mCurrentEnvironment; @@ -165,6 +167,6 @@ private:      S32                             mDirtyFlag;      bool                            mCrossRegion;      bool                            mNoSelection; - +    bool                            mNoEnvironment;  };  #endif // LL_LLPANELEXPERIENCES_H diff --git a/indra/newview/llsettingspicker.cpp b/indra/newview/llsettingspicker.cpp index 06d54825e7..f72c7c5dcf 100644 --- a/indra/newview/llsettingspicker.cpp +++ b/indra/newview/llsettingspicker.cpp @@ -302,6 +302,37 @@ void LLFloaterSettingsPicker::onButtonSelect()      closeFloater();  } +BOOL LLFloaterSettingsPicker::handleDoubleClick(S32 x, S32 y, MASK mask) +{ +    if (mSettingAssetID.notNull() +        && mInventoryPanel) +    { +        LLUUID item_id = findItemID(mSettingAssetID, FALSE); +        S32 inventory_x = x - mInventoryPanel->getRect().mLeft; +        S32 inventory_y = y - mInventoryPanel->getRect().mBottom; +        if (item_id.notNull() +            && mInventoryPanel->parentPointInView(inventory_x, inventory_y)) +        { +            // make sure item (not folder) is selected +            LLFolderViewItem* item_viewp = mInventoryPanel->getItemByID(item_id); +            if (item_viewp && item_viewp->isSelected()) +            { +                LLRect target_rect; +                item_viewp->localRectToOtherView(item_viewp->getLocalRect(), &target_rect, this); +                if (target_rect.pointInRect(x, y)) +                { +                    // Quick-apply +                    if (mCommitSignal) +                        (*mCommitSignal)(this, LLSD(mSettingAssetID)); +                    closeFloater(); +                    return TRUE; +                } +            } +        } +    } +    return LLFloater::handleDoubleClick(x, y, mask); +} +  //=========================================================================  void LLFloaterSettingsPicker::setActive(bool active)  { diff --git a/indra/newview/llsettingspicker.h b/indra/newview/llsettingspicker.h index a58fa38ed0..7fcc7fd4a7 100644 --- a/indra/newview/llsettingspicker.h +++ b/indra/newview/llsettingspicker.h @@ -96,6 +96,7 @@ private:      void                    onSelectionChange(const itemlist_t &items, bool user_action);      void                    onButtonCancel();      void                    onButtonSelect(); +    virtual BOOL            handleDoubleClick(S32 x, S32 y, MASK mask) override;      LLHandle<LLView>        mOwnerHandle; diff --git a/indra/newview/skins/default/xui/en/panel_region_environment.xml b/indra/newview/skins/default/xui/en/panel_region_environment.xml index 3ce0d7a2ef..cfb142093a 100644 --- a/indra/newview/skins/default/xui/en/panel_region_environment.xml +++ b/indra/newview/skins/default/xui/en/panel_region_environment.xml @@ -21,6 +21,7 @@              height="367"              follows="all"              layout="topleft" +            animate="false"              orientation="vertical">          <layout_panel                  auto_resize="true" @@ -50,6 +51,7 @@                      bottom="-1"                      layout="topleft"                      follows="all" +                    animate="false"                      orientation="horizontal">                  <layout_panel                           background_visible="true" | 
