diff options
48 files changed, 981 insertions, 236 deletions
diff --git a/indra/llinventory/llsettingssky.cpp b/indra/llinventory/llsettingssky.cpp index cfd15814ed..0d789590fa 100644 --- a/indra/llinventory/llsettingssky.cpp +++ b/indra/llinventory/llsettingssky.cpp @@ -401,7 +401,10 @@ LLSettingsSky::LLSettingsSky(): void LLSettingsSky::replaceSettings(LLSD settings) { LLSettingsBase::replaceSettings(settings); - + mNextSunTextureId.setNull(); + mNextMoonTextureId.setNull(); + mNextCloudTextureId.setNull(); + mNextBloomTextureId.setNull(); } void LLSettingsSky::blend(const LLSettingsBase::ptr_t &end, F64 blendf) @@ -901,7 +904,7 @@ LLColor3 LLSettingsSky::getBlueDensity() const LLColor3 LLSettingsSky::getBlueHorizon() const { - if (mSettings.has(SETTING_LEGACY_HAZE) && mSettings[SETTING_LEGACY_HAZE].has(SETTING_BLUE_DENSITY)) + if (mSettings.has(SETTING_LEGACY_HAZE) && mSettings[SETTING_LEGACY_HAZE].has(SETTING_BLUE_HORIZON)) { return LLColor3(mSettings[SETTING_LEGACY_HAZE][SETTING_BLUE_HORIZON]); } diff --git a/indra/llinventory/llsettingswater.cpp b/indra/llinventory/llsettingswater.cpp index f0d63bf033..652e211ac4 100644 --- a/indra/llinventory/llsettingswater.cpp +++ b/indra/llinventory/llsettingswater.cpp @@ -185,10 +185,16 @@ void LLSettingsWater::blend(const LLSettingsBase::ptr_t &end, F64 blendf) } else { - LL_WARNS("SETTINGS") << "Cound not cast end settings to water. No blend performed." << LL_ENDL; + LL_WARNS("SETTINGS") << "Could not cast end settings to water. No blend performed." << LL_ENDL; } setBlendFactor(blendf); - mNextNormalMapID = other->getNormalMapID(); +} + +void LLSettingsWater::replaceSettings(LLSD settings) +{ + LLSettingsBase::replaceSettings(settings); + mNextNormalMapID.setNull(); + mNextTransparentTextureID.setNull(); } LLSettingsWater::validation_list_t LLSettingsWater::getValidationList() const diff --git a/indra/llinventory/llsettingswater.h b/indra/llinventory/llsettingswater.h index b33b082bbf..11d7150ba9 100644 --- a/indra/llinventory/llsettingswater.h +++ b/indra/llinventory/llsettingswater.h @@ -64,6 +64,8 @@ public: // Settings status virtual void blend(const LLSettingsBase::ptr_t &end, F64 blendf) SETTINGS_OVERRIDE; + virtual void replaceSettings(LLSD settings) SETTINGS_OVERRIDE; + static LLSD defaults(const LLSettingsBase::TrackPosition& position = 0.0f); //--------------------------------------------------------------------- diff --git a/indra/llui/llvirtualtrackball.cpp b/indra/llui/llvirtualtrackball.cpp index e73bba57bb..723643dd25 100644 --- a/indra/llui/llvirtualtrackball.cpp +++ b/indra/llui/llvirtualtrackball.cpp @@ -88,6 +88,7 @@ LLVirtualTrackball::LLVirtualTrackball(const LLVirtualTrackball::Params& p) btn_rt.rect(LLRect(centerX - axis_offset_lt, border_rect.mTop, centerX + axis_offset_rb, border_rect.mTop - btn_size)); btn_rt.click_callback.function(boost::bind(&LLVirtualTrackball::onRotateTopClick, this)); btn_rt.mouse_held_callback.function(boost::bind(&LLVirtualTrackball::onRotateTopClick, this)); + btn_rt.mouseenter_callback.function(boost::bind(&LLVirtualTrackball::onRotateTopMouseEnter, this)); mBtnRotateTop = LLUICtrlFactory::create<LLButton>(btn_rt); addChild(mBtnRotateTop); @@ -104,6 +105,7 @@ LLVirtualTrackball::LLVirtualTrackball(const LLVirtualTrackball::Params& p) btn_rr.rect(LLRect(border_rect.mRight - btn_size, centerY + axis_offset_lt, border_rect.mRight, centerY - axis_offset_rb)); btn_rr.click_callback.function(boost::bind(&LLVirtualTrackball::onRotateRightClick, this)); btn_rr.mouse_held_callback.function(boost::bind(&LLVirtualTrackball::onRotateRightClick, this)); + btn_rr.mouseenter_callback.function(boost::bind(&LLVirtualTrackball::onRotateRightMouseEnter, this)); mBtnRotateRight = LLUICtrlFactory::create<LLButton>(btn_rr); addChild(mBtnRotateRight); @@ -120,6 +122,7 @@ LLVirtualTrackball::LLVirtualTrackball(const LLVirtualTrackball::Params& p) btn_rb.rect(LLRect(centerX - axis_offset_lt, border_rect.mBottom + btn_size, centerX + axis_offset_rb, border_rect.mBottom)); btn_rb.click_callback.function(boost::bind(&LLVirtualTrackball::onRotateBottomClick, this)); btn_rb.mouse_held_callback.function(boost::bind(&LLVirtualTrackball::onRotateBottomClick, this)); + btn_rb.mouseenter_callback.function(boost::bind(&LLVirtualTrackball::onRotateBottomMouseEnter, this)); mBtnRotateBottom = LLUICtrlFactory::create<LLButton>(btn_rb); addChild(mBtnRotateBottom); @@ -136,6 +139,7 @@ LLVirtualTrackball::LLVirtualTrackball(const LLVirtualTrackball::Params& p) btn_rl.rect(LLRect(border_rect.mLeft, centerY + axis_offset_lt, border_rect.mLeft + btn_size, centerY - axis_offset_rb)); btn_rl.click_callback.function(boost::bind(&LLVirtualTrackball::onRotateLeftClick, this)); btn_rl.mouse_held_callback.function(boost::bind(&LLVirtualTrackball::onRotateLeftClick, this)); + btn_rl.mouseenter_callback.function(boost::bind(&LLVirtualTrackball::onRotateLeftMouseEnter, this)); mBtnRotateLeft = LLUICtrlFactory::create<LLButton>(btn_rl); addChild(mBtnRotateLeft); @@ -228,6 +232,13 @@ void LLVirtualTrackball::draw() gl_circle_2d(draw_point.mV[VX], draw_point.mV[VY], mImgSunFront->getWidth() / 2, 12, false); } + // hide the direction labels when disabled + BOOL enabled = isInEnabledChain(); + mLabelN->setVisible(enabled); + mLabelE->setVisible(enabled); + mLabelS->setVisible(enabled); + mLabelW->setVisible(enabled); + LLView::draw(); } @@ -283,6 +294,26 @@ void LLVirtualTrackball::onRotateRightClick() } } +void LLVirtualTrackball::onRotateTopMouseEnter() +{ + mBtnRotateTop->setHighlight(true); +} + +void LLVirtualTrackball::onRotateBottomMouseEnter() +{ + mBtnRotateBottom->setHighlight(true); +} + +void LLVirtualTrackball::onRotateLeftMouseEnter() +{ + mBtnRotateLeft->setHighlight(true); +} + +void LLVirtualTrackball::onRotateRightMouseEnter() +{ + mBtnRotateRight->setHighlight(true); +} + void LLVirtualTrackball::setValue(const LLSD& value) { if (value.isArray() && value.size() == 4) diff --git a/indra/llui/llvirtualtrackball.h b/indra/llui/llvirtualtrackball.h index 48ddb7f4d9..2d4b1ece17 100644 --- a/indra/llui/llvirtualtrackball.h +++ b/indra/llui/llvirtualtrackball.h @@ -130,6 +130,11 @@ private: void onRotateLeftClick(); void onRotateRightClick(); + void onRotateTopMouseEnter(); + void onRotateBottomMouseEnter(); + void onRotateLeftMouseEnter(); + void onRotateRightMouseEnter(); + S32 mPrevX; S32 mPrevY; diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index a36ba949b7..e80bb5f4a5 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -163,7 +163,6 @@ set(viewer_SOURCE_FILES lldebugview.cpp lldeferredsounds.cpp lldelayedgestureerror.cpp - lldensityctrl.cpp lldirpicker.cpp lldonotdisturbnotificationstorage.cpp lldndbutton.cpp @@ -785,7 +784,6 @@ set(viewer_HEADER_FILES lldebugview.h lldeferredsounds.h lldelayedgestureerror.h - lldensityctrl.h lldirpicker.h lldonotdisturbnotificationstorage.h lldndbutton.h diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunDiscV.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunDiscV.glsl index c75440cd05..5b4302e237 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/sunDiscV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/sunDiscV.glsl @@ -38,10 +38,11 @@ void main() { //transform vertex vec4 vert = vec4(position.xyz, 1.0); - vec4 pos = (modelview_matrix * vert); + vec4 pos = modelview_projection_matrix*vert; - gl_Position = modelview_projection_matrix*vec4(position.xyz, 1.0); + gl_Position = pos; calcAtmospherics(pos.xyz); + vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy; } diff --git a/indra/newview/app_settings/shaders/class1/windlight/sunDiscF.glsl b/indra/newview/app_settings/shaders/class1/windlight/sunDiscF.glsl index 0eb32b69b8..05251e7e96 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/sunDiscF.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/sunDiscF.glsl @@ -46,7 +46,7 @@ void main() vec4 sunA = texture2D(diffuseMap, vary_texcoord0.xy); vec4 sunB = texture2D(altDiffuseMap, vary_texcoord0.xy); vec4 c = mix(sunB, sunA, blend_factor); - c.rgb = pow(c.rgb, vec3(0.45f)); + c.rgb = pow(c.rgb, vec3(0.7f)); c.rgb = fullbrightAtmosTransport(c.rgb); c.rgb = fullbrightScaleSoftClip(c.rgb); frag_color = c; diff --git a/indra/newview/app_settings/shaders/class1/windlight/sunDiscV.glsl b/indra/newview/app_settings/shaders/class1/windlight/sunDiscV.glsl index 5a6e481b18..90acb5be9e 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/sunDiscV.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/sunDiscV.glsl @@ -38,9 +38,9 @@ void main() { //transform vertex vec4 vert = vec4(position.xyz, 1.0); - vec4 pos = (modelview_matrix * vert); + vec4 pos = modelview_projection_matrix*vert; - gl_Position = modelview_projection_matrix*vec4(position.xyz, 1.0); + gl_Position = pos; calcAtmospherics(pos.xyz); diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp index ad4df751fd..913a85affd 100644 --- a/indra/newview/lldrawpoolwater.cpp +++ b/indra/newview/lldrawpoolwater.cpp @@ -724,7 +724,11 @@ void LLDrawPoolWater::shade() sNeedsDistortionUpdate = TRUE; face->renderIndexed(); } - else if (gGLManager.mHasDepthClamp || deferred_render) + // MAINT-9006 using squash clip even for deferred keeps + // horizon consistent between ALM and non-ALM rendering + // I can't think of a reason we'd want to avoid it. - g + //else if (gGLManager.mHasDepthClamp || deferred_render) + else if (gGLManager.mHasDepthClamp) { face->renderIndexed(); } diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp index 3557f5a1ce..6b32c196dc 100644 --- a/indra/newview/lldrawpoolwlsky.cpp +++ b/indra/newview/lldrawpoolwlsky.cpp @@ -572,7 +572,8 @@ void LLDrawPoolWLSky::render(S32 pass) { gGL.pushMatrix(); - gGL.translatef(origin.mV[0], origin.mV[1], origin.mV[2]); + // MAINT-9006 keep sun position consistent between ALM and non-ALM rendering + //gGL.translatef(origin.mV[0], origin.mV[1], origin.mV[2]); // *NOTE: have to bind a texture here since register combiners blending in // renderStars() requires something to be bound and we might as well only diff --git a/indra/newview/llfloatereditextdaycycle.cpp b/indra/newview/llfloatereditextdaycycle.cpp index dd224474fc..38f90a327d 100644 --- a/indra/newview/llfloatereditextdaycycle.cpp +++ b/indra/newview/llfloatereditextdaycycle.cpp @@ -137,7 +137,8 @@ LLFloaterEditExtDayCycle::LLFloaterEditExtDayCycle(const LLSD &key) : mWaterBlender(), mScratchSky(), mScratchWater(), - mIsPlaying(false) + mIsPlaying(false), + mIsDirty(false) { mCommitCallbackRegistrar.add(EVNT_DAYTRACK, [this](LLUICtrl *ctrl, const LLSD &data) { onTrackSelectionCallback(data); }); @@ -175,7 +176,7 @@ BOOL LLFloaterEditExtDayCycle::postBuild() mFlyoutControl = new LLFlyoutComboBtnCtrl(this, BTN_SAVE, BTN_FLYOUT, XML_FLYOUTMENU_FILE); mFlyoutControl->setAction([this](LLUICtrl *ctrl, const LLSD &data) { onButtonApply(ctrl, data); }); - getChild<LLButton>(BTN_CANCEL, true)->setCommitCallback([this](LLUICtrl *ctrl, const LLSD &data) { onBtnCancel(); }); + getChild<LLButton>(BTN_CANCEL, true)->setCommitCallback([this](LLUICtrl *ctrl, const LLSD &data) { onClickCloseBtn(); }); mTimeSlider->setCommitCallback([this](LLUICtrl *ctrl, const LLSD &data) { onTimeSliderMoved(); }); mAddFrameButton->setCommitCallback([this](LLUICtrl *ctrl, const LLSD &data) { onAddTrack(); }); mDeleteFrameButton->setCommitCallback([this](LLUICtrl *ctrl, const LLSD &data) { onRemoveTrack(); }); @@ -189,6 +190,26 @@ BOOL LLFloaterEditExtDayCycle::postBuild() mTimeSlider->addSlider(0); + LLTabContainer* tab_container = mSkyTabLayoutContainer->getChild<LLTabContainer>("sky_tabs"); + S32 tab_count = tab_container->getTabCount(); + + for (S32 idx = 0; idx < tab_count; ++idx) + { + LLSettingsEditPanel *panel = static_cast<LLSettingsEditPanel *>(tab_container->getPanelByIndex(idx)); + if (panel) + panel->setOnDirtyFlagChanged([this](LLPanel *, bool val) { onPanelDirtyFlagChanged(val); }); + } + + tab_container = mWaterTabLayoutContainer->getChild<LLTabContainer>("water_tabs"); + tab_count = tab_container->getTabCount(); + + for (S32 idx = 0; idx < tab_count; ++idx) + { + LLSettingsEditPanel *panel = static_cast<LLSettingsEditPanel *>(tab_container->getPanelByIndex(idx)); + if (panel) + panel->setOnDirtyFlagChanged([this](LLPanel *, bool val) { onPanelDirtyFlagChanged(val); }); + } + //getChild<LLButton>("sky1_track", true)->setToggleState(true); return TRUE; @@ -312,12 +333,12 @@ void LLFloaterEditExtDayCycle::onClose(bool app_quitting) doCloseInventoryFloater(app_quitting); // there's no point to change environment if we're quitting // or if we already restored environment - if (!app_quitting && LLEnvironment::instance().getSelectedEnvironment() == LLEnvironment::ENV_EDIT) + stopPlay(); + if (!app_quitting) { - LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL); + LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL, LLEnvironment::TRANSITION_FAST); LLEnvironment::instance().clearEnvironment(LLEnvironment::ENV_EDIT); } - stopPlay(); } void LLFloaterEditExtDayCycle::onFocusReceived() @@ -355,7 +376,7 @@ void LLFloaterEditExtDayCycle::refresh() mFlyoutControl->setMenuItemVisible(ACTION_APPLY_PARCEL, show_apply); mFlyoutControl->setMenuItemVisible(ACTION_APPLY_REGION, show_apply); - mFlyoutControl->setMenuItemEnabled(ACTION_COMMIT, show_commit); + mFlyoutControl->setMenuItemEnabled(ACTION_COMMIT, show_commit && !mCommitSignal.empty()); mFlyoutControl->setMenuItemEnabled(ACTION_SAVE, is_inventory_avail); mFlyoutControl->setMenuItemEnabled(ACTION_SAVEAS, is_inventory_avail); mFlyoutControl->setMenuItemEnabled(ACTION_APPLY_LOCAL, true); @@ -445,14 +466,18 @@ void LLFloaterEditExtDayCycle::onButtonApply(LLUICtrl *ctrl, const LLSD &data) } } -void LLFloaterEditExtDayCycle::onBtnCancel() + +void LLFloaterEditExtDayCycle::onClickCloseBtn(bool app_quitting /*= false*/) { - closeFloater(); // will restore env + if (!app_quitting) + checkAndConfirmSettingsLoss([this](){ closeFloater(); }); + else + closeFloater(); } void LLFloaterEditExtDayCycle::onButtonImport() { - doImportFromDisk(); + checkAndConfirmSettingsLoss([this]() { doImportFromDisk(); }); } void LLFloaterEditExtDayCycle::onButtonLoadFrame() @@ -616,11 +641,6 @@ void LLFloaterEditExtDayCycle::onFrameSliderCallback(const LLSD &data) } } } - - mTimeSlider->setCurSliderValue(sliderpos); - - updateTabs(); - LLEnvironment::instance().updateEnvironment(LLEnvironment::TRANSITION_INSTANT); } void LLFloaterEditExtDayCycle::onFrameSliderDoubleClick(S32 x, S32 y, MASK mask) @@ -647,6 +667,11 @@ void LLFloaterEditExtDayCycle::onFrameSliderMouseDown(S32 x, S32 y, MASK mask) mFramesSlider->resetCurSlider(); } } + + mTimeSlider->setCurSliderValue(sliderpos); + + updateTabs(); + LLEnvironment::instance().updateEnvironment(LLEnvironment::TRANSITION_INSTANT); } void LLFloaterEditExtDayCycle::onFrameSliderMouseUp(S32 x, S32 y, MASK mask) @@ -657,6 +682,35 @@ void LLFloaterEditExtDayCycle::onFrameSliderMouseUp(S32 x, S32 y, MASK mask) selectFrame(sliderpos, LLSettingsDay::DEFAULT_FRAME_SLOP_FACTOR); } + +void LLFloaterEditExtDayCycle::onPanelDirtyFlagChanged(bool value) +{ + if (value) + setDirtyFlag(); +} + +void LLFloaterEditExtDayCycle::checkAndConfirmSettingsLoss(on_confirm_fn cb) +{ + if (isDirty()) + { + LLSD args(LLSDMap("TYPE", mEditDay->getSettingsType()) + ("NAME", mEditDay->getName())); + + // create and show confirmation textbox + LLNotificationsUtil::add("SettingsConfirmLoss", args, LLSD(), + [this, cb](const LLSD¬if, const LLSD&resp) + { + S32 opt = LLNotificationsUtil::getSelectedOption(notif, resp); + if (opt == 0) + cb(); + }); + } + else if (cb) + { + cb(); + } +} + void LLFloaterEditExtDayCycle::onTimeSliderMoved() { selectFrame(mTimeSlider->getCurSliderValue(), LLSettingsDay::DEFAULT_FRAME_SLOP_FACTOR); @@ -1176,6 +1230,7 @@ void LLFloaterEditExtDayCycle::onInventoryCreated(LLUUID asset_id, LLUUID invent return; } + clearDirtyFlag(); setFocus(TRUE); // Call back the focus... loadInventoryItem(inventory_id); } @@ -1184,6 +1239,7 @@ void LLFloaterEditExtDayCycle::onInventoryUpdated(LLUUID asset_id, LLUUID invent { LL_WARNS("ENVDAYEDIT") << "Inventory item " << inventory_id << " has been updated with asset " << asset_id << " results are:" << results << LL_ENDL; + clearDirtyFlag(); if (inventory_id != mInventoryId) { loadInventoryItem(inventory_id); @@ -1209,6 +1265,7 @@ void LLFloaterEditExtDayCycle::doImportFromDisk() } mCurrentTrack = 1; + setDirtyFlag(); setEditDayCycle(legacyday); } } @@ -1285,6 +1342,33 @@ void LLFloaterEditExtDayCycle::onIdlePlay(void* user_data) } + +void LLFloaterEditExtDayCycle::clearDirtyFlag() +{ + mIsDirty = false; + + LLTabContainer* tab_container = mSkyTabLayoutContainer->getChild<LLTabContainer>("sky_tabs"); + S32 tab_count = tab_container->getTabCount(); + + for (S32 idx = 0; idx < tab_count; ++idx) + { + LLSettingsEditPanel *panel = static_cast<LLSettingsEditPanel *>(tab_container->getPanelByIndex(idx)); + if (panel) + panel->clearIsDirty(); + } + + tab_container = mWaterTabLayoutContainer->getChild<LLTabContainer>("water_tabs"); + tab_count = tab_container->getTabCount(); + + for (S32 idx = 0; idx < tab_count; ++idx) + { + LLSettingsEditPanel *panel = static_cast<LLSettingsEditPanel *>(tab_container->getPanelByIndex(idx)); + if (panel) + panel->clearIsDirty(); + } + +} + void LLFloaterEditExtDayCycle::doOpenInventoryFloater(LLSettingsType::type_e type, LLUUID currasset) { // LLUI::sWindow->setCursor(UI_CURSOR_WAIT); diff --git a/indra/newview/llfloatereditextdaycycle.h b/indra/newview/llfloatereditextdaycycle.h index 7d0489f0bc..ba269dd538 100644 --- a/indra/newview/llfloatereditextdaycycle.h +++ b/indra/newview/llfloatereditextdaycycle.h @@ -91,13 +91,15 @@ public: BOOL handleKeyUp(KEY key, MASK mask, BOOL called_from_parent) override; -private: + BOOL isDirty() const override { return getIsDirty(); } +private: + typedef std::function<void()> on_confirm_fn; F32 getCurrentFrame() const; // flyout response/click void onButtonApply(LLUICtrl *ctrl, const LLSD &data); - void onBtnCancel(); + virtual void onClickCloseBtn(bool app_quitting = false) override; void onButtonImport(); void onButtonLoadFrame(); void onAddTrack(); @@ -113,6 +115,10 @@ private: void onFrameSliderMouseDown(S32 x, S32 y, MASK mask); void onFrameSliderMouseUp(S32 x, S32 y, MASK mask); + void onPanelDirtyFlagChanged(bool); + + void checkAndConfirmSettingsLoss(on_confirm_fn cb); + void selectTrack(U32 track_index, bool force = false); void selectFrame(F32 frame, F32 slop_factor); void clearTabs(); @@ -158,6 +164,10 @@ private: void stopPlay(); static void onIdlePlay(void *); + bool getIsDirty() const { return mIsDirty; } + void setDirtyFlag() { mIsDirty = true; } + virtual void clearDirtyFlag(); + LLSettingsDay::ptr_t mEditDay; // edited copy LLSettingsDay::Seconds mDayLength; U32 mCurrentTrack; @@ -190,6 +200,7 @@ private: LLFrameTimer mPlayTimer; F32 mPlayStartFrame; // an env frame bool mIsPlaying; + bool mIsDirty; edit_commit_signal_t mCommitSignal; diff --git a/indra/newview/llfloaterfixedenvironment.cpp b/indra/newview/llfloaterfixedenvironment.cpp index 0b4de90703..ece4898935 100644 --- a/indra/newview/llfloaterfixedenvironment.cpp +++ b/indra/newview/llfloaterfixedenvironment.cpp @@ -69,6 +69,7 @@ namespace const std::string ACTION_SAVE("save_settings"); const std::string ACTION_SAVEAS("save_as_new_settings"); + const std::string ACTION_COMMIT("commit_changes"); const std::string ACTION_APPLY_LOCAL("apply_local"); const std::string ACTION_APPLY_PARCEL("apply_parcel"); const std::string ACTION_APPLY_REGION("apply_region"); @@ -85,7 +86,8 @@ LLFloaterFixedEnvironment::LLFloaterFixedEnvironment(const LLSD &key) : LLFloater(key), mFlyoutControl(nullptr), mInventoryId(), - mInventoryItem(nullptr) + mInventoryItem(nullptr), + mIsDirty(false) { } @@ -103,11 +105,12 @@ BOOL LLFloaterFixedEnvironment::postBuild() mTxtName->setCommitCallback([this](LLUICtrl *, const LLSD &) { onNameChanged(mTxtName->getValue().asString()); }); getChild<LLButton>(BUTTON_NAME_IMPORT)->setClickedCallback([this](LLUICtrl *, const LLSD &) { onButtonImport(); }); - getChild<LLButton>(BUTTON_NAME_CANCEL)->setClickedCallback([this](LLUICtrl *, const LLSD &) { onButtonCancel(); }); + getChild<LLButton>(BUTTON_NAME_CANCEL)->setClickedCallback([this](LLUICtrl *, const LLSD &) { onClickCloseBtn(); }); getChild<LLButton>(BUTTON_NAME_LOAD)->setClickedCallback([this](LLUICtrl *, const LLSD &) { onButtonLoad(); }); mFlyoutControl = new LLFlyoutComboBtnCtrl(this, BUTTON_NAME_COMMIT, BUTTON_NAME_FLYOUT, XML_FLYOUTMENU_FILE); mFlyoutControl->setAction([this](LLUICtrl *ctrl, const LLSD &data) { onButtonApply(ctrl, data); }); + mFlyoutControl->setMenuItemVisible(ACTION_COMMIT, false); return TRUE; } @@ -191,6 +194,24 @@ void LLFloaterFixedEnvironment::syncronizeTabs() } } +LLFloaterSettingsPicker * LLFloaterFixedEnvironment::getSettingsPicker() +{ + LLFloaterSettingsPicker *picker = static_cast<LLFloaterSettingsPicker *>(mInventoryFloater.get()); + + // Show the dialog + if (!picker) + { + picker = new LLFloaterSettingsPicker(this, + LLUUID::null, "SELECT SETTINGS"); + + mInventoryFloater = picker->getHandle(); + + picker->setCommitCallback([this](LLUICtrl *, const LLSD &data){ onPickerCommitSetting(data.asUUID()); }); + } + + return picker; +} + void LLFloaterFixedEnvironment::loadInventoryItem(const LLUUID &inventoryId) { if (inventoryId.isNull()) @@ -231,6 +252,29 @@ void LLFloaterFixedEnvironment::loadInventoryItem(const LLUUID &inventoryId) [this](LLUUID asset_id, LLSettingsBase::ptr_t settins, S32 status, LLExtStat) { onAssetLoaded(asset_id, settins, status); }); } + +void LLFloaterFixedEnvironment::checkAndConfirmSettingsLoss(LLFloaterFixedEnvironment::on_confirm_fn cb) +{ + if (isDirty()) + { + LLSD args(LLSDMap("TYPE", mSettings->getSettingsType()) + ("NAME", mSettings->getName())); + + // create and show confirmation textbox + LLNotificationsUtil::add("SettingsConfirmLoss", args, LLSD(), + [this, cb](const LLSD¬if, const LLSD&resp) + { + S32 opt = LLNotificationsUtil::getSelectedOption(notif, resp); + if (opt == 0) + cb(); + }); + } + else if (cb) + { + cb(); + } +} + void LLFloaterFixedEnvironment::onPickerCommitSetting(LLUUID asset_id) { LLSettingsVOBase::getSettingsAsset(asset_id, @@ -257,11 +301,12 @@ void LLFloaterFixedEnvironment::onAssetLoaded(LLUUID asset_id, LLSettingsBase::p void LLFloaterFixedEnvironment::onNameChanged(const std::string &name) { mSettings->setName(name); + setDirtyFlag(); } void LLFloaterFixedEnvironment::onButtonImport() { - doImportFromDisk(); + checkAndConfirmSettingsLoss([this](){ doImportFromDisk(); }); } void LLFloaterFixedEnvironment::onButtonApply(LLUICtrl *ctrl, const LLSD &data) @@ -288,31 +333,17 @@ void LLFloaterFixedEnvironment::onButtonApply(LLUICtrl *ctrl, const LLSD &data) } } -void LLFloaterFixedEnvironment::onButtonCancel() +void LLFloaterFixedEnvironment::onClickCloseBtn(bool app_quitting) { - // *TODO*: If changed issue a warning? - this->closeFloater(); + if (!app_quitting) + checkAndConfirmSettingsLoss([this](){ closeFloater(); }); + else + closeFloater(); } void LLFloaterFixedEnvironment::onButtonLoad() { - // LLUI::sWindow->setCursor(UI_CURSOR_WAIT); - LLFloaterSettingsPicker *picker = static_cast<LLFloaterSettingsPicker *>(mInventoryFloater.get()); - - // Show the dialog - if (!picker) - { - picker = new LLFloaterSettingsPicker(this, - LLUUID::null, "SELECT SETTINGS"); - - mInventoryFloater = picker->getHandle(); - - picker->setCommitCallback([this](LLUICtrl *, const LLSD &data){ onPickerCommitSetting(data.asUUID()); }); - } - - picker->setSettingsFilter(mSettings->getSettingsTypeValue()); - picker->openFloater(); - picker->setFocus(TRUE); + checkAndConfirmSettingsLoss([this](){ doSelectFromInventory(); }); } void LLFloaterFixedEnvironment::doApplyCreateNewInventory() @@ -396,6 +427,7 @@ void LLFloaterFixedEnvironment::onInventoryCreated(LLUUID asset_id, LLUUID inven return; } + clearDirtyFlag(); setFocus(TRUE); // Call back the focus... loadInventoryItem(inventory_id); } @@ -404,12 +436,44 @@ void LLFloaterFixedEnvironment::onInventoryUpdated(LLUUID asset_id, LLUUID inven { LL_WARNS("ENVIRONMENT") << "Inventory item " << inventory_id << " has been updated with asset " << asset_id << " results are:" << results << LL_ENDL; + clearDirtyFlag(); if (inventory_id != mInventoryId) { loadInventoryItem(inventory_id); } } + +void LLFloaterFixedEnvironment::clearDirtyFlag() +{ + mIsDirty = false; + + S32 count = mTab->getTabCount(); + + for (S32 idx = 0; idx < count; ++idx) + { + LLSettingsEditPanel *panel = static_cast<LLSettingsEditPanel *>(mTab->getPanelByIndex(idx)); + if (panel) + panel->clearIsDirty(); + } + +} + +void LLFloaterFixedEnvironment::doSelectFromInventory() +{ + LLFloaterSettingsPicker *picker = getSettingsPicker(); + + picker->setSettingsFilter(mSettings->getSettingsTypeValue()); + picker->openFloater(); + picker->setFocus(TRUE); +} + +void LLFloaterFixedEnvironment::onPanelDirtyFlagChanged(bool value) +{ + if (value) + setDirtyFlag(); +} + //------------------------------------------------------------------------- bool LLFloaterFixedEnvironment::canUseInventory() const { @@ -452,6 +516,7 @@ BOOL LLFloaterFixedEnvironmentWater::postBuild() panel = new LLPanelSettingsWaterMainTab; panel->buildFromFile("panel_settings_water.xml"); panel->setWater(std::static_pointer_cast<LLSettingsWater>(mSettings)); + panel->setOnDirtyFlagChanged( [this] (LLPanel *, bool value) { onPanelDirtyFlagChanged(value); }); mTab->addTabPanel(LLTabContainer::TabPanelParams().panel(panel).select_tab(true)); return TRUE; @@ -477,11 +542,6 @@ void LLFloaterFixedEnvironmentWater::onOpen(const LLSD& key) LLFloaterFixedEnvironment::onOpen(key); } -void LLFloaterFixedEnvironmentWater::onClose(bool app_quitting) -{ - LLFloaterFixedEnvironment::onClose(app_quitting); -} - void LLFloaterFixedEnvironmentWater::doImportFromDisk() { // Load a a legacy Windlight XML from disk. @@ -500,8 +560,9 @@ void LLFloaterFixedEnvironmentWater::doImportFromDisk() return; } + setDirtyFlag(); LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_EDIT, legacywater); - this->setEditSettings(legacywater); + setEditSettings(legacywater); LLEnvironment::instance().updateEnvironment(LLEnvironment::TRANSITION_FAST, true); } } @@ -520,16 +581,19 @@ BOOL LLFloaterFixedEnvironmentSky::postBuild() panel = new LLPanelSettingsSkyAtmosTab; panel->buildFromFile("panel_settings_sky_atmos.xml"); panel->setSky(std::static_pointer_cast<LLSettingsSky>(mSettings)); + panel->setOnDirtyFlagChanged([this](LLPanel *, bool value) { onPanelDirtyFlagChanged(value); }); mTab->addTabPanel(LLTabContainer::TabPanelParams().panel(panel).select_tab(true)); panel = new LLPanelSettingsSkyCloudTab; panel->buildFromFile("panel_settings_sky_clouds.xml"); panel->setSky(std::static_pointer_cast<LLSettingsSky>(mSettings)); + panel->setOnDirtyFlagChanged([this](LLPanel *, bool value) { onPanelDirtyFlagChanged(value); }); mTab->addTabPanel(LLTabContainer::TabPanelParams().panel(panel).select_tab(false)); panel = new LLPanelSettingsSkySunMoonTab; panel->buildFromFile("panel_settings_sky_sunmoon.xml"); panel->setSky(std::static_pointer_cast<LLSettingsSky>(mSettings)); + panel->setOnDirtyFlagChanged([this](LLPanel *, bool value) { onPanelDirtyFlagChanged(value); }); mTab->addTabPanel(LLTabContainer::TabPanelParams().panel(panel).select_tab(false)); return TRUE; @@ -553,12 +617,6 @@ void LLFloaterFixedEnvironmentSky::onOpen(const LLSD& key) } LLFloaterFixedEnvironment::onOpen(key); - -} - -void LLFloaterFixedEnvironmentSky::onClose(bool app_quitting) -{ - LLFloaterFixedEnvironment::onClose(app_quitting); } void LLFloaterFixedEnvironmentSky::doImportFromDisk() @@ -580,8 +638,9 @@ void LLFloaterFixedEnvironmentSky::doImportFromDisk() return; } + clearDirtyFlag(); LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_EDIT, legacysky); - this->setEditSettings(legacysky); + setEditSettings(legacysky); LLEnvironment::instance().updateEnvironment(LLEnvironment::TRANSITION_FAST, true); } } diff --git a/indra/newview/llfloaterfixedenvironment.h b/indra/newview/llfloaterfixedenvironment.h index f3b14c2daf..50b229e0c4 100644 --- a/indra/newview/llfloaterfixedenvironment.h +++ b/indra/newview/llfloaterfixedenvironment.h @@ -32,9 +32,12 @@ #include "llflyoutcombobtn.h" #include "llinventory.h" +#include "boost/signals2.hpp" + class LLTabContainer; class LLButton; class LLLineEditor; +class LLFloaterSettingsPicker; /** * Floater container for creating and editing fixed environment settings. @@ -56,16 +59,24 @@ public: virtual void onFocusReceived() override; virtual void onFocusLost() override; - void setEditSettings(const LLSettingsBase::ptr_t &settings) { mSettings = settings; syncronizeTabs(); refresh(); } + void setEditSettings(const LLSettingsBase::ptr_t &settings) { mSettings = settings; clearDirtyFlag(); syncronizeTabs(); refresh(); } LLSettingsBase::ptr_t getEditSettings() const { return mSettings; } + virtual BOOL isDirty() const override { return getIsDirty(); } + protected: + typedef std::function<void()> on_confirm_fn; + virtual void updateEditEnvironment() = 0; virtual void refresh() override; virtual void syncronizeTabs(); + LLFloaterSettingsPicker *getSettingsPicker(); + void loadInventoryItem(const LLUUID &inventoryId); + void checkAndConfirmSettingsLoss(on_confirm_fn cb); + LLTabContainer * mTab; LLLineEditor * mTxtName; @@ -90,16 +101,26 @@ protected: void onInventoryCreated(LLUUID asset_id, LLUUID inventory_id, LLSD results); void onInventoryUpdated(LLUUID asset_id, LLUUID inventory_id, LLSD results); + bool getIsDirty() const { return mIsDirty; } + void setDirtyFlag() { mIsDirty = true; } + virtual void clearDirtyFlag(); + + void doSelectFromInventory(); + void onPanelDirtyFlagChanged(bool); + + virtual void onClickCloseBtn(bool app_quitting = false) override; + private: void onNameChanged(const std::string &name); void onButtonImport(); void onButtonApply(LLUICtrl *ctrl, const LLSD &data); - void onButtonCancel(); void onButtonLoad(); void onPickerCommitSetting(LLUUID asset_id); void onAssetLoaded(LLUUID asset_id, LLSettingsBase::ptr_t settins, S32 status); + + bool mIsDirty; }; class LLFloaterFixedEnvironmentWater : public LLFloaterFixedEnvironment @@ -112,7 +133,6 @@ public: BOOL postBuild() override; virtual void onOpen(const LLSD& key) override; - virtual void onClose(bool app_quitting) override; protected: virtual void updateEditEnvironment() override; @@ -132,7 +152,6 @@ public: BOOL postBuild() override; virtual void onOpen(const LLSD& key) override; - virtual void onClose(bool app_quitting) override; protected: virtual void updateEditEnvironment() override; @@ -147,13 +166,26 @@ class LLSettingsEditPanel : public LLPanel public: virtual void setSettings(const LLSettingsBase::ptr_t &) = 0; -// virtual void refresh() override; + typedef boost::signals2::signal<void(LLPanel *, bool)> on_dirty_charged_sg; + typedef boost::signals2::connection connection_t; + + inline bool getIsDirty() const { return mIsDirty; } + inline void setIsDirty() { mIsDirty = true; if (!mOnDirtyChanged.empty()) mOnDirtyChanged(this, mIsDirty); } + inline void clearIsDirty() { mIsDirty = false; if (!mOnDirtyChanged.empty()) mOnDirtyChanged(this, mIsDirty); } + + inline connection_t setOnDirtyFlagChanged(on_dirty_charged_sg::slot_type cb) { return mOnDirtyChanged.connect(cb); } protected: LLSettingsEditPanel() : - LLPanel() + LLPanel(), + mIsDirty(false), + mOnDirtyChanged() {} +private: + bool mIsDirty; + + on_dirty_charged_sg mOnDirtyChanged; }; #endif // LL_FLOATERFIXEDENVIRONMENT_H diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 138ce9e1cf..e50055feb2 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -5097,6 +5097,11 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, tooltip_msg = LLTrans::getString("TooltipOutboxNotInInventory"); accept = FALSE; } + else if ((inv_item->getActualType() == LLAssetType::AT_SETTINGS) && !LLEnvironment::instance().isInventoryEnabled()) + { + tooltip_msg = LLTrans::getString("NoEnvironmentSettings"); + accept = FALSE; + } else { // Don't allow placing an original item from a notecard to Current Outfit or an outfit folder diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 6a04f08cf8..77d0fa4b04 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -109,6 +109,7 @@ public: virtual void closeItem() {} virtual void showProperties(); virtual BOOL isItemRenameable() const { return TRUE; } + virtual BOOL isMultiPreviewAllowed() { return TRUE; } //virtual BOOL renameItem(const std::string& new_name) {} virtual BOOL isItemRemovable() const; virtual BOOL isItemMovable() const; @@ -621,6 +622,7 @@ public: virtual LLUIImagePtr getIcon() const; virtual void performAction(LLInventoryModel* model, std::string action); virtual void openItem(); + virtual BOOL isMultiPreviewAllowed() { return FALSE; } virtual void buildContextMenu(LLMenuGL& menu, U32 flags); virtual BOOL renameItem(const std::string& new_name); virtual LLSettingsType::type_e getSettingsType() const { return mSettingsType; } diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index 030c967019..b0004c5e58 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -2395,10 +2395,29 @@ void LLInventoryAction::doToSelected(LLInventoryModel* model, LLFolderView* root if (("task_open" == action || "open" == action) && selected_items.size() > 1) { - multi_previewp = new LLMultiPreview(); - gFloaterView->addChild(multi_previewp); + bool open_multi_preview = true; - LLFloater::setFloaterHost(multi_previewp); + for (std::set<LLFolderViewItem*>::iterator set_iter = selected_items.begin(); set_iter != selected_items.end(); ++set_iter) + { + LLFolderViewItem* folder_item = *set_iter; + if (folder_item) + { + LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getViewModelItem(); + if (!bridge || !bridge->isMultiPreviewAllowed()) + { + open_multi_preview = false; + break; + } + } + } + + if (open_multi_preview) + { + multi_previewp = new LLMultiPreview(); + gFloaterView->addChild(multi_previewp); + + LLFloater::setFloaterHost(multi_previewp); + } } else if (("task_properties" == action || "properties" == action) && selected_items.size() > 1) diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index cef6528724..9c50866dc1 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -2604,6 +2604,7 @@ void LLInventoryModel::createCommonSystemCategories() gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE,true); gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD,true); gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS,true); + gInventory.findCategoryUUIDForType(LLFolderType::FT_SETTINGS, true); } struct LLUUIDAndName diff --git a/indra/newview/llpaneleditsky.cpp b/indra/newview/llpaneleditsky.cpp index dfb803a0a3..0799180a19 100644 --- a/indra/newview/llpaneleditsky.cpp +++ b/indra/newview/llpaneleditsky.cpp @@ -35,7 +35,6 @@ #include "llvirtualtrackball.h" #include "llsettingssky.h" -static LLDefaultChildRegistry::Register<LLDensityCtrl> register_density_control("densityctrl"); namespace { @@ -73,6 +72,23 @@ namespace const std::string FIELD_SKY_MOON_IMAGE("moon_image"); const std::string FIELD_SKY_MOON_SCALE("moon_scale"); + const std::string FIELD_SKY_DENSITY_RAYLEIGH_EXPONENTIAL("rayleigh_exponential"); + const std::string FIELD_SKY_DENSITY_RAYLEIGH_EXPONENTIAL_SCALE("rayleigh_exponential_scale"); + const std::string FIELD_SKY_DENSITY_RAYLEIGH_LINEAR("rayleigh_linear"); + const std::string FIELD_SKY_DENSITY_RAYLEIGH_CONSTANT("rayleigh_constant"); + + const std::string FIELD_SKY_DENSITY_MIE_EXPONENTIAL("mie_exponential"); + const std::string FIELD_SKY_DENSITY_MIE_EXPONENTIAL_SCALE("mie_exponential_scale"); + const std::string FIELD_SKY_DENSITY_MIE_LINEAR("mie_linear"); + const std::string FIELD_SKY_DENSITY_MIE_CONSTANT("mie_constant"); + const std::string FIELD_SKY_DENSITY_MIE_ANISO("mie_aniso_factor"); + + const std::string FIELD_SKY_DENSITY_ABSORPTION_EXPONENTIAL("absorption_exponential"); + const std::string FIELD_SKY_DENSITY_ABSORPTION_EXPONENTIAL_SCALE("absorption_exponential_scale"); + const std::string FIELD_SKY_DENSITY_ABSORPTION_LINEAR("absorption_linear"); + const std::string FIELD_SKY_DENSITY_ABSORPTION_CONSTANT("absorption_constant"); + const std::string FIELD_SKY_DENSITY_MAX_ALTITUDE("max_altitude"); + const F32 SLIDER_SCALE_SUN_AMBIENT(3.0f); const F32 SLIDER_SCALE_BLUE_HORIZON_DENSITY(2.0f); const F32 SLIDER_SCALE_GLOW_R(20.0f); @@ -160,46 +176,64 @@ void LLPanelSettingsSkyAtmosTab::refresh() void LLPanelSettingsSkyAtmosTab::onAmbientLightChanged() { mSkySettings->setAmbientColor(LLColor3(getChild<LLColorSwatchCtrl>(FIELD_SKY_AMBIENT_LIGHT)->get() * SLIDER_SCALE_SUN_AMBIENT)); + mSkySettings->update(); + setIsDirty(); } void LLPanelSettingsSkyAtmosTab::onBlueHorizonChanged() { mSkySettings->setBlueHorizon(LLColor3(getChild<LLColorSwatchCtrl>(FIELD_SKY_BLUE_HORIZON)->get() * SLIDER_SCALE_BLUE_HORIZON_DENSITY)); + mSkySettings->update(); + setIsDirty(); } void LLPanelSettingsSkyAtmosTab::onBlueDensityChanged() { mSkySettings->setBlueDensity(LLColor3(getChild<LLColorSwatchCtrl>(FIELD_SKY_BLUE_DENSITY)->get() * SLIDER_SCALE_BLUE_HORIZON_DENSITY)); + mSkySettings->update(); + setIsDirty(); } void LLPanelSettingsSkyAtmosTab::onHazeHorizonChanged() { mSkySettings->setHazeHorizon(getChild<LLUICtrl>(FIELD_SKY_HAZE_HORIZON)->getValue().asReal()); + mSkySettings->update(); + setIsDirty(); } void LLPanelSettingsSkyAtmosTab::onHazeDensityChanged() { mSkySettings->setHazeDensity(getChild<LLUICtrl>(FIELD_SKY_HAZE_DENSITY)->getValue().asReal()); + mSkySettings->update(); + setIsDirty(); } void LLPanelSettingsSkyAtmosTab::onSceneGammaChanged() { mSkySettings->setGamma(getChild<LLUICtrl>(FIELD_SKY_SCENE_GAMMA)->getValue().asReal()); + mSkySettings->update(); + setIsDirty(); } void LLPanelSettingsSkyAtmosTab::onDensityMultipChanged() { mSkySettings->setDensityMultiplier(getChild<LLUICtrl>(FIELD_SKY_DENSITY_MULTIP)->getValue().asReal()); + mSkySettings->update(); + setIsDirty(); } void LLPanelSettingsSkyAtmosTab::onDistanceMultipChanged() { mSkySettings->setDistanceMultiplier(getChild<LLUICtrl>(FIELD_SKY_DISTANCE_MULTIP)->getValue().asReal()); + mSkySettings->update(); + setIsDirty(); } void LLPanelSettingsSkyAtmosTab::onMaxAltChanged() { mSkySettings->setMaxY(getChild<LLUICtrl>(FIELD_SKY_MAX_ALT)->getValue().asReal()); + mSkySettings->update(); + setIsDirty(); } //========================================================================== @@ -283,16 +317,21 @@ void LLPanelSettingsSkyCloudTab::refresh() void LLPanelSettingsSkyCloudTab::onCloudColorChanged() { mSkySettings->setCloudColor(LLColor3(getChild<LLColorSwatchCtrl>(FIELD_SKY_CLOUD_COLOR)->get())); + mSkySettings->update(); + setIsDirty(); } void LLPanelSettingsSkyCloudTab::onCloudCoverageChanged() { mSkySettings->setCloudShadow(getChild<LLUICtrl>(FIELD_SKY_CLOUD_COVERAGE)->getValue().asReal()); + mSkySettings->update(); + setIsDirty(); } void LLPanelSettingsSkyCloudTab::onCloudScaleChanged() { mSkySettings->setCloudScale(getChild<LLUICtrl>(FIELD_SKY_CLOUD_SCALE)->getValue().asReal()); + setIsDirty(); } void LLPanelSettingsSkyCloudTab::onCloudScrollChanged() @@ -300,11 +339,13 @@ void LLPanelSettingsSkyCloudTab::onCloudScrollChanged() LLVector2 scroll(getChild<LLUICtrl>(FIELD_SKY_CLOUD_SCROLL_XY)->getValue()); scroll += CLOUD_SCROLL_ADJUST; mSkySettings->setCloudScrollRate(scroll); + setIsDirty(); } void LLPanelSettingsSkyCloudTab::onCloudMapChanged() { mSkySettings->setCloudNoiseTextureId(getChild<LLTextureCtrl>(FIELD_SKY_CLOUD_MAP)->getValue().asUUID()); + setIsDirty(); } void LLPanelSettingsSkyCloudTab::onCloudDensityChanged() @@ -314,6 +355,7 @@ void LLPanelSettingsSkyCloudTab::onCloudDensityChanged() getChild<LLUICtrl>(FIELD_SKY_CLOUD_DENSITY_D)->getValue().asReal()); mSkySettings->setCloudPosDensity1(density); + setIsDirty(); } void LLPanelSettingsSkyCloudTab::onCloudDetailChanged() @@ -323,6 +365,7 @@ void LLPanelSettingsSkyCloudTab::onCloudDetailChanged() getChild<LLUICtrl>(FIELD_SKY_CLOUD_DETAIL_D)->getValue().asReal()); mSkySettings->setCloudPosDensity2(detail); + setIsDirty(); } //========================================================================== @@ -340,6 +383,7 @@ BOOL LLPanelSettingsSkySunMoonTab::postBuild() getChild<LLUICtrl>(FIELD_SKY_STAR_BRIGHTNESS)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onStarBrightnessChanged(); }); getChild<LLUICtrl>(FIELD_SKY_SUN_ROTATION)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onSunRotationChanged(); }); getChild<LLUICtrl>(FIELD_SKY_SUN_IMAGE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onSunImageChanged(); }); + getChild<LLUICtrl>(FIELD_SKY_SUN_SCALE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onSunScaleChanged(); }); getChild<LLTextureCtrl>(FIELD_SKY_SUN_IMAGE)->setBlankImageAssetID(LLSettingsSky::GetBlankSunTextureId()); getChild<LLTextureCtrl>(FIELD_SKY_SUN_IMAGE)->setDefaultImageAssetID(LLSettingsSky::GetBlankSunTextureId()); getChild<LLTextureCtrl>(FIELD_SKY_SUN_IMAGE)->setAllowNoTexture(TRUE); @@ -350,7 +394,7 @@ BOOL LLPanelSettingsSkySunMoonTab::postBuild() getChild<LLTextureCtrl>(FIELD_SKY_MOON_IMAGE)->setBlankImageAssetID(LLSettingsSky::GetBlankSunTextureId()); getChild<LLTextureCtrl>(FIELD_SKY_MOON_IMAGE)->setAllowNoTexture(TRUE); getChild<LLTextureCtrl>(FIELD_SKY_MOON_IMAGE)->setAllowLocalTexture(FALSE); - + getChild<LLUICtrl>(FIELD_SKY_MOON_SCALE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onMoonScaleChanged(); }); refresh(); @@ -387,8 +431,10 @@ void LLPanelSettingsSkySunMoonTab::refresh() getChild<LLUICtrl>(FIELD_SKY_STAR_BRIGHTNESS)->setValue(mSkySettings->getStarBrightness()); getChild<LLVirtualTrackball>(FIELD_SKY_SUN_ROTATION)->setRotation(mSkySettings->getSunRotation()); getChild<LLTextureCtrl>(FIELD_SKY_SUN_IMAGE)->setValue(mSkySettings->getSunTextureId()); + getChild<LLUICtrl>(FIELD_SKY_SUN_SCALE)->setValue(mSkySettings->getSunScale()); getChild<LLVirtualTrackball>(FIELD_SKY_MOON_ROTATION)->setRotation(mSkySettings->getMoonRotation()); getChild<LLTextureCtrl>(FIELD_SKY_MOON_IMAGE)->setValue(mSkySettings->getMoonTextureId()); + getChild<LLUICtrl>(FIELD_SKY_MOON_SCALE)->setValue(mSkySettings->getMoonScale()); } //------------------------------------------------------------------------- @@ -399,6 +445,8 @@ void LLPanelSettingsSkySunMoonTab::onSunMoonColorChanged() color *= SLIDER_SCALE_SUN_AMBIENT; mSkySettings->setSunlightColor(color); + mSkySettings->update(); + setIsDirty(); } void LLPanelSettingsSkySunMoonTab::onGlowChanged() @@ -410,48 +458,56 @@ void LLPanelSettingsSkySunMoonTab::onGlowChanged() mSkySettings->setGlow(glow); mSkySettings->update(); + setIsDirty(); } void LLPanelSettingsSkySunMoonTab::onStarBrightnessChanged() { mSkySettings->setStarBrightness(getChild<LLUICtrl>(FIELD_SKY_STAR_BRIGHTNESS)->getValue().asReal()); mSkySettings->update(); + setIsDirty(); } void LLPanelSettingsSkySunMoonTab::onSunRotationChanged() { mSkySettings->setSunRotation(getChild<LLVirtualTrackball>(FIELD_SKY_SUN_ROTATION)->getRotation()); mSkySettings->update(); + setIsDirty(); } void LLPanelSettingsSkySunMoonTab::onSunScaleChanged() { mSkySettings->setSunScale((getChild<LLUICtrl>(FIELD_SKY_SUN_SCALE)->getValue().asReal())); mSkySettings->update(); + setIsDirty(); } void LLPanelSettingsSkySunMoonTab::onSunImageChanged() { mSkySettings->setSunTextureId(getChild<LLTextureCtrl>(FIELD_SKY_SUN_IMAGE)->getValue().asUUID()); mSkySettings->update(); + setIsDirty(); } void LLPanelSettingsSkySunMoonTab::onMoonRotationChanged() { mSkySettings->setMoonRotation(getChild<LLVirtualTrackball>(FIELD_SKY_MOON_ROTATION)->getRotation()); mSkySettings->update(); + setIsDirty(); } void LLPanelSettingsSkySunMoonTab::onMoonImageChanged() { mSkySettings->setMoonTextureId(getChild<LLTextureCtrl>(FIELD_SKY_MOON_IMAGE)->getValue().asUUID()); mSkySettings->update(); + setIsDirty(); } void LLPanelSettingsSkySunMoonTab::onMoonScaleChanged() { mSkySettings->setMoonScale((getChild<LLUICtrl>(FIELD_SKY_MOON_SCALE)->getValue().asReal())); mSkySettings->update(); + setIsDirty(); } @@ -461,8 +517,24 @@ LLPanelSettingsDensityTab::LLPanelSettingsDensityTab() BOOL LLPanelSettingsDensityTab::postBuild() { - mControlName = LLDensityCtrl::NameForDensityProfileType(mProfileType); - getChild<LLDensityCtrl>(mControlName)->setProfileType(mProfileType); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_RAYLEIGH_EXPONENTIAL)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onRayleighExponentialChanged(); }); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_RAYLEIGH_EXPONENTIAL_SCALE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onRayleighExponentialScaleChanged(); }); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_RAYLEIGH_LINEAR)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onRayleighLinearChanged(); }); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_RAYLEIGH_CONSTANT)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onRayleighConstantChanged(); }); + + getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_EXPONENTIAL)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onMieExponentialChanged(); }); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_EXPONENTIAL_SCALE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onMieExponentialScaleChanged(); }); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_LINEAR)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onMieLinearChanged(); }); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_CONSTANT)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onMieConstantChanged(); }); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_ANISO)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onMieAnisoFactorChanged(); }); + + getChild<LLUICtrl>(FIELD_SKY_DENSITY_ABSORPTION_EXPONENTIAL)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onAbsorptionExponentialChanged(); }); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_ABSORPTION_EXPONENTIAL_SCALE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onAbsorptionExponentialScaleChanged(); }); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_ABSORPTION_LINEAR)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onAbsorptionLinearChanged(); }); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_ABSORPTION_CONSTANT)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onAbsorptionConstantChanged(); }); + + getChild<LLUICtrl>(FIELD_SKY_DENSITY_MAX_ALTITUDE)->setCommitCallback([this](LLUICtrl *, const LLSD &) { onMaxAltitudeChanged(); }); + refresh(); return TRUE; } @@ -470,7 +542,24 @@ BOOL LLPanelSettingsDensityTab::postBuild() void LLPanelSettingsDensityTab::setEnabled(BOOL enabled) { LLPanelSettingsSky::setEnabled(enabled); - getChild<LLDensityCtrl>(mControlName)->setEnabled(enabled); + + getChild<LLUICtrl>(FIELD_SKY_DENSITY_RAYLEIGH_EXPONENTIAL)->setEnabled(enabled); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_RAYLEIGH_EXPONENTIAL_SCALE)->setEnabled(enabled); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_RAYLEIGH_LINEAR)->setEnabled(enabled); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_RAYLEIGH_CONSTANT)->setEnabled(enabled); + + getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_EXPONENTIAL)->setEnabled(enabled); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_EXPONENTIAL_SCALE)->setEnabled(enabled); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_LINEAR)->setEnabled(enabled); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_CONSTANT)->setEnabled(enabled); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_ANISO)->setEnabled(enabled); + + getChild<LLUICtrl>(FIELD_SKY_DENSITY_ABSORPTION_EXPONENTIAL)->setEnabled(enabled); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_ABSORPTION_EXPONENTIAL_SCALE)->setEnabled(enabled); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_ABSORPTION_LINEAR)->setEnabled(enabled); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_ABSORPTION_CONSTANT)->setEnabled(enabled); + + getChild<LLUICtrl>(FIELD_SKY_DENSITY_MAX_ALTITUDE)->setEnabled(enabled); } void LLPanelSettingsDensityTab::refresh() @@ -484,61 +573,124 @@ void LLPanelSettingsDensityTab::refresh() setEnabled(TRUE); setAllChildrenEnabled(TRUE); - getChild<LLDensityCtrl>(mControlName)->setSky(mSkySettings); - getChild<LLDensityCtrl>(mControlName)->refresh(); + + LLSD rayleigh_config = mSkySettings->getRayleighConfigs(); + LLSD mie_config = mSkySettings->getMieConfigs(); + LLSD absorption_config = mSkySettings->getAbsorptionConfigs(); + + getChild<LLUICtrl>(FIELD_SKY_DENSITY_RAYLEIGH_EXPONENTIAL)->setValue(rayleigh_config[LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_TERM]); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_RAYLEIGH_EXPONENTIAL_SCALE)->setValue(rayleigh_config[LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_SCALE_FACTOR]); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_RAYLEIGH_LINEAR)->setValue(rayleigh_config[LLSettingsSky::SETTING_DENSITY_PROFILE_LINEAR_TERM]); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_RAYLEIGH_CONSTANT)->setValue(rayleigh_config[LLSettingsSky::SETTING_DENSITY_PROFILE_CONSTANT_TERM]); + + getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_EXPONENTIAL)->setValue(mie_config[LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_TERM]); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_EXPONENTIAL_SCALE)->setValue(mie_config[LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_SCALE_FACTOR]); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_LINEAR)->setValue(mie_config[LLSettingsSky::SETTING_DENSITY_PROFILE_LINEAR_TERM]); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_CONSTANT)->setValue(mie_config[LLSettingsSky::SETTING_DENSITY_PROFILE_CONSTANT_TERM]); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_MIE_ANISO)->setValue(mie_config[LLSettingsSky::SETTING_MIE_ANISOTROPY_FACTOR]); + + getChild<LLUICtrl>(FIELD_SKY_DENSITY_ABSORPTION_EXPONENTIAL)->setValue(absorption_config[LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_TERM]); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_ABSORPTION_EXPONENTIAL_SCALE)->setValue(absorption_config[LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_SCALE_FACTOR]); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_ABSORPTION_LINEAR)->setValue(absorption_config[LLSettingsSky::SETTING_DENSITY_PROFILE_LINEAR_TERM]); + getChild<LLUICtrl>(FIELD_SKY_DENSITY_ABSORPTION_CONSTANT)->setValue(absorption_config[LLSettingsSky::SETTING_DENSITY_PROFILE_CONSTANT_TERM]); + + getChild<LLUICtrl>(FIELD_SKY_DENSITY_MAX_ALTITUDE)->setValue(rayleigh_config[LLSettingsSky::SETTING_DENSITY_PROFILE_WIDTH]); } void LLPanelSettingsDensityTab::updateProfile() { - getChild<LLDensityCtrl>(mControlName)->setSky(mSkySettings); - getChild<LLDensityCtrl>(mControlName)->updateProfile(); + F32 rayleigh_exponential_term = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_RAYLEIGH_EXPONENTIAL)->getValueF32(); + F32 rayleigh_exponential_scale = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_RAYLEIGH_EXPONENTIAL_SCALE)->getValueF32(); + F32 rayleigh_linear_term = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_RAYLEIGH_LINEAR)->getValueF32(); + F32 rayleigh_constant_term = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_RAYLEIGH_CONSTANT)->getValueF32(); + F32 mie_exponential_term = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_MIE_EXPONENTIAL)->getValueF32(); + F32 mie_exponential_scale = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_MIE_EXPONENTIAL_SCALE)->getValueF32(); + F32 mie_linear_term = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_MIE_LINEAR)->getValueF32(); + F32 mie_constant_term = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_MIE_CONSTANT)->getValueF32(); + F32 mie_aniso_factor = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_MIE_ANISO)->getValueF32(); + F32 absorption_exponential_term = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_ABSORPTION_EXPONENTIAL)->getValueF32(); + F32 absorption_exponential_scale = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_ABSORPTION_EXPONENTIAL_SCALE)->getValueF32(); + F32 absorption_linear_term = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_ABSORPTION_LINEAR)->getValueF32(); + F32 absorption_constant_term = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_ABSORPTION_CONSTANT)->getValueF32(); + F32 max_alt = getChild<LLSliderCtrl>(FIELD_SKY_DENSITY_MAX_ALTITUDE)->getValueF32(); + + LLSD rayleigh_config = LLSettingsSky::createSingleLayerDensityProfile(max_alt, rayleigh_exponential_term, rayleigh_exponential_scale, rayleigh_linear_term, rayleigh_constant_term); + LLSD mie_config = LLSettingsSky::createSingleLayerDensityProfile(max_alt, mie_exponential_term, mie_exponential_scale, mie_linear_term, mie_constant_term, mie_aniso_factor); + LLSD absorption_config = LLSettingsSky::createSingleLayerDensityProfile(max_alt, absorption_exponential_term, absorption_exponential_scale, absorption_linear_term, absorption_constant_term); + + mSkySettings->setRayleighConfigs(rayleigh_config); + mSkySettings->setMieConfigs(mie_config); + mSkySettings->setAbsorptionConfigs(absorption_config); + mSkySettings->update(); } -LLPanelSettingsDensity::LLPanelSettingsDensity() -{ +void LLPanelSettingsDensityTab::onRayleighExponentialChanged() +{ + updateProfile(); } -BOOL LLPanelSettingsDensity::postBuild() +void LLPanelSettingsDensityTab::onRayleighExponentialScaleChanged() { - //static_cast<LLPanelSettingsDensityTab*>(getChild<LLPanelSettingsDensityTab>(LLDensityCtrl::DENSITY_RAYLEIGH))->setProfileType(LLDensityCtrl::Rayleigh); - //static_cast<LLPanelSettingsDensityTab*>(getChild<LLPanelSettingsDensityTab>(LLDensityCtrl::DENSITY_MIE))->setProfileType(LLDensityCtrl::Mie); - //static_cast<LLPanelSettingsDensityTab*>(getChild<LLPanelSettingsDensityTab>(LLDensityCtrl::DENSITY_ABSORPTION))->setProfileType(LLDensityCtrl::Absorption); - refresh(); - return TRUE; + updateProfile(); } -void LLPanelSettingsDensity::setEnabled(BOOL enabled) +void LLPanelSettingsDensityTab::onRayleighLinearChanged() { - LLPanelSettingsSky::setEnabled(enabled); + updateProfile(); +} - //getChild<LLPanelSettingsDensityTab>(LLDensityCtrl::DENSITY_RAYLEIGH)->setEnabled(enabled); - //getChild<LLPanelSettingsDensityTab>(LLDensityCtrl::DENSITY_MIE)->setEnabled(enabled); - //getChild<LLPanelSettingsDensityTab>(LLDensityCtrl::DENSITY_ABSORPTION)->setEnabled(enabled); +void LLPanelSettingsDensityTab::onRayleighConstantChanged() +{ + updateProfile(); } -void LLPanelSettingsDensity::refresh() +void LLPanelSettingsDensityTab::onMieExponentialChanged() { - if (!mSkySettings) - { - setAllChildrenEnabled(FALSE); - setEnabled(FALSE); - return; - } + updateProfile(); +} - setEnabled(TRUE); - setAllChildrenEnabled(TRUE); +void LLPanelSettingsDensityTab::onMieExponentialScaleChanged() +{ + updateProfile(); +} - //getChild<LLDensityCtrl>(LLDensityCtrl::DENSITY_RAYLEIGH)->refresh(); - //getChild<LLDensityCtrl>(LLDensityCtrl::DENSITY_MIE)->refresh(); - //getChild<LLDensityCtrl>(LLDensityCtrl::DENSITY_ABSORPTION)->refresh(); +void LLPanelSettingsDensityTab::onMieLinearChanged() +{ + updateProfile(); } -void LLPanelSettingsDensity::updateProfile() +void LLPanelSettingsDensityTab::onMieConstantChanged() { - //getChild<LLDensityCtrl>(LLDensityCtrl::DENSITY_RAYLEIGH)->updateProfile(); - //getChild<LLDensityCtrl>(LLDensityCtrl::DENSITY_MIE)->updateProfile(); - //getChild<LLDensityCtrl>(LLDensityCtrl::DENSITY_ABSORPTION)->updateProfile(); - mSkySettings->update(); + updateProfile(); } +void LLPanelSettingsDensityTab::onMieAnisoFactorChanged() +{ + updateProfile(); +} + +void LLPanelSettingsDensityTab::onAbsorptionExponentialChanged() +{ + updateProfile(); +} + +void LLPanelSettingsDensityTab::onAbsorptionExponentialScaleChanged() +{ + updateProfile(); +} + +void LLPanelSettingsDensityTab::onAbsorptionLinearChanged() +{ + updateProfile(); +} + +void LLPanelSettingsDensityTab::onAbsorptionConstantChanged() +{ + updateProfile(); +} + +void LLPanelSettingsDensityTab::onMaxAltitudeChanged() +{ + updateProfile(); +} diff --git a/indra/newview/llpaneleditsky.h b/indra/newview/llpaneleditsky.h index 982315adff..aadbd85a37 100644 --- a/indra/newview/llpaneleditsky.h +++ b/indra/newview/llpaneleditsky.h @@ -30,13 +30,11 @@ #include "llpanel.h" #include "llsettingssky.h" #include "llfloaterfixedenvironment.h" -#include "lldensityctrl.h" //========================================================================= class LLSlider; class LLColorSwatchCtrl; class LLTextureCtrl; -class LLDensityCtrl; // custom control for specifying various sky density settings //========================================================================= class LLPanelSettingsSky : public LLSettingsEditPanel @@ -49,7 +47,7 @@ public: virtual void setSettings(const LLSettingsBase::ptr_t &settings) override { setSky(std::static_pointer_cast<LLSettingsSky>(settings)); } LLSettingsSky::ptr_t getSky() const { return mSkySettings; } - void setSky(const LLSettingsSky::ptr_t &sky) { mSkySettings = sky; refresh(); } + void setSky(const LLSettingsSky::ptr_t &sky) { mSkySettings = sky; clearIsDirty(); refresh(); } protected: LLSettingsSky::ptr_t mSkySettings; @@ -144,25 +142,23 @@ public: protected: virtual void refresh() override; - // update the settings for our profile type - void updateProfile(); - - LLDensityCtrl::DensityProfileType mProfileType; - std::string mControlName; -}; + void onRayleighExponentialChanged(); + void onRayleighExponentialScaleChanged(); + void onRayleighLinearChanged(); + void onRayleighConstantChanged(); -class LLPanelSettingsDensity : public LLPanelSettingsSky -{ - LOG_CLASS(LLPanelSettingsDensity); + void onMieExponentialChanged(); + void onMieExponentialScaleChanged(); + void onMieLinearChanged(); + void onMieConstantChanged(); + void onMieAnisoFactorChanged(); -public: - LLPanelSettingsDensity(); + void onAbsorptionExponentialChanged(); + void onAbsorptionExponentialScaleChanged(); + void onAbsorptionLinearChanged(); + void onAbsorptionConstantChanged(); - virtual BOOL postBuild() override; - virtual void setEnabled(BOOL enabled) override; - -protected: - virtual void refresh() override; + void onMaxAltitudeChanged(); // update the settings for our profile type void updateProfile(); diff --git a/indra/newview/llpaneleditwater.cpp b/indra/newview/llpaneleditwater.cpp index 9d9a183ffd..bf00ee34f9 100644 --- a/indra/newview/llpaneleditwater.cpp +++ b/indra/newview/llpaneleditwater.cpp @@ -161,21 +161,25 @@ void LLPanelSettingsWaterMainTab::refresh() void LLPanelSettingsWaterMainTab::onFogColorChanged() { mWaterSettings->setWaterFogColor(LLColor3(mClrFogColor->get())); + setIsDirty(); } void LLPanelSettingsWaterMainTab::onFogDensityChanged() { mWaterSettings->setWaterFogDensity(getChild<LLUICtrl>(FIELD_WATER_FOG_DENSITY)->getValue().asReal()); + setIsDirty(); } void LLPanelSettingsWaterMainTab::onFogUnderWaterChanged() { mWaterSettings->setFogMod(getChild<LLUICtrl>(FIELD_WATER_UNDERWATER_MOD)->getValue().asReal()); + setIsDirty(); } void LLPanelSettingsWaterMainTab::onNormalMapChanged() { mWaterSettings->setNormalMapID(mTxtNormalMap->getImageAssetID()); + setIsDirty(); } @@ -184,6 +188,7 @@ void LLPanelSettingsWaterMainTab::onLargeWaveChanged() LLVector2 vect(getChild<LLUICtrl>(FIELD_WATER_WAVE1_XY)->getValue()); LL_WARNS("LAPRAS") << "Changing Large Wave from " << mWaterSettings->getWave1Dir() << " -> " << vect << LL_ENDL; mWaterSettings->setWave1Dir(vect); + setIsDirty(); } void LLPanelSettingsWaterMainTab::onSmallWaveChanged() @@ -191,6 +196,7 @@ void LLPanelSettingsWaterMainTab::onSmallWaveChanged() LLVector2 vect(getChild<LLUICtrl>(FIELD_WATER_WAVE2_XY)->getValue()); LL_WARNS("LAPRAS") << "Changing Small Wave from " << mWaterSettings->getWave2Dir() << " -> " << vect << LL_ENDL; mWaterSettings->setWave2Dir(vect); + setIsDirty(); } @@ -199,29 +205,35 @@ void LLPanelSettingsWaterMainTab::onNormalScaleChanged() LLVector3 vect(getChild<LLUICtrl>(FIELD_WATER_NORMAL_SCALE_X)->getValue().asReal(), getChild<LLUICtrl>(FIELD_WATER_NORMAL_SCALE_Y)->getValue().asReal(), getChild<LLUICtrl>(FIELD_WATER_NORMAL_SCALE_Z)->getValue().asReal()); LL_WARNS("LAPRAS") << "Changing normal scale from " << mWaterSettings->getNormalScale() << " -> " << vect << LL_ENDL; mWaterSettings->setNormalScale(vect); + setIsDirty(); } void LLPanelSettingsWaterMainTab::onFresnelScaleChanged() { mWaterSettings->setFresnelScale(getChild<LLUICtrl>(FIELD_WATER_FRESNEL_SCALE)->getValue().asReal()); + setIsDirty(); } void LLPanelSettingsWaterMainTab::onFresnelOffsetChanged() { mWaterSettings->setFresnelOffset(getChild<LLUICtrl>(FIELD_WATER_FRESNEL_OFFSET)->getValue().asReal()); + setIsDirty(); } void LLPanelSettingsWaterMainTab::onScaleAboveChanged() { mWaterSettings->setScaleAbove(getChild<LLUICtrl>(FIELD_WATER_SCALE_ABOVE)->getValue().asReal()); + setIsDirty(); } void LLPanelSettingsWaterMainTab::onScaleBelowChanged() { mWaterSettings->setScaleBelow(getChild<LLUICtrl>(FIELD_WATER_SCALE_BELOW)->getValue().asReal()); + setIsDirty(); } void LLPanelSettingsWaterMainTab::onBlurMultipChanged() { mWaterSettings->setBlurMultiplier(getChild<LLUICtrl>(FIELD_WATER_BLUR_MULTIP)->getValue().asReal()); + setIsDirty(); } diff --git a/indra/newview/llpaneleditwater.h b/indra/newview/llpaneleditwater.h index 5a04f98b05..ab2dc47bcc 100644 --- a/indra/newview/llpaneleditwater.h +++ b/indra/newview/llpaneleditwater.h @@ -49,7 +49,7 @@ public: virtual void setSettings(const LLSettingsBase::ptr_t &settings) override { setWater(std::static_pointer_cast<LLSettingsWater>(settings)); } LLSettingsWater::ptr_t getWater() const { return mWaterSettings; } - void setWater(const LLSettingsWater::ptr_t &water) { mWaterSettings = water; refresh(); } + void setWater(const LLSettingsWater::ptr_t &water) { mWaterSettings = water; clearIsDirty(); refresh(); } protected: LLSettingsWater::ptr_t mWaterSettings; diff --git a/indra/newview/llpanelenvironment.cpp b/indra/newview/llpanelenvironment.cpp index d91f9110e0..51b2fa380f 100644 --- a/indra/newview/llpanelenvironment.cpp +++ b/indra/newview/llpanelenvironment.cpp @@ -119,7 +119,19 @@ void LLPanelEnvironmentInfo::onVisibilityChange(BOOL new_visibility) if (new_visibility) gIdleCallbacks.addFunction(onIdlePlay, this); else + { gIdleCallbacks.deleteFunction(onIdlePlay, this); + LLFloaterEditExtDayCycle *dayeditor = getEditFloater(); + if (mCommitConnection.connected()) + mCommitConnection.disconnect(); + if (dayeditor) + { + if (dayeditor->isDirty()) + dayeditor->refresh(); + else + dayeditor->closeFloater(); + } + } } @@ -213,13 +225,13 @@ LLFloaterSettingsPicker *LLPanelEnvironmentInfo::getSettingsPicker() return picker; } -LLFloaterEditExtDayCycle * LLPanelEnvironmentInfo::getEditFloater() +LLFloaterEditExtDayCycle * LLPanelEnvironmentInfo::getEditFloater(bool create) { static const S32 FOURHOURS(4 * 60 * 60); LLFloaterEditExtDayCycle *editor = static_cast<LLFloaterEditExtDayCycle *>(mEditFloater.get()); // Show the dialog - if (!editor) + if (!editor && create) { LLSD params(LLSDMap(LLFloaterEditExtDayCycle::KEY_EDIT_CONTEXT, (mCurrentParcelId == INVALID_PARCEL_ID) ? LLFloaterEditExtDayCycle::CONTEXT_REGION : LLFloaterEditExtDayCycle::CONTEXT_PARCEL) (LLFloaterEditExtDayCycle::KEY_DAY_LENGTH, mCurrentEnvironment ? (S32)(mCurrentEnvironment->mDayLength.value()) : FOURHOURS)); @@ -228,9 +240,11 @@ LLFloaterEditExtDayCycle * LLPanelEnvironmentInfo::getEditFloater() if (!editor) return nullptr; - editor->setEditCommitSignal([this](LLSettingsDay::ptr_t pday) { onEditCommited(pday); }); } + if (editor && !mCommitConnection.connected()) + mCommitConnection = editor->setEditCommitSignal([this](LLSettingsDay::ptr_t pday) { onEditCommited(pday); }); + return editor; } diff --git a/indra/newview/llpanelenvironment.h b/indra/newview/llpanelenvironment.h index 971f12c7e7..b867a7b61d 100644 --- a/indra/newview/llpanelenvironment.h +++ b/indra/newview/llpanelenvironment.h @@ -44,17 +44,16 @@ class LLPanelEnvironmentInfo : public LLPanel public: LLPanelEnvironmentInfo(); - // LLPanel virtual BOOL postBuild() override; virtual void onOpen(const LLSD& key) override; - // LLView + virtual BOOL isDirty() const override { return getIsDirty(); } virtual void onVisibilityChange(BOOL new_visibility) override; virtual void refresh() override; - S32 getCurrentParcelId() const { return mCurrentParcelId; } - void setCurrentParcelId(S32 parcel_id) { mCurrentParcelId = parcel_id; } + S32 getCurrentParcelId() const { return mCurrentParcelId; } + void setCurrentParcelId(S32 parcel_id) { mCurrentParcelId = parcel_id; } virtual bool isRegion() const = 0; virtual LLParcel * getParcel() = 0; @@ -95,9 +94,9 @@ protected: void setApplyProgress(bool started); void setDirtyFlag(U32 flag); void clearDirtyFlag(U32 flag); - bool getIsDirty() const { return (mDirtyFlag != 0); } - bool getIsDirtyFlag(U32 flag) const { return ((mDirtyFlag & flag) != 0); } - U32 getDirtyFlag() const { return mDirtyFlag; } + bool getIsDirty() const { return (mDirtyFlag != 0); } + bool getIsDirtyFlag(U32 flag) const { return ((mDirtyFlag & flag) != 0); } + U32 getDirtyFlag() const { return mDirtyFlag; } void onSwitchDefaultSelection(); void onSldDayLengthChanged(F32 value); @@ -121,17 +120,21 @@ protected: std::string getInventoryNameForAssetId(LLUUID asset_id); LLFloaterSettingsPicker * getSettingsPicker(); - LLFloaterEditExtDayCycle * getEditFloater(); + LLFloaterEditExtDayCycle * getEditFloater(bool create = true); LLEnvironment::EnvironmentInfo::ptr_t mCurrentEnvironment; S32 mCurrentParcelId; + private: static void onIdlePlay(void *); - LLHandle<LLFloater> mSettingsFloater; - LLHandle<LLFloater> mEditFloater; - S32 mDirtyFlag; + typedef boost::signals2::connection connection_t; + + connection_t mCommitConnection; + LLHandle<LLFloater> mSettingsFloater; + LLHandle<LLFloater> mEditFloater; + S32 mDirtyFlag; }; #endif // LL_LLPANELEXPERIENCES_H diff --git a/indra/newview/llsettingsvo.cpp b/indra/newview/llsettingsvo.cpp index c56b5df74d..719d682118 100644 --- a/indra/newview/llsettingsvo.cpp +++ b/indra/newview/llsettingsvo.cpp @@ -227,6 +227,14 @@ void LLSettingsVOBase::onAgentAssetUploadComplete(LLUUID itemId, LLUUID newAsset psettings->setAssetId(newAssetId); if (callback) callback( newAssetId, itemId, LLUUID::null, response ); + +#if 0 + std::string exprtFile = gDirUtilp->getTempDir() + gDirUtilp->getDirDelimiter() + newAssetId.asString() + ".llsd"; + + LLSettingsVOBase::exportFile(psettings, exprtFile, LLSDSerialize::LLSD_NOTATION); + + LL_WARNS("LAPRAS") << "SETTINGS File written as: '" << exprtFile << "'" << LL_ENDL; +#endif } void LLSettingsVOBase::onTaskAssetUploadComplete(LLUUID itemId, LLUUID taskId, LLUUID newAssetId, LLSD response, LLSettingsBase::ptr_t psettings, inventory_result_fn callback) @@ -579,6 +587,9 @@ void LLSettingsVOSky::updateSettings() gSky.setMoonTextures(getMoonTextureId(), getNextMoonTextureId()); gSky.setCloudNoiseTextures(getCloudNoiseTextureId(), getNextCloudNoiseTextureId()); gSky.setBloomTextures(getBloomTextureId(), getNextBloomTextureId()); + + gSky.setSunScale(getSunScale()); + gSky.setMoonScale(getMoonScale()); } void LLSettingsVOSky::applySpecial(void *ptarget) diff --git a/indra/newview/llsky.cpp b/indra/newview/llsky.cpp index 9c7fc225a0..0740878901 100644 --- a/indra/newview/llsky.cpp +++ b/indra/newview/llsky.cpp @@ -129,6 +129,22 @@ void LLSky::resetVertexBuffers() } } +void LLSky::setSunScale(F32 sun_scale) +{ + if(mVOSkyp.notNull()) + { + mVOSkyp->setSunScale(sun_scale); + } +} + +void LLSky::setMoonScale(F32 moon_scale) +{ + if(mVOSkyp.notNull()) + { + mVOSkyp->setMoonScale(moon_scale); + } +} + void LLSky::setSunTextures(const LLUUID& sun_texture, const LLUUID& sun_texture_next) { if(mVOSkyp.notNull()) { diff --git a/indra/newview/llsky.h b/indra/newview/llsky.h index d2067a58bb..e3cc567888 100644 --- a/indra/newview/llsky.h +++ b/indra/newview/llsky.h @@ -61,6 +61,9 @@ public: void setCloudNoiseTextures(const LLUUID& cloud_noise_texture, const LLUUID& cloud_noise_texture_next); void setBloomTextures(const LLUUID& bloom_texture, const LLUUID& bloom_texture_next); + void setSunScale(F32 sun_scale); + void setMoonScale(F32 moon_scale); + LLColor4 getSkyFogColor() const; void setCloudDensityAtAgent(F32 cloud_density); diff --git a/indra/newview/llviewerassetupload.cpp b/indra/newview/llviewerassetupload.cpp index 555768615a..6a81c312d3 100644 --- a/indra/newview/llviewerassetupload.cpp +++ b/indra/newview/llviewerassetupload.cpp @@ -735,6 +735,10 @@ void LLViewerAssetUpload::AssetInventoryUploadCoproc(LLCoreHttpUtil::HttpCorouti LLUploadDialog::modalUploadFinished(); return; } + if (!result.has("success")) + { + result["success"] = LLSD::Boolean((ulstate == "complete") && status); + } S32 uploadPrice = result["upload_price"].asInteger();//uploadInfo->getEconomyUploadCost(); diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp index a94ac5973b..374322ac10 100644 --- a/indra/newview/llviewernetwork.cpp +++ b/indra/newview/llviewernetwork.cpp @@ -133,7 +133,7 @@ void LLGridManager::initialize(const std::string& grid_file) addSystemGrid(LLTrans::getString("AditiGridLabel"), "util.aditi.lindenlab.com", "https://login.aditi.lindenlab.com/cgi-bin/login.cgi", - "http://aditi-secondlife.webdev.lindenlab.com/helpers/", + "https://secondlife.aditi.lindenlab.com/helpers/", DEFAULT_LOGIN_PAGE, SL_UPDATE_QUERY_URL, "https://my.aditi.lindenlab.com/", diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp index 714170a513..6899424cf6 100644 --- a/indra/newview/llviewertexteditor.cpp +++ b/indra/newview/llviewertexteditor.cpp @@ -1123,7 +1123,9 @@ BOOL LLViewerTextEditor::openEmbeddedItem(LLPointer<LLInventoryItem> item, llwch case LLAssetType::AT_CALLINGCARD: openEmbeddedCallingcard( item, wc ); return TRUE; - + case LLAssetType::AT_SETTINGS: + openEmbeddedSetting(item, wc); + return TRUE; case LLAssetType::AT_NOTECARD: case LLAssetType::AT_LSL_TEXT: case LLAssetType::AT_CLOTHING: @@ -1198,6 +1200,18 @@ void LLViewerTextEditor::openEmbeddedCallingcard( LLInventoryItem* item, llwchar } } +void LLViewerTextEditor::openEmbeddedSetting(LLInventoryItem* item, llwchar wc) +{ + if (LLEnvironment::instance().isInventoryEnabled()) + { + showCopyToInvDialog(item, wc); + } + else + { + LLNotificationsUtil::add("NoEnvironmentSettings"); + } +} + void LLViewerTextEditor::showUnsavedAlertDialog( LLInventoryItem* item ) { LLSD payload; diff --git a/indra/newview/llviewertexteditor.h b/indra/newview/llviewertexteditor.h index 44f104dde1..a6d7fef409 100644 --- a/indra/newview/llviewertexteditor.h +++ b/indra/newview/llviewertexteditor.h @@ -107,6 +107,7 @@ private: void openEmbeddedSound( LLInventoryItem* item, llwchar wc ); void openEmbeddedLandmark( LLPointer<LLInventoryItem> item_ptr, llwchar wc ); void openEmbeddedCallingcard( LLInventoryItem* item, llwchar wc); + void openEmbeddedSetting(LLInventoryItem* item, llwchar wc); void showCopyToInvDialog( LLInventoryItem* item, llwchar wc ); void showUnsavedAlertDialog( LLInventoryItem* item ); diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp index 64be033fdc..81632796e4 100644 --- a/indra/newview/llvosky.cpp +++ b/indra/newview/llvosky.cpp @@ -775,6 +775,16 @@ LLDrawable *LLVOSky::createDrawable(LLPipeline *pipeline) return mDrawable; } +void LLVOSky::setSunScale(F32 sun_scale) +{ + mSunScale = sun_scale; +} + +void LLVOSky::setMoonScale(F32 moon_scale) +{ + mMoonScale = moon_scale; +} + void LLVOSky::setSunTextures(const LLUUID& sun_texture, const LLUUID& sun_texture_next) { // We test the UUIDs here because we explicitly do not want the default image returned by getFetchedTexture in that case... @@ -955,8 +965,8 @@ BOOL LLVOSky::updateGeometry(LLDrawable *drawable) right.normalize(); up.normalize(); - bool draw_sun = updateHeavenlyBodyGeometry(drawable, FACE_SUN, mSun, up, right); - bool draw_moon = updateHeavenlyBodyGeometry(drawable, FACE_MOON, mMoon, up, right); + bool draw_sun = updateHeavenlyBodyGeometry(drawable, mSunScale, FACE_SUN, mSun, up, right); + bool draw_moon = updateHeavenlyBodyGeometry(drawable, mMoonScale, FACE_MOON, mMoon, up, right); draw_sun &= LLEnvironment::getInstance()->getIsSunUp(); draw_moon &= LLEnvironment::getInstance()->getIsMoonUp(); @@ -987,7 +997,7 @@ BOOL LLVOSky::updateGeometry(LLDrawable *drawable) return TRUE; } -bool LLVOSky::updateHeavenlyBodyGeometry(LLDrawable *drawable, const S32 f, LLHeavenBody& hb, const LLVector3 &up, const LLVector3 &right) +bool LLVOSky::updateHeavenlyBodyGeometry(LLDrawable *drawable, F32 scale, const S32 f, LLHeavenBody& hb, const LLVector3 &up, const LLVector3 &right) { mHeavenlyBodyUpdated = TRUE ; @@ -1010,8 +1020,8 @@ bool LLVOSky::updateHeavenlyBodyGeometry(LLDrawable *drawable, const S32 f, LLHe F32 horiz_enlargement = 1 + enlargm_factor * 0.3f; F32 vert_enlargement = 1 + enlargm_factor * 0.2f; - const LLVector3 scaled_right = horiz_enlargement * HEAVENLY_BODY_DIST * HEAVENLY_BODY_FACTOR * hb.getDiskRadius() * hb_right; - const LLVector3 scaled_up = vert_enlargement * HEAVENLY_BODY_DIST * HEAVENLY_BODY_FACTOR * hb.getDiskRadius() * hb_up; + const LLVector3 scaled_right = horiz_enlargement * scale * HEAVENLY_BODY_DIST * HEAVENLY_BODY_FACTOR * hb.getDiskRadius() * hb_right; + const LLVector3 scaled_up = vert_enlargement * scale * HEAVENLY_BODY_DIST * HEAVENLY_BODY_FACTOR * hb.getDiskRadius() * hb_up; LLVector3 v_clipped[4]; diff --git a/indra/newview/llvosky.h b/indra/newview/llvosky.h index d8039b7f80..4943c48f7c 100644 --- a/indra/newview/llvosky.h +++ b/indra/newview/llvosky.h @@ -236,7 +236,7 @@ public: void setSunDirectionCFR(const LLVector3 &sun_direction); void setMoonDirectionCFR(const LLVector3 &moon_direction); - bool updateHeavenlyBodyGeometry(LLDrawable *drawable, const S32 side, LLHeavenBody& hb, const LLVector3 &up, const LLVector3 &right); + bool updateHeavenlyBodyGeometry(LLDrawable *drawable, F32 scale, const S32 side, LLHeavenBody& hb, const LLVector3 &up, const LLVector3 &right); void updateReflectionGeometry(LLDrawable *drawable, F32 H, const LLHeavenBody& HB); F32 getWorldScale() const { return mWorldScale; } @@ -278,6 +278,9 @@ public: void setCloudNoiseTextures(const LLUUID& cloud_noise_texture, const LLUUID& cloud_noise_texture_next); void setBloomTextures(const LLUUID& bloom_texture, const LLUUID& bloom_texture_next); + void setSunScale(F32 sun_scale); + void setMoonScale(F32 sun_scale); + void forceSkyUpdate(void) { mForceUpdate = TRUE; } public: @@ -297,6 +300,9 @@ protected: LLPointer<LLViewerFetchedTexture> mCloudNoiseTexturep[2]; LLPointer<LLViewerFetchedTexture> mBloomTexturep[2]; + F32 mSunScale = 1.0f; + F32 mMoonScale = 1.0f; + static S32 sResolution; static S32 sTileResX; static S32 sTileResY; diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index a177dbadd5..176fbd49e9 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -695,6 +695,10 @@ with the same filename but different name <texture name="VirtualTrackball_Rotate_Left" file_name="widgets/track_control_rotate_left_side.png" /> <texture name="VirtualTrackball_Rotate_Right" file_name="widgets/track_control_rotate_right_side.png" /> <texture name="VirtualTrackball_Rotate_Top" file_name="widgets/track_control_rotate_top.png" /> + <texture name="VirtualTrackball_Rotate_Bottom_Active" file_name="widgets/track_control_rotate_bottom_active.png" /> + <texture name="VirtualTrackball_Rotate_Left_Active" file_name="widgets/track_control_rotate_left_side_active.png" /> + <texture name="VirtualTrackball_Rotate_Right_Active" file_name="widgets/track_control_rotate_right_side_active.png" /> + <texture name="VirtualTrackball_Rotate_Top_Active" file_name="widgets/track_control_rotate_top_active.png" /> <texture name="VirtualTrackball_Sphere" file_name="widgets/track_control_sphere.png" /> <texture name="VirtualTrackball_Sun_Back" file_name="widgets/track_control_sun_back.png" /> <texture name="VirtualTrackball_Sun_Front" file_name="widgets/track_control_sun_front.png" /> diff --git a/indra/newview/skins/default/textures/widgets/track_control_rotate_bottom_active.png b/indra/newview/skins/default/textures/widgets/track_control_rotate_bottom_active.png Binary files differnew file mode 100644 index 0000000000..911618b08e --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/track_control_rotate_bottom_active.png diff --git a/indra/newview/skins/default/textures/widgets/track_control_rotate_left_side_active.png b/indra/newview/skins/default/textures/widgets/track_control_rotate_left_side_active.png Binary files differnew file mode 100644 index 0000000000..2fe04b93f1 --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/track_control_rotate_left_side_active.png diff --git a/indra/newview/skins/default/textures/widgets/track_control_rotate_right_side_active.png b/indra/newview/skins/default/textures/widgets/track_control_rotate_right_side_active.png Binary files differnew file mode 100644 index 0000000000..824051562f --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/track_control_rotate_right_side_active.png diff --git a/indra/newview/skins/default/textures/widgets/track_control_rotate_top_active.png b/indra/newview/skins/default/textures/widgets/track_control_rotate_top_active.png Binary files differnew file mode 100644 index 0000000000..9a7493703b --- /dev/null +++ b/indra/newview/skins/default/textures/widgets/track_control_rotate_top_active.png diff --git a/indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml b/indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml index 1ccd953b3b..c3f94f9aa3 100644 --- a/indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml +++ b/indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml @@ -3,13 +3,14 @@ layout="topleft" name="env_edit_extdaycycle" help_topic="day_presets" - save_rect="true" + save_rect="false" title="Edit Day Cycle" width="705" height="650" min_width="705" min_height="650" - can_resize="true"> + single_instance="true" + can_resize="false"> <!-- obsolete?, add as hint for 'save' button? --> <string name="title_new">Create a New Day Cycle</string> @@ -400,9 +401,17 @@ width="90" label="Add Frame" left_pad="175" - top_delta="-12" + top_delta="-20" name="add_frame" /> <button + follows="top|left" + height="23" + width="90" + label="Load Frame" + top_pad="0" + left_delta="0" + name="btn_load_frame" /> + <button follows="left|top" height="23" width="90" @@ -421,36 +430,18 @@ visible="true"> <!--bg_alpha_color="blue" background_visible="true" --> - <icon - border="1" - bevel_style="out" + <text name="icn_lock_edit" - layout="bottomleft" follows="bottom" - image_name="Locked_Icon" - bottom="4" - left="5" - height="15" - width="15" - tab_stop="false" - visible="false" - tool_tip="Select a key frame above to edit settings"/> - <button - name="btn_load_frame" - follows="top" - image_overlay="Command_Inventory_Icon" - image_disabled="PushButton_Disabled" - image_disabled_selected="PushButton_Disabled" - image_selected="PushButton_Selected" - image_unselected="PushButton_Off" - hover_glow_amount="0.15" - auto_resize="false" - layout="topleft" - height="30" - width="30" - left="25" - top="1" - tool_tip="Replace frame with settings from inventory"/> + height="10" + layout="bottomleft" + left_delta="15" + top_pad="15" + font="SansSerif" + text_color="Yellow" + width="500"> +Select a key frame from the timeline above to edit settings. + </text> </layout_panel> <layout_panel name="frame_settings_water" auto_resize="true" @@ -537,7 +528,7 @@ layout="topleft" left_delta="0" top_pad="5" - name="advanced_atmo_panel" /> + name="sky_density_panel" /> </tab_container> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/en/floater_fixedenvironment.xml b/indra/newview/skins/default/xui/en/floater_fixedenvironment.xml index f88618fb71..36462dcd02 100644 --- a/indra/newview/skins/default/xui/en/floater_fixedenvironment.xml +++ b/indra/newview/skins/default/xui/en/floater_fixedenvironment.xml @@ -2,20 +2,19 @@ <floater can_minimize="false" can_tear_off="false" - can_resize="true" + can_resize="false" can_drag_on_left="false" can_close="true" - can_dock="true" + can_dock="false" bevel_style="in" - height="500" + height="550" layout="topleft" name="Fixed Environment" save_rect="true" title="Fixed Environment" - save_dock_state="true" - save_visibility="true" + save_visibility="false" single_instance="true" - width="650"> + width="750"> <layout_stack name="floater_stack" left="5" top="5" diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index f011fe0aaa..2ab22cb565 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -11183,5 +11183,19 @@ Settings are not supported on this region. Please move to a settings enabled region and retry your action. <tag>fail</tag> </notification> + + <notification + icon="alertmodal.tga" + name="SettingsConfirmLoss" + type="alertmodal"> +You are about to lose the changes you have made to this [TYPE] named "[NAME]". +Are you sure you want to continue? + <tag>confirm</tag> + <usetemplate + ignoretext="Are you sure you want to lose changes?" + name="okcancelignore" + notext="No" + yestext="Yes"/> + </notification> </notifications> 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 3a1a8c432a..557e093f51 100644 --- a/indra/newview/skins/default/xui/en/panel_region_environment.xml +++ b/indra/newview/skins/default/xui/en/panel_region_environment.xml @@ -29,8 +29,8 @@ valign="top" top_pad="20" text_color="white"> -Parcel environmental settings are -disabled on legacy regions. +No Parcel parcel is selected. Environmental +settings are disabled. </text> </layout_panel> <layout_panel diff --git a/indra/newview/skins/default/xui/en/panel_settings_sky_density.xml b/indra/newview/skins/default/xui/en/panel_settings_sky_density.xml index 05bd3c336a..b97dfcd0fe 100644 --- a/indra/newview/skins/default/xui/en/panel_settings_sky_density.xml +++ b/indra/newview/skins/default/xui/en/panel_settings_sky_density.xml @@ -1,32 +1,262 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <panel - border="true" - follows="all" - label="Density" - name="panel_settings_sky_density" - layout="topleft" - left="0" - top="0" - width="320" - height="240"> -<tab_container> - <panel> - name="panel_settings_sky_density_rayleigh" - <densityctrl> - name = "density_rayleigh" - </densityctrl> - </panel> - <panel> - name="panel_settings_sky_density_mie" - <densityctrl> - name = "density_mie" - </densityctrl> - </panel> - <panel> - name="panel_settings_sky_density_absorption" - <densityctrl> - name = "density_absorption" - </densityctrl> - </panel> -</tab_container> -</panel> + border="true" + follows="all" + label="Density" + layout="topleft" + left="0" + help_topic="sky_density" + name="panel_settings_sky_density" + top="0"> + <layout_stack + follows="all" + layout="topleft" + left="5" + top="5" + right="-5" + bottom="-5" + orientation="vertical"> + <layout_panel + border="true" + bevel_style="in" + auto_resize="true" + user_resize="true" + visible="true" + height="28"> + <slider + decimal_digits="2" + follows="left|top" + height="16" + increment="0.01" + initial_value="0" + layout="topleft" + left_delta="5" + min_val="0" + max_val="1" + name="rayleigh_exponential" + label="Rayleigh Exponential Term:" + top_delta="8" + width="400" + can_edit_text="true"/> + <slider + decimal_digits="2" + follows="left|top" + height="16" + increment="0.01" + initial_value="0" + layout="topleft" + left_delta="5" + min_val="0" + max_val="1" + name="rayleigh_exponential_scale" + label="Rayleigh Exponential Scale:" + top_delta="8" + width="400" + can_edit_text="true"/> + <slider + decimal_digits="2" + follows="left|top" + height="16" + increment="0.01" + initial_value="0" + layout="topleft" + left_delta="5" + min_val="0" + max_val="1" + name="rayleigh_linear" + label="Rayleigh Linear Term:" + top_delta="8" + width="400" + can_edit_text="true"/> + <slider + decimal_digits="2" + follows="left|top" + height="16" + increment="0.01" + initial_value="0" + layout="topleft" + left_delta="5" + min_val="0" + max_val="1" + name="rayleigh_constant" + label="Rayleigh Constant Term:" + top_delta="8" + width="400" + can_edit_text="true"/> + </layout_panel> + <layout_panel + border="true" + bevel_style="in" + auto_resize="true" + user_resize="true" + visible="true" + height="28"> + <slider + decimal_digits="2" + follows="left|top" + height="16" + increment="0.01" + initial_value="0" + layout="topleft" + left_delta="5" + min_val="0" + max_val="3.0" + name="mie_exponential" + label="Mie Exponential Term:" + top_delta="8" + width="400" + can_edit_text="true"/> + <slider + decimal_digits="2" + follows="left|top" + height="16" + increment="0.01" + initial_value="0" + layout="topleft" + left_delta="5" + min_val="0" + max_val="1" + name="mie_exponential_scale" + label="Mie Exponential Scale:" + top_delta="8" + width="400" + can_edit_text="true"/> + <slider + decimal_digits="2" + follows="left|top" + height="16" + increment="0.01" + initial_value="0" + layout="topleft" + left_delta="5" + min_val="0" + max_val="3.0" + name="mie_linear" + label="Mie Linear Term:" + top_delta="8" + width="400" + can_edit_text="true"/> + <slider + decimal_digits="2" + follows="left|top" + height="16" + increment="0.01" + initial_value="0" + layout="topleft" + left_delta="5" + min_val="0" + max_val="10" + name="mie_constant" + label="Mie Constant Term:" + top_delta="8" + width="400" + can_edit_text="true"/> + <slider + decimal_digits="2" + follows="left|top" + height="16" + increment="0.01" + initial_value="0" + layout="topleft" + left_delta="5" + min_val="0.2" + max_val="1.8" + name="mie_aniso_factor" + label="Mie Aniso Factor:" + top_delta="8" + width="400" + can_edit_text="true"/> + </layout_panel> + <layout_panel + border="true" + bevel_style="in" + auto_resize="true" + user_resize="true" + visible="true" + height="28"> + <slider + decimal_digits="2" + follows="left|top" + height="16" + increment="0.01" + initial_value="0" + layout="topleft" + left_delta="5" + min_val="0" + max_val="1" + name="absorption_exponential" + label="Absorption Exponential Term:" + top_delta="8" + width="400" + can_edit_text="true"/> + <slider + decimal_digits="2" + follows="left|top" + height="16" + increment="0.01" + initial_value="0" + layout="topleft" + left_delta="5" + min_val="0" + max_val="1" + name="absorption_exponential_scale" + label="Absorption Exponential Scale:" + top_delta="8" + width="400" + can_edit_text="true"/> + <slider + decimal_digits="2" + follows="left|top" + height="16" + increment="0.01" + initial_value="0" + layout="topleft" + left_delta="5" + min_val="0" + max_val="1" + name="absorption_linear" + label="Absorption Linear Term:" + top_delta="8" + width="400" + can_edit_text="true"/> + <slider + decimal_digits="2" + follows="left|top" + height="16" + increment="0.01" + initial_value="0" + layout="topleft" + left_delta="5" + min_val="0" + max_val="1" + name="absorption_constant" + label="Absorption Constant Term:" + top_delta="8" + width="400" + can_edit_text="true"/> + </layout_panel> + <layout_panel + border="true" + bevel_style="in" + auto_resize="true" + user_resize="true" + visible="true" + height="16"> + <slider + decimal_digits="2" + follows="left|top" + height="16" + increment="1" + initial_value="0" + layout="topleft" + left_delta="5" + min_val="1000" + max_val="40000" + name="max_altitude" + label="Max Altitude:" + top_delta="8" + width="400" + can_edit_text="true"/> + </layout_panel> + </layout_stack> +</panel> diff --git a/indra/newview/skins/default/xui/en/panel_settings_sky_sunmoon.xml b/indra/newview/skins/default/xui/en/panel_settings_sky_sunmoon.xml index 586aff4bb8..4b72bbbe0e 100644 --- a/indra/newview/skins/default/xui/en/panel_settings_sky_sunmoon.xml +++ b/indra/newview/skins/default/xui/en/panel_settings_sky_sunmoon.xml @@ -260,7 +260,7 @@ left_delta="5" min_val="0.25" max_val="20" - name="sun_scale" + name="moon_scale" top_delta="15" width="130" can_edit_text="true"/> diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index c0481d1a28..3a882a73d3 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2780,6 +2780,7 @@ If you continue to receive this message, please contact Second Life support for <!-- Environment settings --> <string name="LocalSettings">Local Settings</string> <string name="RegionSettings">Region Settings</string> + <string name="NoEnvironmentSettings">This Region does not support environmental settings.</string> <!-- panel classified --> <string name="ClassifiedClicksTxt">Clicks: [TELEPORT] teleport, [MAP] map, [PROFILE] profile</string> diff --git a/indra/newview/skins/default/xui/en/widgets/sun_moon_trackball.xml b/indra/newview/skins/default/xui/en/widgets/sun_moon_trackball.xml index 3a9655b317..0e729c821a 100644 --- a/indra/newview/skins/default/xui/en/widgets/sun_moon_trackball.xml +++ b/indra/newview/skins/default/xui/en/widgets/sun_moon_trackball.xml @@ -43,26 +43,26 @@ <sun_moon_trackball.button_rotate_top name="btn_rotate_top" image_unselected="VirtualTrackball_Rotate_Top" - image_selected="VirtualTrackball_Rotate_Top" - image_disabled="VirtualTrackball_Rotate_Top" /> + image_selected="VirtualTrackball_Rotate_Top_Active" + image_disabled="Blank" /> <sun_moon_trackball.button_rotate_bottom name="btn_rotate_bottom" image_unselected="VirtualTrackball_Rotate_Bottom" - image_selected="VirtualTrackball_Rotate_Bottom" - image_disabled="VirtualTrackball_Rotate_Bottom" /> + image_selected="VirtualTrackball_Rotate_Bottom_Active" + image_disabled="Blank" /> <sun_moon_trackball.button_rotate_left name="btn_rotate_left" image_unselected="VirtualTrackball_Rotate_Left" - image_selected="VirtualTrackball_Rotate_Left" - image_disabled="VirtualTrackball_Rotate_Left" /> + image_selected="VirtualTrackball_Rotate_Left_Active" + image_disabled="Blank" /> <sun_moon_trackball.button_rotate_right name="btn_rotate_right" image_unselected="VirtualTrackball_Rotate_Right" - image_selected="VirtualTrackball_Rotate_Right" - image_disabled="VirtualTrackball_Rotate_Right" /> + image_selected="VirtualTrackball_Rotate_Right_Active" + image_disabled="Blank" /> </sun_moon_trackball> diff --git a/indra/newview/tests/llviewernetwork_test.cpp b/indra/newview/tests/llviewernetwork_test.cpp index d1dddf8e7e..fe81fd63ea 100644 --- a/indra/newview/tests/llviewernetwork_test.cpp +++ b/indra/newview/tests/llviewernetwork_test.cpp @@ -258,7 +258,7 @@ namespace tut std::string("https://login.aditi.lindenlab.com/cgi-bin/login.cgi")); ensure_equals("Aditi helper uri", LLGridManager::getInstance()->getHelperURI("util.aditi.lindenlab.com"), - std::string("http://aditi-secondlife.webdev.lindenlab.com/helpers/")); + std::string("https://secondlife.aditi.lindenlab.com/helpers/")); ensure_equals("Aditi login page", LLGridManager::getInstance()->getLoginPage("util.aditi.lindenlab.com"), std::string("https://viewer-splash.secondlife.com/")); @@ -330,7 +330,7 @@ namespace tut std::string("https://login.aditi.lindenlab.com/cgi-bin/login.cgi")); ensure_equals("Aditi helper uri", LLGridManager::getInstance()->getHelperURI("util.aditi.lindenlab.com"), - std::string("http://aditi-secondlife.webdev.lindenlab.com/helpers/")); + std::string("https://secondlife.aditi.lindenlab.com/helpers/")); ensure_equals("Aditi login page", LLGridManager::getInstance()->getLoginPage("util.aditi.lindenlab.com"), std::string("https://viewer-splash.secondlife.com/")); |