diff options
-rw-r--r-- | indra/newview/llenvironment.cpp | 44 | ||||
-rw-r--r-- | indra/newview/llenvironment.h | 20 | ||||
-rw-r--r-- | indra/newview/llfloaterland.cpp | 36 | ||||
-rw-r--r-- | indra/newview/llfloaterregioninfo.cpp | 9 | ||||
-rw-r--r-- | indra/newview/llpanelenvironment.cpp | 62 | ||||
-rw-r--r-- | indra/newview/llpanelenvironment.h | 9 |
6 files changed, 91 insertions, 89 deletions
diff --git a/indra/newview/llenvironment.cpp b/indra/newview/llenvironment.cpp index 66063564c0..98fe593aeb 100644 --- a/indra/newview/llenvironment.cpp +++ b/indra/newview/llenvironment.cpp @@ -1025,7 +1025,7 @@ void LLEnvironment::requestRegion(environment_apply_fn cb) requestParcel(INVALID_PARCEL_ID, cb); } -void LLEnvironment::updateRegion(const LLSettingsDay::ptr_t &pday, S32 day_length, S32 day_offset) +void LLEnvironment::updateRegion(const LLSettingsDay::ptr_t &pday, S32 day_length, S32 day_offset, environment_apply_fn cb) { if (!isExtendedEnvironmentEnabled()) { @@ -1033,10 +1033,10 @@ void LLEnvironment::updateRegion(const LLSettingsDay::ptr_t &pday, S32 day_lengt return; } - updateParcel(INVALID_PARCEL_ID, pday, day_length, day_offset); + updateParcel(INVALID_PARCEL_ID, pday, day_length, day_offset, cb); } -void LLEnvironment::updateRegion(const LLUUID &asset_id, S32 day_length, S32 day_offset) +void LLEnvironment::updateRegion(const LLUUID &asset_id, S32 day_length, S32 day_offset, environment_apply_fn cb) { if (!isExtendedEnvironmentEnabled()) { @@ -1045,23 +1045,23 @@ void LLEnvironment::updateRegion(const LLUUID &asset_id, S32 day_length, S32 day return; } - updateParcel(INVALID_PARCEL_ID, asset_id, day_length, day_offset); + updateParcel(INVALID_PARCEL_ID, asset_id, day_length, day_offset, cb); } -void LLEnvironment::updateRegion(const LLSettingsSky::ptr_t &psky, S32 day_length, S32 day_offset) +void LLEnvironment::updateRegion(const LLSettingsSky::ptr_t &psky, S32 day_length, S32 day_offset, environment_apply_fn cb) { - updateParcel(INVALID_PARCEL_ID, psky, day_length, day_offset); + updateParcel(INVALID_PARCEL_ID, psky, day_length, day_offset, cb); } -void LLEnvironment::updateRegion(const LLSettingsWater::ptr_t &pwater, S32 day_length, S32 day_offset) +void LLEnvironment::updateRegion(const LLSettingsWater::ptr_t &pwater, S32 day_length, S32 day_offset, environment_apply_fn cb) { - updateParcel(INVALID_PARCEL_ID, pwater, day_length, day_offset); + updateParcel(INVALID_PARCEL_ID, pwater, day_length, day_offset, cb); } -void LLEnvironment::resetRegion() +void LLEnvironment::resetRegion(environment_apply_fn cb) { - resetParcel(INVALID_PARCEL_ID); + resetParcel(INVALID_PARCEL_ID, cb); } void LLEnvironment::requestParcel(S32 parcel_id, environment_apply_fn cb) @@ -1076,12 +1076,12 @@ void LLEnvironment::requestParcel(S32 parcel_id, environment_apply_fn cb) [this, parcel_id, cb]() { coroRequestEnvironment(parcel_id, cb); }); } -void LLEnvironment::updateParcel(S32 parcel_id, const LLUUID &asset_id, S32 day_length, S32 day_offset) +void LLEnvironment::updateParcel(S32 parcel_id, const LLUUID &asset_id, S32 day_length, S32 day_offset, environment_apply_fn cb) { std::string coroname = LLCoros::instance().launch("LLEnvironment::coroUpdateEnvironment", - [this, parcel_id, asset_id, day_length, day_offset]() { coroUpdateEnvironment(parcel_id, NO_TRACK, - LLSettingsDay::ptr_t(), asset_id, day_length, day_offset, environment_apply_fn()); }); + [this, parcel_id, asset_id, day_length, day_offset, cb]() { coroUpdateEnvironment(parcel_id, NO_TRACK, + LLSettingsDay::ptr_t(), asset_id, day_length, day_offset, cb); }); } void LLEnvironment::onUpdateParcelAssetLoaded(LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, S32 parcel_id, S32 day_length, S32 day_offset) @@ -1112,33 +1112,33 @@ void LLEnvironment::onUpdateParcelAssetLoaded(LLUUID asset_id, LLSettingsBase::p updateParcel(parcel_id, pday, day_length, day_offset); } -void LLEnvironment::updateParcel(S32 parcel_id, const LLSettingsSky::ptr_t &psky, S32 day_length, S32 day_offset) +void LLEnvironment::updateParcel(S32 parcel_id, const LLSettingsSky::ptr_t &psky, S32 day_length, S32 day_offset, environment_apply_fn cb) { LLSettingsDay::ptr_t pday = createDayCycleFromEnvironment((parcel_id == INVALID_PARCEL_ID) ? ENV_REGION : ENV_PARCEL, psky); - updateParcel(parcel_id, pday, day_length, day_offset); + updateParcel(parcel_id, pday, day_length, day_offset, cb); } -void LLEnvironment::updateParcel(S32 parcel_id, const LLSettingsWater::ptr_t &pwater, S32 day_length, S32 day_offset) +void LLEnvironment::updateParcel(S32 parcel_id, const LLSettingsWater::ptr_t &pwater, S32 day_length, S32 day_offset, environment_apply_fn cb) { LLSettingsDay::ptr_t pday = createDayCycleFromEnvironment((parcel_id == INVALID_PARCEL_ID) ? ENV_REGION : ENV_PARCEL, pwater); - updateParcel(parcel_id, pday, day_length, day_offset); + updateParcel(parcel_id, pday, day_length, day_offset, cb); } -void LLEnvironment::updateParcel(S32 parcel_id, const LLSettingsDay::ptr_t &pday, S32 day_length, S32 day_offset) +void LLEnvironment::updateParcel(S32 parcel_id, const LLSettingsDay::ptr_t &pday, S32 day_length, S32 day_offset, environment_apply_fn cb) { std::string coroname = LLCoros::instance().launch("LLEnvironment::coroUpdateEnvironment", - [this, parcel_id, pday, day_length, day_offset]() { coroUpdateEnvironment(parcel_id, NO_TRACK, - pday, LLUUID::null, day_length, day_offset, environment_apply_fn()); }); + [this, parcel_id, pday, day_length, day_offset, cb]() { coroUpdateEnvironment(parcel_id, NO_TRACK, + pday, LLUUID::null, day_length, day_offset, cb); }); } -void LLEnvironment::resetParcel(S32 parcel_id) +void LLEnvironment::resetParcel(S32 parcel_id, environment_apply_fn cb) { std::string coroname = LLCoros::instance().launch("LLEnvironment::coroResetEnvironment", - [this, parcel_id]() { coroResetEnvironment(parcel_id, NO_TRACK, environment_apply_fn()); }); + [this, parcel_id, cb]() { coroResetEnvironment(parcel_id, NO_TRACK, cb); }); } void LLEnvironment::coroRequestEnvironment(S32 parcel_id, LLEnvironment::environment_apply_fn apply) diff --git a/indra/newview/llenvironment.h b/indra/newview/llenvironment.h index 5acec97bd9..eadbb3e941 100644 --- a/indra/newview/llenvironment.h +++ b/indra/newview/llenvironment.h @@ -232,17 +232,17 @@ public: void onLegacyRegionSettings(LLSD data); void requestRegion(environment_apply_fn cb = environment_apply_fn()); - void updateRegion(const LLUUID &asset_id, S32 day_length, S32 day_offset); - void updateRegion(const LLSettingsDay::ptr_t &pday, S32 day_length, S32 day_offset); - void updateRegion(const LLSettingsSky::ptr_t &psky, S32 day_length, S32 day_offset); - void updateRegion(const LLSettingsWater::ptr_t &pwater, S32 day_length, S32 day_offset); - void resetRegion(); + void updateRegion(const LLUUID &asset_id, S32 day_length, S32 day_offset, environment_apply_fn cb = environment_apply_fn()); + void updateRegion(const LLSettingsDay::ptr_t &pday, S32 day_length, S32 day_offset, environment_apply_fn cb = environment_apply_fn()); + void updateRegion(const LLSettingsSky::ptr_t &psky, S32 day_length, S32 day_offset, environment_apply_fn cb = environment_apply_fn()); + void updateRegion(const LLSettingsWater::ptr_t &pwater, S32 day_length, S32 day_offset, environment_apply_fn cb = environment_apply_fn()); + void resetRegion(environment_apply_fn cb = environment_apply_fn()); void requestParcel(S32 parcel_id, environment_apply_fn cb = environment_apply_fn()); - void updateParcel(S32 parcel_id, const LLUUID &asset_id, S32 day_length, S32 day_offset); - void updateParcel(S32 parcel_id, const LLSettingsDay::ptr_t &pday, S32 day_length, S32 day_offset); - void updateParcel(S32 parcel_id, const LLSettingsSky::ptr_t &psky, S32 day_length, S32 day_offset); - void updateParcel(S32 parcel_id, const LLSettingsWater::ptr_t &pwater, S32 day_length, S32 day_offset); - void resetParcel(S32 parcel_id); + void updateParcel(S32 parcel_id, const LLUUID &asset_id, S32 day_length, S32 day_offset, environment_apply_fn cb = environment_apply_fn()); + void updateParcel(S32 parcel_id, const LLSettingsDay::ptr_t &pday, S32 day_length, S32 day_offset, environment_apply_fn cb = environment_apply_fn()); + void updateParcel(S32 parcel_id, const LLSettingsSky::ptr_t &psky, S32 day_length, S32 day_offset, environment_apply_fn cb = environment_apply_fn()); + void updateParcel(S32 parcel_id, const LLSettingsWater::ptr_t &pwater, S32 day_length, S32 day_offset, environment_apply_fn cb = environment_apply_fn()); + void resetParcel(S32 parcel_id, environment_apply_fn cb = environment_apply_fn()); void selectAgentEnvironment(); diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 5fcd3df7a8..57d34c5c5a 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -157,9 +157,6 @@ public: virtual bool canEdit(); protected: - virtual void doApply(); - - LLSafeHandle<LLParcelSelection>& mParcel; }; @@ -3306,36 +3303,3 @@ bool LLPanelLandEnvironment::canEdit() return false; return LLEnvironment::instance().canAgentUpdateParcelEnvironment(parcel); } - -void LLPanelLandEnvironment::doApply() -{ -// LLParcel* parcel = mParcel->getParcel(); -// if (!parcel) -// { -// LL_WARNS("PARCEL") << "Could not get parcel." << LL_ENDL; -// return; -// } -// S32 parcel_id = parcel->getLocalID(); -// -// if (mRegionSettingsRadioGroup->getSelectedIndex() == 0) -// { -// LLEnvironment::instance().resetParcel(parcel_id); -// } -// else -// { -// LLSettingsDay::Seconds daylength; -// F32Hours dayoffset_h; -// -// daylength = F32Hours(mDayLengthSlider->getValueF32()); -// dayoffset_h = F32Hours(mDayOffsetSlider->getValueF32()); -// -// if (dayoffset_h.value() < 0) -// { -// dayoffset_h = F32Hours(24.0f) + dayoffset_h; -// } -// -// LLSettingsDay::Seconds dayoffset_s = dayoffset_h; -// -// LLEnvironment::instance().updateParcel(parcel_id, mEditingDayCycle, daylength.value(), dayoffset_s.value()); -// } -} diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index eb42ede8a8..cbb99f1854 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -187,13 +187,13 @@ public: virtual LLParcel * getParcel() override { return nullptr; } virtual bool canEdit() override { return LLEnvironment::instance().canAgentUpdateRegionEnvironment(); } - bool refreshFromRegion(LLViewerRegion* region); - void refreshFromEstate(); + bool refreshFromRegion(LLViewerRegion* region); + void refreshFromEstate(); - virtual BOOL postBuild() override; + virtual BOOL postBuild() override; protected: - virtual void doApply(); + virtual void doApply() override; virtual void doEditCommited(LLSettingsDay::ptr_t &newday); BOOL sendUpdate(); @@ -3418,6 +3418,7 @@ void LLPanelRegionEnvironment::refreshFromEstate() void LLPanelRegionEnvironment::doApply() { + LLPanelEnvironmentInfo::doApply(); // if (mRegionSettingsRadioGroup->getSelectedIndex() == 0) // { // LLEnvironment::instance().resetRegion(); diff --git a/indra/newview/llpanelenvironment.cpp b/indra/newview/llpanelenvironment.cpp index a2788124e7..d323e5f43b 100644 --- a/indra/newview/llpanelenvironment.cpp +++ b/indra/newview/llpanelenvironment.cpp @@ -221,6 +221,8 @@ LLFloaterEditExtDayCycle * LLPanelEnvironmentInfo::getEditFloater() void LLPanelEnvironmentInfo::setControlsEnabled(bool enabled) { + S32 rdo_selection = getChild<LLRadioGroup>(RDG_ENVIRONMENT_SELECT)->getSelectedIndex(); + getChild<LLUICtrl>(RDG_ENVIRONMENT_SELECT)->setEnabled(enabled); getChild<LLUICtrl>(RDO_USEDEFAULT)->setEnabled(enabled); getChild<LLUICtrl>(RDO_USEINV)->setEnabled(enabled); @@ -228,8 +230,8 @@ void LLPanelEnvironmentInfo::setControlsEnabled(bool enabled) getChild<LLUICtrl>(EDT_INVNAME)->setEnabled(FALSE); getChild<LLUICtrl>(BTN_SELECTINV)->setEnabled(enabled); getChild<LLUICtrl>(BTN_EDIT)->setEnabled(enabled); - getChild<LLUICtrl>(SLD_DAYLENGTH)->setEnabled(enabled); - getChild<LLUICtrl>(SLD_DAYOFFSET)->setEnabled(enabled); + getChild<LLUICtrl>(SLD_DAYLENGTH)->setEnabled(enabled && (rdo_selection != 0)); + getChild<LLUICtrl>(SLD_DAYOFFSET)->setEnabled(enabled && (rdo_selection != 0)); getChild<LLUICtrl>(CHK_ALLOWOVERRIDE)->setEnabled(enabled && (mCurrentParcelId == INVALID_PARCEL_ID)); getChild<LLUICtrl>(BTN_APPLY)->setEnabled(enabled && (mDirtyFlag != 0)); getChild<LLUICtrl>(BTN_CANCEL)->setEnabled(enabled && (mDirtyFlag != 0)); @@ -259,19 +261,23 @@ void LLPanelEnvironmentInfo::setDirtyFlag(S32 flag) getChildView(BTN_CANCEL)->setEnabled((mDirtyFlag != 0) && can_edit); } +void LLPanelEnvironmentInfo::clearDirtyFlag(S32 flag) +{ + bool can_edit = canEdit(); + mDirtyFlag &= ~flag; + getChildView(BTN_APPLY)->setEnabled((mDirtyFlag != 0) && can_edit); + getChildView(BTN_CANCEL)->setEnabled((mDirtyFlag != 0) && can_edit); +} + void LLPanelEnvironmentInfo::onSwitchDefaultSelection() { + bool can_edit = canEdit(); setDirtyFlag(DIRTY_FLAG_DAYCYCLE); -// bool use_defaults = mRegionSettingsRadioGroup->getSelectedIndex() == 0; -// -// getChild<LLView>("edit_btn")->setEnabled(!use_defaults); -// -// mDayLengthSlider->setEnabled(!use_defaults); -// mDayOffsetSlider->setEnabled(!use_defaults); -// -// setDirty(true); -} + S32 rdo_selection = getChild<LLRadioGroup>(RDG_ENVIRONMENT_SELECT)->getSelectedIndex(); + getChild<LLUICtrl>(SLD_DAYLENGTH)->setEnabled(can_edit && (rdo_selection != 0)); + getChild<LLUICtrl>(SLD_DAYOFFSET)->setEnabled(can_edit && (rdo_selection != 0)); +} void LLPanelEnvironmentInfo::onSldDayLengthChanged(F32 value) { @@ -281,7 +287,6 @@ void LLPanelEnvironmentInfo::onSldDayLengthChanged(F32 value) setDirtyFlag(DIRTY_FLAG_DAYLENGTH); } - void LLPanelEnvironmentInfo::onSldDayOffsetChanged(F32 value) { F32Hours dayoffset(value); @@ -295,7 +300,7 @@ void LLPanelEnvironmentInfo::onSldDayOffsetChanged(F32 value) void LLPanelEnvironmentInfo::onBtnApply() { -// doApply(); + doApply(); } void LLPanelEnvironmentInfo::onBtnReset() @@ -323,6 +328,35 @@ void LLPanelEnvironmentInfo::onBtnSelect() } } + +void LLPanelEnvironmentInfo::doApply() +{ + if (getIsDirtyFlag(DIRTY_FLAG_MASK)) + { + S32 rdo_selection = getChild<LLRadioGroup>(RDG_ENVIRONMENT_SELECT)->getSelectedIndex(); + + if (rdo_selection == 0) + { + LLEnvironment::instance().resetParcel(mCurrentParcelId, + [this](S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envifo) {handleEnvironmentReceived(parcel_id, envifo); }); + } + else if (rdo_selection == 1) + { + LLEnvironment::instance().updateParcel(mCurrentParcelId, + mCurrentEnvironment->mDayCycle->getAssetId(), mCurrentEnvironment->mDayLength.value(), mCurrentEnvironment->mDayOffset.value(), + [this](S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envifo) {handleEnvironmentReceived(parcel_id, envifo); }); + } + else + { + LLEnvironment::instance().updateParcel(mCurrentParcelId, + mCurrentEnvironment->mDayCycle, mCurrentEnvironment->mDayLength.value(), mCurrentEnvironment->mDayOffset.value(), + [this](S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envifo) {handleEnvironmentReceived(parcel_id, envifo); }); + } + + } + setControlsEnabled(false); +} + void LLPanelEnvironmentInfo::onPickerCommited(LLUUID asset_id) { LLSettingsVOBase::getSettingsAsset(asset_id, [this](LLUUID, LLSettingsBase::ptr_t settings, S32 status, LLExtStat) { @@ -358,7 +392,7 @@ void LLPanelEnvironmentInfo::handleEnvironmentReceived(S32 parcel_id, LLEnvironm return; } mCurrentEnvironment = envifo; - setDirtyFlag(DIRTY_FLAG_DAYCYCLE); + clearDirtyFlag(DIRTY_FLAG_MASK); refresh(); } diff --git a/indra/newview/llpanelenvironment.h b/indra/newview/llpanelenvironment.h index 29c9c411ba..66224f8ba7 100644 --- a/indra/newview/llpanelenvironment.h +++ b/indra/newview/llpanelenvironment.h @@ -89,8 +89,10 @@ protected: void setControlsEnabled(bool enabled); void setApplyProgress(bool started); void setDirtyFlag(S32 flag); - bool getIsDirty() const { return (mDirtyFlag != 0); } - bool getIsDirtyFlag(S32 flag) const { return ((mDirtyFlag & flag) != 0); } + void clearDirtyFlag(S32 flag); + bool getIsDirty() const { return (mDirtyFlag != 0); } + bool getIsDirtyFlag(S32 flag) const { return ((mDirtyFlag & flag) != 0); } + S32 getDirtyFlag() const { return mDirtyFlag; } void onSwitchDefaultSelection(); void onSldDayLengthChanged(F32 value); @@ -100,10 +102,11 @@ protected: void onBtnEdit(); void onBtnSelect(); + virtual void doApply(); + void onPickerCommited(LLUUID asset_id); void onEditiCommited(LLSettingsDay::ptr_t newday); void onPickerAssetDownloaded(LLSettingsBase::ptr_t settings); - void handleEnvironmentReceived(S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envifo); virtual void doEditCommited(LLSettingsDay::ptr_t &newday); |