From 5c4ae5b11a44ab4711f0148cb721f35be9f18100 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Thu, 23 Feb 2017 17:50:36 -0500 Subject: [PATCH 001/108] STORM-2145 Camera Presets -- some initial work --- doc/contributions.txt | 2 + indra/llui/llfloater.cpp | 12 +- indra/newview/CMakeLists.txt | 2 + indra/newview/app_settings/settings.xml | 52 +++ indra/newview/llagentcamera.cpp | 2 + indra/newview/llagentcamera.h | 5 +- indra/newview/llfloatercamera.cpp | 20 ++ indra/newview/llfloatercamera.h | 2 + indra/newview/llfloaterdeleteprefpreset.cpp | 12 +- indra/newview/llfloaterpreference.cpp | 110 ++++++- indra/newview/llfloaterpreference.h | 15 +- .../newview/llpanelpresetscamerapulldown.cpp | 236 ++++++++++++++ indra/newview/llpanelpresetscamerapulldown.h | 62 ++++ indra/newview/llpanelpresetspulldown.cpp | 2 +- indra/newview/llpresetsmanager.cpp | 297 ++++++++++++------ indra/newview/llpresetsmanager.h | 19 +- indra/newview/llstatusbar.cpp | 44 ++- indra/newview/llstatusbar.h | 6 +- .../textures/icons/Presets_Icon_Camera.png | Bin 0 -> 1381 bytes ...sets_Icon.png => Presets_Icon_Graphic.png} | Bin .../skins/default/textures/textures.xml | 3 +- .../skins/default/xui/en/floater_camera.xml | 38 ++- .../default/xui/en/floater_preferences.xml | 2 +- .../xui/en/panel_preferences_graphics1.xml | 16 +- .../default/xui/en/panel_preferences_move.xml | 123 +++++++- .../xui/en/panel_presets_camera_pulldown.xml | 69 ++++ .../skins/default/xui/en/panel_status_bar.xml | 14 +- 27 files changed, 1028 insertions(+), 137 deletions(-) create mode 100644 indra/newview/llpanelpresetscamerapulldown.cpp create mode 100644 indra/newview/llpanelpresetscamerapulldown.h create mode 100644 indra/newview/skins/default/textures/icons/Presets_Icon_Camera.png rename indra/newview/skins/default/textures/icons/{Presets_Icon.png => Presets_Icon_Graphic.png} (100%) create mode 100644 indra/newview/skins/default/xui/en/panel_presets_camera_pulldown.xml diff --git a/doc/contributions.txt b/doc/contributions.txt index 521be7b7e2..a84ac7d533 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -751,6 +751,7 @@ Jonathan Yap STORM-2088 STORM-2094 STORM-2099 + STORM-2145 Kadah Coba STORM-1060 STORM-1843 @@ -1460,6 +1461,7 @@ Whirly Fizzle STORM-1930 BUG-6659 STORM-2078 + BUG-17349 Whoops Babii VWR-631 VWR-1640 diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 4f664a1ccc..8b0e19e4f6 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -1839,7 +1839,7 @@ void LLFloater::onClickCloseBtn(bool app_quitting) // virtual void LLFloater::draw() { - const F32 alpha = getCurrentTransparency(); + F32 alpha = getCurrentTransparency(); // draw background if( isBackgroundVisible() ) @@ -1854,6 +1854,16 @@ void LLFloater::draw() LLUIImage* image = NULL; LLColor4 color; LLColor4 overlay_color; + std::string help_topic; + if (this->findHelpTopic(help_topic)) + { + if("camera_floater" == help_topic) + { + alpha = llmin(LLCachedControl(gSavedSettings, "CameraOpacity"), + LLCachedControl(gSavedSettings, "ActiveFloaterTransparency")); + } + } + if (isBackgroundOpaque()) { // NOTE: image may not be set diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index d6d7d2c563..395aa785bf 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -460,6 +460,7 @@ set(viewer_SOURCE_FILES llpanelplaceprofile.cpp llpanelplaces.cpp llpanelplacestab.cpp + llpanelpresetscamerapulldown.cpp llpanelpresetspulldown.cpp llpanelprimmediacontrols.cpp llpanelprofile.cpp @@ -1070,6 +1071,7 @@ set(viewer_HEADER_FILES llpanelplaceprofile.h llpanelplaces.h llpanelplacestab.h + llpanelpresetscamerapulldown.h llpanelpresetspulldown.h llpanelprimmediacontrols.h llpanelprofile.h diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 6621b9e269..541a5d070d 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -15975,6 +15975,58 @@ Value 0 + CameraOpacity + + Comment + Opacity of the Camera Controls floater + Persist + 1 + Type + F32 + Value + 1.0 + + PresetCameraActive + + Comment + Name of currently selected preference + Persist + 1 + Type + String + Value + + + CameraOffsetCustom0 + + Comment + Customized camera offset from avatar + Persist + 1 + Type + Vector3 + Value + + -3.0 + 0.0 + 0.75 + + + FocusOffsetCustom0 + + Comment + Custom focus point offset relative to avatar (x-axis is forward) + Persist + 1 + Type + Vector3D + Value + + 1.0 + 0.0 + 1.0 + + diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index e335eabd1a..1b006a2311 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -208,10 +208,12 @@ void LLAgentCamera::init() mCameraOffsetInitial[CAMERA_PRESET_REAR_VIEW] = gSavedSettings.getControl("CameraOffsetRearView"); mCameraOffsetInitial[CAMERA_PRESET_FRONT_VIEW] = gSavedSettings.getControl("CameraOffsetFrontView"); mCameraOffsetInitial[CAMERA_PRESET_GROUP_VIEW] = gSavedSettings.getControl("CameraOffsetGroupView"); + mCameraOffsetInitial[CAMERA_PRESET_CUSTOM0] = gSavedSettings.getControl("CameraOffsetCustom0"); mFocusOffsetInitial[CAMERA_PRESET_REAR_VIEW] = gSavedSettings.getControl("FocusOffsetRearView"); mFocusOffsetInitial[CAMERA_PRESET_FRONT_VIEW] = gSavedSettings.getControl("FocusOffsetFrontView"); mFocusOffsetInitial[CAMERA_PRESET_GROUP_VIEW] = gSavedSettings.getControl("FocusOffsetGroupView"); + mFocusOffsetInitial[CAMERA_PRESET_CUSTOM0] = gSavedSettings.getControl("FocusOffsetCustom0"); mCameraCollidePlane.clearVec(); mCurrentCameraDistance = getCameraOffsetInitial().magVec() * gSavedSettings.getF32("CameraOffsetScale"); diff --git a/indra/newview/llagentcamera.h b/indra/newview/llagentcamera.h index ab793ff316..29a1891d82 100644 --- a/indra/newview/llagentcamera.h +++ b/indra/newview/llagentcamera.h @@ -56,7 +56,10 @@ enum ECameraPreset CAMERA_PRESET_FRONT_VIEW, /** "Above and to the left, over the shoulder, pulled back a little on the zoom" */ - CAMERA_PRESET_GROUP_VIEW + CAMERA_PRESET_GROUP_VIEW, + + /** Current view when a preset is saved */ + CAMERA_PRESET_CUSTOM0 }; //------------------------------------------------------------------------ diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index 20d650fa37..777963bec5 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -42,6 +42,7 @@ #include "llslider.h" #include "llfirstuse.h" #include "llhints.h" +#include "lltabcontainer.h" static LLDefaultChildRegistry::Register r("panel_camera_item"); @@ -353,6 +354,7 @@ LLFloaterCamera::LLFloaterCamera(const LLSD& val) { LLHints::registerHintTarget("view_popup", getHandle()); mCommitCallbackRegistrar.add("CameraPresets.ChangeView", boost::bind(&LLFloaterCamera::onClickCameraItem, _2)); + mCommitCallbackRegistrar.add("Presets.GoViewPrefs", boost::bind(&LLFloaterCamera::onViewButtonClick, this, _2)); } // virtual @@ -376,6 +378,24 @@ BOOL LLFloaterCamera::postBuild() return LLFloater::postBuild(); } +void LLFloaterCamera::onViewButtonClick(const LLSD& user_data) +{ + // bring up the prefs floater + LLFloater* prefsfloater = LLFloaterReg::showInstance("preferences"); + if (prefsfloater) + { + // grab the 'view' panel from the preferences floater and + // bring it the front! + LLTabContainer* tabcontainer = prefsfloater->getChild("pref core"); + LLPanel* graphicspanel = prefsfloater->getChild("move"); + if (tabcontainer && graphicspanel) + { + tabcontainer->selectTabPanel(graphicspanel); + } + } +} + + void LLFloaterCamera::fillFlatlistFromPanel (LLFlatListView* list, LLPanel* panel) { // copying child list and then iterating over a copy, because list itself diff --git a/indra/newview/llfloatercamera.h b/indra/newview/llfloatercamera.h index 4d6d03f22d..3601813bc1 100644 --- a/indra/newview/llfloatercamera.h +++ b/indra/newview/llfloatercamera.h @@ -91,6 +91,8 @@ private: /*virtual*/ BOOL postBuild(); + void onViewButtonClick(const LLSD& user_data); + ECameraControlMode determineMode(); /* resets to the previous mode */ diff --git a/indra/newview/llfloaterdeleteprefpreset.cpp b/indra/newview/llfloaterdeleteprefpreset.cpp index 7dedbbf984..bd62849b42 100644 --- a/indra/newview/llfloaterdeleteprefpreset.cpp +++ b/indra/newview/llfloaterdeleteprefpreset.cpp @@ -60,13 +60,15 @@ void LLFloaterDeletePrefPreset::onOpen(const LLSD& key) { mSubdirectory = key.asString(); std::string floater_title = getString(std::string("title_") + mSubdirectory); - setTitle(floater_title); LLComboBox* combo = getChild("preset_combo"); - EDefaultOptions option = DEFAULT_HIDE; - LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, combo, option); + bool action; + action = LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, combo, option); + + LLButton* delete_btn = getChild("delete"); + delete_btn->setEnabled(action); } void LLFloaterDeletePrefPreset::onBtnDelete() @@ -87,12 +89,10 @@ void LLFloaterDeletePrefPreset::onBtnDelete() void LLFloaterDeletePrefPreset::onPresetsListChange() { LLComboBox* combo = getChild("preset_combo"); - LLButton* delete_btn = getChild("delete"); EDefaultOptions option = DEFAULT_HIDE; - LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, combo, option); - delete_btn->setEnabled(0 != combo->getItemCount()); + LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, combo, option); } void LLFloaterDeletePrefPreset::onBtnCancel() diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 100ee5ab72..6e5a773c33 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -768,7 +768,8 @@ void LLFloaterPreference::onOpen(const LLSD& key) saveSettings(); // Make sure there is a default preference file - LLPresetsManager::getInstance()->createMissingDefault(); + LLPresetsManager::getInstance()->createMissingDefault(PRESETS_CAMERA); + LLPresetsManager::getInstance()->createMissingDefault(PRESETS_GRAPHIC); bool started = (LLStartUp::getStartupState() == STATE_STARTED); @@ -776,9 +777,23 @@ void LLFloaterPreference::onOpen(const LLSD& key) LLButton* save_btn = findChild("PrefSaveButton"); LLButton* delete_btn = findChild("PrefDeleteButton"); - load_btn->setEnabled(started); - save_btn->setEnabled(started); - delete_btn->setEnabled(started); + if (load_btn && save_btn && delete_btn) + { + load_btn->setEnabled(started); + save_btn->setEnabled(started); + delete_btn->setEnabled(started); + } + + LLButton* load_camera_btn = findChild("PrefCameraLoadButton"); + LLButton* save_camera_btn = findChild("PrefCameraSaveButton"); + LLButton* delete_camera_btn = findChild("PrefCameraDeleteButton"); + + if (load_camera_btn && save_camera_btn && delete_camera_btn) + { + load_camera_btn->setEnabled(started); + save_camera_btn->setEnabled(started); + delete_camera_btn->setEnabled(started); + } } void LLFloaterPreference::onVertexShaderEnable() @@ -2128,6 +2143,11 @@ void LLFloaterPreference::changed() } +void LLFloaterPreference::saveCameraPreset(std::string& preset) +{ + mSavedCameraPreset = preset; +} + void LLFloaterPreference::saveGraphicsPreset(std::string& preset) { mSavedGraphicsPreset = preset; @@ -2474,6 +2494,86 @@ private: static LLPanelInjector t_pref_graph("panel_preference_graphics"); static LLPanelInjector t_pref_privacy("panel_preference_privacy"); +static LLPanelInjector t_pref_view("panel_preference_view"); + +BOOL LLPanelPreferenceView::postBuild() +{ + setPresetText(); + + LLPresetsManager* presetsMgr = LLPresetsManager::getInstance(); + if (presetsMgr) + { + presetsMgr->setPresetListChangeCameraCallback(boost::bind(&LLPanelPreferenceView::onPresetsListChangeCamera, this)); + presetsMgr->createMissingDefault(PRESETS_CAMERA); // a no-op after the first time, but that's ok + } + + return LLPanelPreference::postBuild(); +} + +void LLPanelPreferenceView::onPresetsListChangeCamera() +{ + LLPresetsManager* presetsMgr = LLPresetsManager::getInstance(); + if (presetsMgr) + { + presetsMgr->setCameraDirty(false); + } + + setPresetText(); + + LLFloaterPreference* instance = LLFloaterReg::findTypedInstance("preferences"); + if (instance && !gSavedSettings.getString("PresetCameraActive").empty()) + { + instance->saveSettings(); //make cancel work correctly after changing the preset + } +} + +void LLPanelPreferenceView::draw() +{ + setPresetText(); + LLPanelPreference::draw(); +} + +void LLPanelPreferenceView::setPresetText() +{ + LLTextBox* preset_text = getChild("preset_camera_text"); + + std::string preset_camera_active = gSavedSettings.getString("PresetCameraActive"); + + if (!preset_camera_active.empty() && preset_camera_active != preset_text->getText()) + { + LLFloaterPreference* instance = LLFloaterReg::findTypedInstance("preferences"); + if (instance) + { + instance->saveCameraPreset(preset_camera_active); + } + } + + LLPresetsManager* presetsMgr = LLPresetsManager::getInstance(); + if (presetsMgr) + { + if (presetsMgr->isCameraDirty() && !preset_camera_active.empty()) + { + gSavedSettings.setString("PresetCameraActive", ""); + preset_camera_active.clear(); + // This doesn't seem to cause an infinite recursion. This trigger is needed to cause the pulldown + // panel to update. + LLPresetsManager::getInstance()->triggerChangeCameraSignal(); + } + } + + if (!preset_camera_active.empty()) + { + if (preset_camera_active == PRESETS_DEFAULT) + { + preset_camera_active = LLTrans::getString(PRESETS_DEFAULT); + } + preset_text->setText(preset_camera_active); + } + else + { + preset_text->setText(LLTrans::getString("none_paren_cap")); + } +} BOOL LLPanelPreferenceGraphics::postBuild() { @@ -2497,7 +2597,7 @@ BOOL LLPanelPreferenceGraphics::postBuild() LLPresetsManager* presetsMgr = LLPresetsManager::getInstance(); presetsMgr->setPresetListChangeCallback(boost::bind(&LLPanelPreferenceGraphics::onPresetsListChange, this)); - presetsMgr->createMissingDefault(); // a no-op after the first time, but that's ok + presetsMgr->createMissingDefault(PRESETS_GRAPHIC); // a no-op after the first time, but that's ok return LLPanelPreference::postBuild(); } diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h index fa0c09e97a..ea3a1fc98c 100644 --- a/indra/newview/llfloaterpreference.h +++ b/indra/newview/llfloaterpreference.h @@ -174,6 +174,7 @@ public: void buildPopupLists(); static void refreshSkin(void* data); void selectPanel(const LLSD& name); + void saveCameraPreset(std::string& preset); void saveGraphicsPreset(std::string& preset); private: @@ -196,6 +197,7 @@ private: std::string mDirectoryVisibility; LLAvatarData mAvatarProperties; + std::string mSavedCameraPreset; std::string mSavedGraphicsPreset; LOG_CLASS(LLFloaterPreference); }; @@ -244,6 +246,18 @@ private: LOG_CLASS(LLPanelPreference); }; +class LLPanelPreferenceView : public LLPanelPreference +{ +public: + BOOL postBuild(); + void draw(); + void setPresetText(); + +private: + void onPresetsListChangeCamera(); + LOG_CLASS(LLPanelPreferenceView); +}; + class LLPanelPreferenceGraphics : public LLPanelPreference { public: @@ -261,7 +275,6 @@ protected: bool hasDirtyChilds(); private: - void onPresetsListChange(); LOG_CLASS(LLPanelPreferenceGraphics); }; diff --git a/indra/newview/llpanelpresetscamerapulldown.cpp b/indra/newview/llpanelpresetscamerapulldown.cpp new file mode 100644 index 0000000000..2c95c06c31 --- /dev/null +++ b/indra/newview/llpanelpresetscamerapulldown.cpp @@ -0,0 +1,236 @@ +/** + * @file llpanelpresetscamerapulldown.cpp + * @brief A panel showing a quick way to pick camera presets + * + * $LicenseInfo:firstyear=2017&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2017, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llpanelpresetscamerapulldown.h" + +#include "llviewercontrol.h" +#include "llstatusbar.h" + +#include "llbutton.h" +#include "lltabcontainer.h" +#include "llfloaterreg.h" +#include "llfloaterpreference.h" +#include "llpresetsmanager.h" +#include "llsliderctrl.h" +#include "llscrolllistctrl.h" +#include "lltrans.h" + +/* static */ const F32 LLPanelPresetsCameraPulldown::sAutoCloseFadeStartTimeSec = 2.0f; +/* static */ const F32 LLPanelPresetsCameraPulldown::sAutoCloseTotalTimeSec = 3.0f; + +///---------------------------------------------------------------------------- +/// Class LLPanelPresetsCameraPulldown +///---------------------------------------------------------------------------- + +// Default constructor +LLPanelPresetsCameraPulldown::LLPanelPresetsCameraPulldown() +{ + mHoverTimer.stop(); + + mCommitCallbackRegistrar.add("Presets.GoViewPrefs", boost::bind(&LLPanelPresetsCameraPulldown::onViewButtonClick, this, _2)); + mCommitCallbackRegistrar.add("PresetsCamera.RowClick", boost::bind(&LLPanelPresetsCameraPulldown::onRowClick, this, _2)); + + buildFromFile( "panel_presets_camera_pulldown.xml"); +} + +BOOL LLPanelPresetsCameraPulldown::postBuild() +{ + LLPresetsManager* presetsMgr = LLPresetsManager::getInstance(); + if (presetsMgr) + { + presetsMgr->setPresetListChangeCameraCallback(boost::bind(&LLPanelPresetsCameraPulldown::populatePanel, this)); +LL_WARNS() << "DBG pulldown" << LL_ENDL; + // Make sure there is a default preference file + presetsMgr->createMissingDefault(PRESETS_CAMERA); + presetsMgr->startWatching(PRESETS_CAMERA); + } + + populatePanel(); + + return LLPanel::postBuild(); +} + +void LLPanelPresetsCameraPulldown::populatePanel() +{ + std::string presets_dir = LLPresetsManager::getInstance()->getPresetsDir(PRESETS_CAMERA); + LLPresetsManager::getInstance()->loadPresetNamesFromDir(presets_dir, mPresetNames, DEFAULT_TOP); + + LLScrollListCtrl* scroll = getChild("preset_camera_list"); + + if (scroll && mPresetNames.begin() != mPresetNames.end()) + { + scroll->clearRows(); + + std::string active_preset = gSavedSettings.getString("PresetCameraActive"); + if (active_preset == PRESETS_DEFAULT) + { + active_preset = LLTrans::getString(PRESETS_DEFAULT); + } + + for (std::list::const_iterator it = mPresetNames.begin(); it != mPresetNames.end(); ++it) + { + const std::string& name = *it; + LL_DEBUGS() << "adding '" << name << "'" << LL_ENDL; + + LLSD row; + row["columns"][0]["column"] = "preset_name"; + row["columns"][0]["value"] = name; + + bool is_selected_preset = false; + if (name == active_preset) + { + row["columns"][1]["column"] = "icon"; + row["columns"][1]["type"] = "icon"; + row["columns"][1]["value"] = "Check_Mark"; + + is_selected_preset = true; + } + + LLScrollListItem* new_item = scroll->addElement(row); + new_item->setSelected(is_selected_preset); + } + } +} + +/*virtual*/ +void LLPanelPresetsCameraPulldown::onMouseEnter(S32 x, S32 y, MASK mask) +{ + mHoverTimer.stop(); + LLPanel::onMouseEnter(x,y,mask); +} + +/*virtual*/ +void LLPanelPresetsCameraPulldown::onTopLost() +{ + setVisible(FALSE); +} + +/*virtual*/ +BOOL LLPanelPresetsCameraPulldown::handleMouseDown(S32 x, S32 y, MASK mask) +{ + LLPanel::handleMouseDown(x,y,mask); + return TRUE; +} + +/*virtual*/ +BOOL LLPanelPresetsCameraPulldown::handleRightMouseDown(S32 x, S32 y, MASK mask) +{ + LLPanel::handleRightMouseDown(x, y, mask); + return TRUE; +} + +/*virtual*/ +BOOL LLPanelPresetsCameraPulldown::handleDoubleClick(S32 x, S32 y, MASK mask) +{ + LLPanel::handleDoubleClick(x, y, mask); + return TRUE; +} + +/*virtual*/ +void LLPanelPresetsCameraPulldown::onMouseLeave(S32 x, S32 y, MASK mask) +{ + mHoverTimer.start(); + LLPanel::onMouseLeave(x,y,mask); +} + +/*virtual*/ +void LLPanelPresetsCameraPulldown::onVisibilityChange ( BOOL new_visibility ) +{ + if (new_visibility) + { + mHoverTimer.start(); // timer will be stopped when mouse hovers over panel + } + else + { + mHoverTimer.stop(); + + } +} + +void LLPanelPresetsCameraPulldown::onRowClick(const LLSD& user_data) +{ + LLScrollListCtrl* scroll = getChild("preset_camera_list"); + + if (scroll) + { + LLScrollListItem* item = scroll->getFirstSelected(); + if (item) + { + std::string name = item->getColumn(1)->getValue().asString(); + + LL_DEBUGS() << "selected '" << name << "'" << LL_ENDL; + LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, name); + + setVisible(FALSE); + } + else + { + LL_DEBUGS() << "none selected" << LL_ENDL; + } + } + else + { + LL_DEBUGS() << "no scroll" << LL_ENDL; + } +} + +void LLPanelPresetsCameraPulldown::onViewButtonClick(const LLSD& user_data) +{ + // close the minicontrol, we're bringing up the big one + setVisible(FALSE); + + // bring up the prefs floater + LLFloater* prefsfloater = LLFloaterReg::showInstance("preferences"); + if (prefsfloater) + { + // grab the 'view' panel from the preferences floater and + // bring it the front! + LLTabContainer* tabcontainer = prefsfloater->getChild("pref core"); + LLPanel* graphicspanel = prefsfloater->getChild("move"); + if (tabcontainer && graphicspanel) + { + tabcontainer->selectTabPanel(graphicspanel); + } + } +} + +//virtual +void LLPanelPresetsCameraPulldown::draw() +{ + F32 alpha = mHoverTimer.getStarted() + ? clamp_rescale(mHoverTimer.getElapsedTimeF32(), sAutoCloseFadeStartTimeSec, sAutoCloseTotalTimeSec, 1.f, 0.f) + : 1.0f; + LLViewDrawContext context(alpha); + + LLPanel::draw(); + + if (alpha == 0.f) + { + setVisible(FALSE); + } +} diff --git a/indra/newview/llpanelpresetscamerapulldown.h b/indra/newview/llpanelpresetscamerapulldown.h new file mode 100644 index 0000000000..12d9bc26ec --- /dev/null +++ b/indra/newview/llpanelpresetscamerapulldown.h @@ -0,0 +1,62 @@ +/** + * @file llpanelpresetscamerapulldown.h + * @brief A panel showing a quick way to pick camera presets + * + * $LicenseInfo:firstyear=2017&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2017, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLPANELPRESETSCAMERAPULLDOWN_H +#define LL_LLPANELPRESETSCAMERAPULLDOWN_H + +#include "linden_common.h" + +#include "llpanel.h" + +class LLFrameTimer; + +class LLPanelPresetsCameraPulldown : public LLPanel +{ + public: + LLPanelPresetsCameraPulldown(); + /*virtual*/ void draw(); + /*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask); + /*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask); + /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask); + /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); + /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask); + /*virtual*/ void onTopLost(); + /*virtual*/ void onVisibilityChange ( BOOL new_visibility ); + /*virtual*/ BOOL postBuild(); + void populatePanel(); + + private: + void onViewButtonClick(const LLSD& user_data); + void onRowClick(const LLSD& user_data); + + std::list mPresetNames; + LLFrameTimer mHoverTimer; + static const F32 sAutoCloseFadeStartTimeSec; + static const F32 sAutoCloseTotalTimeSec; + LOG_CLASS(LLPanelPresetsCameraPulldown); +}; + +#endif // LL_LLPANELPRESETSCAMERAPULLDOWN_H diff --git a/indra/newview/llpanelpresetspulldown.cpp b/indra/newview/llpanelpresetspulldown.cpp index 9b4dc5474a..0bbf1781a5 100644 --- a/indra/newview/llpanelpresetspulldown.cpp +++ b/indra/newview/llpanelpresetspulldown.cpp @@ -63,7 +63,7 @@ BOOL LLPanelPresetsPulldown::postBuild() LLPresetsManager* presetsMgr = LLPresetsManager::getInstance(); presetsMgr->setPresetListChangeCallback(boost::bind(&LLPanelPresetsPulldown::populatePanel, this)); // Make sure there is a default preference file - presetsMgr->createMissingDefault(); + presetsMgr->createMissingDefault(PRESETS_GRAPHIC); populatePanel(); diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 836f63bffa..16721a6efc 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -39,6 +39,7 @@ #include "llfloaterpreference.h" #include "llfloaterreg.h" #include "llfeaturemanager.h" +#include "llagentcamera.h" LLPresetsManager::LLPresetsManager() { @@ -46,6 +47,12 @@ LLPresetsManager::LLPresetsManager() LLPresetsManager::~LLPresetsManager() { + mCameraChangedSignal.disconnect(); +} + +void LLPresetsManager::triggerChangeCameraSignal() +{ + mPresetListChangeCameraSignal(); } void LLPresetsManager::triggerChangeSignal() @@ -53,15 +60,16 @@ void LLPresetsManager::triggerChangeSignal() mPresetListChangeSignal(); } -void LLPresetsManager::createMissingDefault() +void LLPresetsManager::createMissingDefault(const std::string& subdirectory) { - std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, PRESETS_GRAPHIC, PRESETS_DEFAULT + ".xml"); + std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, + subdirectory, PRESETS_DEFAULT + ".xml"); if (!gDirUtilp->fileExists(default_file)) { LL_INFOS() << "No default preset found -- creating one at " << default_file << LL_ENDL; - // Write current graphic settings as the default - savePreset(PRESETS_GRAPHIC, PRESETS_DEFAULT, true); + // Write current settings as the default + savePreset(subdirectory, PRESETS_DEFAULT, true); } else { @@ -69,6 +77,34 @@ void LLPresetsManager::createMissingDefault() } } +void LLPresetsManager::startWatching(const std::string& subdirectory) +{ + if (PRESETS_CAMERA == subdirectory) + { + std::vector name_list; + getControlNames(name_list); + + for (std::vector::iterator it = name_list.begin(); it != name_list.end(); ++it) + { + std::string ctrl_name = *it; +LL_WARNS() << "DBG starting watch on " << ctrl_name << LL_ENDL; + if (gSavedSettings.controlExists(ctrl_name)) + { + LLPointer cntrl_ptr = gSavedSettings.getControl(ctrl_name); + if (cntrl_ptr.isNull()) + { + LL_WARNS("Init") << "Unable to set signal on global setting '" << ctrl_name + << "'" << LL_ENDL; + } + else + { + mCameraChangedSignal = cntrl_ptr->getCommitSignal()->connect(boost::bind(&settingChanged)); + } + } + } + } +} + std::string LLPresetsManager::getPresetsDir(const std::string& subdirectory) { std::string presets_path = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR); @@ -134,6 +170,49 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam presets = mPresetNames; } +bool LLPresetsManager::mCameraDirty = false; + +void LLPresetsManager::setCameraDirty(bool dirty) +{ + mCameraDirty = dirty; +} + +bool LLPresetsManager::isCameraDirty() +{ + return mCameraDirty; +} + +void LLPresetsManager::settingChanged() +{ +LL_WARNS() << "DBG setting changed" << LL_ENDL; + setCameraDirty(true); +} + +void LLPresetsManager::getControlNames(std::vector& names) +{ + names = boost::assign::list_of + ("CameraOffsetCustom0") + ("FocusOffsetCustom0") + // From panel_preferences_move.xml + ("CameraAngle") + ("CameraOffsetScale") + ("CameraOpacity") + ("EditCameraMovement") + ("AppearanceCameraMovement") + // From llagentcamera.cpp + ("RenderFarClip") + ("CameraOffsetBuild") + ("CameraPreset") + ("CameraOffsetRearView") + ("CameraOffsetFrontView") + ("CameraOffsetGroupView") + ("FocusOffsetRearView") + ("FocusOffsetFrontView") + ("FocusOffsetGroupView") + ("CameraOffsetScale") + ("TrackFocusObject"); +} + bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string name, bool createDefault) { if (LLTrans::getString(PRESETS_DEFAULT) == name) @@ -149,94 +228,110 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n LLFloaterPreference* instance = LLFloaterReg::findTypedInstance("preferences"); if (instance && !createDefault) { - gSavedSettings.setString("PresetGraphicActive", name); + gSavedSettings.setString("PresetGraphicActive", name); instance->getControlNames(name_list); - LL_DEBUGS() << "saving preset '" << name << "'; " << name_list.size() << " names" << LL_ENDL; + LL_DEBUGS() << "saving preset '" << name << "'; " << name_list.size() << " names" << LL_ENDL; name_list.push_back("PresetGraphicActive"); } - else + else { - LL_WARNS() << "preferences floater instance not found" << LL_ENDL; - } + LL_WARNS() << "preferences floater instance not found" << LL_ENDL; + } } - else if(PRESETS_CAMERA == subdirectory) + else if(PRESETS_CAMERA == subdirectory) { - name_list = boost::assign::list_of - ("Placeholder"); + gSavedSettings.setString("PresetGraphicActive", name); +// gSavedSettings.setU32("CameraPreset", CAMERA_PRESET_CUSTOM0); + +// gSavedSettings.setVector3d("CameraOffsetCustom0", gAgentCamera.calcCameraPositionTargetGlobal()); +// gSavedSettings.setVector3d("FocusOffsetCustom0", gAgentCamera.calcFocusPositionTargetGlobal()); + + getControlNames(name_list); + name_list.push_back("PresetCameraActive"); + } + else + { + LL_ERRS() << "Invalid presets directory '" << subdirectory << "'" << LL_ENDL; + } + + // make an empty llsd + LLSD paramsData(LLSD::emptyMap()); + + // Create a default graphics preset from hw recommended settings + if (createDefault && name == PRESETS_DEFAULT && subdirectory == PRESETS_GRAPHIC) + { + paramsData = LLFeatureManager::getInstance()->getRecommendedSettingsMap(); + if (gSavedSettings.getU32("RenderAvatarMaxComplexity") == 0) + { + // use the recommended setting as an initial one (MAINT-6435) + gSavedSettings.setU32("RenderAvatarMaxComplexity", paramsData["RenderAvatarMaxComplexity"]["Value"].asInteger()); + } + } + else + { + for (std::vector::iterator it = name_list.begin(); it != name_list.end(); ++it) + { + std::string ctrl_name = *it; + LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get(); + std::string comment = ctrl->getComment(); + std::string type = LLControlGroup::typeEnumToString(ctrl->type()); + LLSD value = ctrl->getValue(); + + paramsData[ctrl_name]["Comment"] = comment; + paramsData[ctrl_name]["Persist"] = 1; + paramsData[ctrl_name]["Type"] = type; + paramsData[ctrl_name]["Value"] = value; + } + } + + std::string pathName(getPresetsDir(subdirectory) + gDirUtilp->getDirDelimiter() + LLURI::escape(name) + ".xml"); + + // If the active preset name is the only thing in the list, don't save the list + if (paramsData.size() > 1) + { + // write to file + llofstream presetsXML(pathName.c_str()); + if (presetsXML.is_open()) + { + LLPointer formatter = new LLSDXMLFormatter(); + formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY); + presetsXML.close(); + saved = true; + + LL_DEBUGS() << "saved preset '" << name << "'; " << paramsData.size() << " parameters" << LL_ENDL; + + if (subdirectory == PRESETS_GRAPHIC) + { + gSavedSettings.setString("PresetGraphicActive", name); + // signal interested parties + triggerChangeSignal(); + } + + if (subdirectory == PRESETS_CAMERA) + { + gSavedSettings.setString("PresetCameraActive", name); + setCameraDirty(false); + // signal interested parties + triggerChangeCameraSignal(); + } + } + else + { + LL_WARNS("Presets") << "Cannot open for output preset file " << pathName << LL_ENDL; + } } else - { - LL_ERRS() << "Invalid presets directory '" << subdirectory << "'" << LL_ENDL; - } - - if (name_list.size() > 1 // if the active preset name is the only thing in the list, don't save the list - || (createDefault && name == PRESETS_DEFAULT && subdirectory == PRESETS_GRAPHIC)) // or create a default graphics preset from hw recommended settings - { - // make an empty llsd - LLSD paramsData(LLSD::emptyMap()); - - if (createDefault) - { - paramsData = LLFeatureManager::getInstance()->getRecommendedSettingsMap(); - if (gSavedSettings.getU32("RenderAvatarMaxComplexity") == 0) - { - // use the recommended setting as an initial one (MAINT-6435) - gSavedSettings.setU32("RenderAvatarMaxComplexity", paramsData["RenderAvatarMaxComplexity"]["Value"].asInteger()); - } - } - else - { - for (std::vector::iterator it = name_list.begin(); it != name_list.end(); ++it) - { - std::string ctrl_name = *it; - LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get(); - std::string comment = ctrl->getComment(); - std::string type = LLControlGroup::typeEnumToString(ctrl->type()); - LLSD value = ctrl->getValue(); - - paramsData[ctrl_name]["Comment"] = comment; - paramsData[ctrl_name]["Persist"] = 1; - paramsData[ctrl_name]["Type"] = type; - paramsData[ctrl_name]["Value"] = value; - } - } - - std::string pathName(getPresetsDir(subdirectory) + gDirUtilp->getDirDelimiter() + LLURI::escape(name) + ".xml"); - - // write to file - llofstream presetsXML(pathName.c_str()); - if (presetsXML.is_open()) - { - - LLPointer formatter = new LLSDXMLFormatter(); - formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY); - presetsXML.close(); - saved = true; - - LL_DEBUGS() << "saved preset '" << name << "'; " << paramsData.size() << " parameters" << LL_ENDL; - - if (!createDefault) - { - gSavedSettings.setString("PresetGraphicActive", name); - // signal interested parties - triggerChangeSignal(); - } - } - else - { - LL_WARNS("Presets") << "Cannot open for output preset file " << pathName << LL_ENDL; - } - } - else - { - LL_INFOS() << "No settings found; preferences floater has not yet been created" << LL_ENDL; - } + { + LL_INFOS() << "No settings available to be saved" << LL_ENDL; + } return saved; } -void LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option) +bool LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option) { + bool sts = true; + combo->clearRows(); std::string presets_dir = getPresetsDir(subdirectory); @@ -259,8 +354,10 @@ void LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory, else { combo->setLabel(LLTrans::getString("preset_combo_label")); + sts = false; } } + return sts; } void LLPresetsManager::loadPreset(const std::string& subdirectory, std::string name) @@ -279,14 +376,19 @@ void LLPresetsManager::loadPreset(const std::string& subdirectory, std::string n if(PRESETS_GRAPHIC == subdirectory) { gSavedSettings.setString("PresetGraphicActive", name); - } - LLFloaterPreference* instance = LLFloaterReg::findTypedInstance("preferences"); - if (instance) - { - instance->refreshEnabledGraphics(); + LLFloaterPreference* instance = LLFloaterReg::findTypedInstance("preferences"); + if (instance) + { + instance->refreshEnabledGraphics(); + } + triggerChangeSignal(); + } + if(PRESETS_CAMERA == subdirectory) + { + gSavedSettings.setString("PresetCameraActive", name); + triggerChangeCameraSignal(); } - triggerChangeSignal(); } else { @@ -317,17 +419,34 @@ bool LLPresetsManager::deletePreset(const std::string& subdirectory, std::string } // If you delete the preset that is currently marked as loaded then also indicate that no preset is loaded. - if (gSavedSettings.getString("PresetGraphicActive") == name) + if(PRESETS_GRAPHIC == subdirectory) { - gSavedSettings.setString("PresetGraphicActive", ""); + if (gSavedSettings.getString("PresetGraphicActive") == name) + { + gSavedSettings.setString("PresetGraphicActive", ""); + } + // signal interested parties + triggerChangeSignal(); } - // signal interested parties - triggerChangeSignal(); + if(PRESETS_CAMERA == subdirectory) + { + if (gSavedSettings.getString("PresetCameraActive") == name) + { + gSavedSettings.setString("PresetCameraActive", ""); + } + // signal interested parties + triggerChangeCameraSignal(); + } return sts; } +boost::signals2::connection LLPresetsManager::setPresetListChangeCameraCallback(const preset_list_signal_t::slot_type& cb) +{ + return mPresetListChangeCameraSignal.connect(cb); +} + boost::signals2::connection LLPresetsManager::setPresetListChangeCallback(const preset_list_signal_t::slot_type& cb) { return mPresetListChangeSignal.connect(cb); diff --git a/indra/newview/llpresetsmanager.h b/indra/newview/llpresetsmanager.h index 21f9885f27..71ec4736b2 100644 --- a/indra/newview/llpresetsmanager.h +++ b/indra/newview/llpresetsmanager.h @@ -51,16 +51,21 @@ public: typedef std::list preset_name_list_t; typedef boost::signals2::signal preset_list_signal_t; - void createMissingDefault(); + void createMissingDefault(const std::string& subdirectory); + void startWatching(const std::string& subdirectory); + void triggerChangeCameraSignal(); void triggerChangeSignal(); static std::string getPresetsDir(const std::string& subdirectory); - void setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option); + bool setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option); void loadPresetNamesFromDir(const std::string& dir, preset_name_list_t& presets, EDefaultOptions default_option); bool savePreset(const std::string& subdirectory, std::string name, bool createDefault = false); void loadPreset(const std::string& subdirectory, std::string name); bool deletePreset(const std::string& subdirectory, std::string name); + bool isCameraDirty(); + static void setCameraDirty(bool dirty); // Emitted when a preset gets loaded, deleted, or saved. + boost::signals2::connection setPresetListChangeCameraCallback(const preset_list_signal_t::slot_type& cb); boost::signals2::connection setPresetListChangeCallback(const preset_list_signal_t::slot_type& cb); // Emitted when a preset gets loaded or saved. @@ -70,10 +75,18 @@ public: LLPresetsManager(); ~LLPresetsManager(); + preset_list_signal_t mPresetListChangeCameraSignal; preset_list_signal_t mPresetListChangeSignal; private: - LOG_CLASS(LLPresetsManager); + LOG_CLASS(LLPresetsManager); + + void getControlNames(std::vector& names); + static void LLPresetsManager::settingChanged(); + + boost::signals2::connection mCameraChangedSignal; + + static bool mCameraDirty; }; #endif // LL_PRESETSMANAGER_H diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 041eae4b3c..702b9a8484 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -38,6 +38,7 @@ #include "llfloaterbuycurrency.h" #include "llbuycurrencyhtml.h" #include "llpanelnearbymedia.h" +#include "llpanelpresetscamerapulldown.h" #include "llpanelpresetspulldown.h" #include "llpanelvolumepulldown.h" #include "llfloaterregioninfo.h" @@ -171,8 +172,11 @@ BOOL LLStatusBar::postBuild() mBtnStats = getChildView("stat_btn"); - mIconPresets = getChild( "presets_icon" ); - mIconPresets->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this)); + mIconPresetsCamera = getChild( "presets_icon_camera" ); + mIconPresetsCamera->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresetsCamera, this)); + + mIconPresetsGraphic = getChild( "presets_icon_graphic" ); + mIconPresetsGraphic->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterPresets, this)); mBtnVolume = getChild( "volume_btn" ); mBtnVolume->setClickedCallback( onClickVolume, this ); @@ -227,6 +231,11 @@ BOOL LLStatusBar::postBuild() mSGPacketLoss = LLUICtrlFactory::create(pgp); addChild(mSGPacketLoss); + mPanelPresetsCameraPulldown = new LLPanelPresetsCameraPulldown(); + addChild(mPanelPresetsCameraPulldown); + mPanelPresetsCameraPulldown->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT); + mPanelPresetsCameraPulldown->setVisible(FALSE); + mPanelPresetsPulldown = new LLPanelPresetsPulldown(); addChild(mPanelPresetsPulldown); mPanelPresetsPulldown->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT); @@ -325,7 +334,8 @@ void LLStatusBar::setVisibleForMouselook(bool visible) mSGBandwidth->setVisible(visible); mSGPacketLoss->setVisible(visible); setBackgroundVisible(visible); - mIconPresets->setVisible(visible); + mIconPresetsCamera->setVisible(visible); + mIconPresetsGraphic->setVisible(visible); } void LLStatusBar::debitBalance(S32 debit) @@ -470,10 +480,34 @@ void LLStatusBar::onClickBuyCurrency() LLFirstUse::receiveLindens(false); } +void LLStatusBar::onMouseEnterPresetsCamera() +{ + LLView* popup_holder = gViewerWindow->getRootView()->getChildView("popup_holder"); + LLIconCtrl* icon = getChild( "presets_icon_camera" ); + LLRect icon_rect = icon->getRect(); + LLRect pulldown_rect = mPanelPresetsCameraPulldown->getRect(); + pulldown_rect.setLeftTopAndSize(icon_rect.mLeft - + (pulldown_rect.getWidth() - icon_rect.getWidth()), + icon_rect.mBottom, + pulldown_rect.getWidth(), + pulldown_rect.getHeight()); + + pulldown_rect.translate(popup_holder->getRect().getWidth() - pulldown_rect.mRight, 0); + mPanelPresetsCameraPulldown->setShape(pulldown_rect); + + // show the master presets pull-down + LLUI::clearPopups(); + LLUI::addPopup(mPanelPresetsCameraPulldown); + mPanelNearByMedia->setVisible(FALSE); + mPanelVolumePulldown->setVisible(FALSE); + mPanelPresetsPulldown->setVisible(FALSE); + mPanelPresetsCameraPulldown->setVisible(TRUE); +} + void LLStatusBar::onMouseEnterPresets() { LLView* popup_holder = gViewerWindow->getRootView()->getChildView("popup_holder"); - LLIconCtrl* icon = getChild( "presets_icon" ); + LLIconCtrl* icon = getChild( "presets_icon_graphic" ); LLRect icon_rect = icon->getRect(); LLRect pulldown_rect = mPanelPresetsPulldown->getRect(); pulldown_rect.setLeftTopAndSize(icon_rect.mLeft - @@ -512,6 +546,7 @@ void LLStatusBar::onMouseEnterVolume() // show the master volume pull-down LLUI::clearPopups(); LLUI::addPopup(mPanelVolumePulldown); + mPanelPresetsCameraPulldown->setVisible(FALSE); mPanelPresetsPulldown->setVisible(FALSE); mPanelNearByMedia->setVisible(FALSE); mPanelVolumePulldown->setVisible(TRUE); @@ -536,6 +571,7 @@ void LLStatusBar::onMouseEnterNearbyMedia() LLUI::clearPopups(); LLUI::addPopup(mPanelNearByMedia); + mPanelPresetsCameraPulldown->setVisible(FALSE); mPanelPresetsPulldown->setVisible(FALSE); mPanelVolumePulldown->setVisible(FALSE); mPanelNearByMedia->setVisible(TRUE); diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h index 277f039f20..507afcd147 100644 --- a/indra/newview/llstatusbar.h +++ b/indra/newview/llstatusbar.h @@ -41,6 +41,7 @@ class LLUICtrl; class LLUUID; class LLFrameTimer; class LLStatGraph; +class LLPanelPresetsCameraPulldown; class LLPanelPresetsPulldown; class LLPanelVolumePulldown; class LLPanelNearByMedia; @@ -91,6 +92,7 @@ private: void onClickBuyCurrency(); void onVolumeChanged(const LLSD& newvalue); + void onMouseEnterPresetsCamera(); void onMouseEnterPresets(); void onMouseEnterVolume(); void onMouseEnterNearbyMedia(); @@ -106,7 +108,8 @@ private: LLStatGraph *mSGPacketLoss; LLView *mBtnStats; - LLIconCtrl *mIconPresets; + LLIconCtrl *mIconPresetsCamera; + LLIconCtrl *mIconPresetsGraphic; LLButton *mBtnVolume; LLTextBox *mBoxBalance; LLButton *mMediaToggle; @@ -119,6 +122,7 @@ private: S32 mSquareMetersCommitted; LLFrameTimer* mBalanceTimer; LLFrameTimer* mHealthTimer; + LLPanelPresetsCameraPulldown* mPanelPresetsCameraPulldown; LLPanelPresetsPulldown* mPanelPresetsPulldown; LLPanelVolumePulldown* mPanelVolumePulldown; LLPanelNearByMedia* mPanelNearByMedia; diff --git a/indra/newview/skins/default/textures/icons/Presets_Icon_Camera.png b/indra/newview/skins/default/textures/icons/Presets_Icon_Camera.png new file mode 100644 index 0000000000000000000000000000000000000000..8cb51cdc8e25e48f4d12e7cfd569e3f0daa5d04a GIT binary patch literal 1381 zcmV-r1)BPaP)9(E7>1uaGyS16 zol^d(D5&uVNhD~%*cjX#-0-7D5kp7}CK@9qcw%BOEHohoiIEc{>Q;;zgRWE-CMP6@ z1d+-{qPC(nQlKid(3X~VI?lN0d+XQPKo{M3lgXWX?m6FizxVxq&V~Qo<>R!bC(|^( z3fKj70ChkkFa}%(nt*k{R-ljIX2iQMu4B$;(=nNwLS2g5$3~z+a3w?QBf!Uc?gCB& zC9%*5oFKSeKo34P65QzYB=B*bs67n)15|-w0D{|%kDn9Vj+HPJ&J_y+hE_#J2fnt{9w_Y&Med|U!_0_WxZV&IJIi~)IqTY--W@H#LmCkHeq z0os8a!98pNYy-LouHza3_8PDmxI;!uKw0$92D*VA1b5^bcHRcwAh_N%2%8i<_W~aQ zeKI~Ejh6yhV6|8&0WFG^MDdaZmH}_#O@xp+zQ+Y zRDi3>l&TD-SG^=VA>%87Ra$>HaF3Zg1`GlZnb;W>_{lUZ>;JIQYZ1^Y{l=%HD|`Yx zM{q+mv=)J#zz%snE}(mXjlf(ni{6h|09j3L(8eQ^DLC<*dVfE`9mmJD`1qK{TY;m% zrv$f0HDWt(7jQGdRq*j^;E49YIHok5xMxJmdFgdoNK>>cwfR?~|5@NEQT_yQ93M9k z+#$Wc3AkPM*GP&^BVok?D4T%lRZz}WDh>c265J2?xDi;ZHH})cKv^*cyo`@+z&^## zDSYez-qo{>jjRP=ulYbxaZo3;X%Bc+0hE^6S;~ewIne+-LvU4rI0f8hq`Y7@Pb`2+ zN{NDHu8dYxXpZCK0zF@utk;~XHpv4wD0tHtNzA;n z26QsD8BJ(fmd6!&ns&Qcz#4)(1AM2ktc<0_E2sNe(<$5KOrma?H2`uc8<`rktwL;j z`2es*4dyK^9MgE6Y26cmgWHdf3l$5aYHlrJFfp=CNyD_3kC}K#-#4ijyiaglz|*P~ zO)@?x!-s+8YP0(#*Fs5iL0Prb1mTnuQJMuA(YRP_@aSaw_OTfsHvk8eEmqnz zNLztljl+51Le6Y>MT^tiu9`zc!7MzZ%C-m}`{h-mJnmPP%r%86(VPb078CSMwRIrX zWx1lY-!L)+oKuV}la?86G$PMVrVR%8P2;Cc;VMeXvqYG^H*Uo>k`|LC*;jse>UZlB5HnY`M8_a-V*`aR&|mpZj{i;+C= zx7cWr&IMBmi;|&DDc7v@yd=$+NY+8)`Fz - + + diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml index 521389d7b3..4eec922915 100644 --- a/indra/newview/skins/default/xui/en/floater_camera.xml +++ b/indra/newview/skins/default/xui/en/floater_camera.xml @@ -150,8 +150,26 @@ left="0" mouse_opaque="false" name="zoom" - top="20" + top="0" width="226"> + + + + diff --git a/indra/newview/skins/default/xui/en/floater_preferences.xml b/indra/newview/skins/default/xui/en/floater_preferences.xml index 9a9101e0da..cbaeae5b94 100644 --- a/indra/newview/skins/default/xui/en/floater_preferences.xml +++ b/indra/newview/skins/default/xui/en/floater_preferences.xml @@ -79,7 +79,7 @@ help_topic="preferences_chat_tab" name="chat" /> + +[https://community.secondlife.com/t5/Featured-News/Why-are-all-these-people-made-of-colored-jelly/ba-p/3031255 What's this?] + + + - min_val="0.125" + + + + + + + + diff --git a/indra/newview/skins/default/xui/en/panel_presets_camera_pulldown.xml b/indra/newview/skins/default/xui/en/panel_presets_camera_pulldown.xml new file mode 100644 index 0000000000..dc37270751 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_presets_camera_pulldown.xml @@ -0,0 +1,69 @@ + + + + Camera Presets + + + + + + + + + diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml index 998f1ce599..c6a42ea612 100644 --- a/indra/newview/skins/default/xui/en/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml @@ -35,7 +35,7 @@ + - - - diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml index c6a42ea612..299f019145 100644 --- a/indra/newview/skins/default/xui/en/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml @@ -108,7 +108,7 @@ Date: Sat, 13 Jan 2018 12:18:40 -0500 Subject: [PATCH 004/108] STORM-2145 Added a small floater --- indra/llui/llfloater.cpp | 2 + indra/newview/CMakeLists.txt | 2 + indra/newview/app_settings/settings.xml | 31 ---- indra/newview/llagentcamera.cpp | 2 - indra/newview/llfloaterpreference.cpp | 2 +- .../llfloaterpreferencemoveadvanced.cpp | 151 ++++++++++++++++++ .../newview/llfloaterpreferencemoveadvanced.h | 58 +++++++ .../newview/llpanelpresetscamerapulldown.cpp | 2 +- indra/newview/llpresetsmanager.cpp | 10 -- indra/newview/llviewerfloaterreg.cpp | 2 + .../en/floater_preferences_move_advanced.xml | 140 ++++++++++++++++ .../default/xui/en/panel_preferences_move.xml | 14 ++ 12 files changed, 371 insertions(+), 45 deletions(-) create mode 100644 indra/newview/llfloaterpreferencemoveadvanced.cpp create mode 100644 indra/newview/llfloaterpreferencemoveadvanced.h create mode 100644 indra/newview/skins/default/xui/en/floater_preferences_move_advanced.xml diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index e5fe6967d1..663d96bdd4 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -64,6 +64,8 @@ // use this to control "jumping" behavior when Ctrl-Tabbing const S32 TABBED_FLOATER_OFFSET = 0; +extern LLControlGroup gSavedSettings; + namespace LLInitParam { void TypeValues::declareValues() diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 658c3c56fc..7de4e85316 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -277,6 +277,7 @@ set(viewer_SOURCE_FILES llfloaterperms.cpp llfloaterpostprocess.cpp llfloaterpreference.cpp + llfloaterpreferencemoveadvanced.cpp llfloaterpreviewtrash.cpp llfloaterproperties.cpp llfloaterregiondebugconsole.cpp @@ -901,6 +902,7 @@ set(viewer_HEADER_FILES llfloaterperms.h llfloaterpostprocess.h llfloaterpreference.h + llfloaterpreferencemoveadvanced.h llfloaterpreviewtrash.h llfloaterproperties.h llfloaterregiondebugconsole.h diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 9b5b614111..bcce87dc13 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -16176,36 +16176,5 @@ Value - CameraOffsetCustom0 - - Comment - Customized camera offset from avatar - Persist - 1 - Type - Vector3 - Value - - -3.0 - 0.0 - 0.75 - - - FocusOffsetCustom0 - - Comment - Custom focus point offset relative to avatar (x-axis is forward) - Persist - 1 - Type - Vector3D - Value - - 1.0 - 0.0 - 1.0 - - - diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index e0ade4d395..5b9f1b9d4f 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -208,12 +208,10 @@ void LLAgentCamera::init() mCameraOffsetInitial[CAMERA_PRESET_REAR_VIEW] = gSavedSettings.getControl("CameraOffsetRearView"); mCameraOffsetInitial[CAMERA_PRESET_FRONT_VIEW] = gSavedSettings.getControl("CameraOffsetFrontView"); mCameraOffsetInitial[CAMERA_PRESET_GROUP_VIEW] = gSavedSettings.getControl("CameraOffsetGroupView"); - mCameraOffsetInitial[CAMERA_PRESET_CUSTOM0] = gSavedSettings.getControl("CameraOffsetCustom0"); mFocusOffsetInitial[CAMERA_PRESET_REAR_VIEW] = gSavedSettings.getControl("FocusOffsetRearView"); mFocusOffsetInitial[CAMERA_PRESET_FRONT_VIEW] = gSavedSettings.getControl("FocusOffsetFrontView"); mFocusOffsetInitial[CAMERA_PRESET_GROUP_VIEW] = gSavedSettings.getControl("FocusOffsetGroupView"); - mFocusOffsetInitial[CAMERA_PRESET_CUSTOM0] = gSavedSettings.getControl("FocusOffsetCustom0"); mCameraCollidePlane.clearVec(); mCurrentCameraDistance = getCameraOffsetInitial().magVec() * gSavedSettings.getF32("CameraOffsetScale"); diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 212cb922f2..872e961a70 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -661,7 +661,7 @@ void LLFloaterPreference::cancel() // hide spellchecker settings folder LLFloaterReg::hideInstance("prefs_spellchecker"); - // hide advancede floater + // hide advanced graphics floater LLFloaterReg::hideInstance("prefs_graphics_advanced"); // reverts any changes to current skin diff --git a/indra/newview/llfloaterpreferencemoveadvanced.cpp b/indra/newview/llfloaterpreferencemoveadvanced.cpp new file mode 100644 index 0000000000..3ff19147b1 --- /dev/null +++ b/indra/newview/llfloaterpreferencemoveadvanced.cpp @@ -0,0 +1,151 @@ +/** + * @file llfloaterpreferencemoveadvanced.cpp + * @brief floater for adjusting camera position + * + * $LicenseInfo:firstyear=2018&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2018, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" +#include "llfloaterpreferencemoveadvanced.h" +#include "llfloater.h" +#include "llfloaterreg.h" +#include "lluictrlfactory.h" +#include "llspinctrl.h" +#include "llviewercontrol.h" + + +LLFloaterPreferenceMoveAdvanced::LLFloaterPreferenceMoveAdvanced(const LLSD& key) +: LLFloater(key) +{ + mCommitCallbackRegistrar.add("Cancel", boost::bind(&LLFloaterPreferenceMoveAdvanced::onClickCancel, this)); + mCommitCallbackRegistrar.add("CommitSettings", boost::bind(&LLFloaterPreferenceMoveAdvanced::onCommitSettings, this)); + mCommitCallbackRegistrar.add("Ok", boost::bind(&LLFloaterPreferenceMoveAdvanced::onClickOk, this)); + +} + +LLFloaterPreferenceMoveAdvanced::~LLFloaterPreferenceMoveAdvanced() +{} + +void LLFloaterPreferenceMoveAdvanced::onClickOk() +{ + closeFloater(); +} + +void LLFloaterPreferenceMoveAdvanced::onClickCancel() +{ + gSavedSettings.setVector3("CameraOffsetRearView", mCameraSaved); + gSavedSettings.setVector3d("FocusOffsetRearView", mFocusSaved); + + updateCameraControl(mCameraSaved); + updateFocusControl(mFocusSaved); +} + +BOOL LLFloaterPreferenceMoveAdvanced::postBuild() +{ + mCameraSaved = gSavedSettings.getVector3("CameraOffsetRearView"); + mFocusSaved = gSavedSettings.getVector3d("FocusOffsetRearView"); + + updateCameraControl(mCameraSaved); + updateFocusControl(mFocusSaved); + + return TRUE; +} + +void LLFloaterPreferenceMoveAdvanced::updateCameraControl(LLVector3 vector) +{ + LLSpinCtrl* spinnerx = getChild("camera_x"); + LLSpinCtrl* spinnery = getChild("camera_y"); + LLSpinCtrl* spinnerz = getChild("camera_z"); + + if (!spinnerx || !spinnery || !spinnerz) + { + LL_WARNS() << "Could not find all desired UI camera elements" + << LL_ENDL; + return; + } + + if (!spinnerx->hasFocus()) + { + spinnerx->setValue(vector[VX]); + } + + if (!spinnery->hasFocus()) + { + spinnery->setValue(vector[VY]); + } + + if (!spinnerz->hasFocus()) + { + spinnerz->setValue(vector[VZ]); + } +} + +void LLFloaterPreferenceMoveAdvanced::updateFocusControl(LLVector3d vector3d) +{ + LLSpinCtrl* spinnerx = getChild("focus_x"); + LLSpinCtrl* spinnery = getChild("focus_y"); + LLSpinCtrl* spinnerz = getChild("focus_z"); + + if (!spinnerx || !spinnery || !spinnerz) + { + LL_WARNS() << "Could not find all desired UI focus elements" + << LL_ENDL; + return; + } + + if (!spinnerx->hasFocus()) + { + spinnerx->setValue(vector3d[VX]); + } + + if (!spinnery->hasFocus()) + { + spinnery->setValue(vector3d[VY]); + } + + if (!spinnerz->hasFocus()) + { + spinnerz->setValue(vector3d[VZ]); + } +} + + void LLFloaterPreferenceMoveAdvanced::draw() +{ +// updateControl(); + LLFloater::draw(); +} + +void LLFloaterPreferenceMoveAdvanced::onCommitSettings() +{ + LLVector3 vector; + LLVector3d vector3d; + + vector.mV[VX] = (F32)getChild("camera_x")->getValue().asReal(); + vector.mV[VY] = (F32)getChild("camera_y")->getValue().asReal(); + vector.mV[VZ] = (F32)getChild("camera_z")->getValue().asReal(); + gSavedSettings.setVector3("CameraOffsetRearView", vector); + + vector3d.mdV[VX] = (F32)getChild("focus_x")->getValue().asReal(); + vector3d.mdV[VY] = (F32)getChild("focus_y")->getValue().asReal(); + vector3d.mdV[VZ] = (F32)getChild("focus_z")->getValue().asReal(); + gSavedSettings.setVector3d("FocusOffsetRearView", vector3d); +} diff --git a/indra/newview/llfloaterpreferencemoveadvanced.h b/indra/newview/llfloaterpreferencemoveadvanced.h new file mode 100644 index 0000000000..98648af19e --- /dev/null +++ b/indra/newview/llfloaterpreferencemoveadvanced.h @@ -0,0 +1,58 @@ +/** + * @file llfloaterpreferencemoveadvanced.h + * @brief floater for adjusting camera position + * + * $LicenseInfo:firstyear=2018&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2018, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LLFLOATERPREFERENCEMOVEADVANCED_H +#define LLFLOATERPREFERENCEMOVEADVANCED_H + +#include "llcontrol.h" +#include "llfloater.h" + +class LLFloaterPreferenceMoveAdvanced +: public LLFloater +{ + friend class LLFloaterReg; + +public: + LLFloaterPreferenceMoveAdvanced(const LLSD& key); + virtual BOOL postBuild(); + virtual void draw(); + + void onCommitSettings(); + void onClickCancel(); + void onClickOk(); + void updateCameraControl(LLVector3 vector); + void updateFocusControl(LLVector3d vector3d); + +private: + virtual ~LLFloaterPreferenceMoveAdvanced(); + + LLVector3 mCameraSaved; + LLVector3d mFocusSaved; + +}; + +#endif //LLFLOATERPREFERENCEMOVEADVANCED_H + diff --git a/indra/newview/llpanelpresetscamerapulldown.cpp b/indra/newview/llpanelpresetscamerapulldown.cpp index 2c95c06c31..ffdfc445ce 100644 --- a/indra/newview/llpanelpresetscamerapulldown.cpp +++ b/indra/newview/llpanelpresetscamerapulldown.cpp @@ -64,9 +64,9 @@ BOOL LLPanelPresetsCameraPulldown::postBuild() if (presetsMgr) { presetsMgr->setPresetListChangeCameraCallback(boost::bind(&LLPanelPresetsCameraPulldown::populatePanel, this)); -LL_WARNS() << "DBG pulldown" << LL_ENDL; // Make sure there is a default preference file presetsMgr->createMissingDefault(PRESETS_CAMERA); + presetsMgr->startWatching(PRESETS_CAMERA); } diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 80386b61f7..3daa6894f0 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -92,7 +92,6 @@ void LLPresetsManager::startWatching(const std::string& subdirectory) for (std::vector::iterator it = name_list.begin(); it != name_list.end(); ++it) { std::string ctrl_name = *it; -LL_WARNS() << "DBG starting watch on " << ctrl_name << LL_ENDL; if (gSavedSettings.controlExists(ctrl_name)) { LLPointer cntrl_ptr = gSavedSettings.getControl(ctrl_name); @@ -189,23 +188,18 @@ bool LLPresetsManager::isCameraDirty() void LLPresetsManager::settingChanged() { -LL_WARNS() << "DBG setting changed" << LL_ENDL; setCameraDirty(true); } void LLPresetsManager::getControlNames(std::vector& names) { names = boost::assign::list_of - ("CameraOffsetCustom0") - ("FocusOffsetCustom0") // From panel_preferences_move.xml ("CameraAngle") ("CameraOffsetScale") - ("CameraOpacity") ("EditCameraMovement") ("AppearanceCameraMovement") // From llagentcamera.cpp - ("RenderFarClip") ("CameraOffsetBuild") ("CameraPreset") ("CameraOffsetRearView") @@ -246,10 +240,6 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n else if(PRESETS_CAMERA == subdirectory) { gSavedSettings.setString("PresetGraphicActive", name); -// gSavedSettings.setU32("CameraPreset", CAMERA_PRESET_CUSTOM0); - -// gSavedSettings.setVector3d("CameraOffsetCustom0", gAgentCamera.calcCameraPositionTargetGlobal()); -// gSavedSettings.setVector3d("FocusOffsetCustom0", gAgentCamera.calcFocusPositionTargetGlobal()); getControlNames(name_list); name_list.push_back("PresetCameraActive"); diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 0ebacddd9b..440bf46b1e 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -104,6 +104,7 @@ #include "llfloaterperms.h" #include "llfloaterpostprocess.h" #include "llfloaterpreference.h" +#include "llfloaterpreferencemoveadvanced.h" #include "llfloaterpreviewtrash.h" #include "llfloaterproperties.h" #include "llfloaterregiondebugconsole.h" @@ -295,6 +296,7 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("places", "floater_places.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("preferences", "floater_preferences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("prefs_graphics_advanced", "floater_preferences_graphics_advanced.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); + LLFloaterReg::add("prefs_move_advanced", "floater_preferences_move_advanced.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("prefs_proxy", "floater_preferences_proxy.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("prefs_spellchecker_import", "floater_spellcheck_import.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("prefs_translation", "floater_translation_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); diff --git a/indra/newview/skins/default/xui/en/floater_preferences_move_advanced.xml b/indra/newview/skins/default/xui/en/floater_preferences_move_advanced.xml new file mode 100644 index 0000000000..28e5d2c607 --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_preferences_move_advanced.xml @@ -0,0 +1,140 @@ + + + + + Camera offset: + + + + + + + + + + + + + + + + Focus offset: + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/en/panel_preferences_move.xml b/indra/newview/skins/default/xui/en/panel_preferences_move.xml index e4a5f5e283..d832dac4ff 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_move.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_move.xml @@ -127,6 +127,20 @@ tool_tip="Use automatic camera positioning while in edit mode" width="242" /> + + - - - - - - - - - + + + + + + Preset in use: + + + + (None) + + + + + + Automatic position for: + + + + + + + + + + + + + + + From 7bf2a8c0a8b3baeade7ce5c828c4cfec41bef085 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Tue, 30 Jan 2018 11:28:24 -0500 Subject: [PATCH 019/108] replace space in "Pennys Gamer" settings with an underscore --- .../app_settings/camera/{Pennys Gamer.xml => Pennys_Gamer.xml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename indra/newview/app_settings/camera/{Pennys Gamer.xml => Pennys_Gamer.xml} (100%) diff --git a/indra/newview/app_settings/camera/Pennys Gamer.xml b/indra/newview/app_settings/camera/Pennys_Gamer.xml similarity index 100% rename from indra/newview/app_settings/camera/Pennys Gamer.xml rename to indra/newview/app_settings/camera/Pennys_Gamer.xml From bff875d25f03501ddad9a2be7cc45d1c949d83e0 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Fri, 2 Feb 2018 10:39:59 -0500 Subject: [PATCH 020/108] STORM-2145 Camera controls opacity is now working --- doc/contributions.txt | 2 ++ indra/llui/lluictrl.h | 3 ++- indra/newview/llfloatercamera.cpp | 9 +++++++++ indra/newview/llfloatercamera.h | 2 ++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/doc/contributions.txt b/doc/contributions.txt index 68b87a41f5..8909084587 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -217,6 +217,7 @@ Ansariel Hiller MAINT-6519 MAINT-7899 STORM-2105 + STORM-2145 Aralara Rajal Arare Chantilly CHUIBUG-191 @@ -770,6 +771,7 @@ Jonathan Yap STORM-2100 STORM-2104 STORM-2142 + STORM-2145 Kadah Coba STORM-1060 STORM-1843 diff --git a/indra/llui/lluictrl.h b/indra/llui/lluictrl.h index 550bee5c70..e53ecd30c2 100644 --- a/indra/llui/lluictrl.h +++ b/indra/llui/lluictrl.h @@ -212,7 +212,8 @@ public: virtual void setColor(const LLColor4& color); - F32 getCurrentTransparency(); + // Ansariel: Changed to virtual. We might want to change the transparency ourself! + virtual F32 getCurrentTransparency(); void setTransparencyType(ETypeTransparency type); ETypeTransparency getTransparencyType() const {return mTransparencyType;} diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index 5bebebf21f..c12ccb386e 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -378,6 +378,15 @@ BOOL LLFloaterCamera::postBuild() return LLFloater::postBuild(); } +F32 LLFloaterCamera::getCurrentTransparency() +{ + + static LLCachedControl camera_opacity(gSavedSettings, "CameraOpacity"); + static LLCachedControl active_floater_transparency(gSavedSettings, "ActiveFloaterTransparency"); + return llmin(camera_opacity(), active_floater_transparency()); + +} + void LLFloaterCamera::onViewButtonClick(const LLSD& user_data) { // bring up the prefs floater diff --git a/indra/newview/llfloatercamera.h b/indra/newview/llfloatercamera.h index 3601813bc1..481e9aec1b 100644 --- a/indra/newview/llfloatercamera.h +++ b/indra/newview/llfloatercamera.h @@ -91,6 +91,8 @@ private: /*virtual*/ BOOL postBuild(); + F32 getCurrentTransparency(); + void onViewButtonClick(const LLSD& user_data); ECameraControlMode determineMode(); From f0ae109b696671c5773a5084a7329d0b164b7735 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Fri, 2 Feb 2018 12:36:15 -0500 Subject: [PATCH 021/108] STORM-2145 Tiny optimizations --- .../llfloaterpreferenceviewadvanced.cpp | 60 +++---------------- .../newview/llfloaterpreferenceviewadvanced.h | 4 +- 2 files changed, 10 insertions(+), 54 deletions(-) diff --git a/indra/newview/llfloaterpreferenceviewadvanced.cpp b/indra/newview/llfloaterpreferenceviewadvanced.cpp index 055c6f2232..791ff79d87 100644 --- a/indra/newview/llfloaterpreferenceviewadvanced.cpp +++ b/indra/newview/llfloaterpreferenceviewadvanced.cpp @@ -70,62 +70,18 @@ BOOL LLFloaterPreferenceViewAdvanced::postBuild() return TRUE; } -void LLFloaterPreferenceViewAdvanced::updateCameraControl(LLVector3 vector) +void LLFloaterPreferenceViewAdvanced::updateCameraControl(const LLVector3& vector) { - LLSpinCtrl* spinnerx = getChild("camera_x"); - LLSpinCtrl* spinnery = getChild("camera_y"); - LLSpinCtrl* spinnerz = getChild("camera_z"); - - if (!spinnerx || !spinnery || !spinnerz) - { - LL_WARNS() << "Could not find all desired UI camera elements" - << LL_ENDL; - return; - } - - if (!spinnerx->hasFocus()) - { - spinnerx->setValue(vector[VX]); - } - - if (!spinnery->hasFocus()) - { - spinnery->setValue(vector[VY]); - } - - if (!spinnerz->hasFocus()) - { - spinnerz->setValue(vector[VZ]); - } + getChild("camera_x")->setValue(vector[VX]); + getChild("camera_y")->setValue(vector[VY]); + getChild("camera_z")->setValue(vector[VZ]); } -void LLFloaterPreferenceViewAdvanced::updateFocusControl(LLVector3d vector3d) +void LLFloaterPreferenceViewAdvanced::updateFocusControl(const LLVector3d& vector3d) { - LLSpinCtrl* spinnerx = getChild("focus_x"); - LLSpinCtrl* spinnery = getChild("focus_y"); - LLSpinCtrl* spinnerz = getChild("focus_z"); - - if (!spinnerx || !spinnery || !spinnerz) - { - LL_WARNS() << "Could not find all desired UI focus elements" - << LL_ENDL; - return; - } - - if (!spinnerx->hasFocus()) - { - spinnerx->setValue(vector3d[VX]); - } - - if (!spinnery->hasFocus()) - { - spinnery->setValue(vector3d[VY]); - } - - if (!spinnerz->hasFocus()) - { - spinnerz->setValue(vector3d[VZ]); - } + getChild("focus_x")->setValue(vector3d[VX]); + getChild("focus_y")->setValue(vector3d[VY]); + getChild("focus_z")->setValue(vector3d[VZ]); } void LLFloaterPreferenceViewAdvanced::draw() diff --git a/indra/newview/llfloaterpreferenceviewadvanced.h b/indra/newview/llfloaterpreferenceviewadvanced.h index 5b63770059..8f4b594605 100644 --- a/indra/newview/llfloaterpreferenceviewadvanced.h +++ b/indra/newview/llfloaterpreferenceviewadvanced.h @@ -43,8 +43,8 @@ public: void onCommitSettings(); void onClickCancel(); void onClickOk(); - void updateCameraControl(LLVector3 vector); - void updateFocusControl(LLVector3d vector3d); + void updateCameraControl(const LLVector3& vector); + void updateFocusControl(const LLVector3d& vector3d); private: virtual ~LLFloaterPreferenceViewAdvanced(); From 0f20304d7605f0d282986e694685ef05f9ca92e8 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Tue, 5 Jun 2018 16:13:26 +0200 Subject: [PATCH 022/108] Move "Advanced Camera View" into Preferences -> Move & View -> View and make things work properly --- indra/newview/llfloaterpreference.cpp | 149 +++++++++++++--- indra/newview/llfloaterpreference.h | 19 ++ .../newview/llpanelpresetscamerapulldown.cpp | 3 +- indra/newview/llpresetsmanager.cpp | 6 +- .../default/xui/de/panel_preferences_move.xml | 15 ++ .../default/xui/en/floater_preferences.xml | 7 - .../default/xui/en/panel_preferences_move.xml | 167 +++++++++++++++++- 7 files changed, 328 insertions(+), 38 deletions(-) diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 33f01c997d..2d325c387f 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -1010,6 +1010,9 @@ void LLFloaterPreference::apply() // Fix resetting graphics preset on cancel; Save preset here because cancel() gets called in either way! saveGraphicsPreset(gSavedSettings.getString("PresetGraphicActive")); + + // Fix resetting camera preset on cancel + saveCameraPreset(gSavedSettings.getString("PresetCameraActive")); } void LLFloaterPreference::cancel() @@ -1069,6 +1072,14 @@ void LLFloaterPreference::cancel() gSavedSettings.setString("PresetGraphicActive", mSavedGraphicsPreset); LLPresetsManager::getInstance()->triggerChangeSignal(); } + + // Fix resetting camera preset on cancel + if (mSavedCameraPreset != gSavedSettings.getString("PresetCameraActive")) + { + gSavedSettings.setString("PresetCameraActive", mSavedCameraPreset); + LLPresetsManager::getInstance()->triggerChangeCameraSignal(); + } + // } void LLFloaterPreference::onOpen(const LLSD& key) @@ -1230,6 +1241,9 @@ void LLFloaterPreference::onOpen(const LLSD& key) // Fix resetting graphics preset on cancel saveGraphicsPreset(gSavedSettings.getString("PresetGraphicActive")); + // Fix resetting camera preset on cancel + saveCameraPreset(gSavedSettings.getString("PresetCameraActive")); + // FIRE-19810: Make presets global since PresetGraphicActive setting is global as well //bool started = (LLStartUp::getStartupState() == STATE_STARTED); @@ -4154,6 +4168,27 @@ BOOL LLPanelPreferenceView::postBuild() presetsMgr->createMissingDefault(PRESETS_CAMERA); // a no-op after the first time, but that's ok } + // Hook up camera and focus spin controls + mSpinnerCameraX = getChild("camera_x"); + mSpinnerCameraY = getChild("camera_y"); + mSpinnerCameraZ = getChild("camera_z"); + mSpinnerFocusX = getChild("focus_x"); + mSpinnerFocusY = getChild("focus_y"); + mSpinnerFocusZ = getChild("focus_z"); + + mSpinnerCameraX->setCommitCallback(boost::bind(&LLPanelPreferenceView::onChangeCameraX, this)); + mSpinnerCameraY->setCommitCallback(boost::bind(&LLPanelPreferenceView::onChangeCameraY, this)); + mSpinnerCameraZ->setCommitCallback(boost::bind(&LLPanelPreferenceView::onChangeCameraZ, this)); + mSpinnerFocusX->setCommitCallback(boost::bind(&LLPanelPreferenceView::onChangeFocusX, this)); + mSpinnerFocusY->setCommitCallback(boost::bind(&LLPanelPreferenceView::onChangeFocusY, this)); + mSpinnerFocusZ->setCommitCallback(boost::bind(&LLPanelPreferenceView::onChangeFocusZ, this)); + + gSavedSettings.getControl("CameraOffsetRearView")->getSignal()->connect(boost::bind(&LLPanelPreferenceView::refreshCameraSettings, this)); + gSavedSettings.getControl("FocusOffsetRearView")->getSignal()->connect(boost::bind(&LLPanelPreferenceView::refreshCameraSettings, this)); + + refreshCameraSettings(); + // + return LLPanelPreference::postBuild(); } @@ -4167,42 +4202,47 @@ void LLPanelPreferenceView::onPresetsListChangeCamera() setPresetText(); - LLFloaterPreference* instance = LLFloaterReg::findTypedInstance("preferences"); - if (instance && !gSavedSettings.getString("PresetCameraActive").empty()) - { - instance->saveSettings(); //make cancel work correctly after changing the preset - } + // Fix resetting camera preset on cancel + //LLFloaterPreference* instance = LLFloaterReg::findTypedInstance("preferences"); + //if (instance && !gSavedSettings.getString("PresetCameraActive").empty()) + //{ + // instance->saveSettings(); //make cancel work correctly after changing the preset + //} + // } void LLPanelPreferenceView::draw() { - setPresetText(); + // Fix resetting camera preset on cancel + //setPresetText(); LLPanelPreference::draw(); } void LLPanelPreferenceView::setPresetText() { - LLTextBox* preset_text = getChild("preset_camera_text"); + static LLTextBox* preset_text = getChild("preset_camera_text"); std::string preset_camera_active = gSavedSettings.getString("PresetCameraActive"); - if (!preset_camera_active.empty() && preset_camera_active != preset_text->getText()) - { - LLFloaterPreference* instance = LLFloaterReg::findTypedInstance("preferences"); - if (instance) - { - instance->saveCameraPreset(preset_camera_active); - } - } + // Fix resetting camera preset on cancel + //if (!preset_camera_active.empty() && preset_camera_active != preset_text->getText()) + //{ + // LLFloaterPreference* instance = LLFloaterReg::findTypedInstance("preferences"); + // if (instance) + // { + // instance->saveCameraPreset(preset_camera_active); + // } + //} - LLPresetsManager* presetsMgr = LLPresetsManager::getInstance(); - if (presetsMgr) - { - if (presetsMgr->isCameraDirty() && !preset_camera_active.empty()) - { - preset_camera_active.clear(); - } - } + //LLPresetsManager* presetsMgr = LLPresetsManager::getInstance(); + //if (presetsMgr) + //{ + // if (presetsMgr->isCameraDirty() && !preset_camera_active.empty()) + // { + // preset_camera_active.clear(); + // } + //} + // if (!preset_camera_active.empty()) { @@ -4218,6 +4258,69 @@ void LLPanelPreferenceView::setPresetText() } } +// Hook up camera and focus spin controls +void LLPanelPreferenceView::onChangeCameraX() +{ + LLVector3 camera = gSavedSettings.getVector3("CameraOffsetRearView"); + camera.mV[VX] = mSpinnerCameraX->getValueF32(); + mSpinnerCameraX->setValue(camera.mV[VX]); + gSavedSettings.setVector3("CameraOffsetRearView", camera); +} + +void LLPanelPreferenceView::onChangeCameraY() +{ + LLVector3 camera = gSavedSettings.getVector3("CameraOffsetRearView"); + camera.mV[VY] = mSpinnerCameraY->getValueF32(); + mSpinnerCameraY->setValue(camera.mV[VY]); + gSavedSettings.setVector3("CameraOffsetRearView", camera); +} + +void LLPanelPreferenceView::onChangeCameraZ() +{ + LLVector3 camera = gSavedSettings.getVector3("CameraOffsetRearView"); + camera.mV[VZ] = mSpinnerCameraZ->getValueF32(); + mSpinnerCameraZ->setValue(camera.mV[VZ]); + gSavedSettings.setVector3("CameraOffsetRearView", camera); +} + +void LLPanelPreferenceView::onChangeFocusX() +{ + LLVector3d focus = gSavedSettings.getVector3d("FocusOffsetRearView"); + focus.mdV[VX] = mSpinnerFocusX->getValueF32(); + mSpinnerFocusX->setValue(focus.mdV[VX]); + gSavedSettings.setVector3d("FocusOffsetRearView", focus); +} + +void LLPanelPreferenceView::onChangeFocusY() +{ + LLVector3d focus = gSavedSettings.getVector3d("FocusOffsetRearView"); + focus.mdV[VY] = mSpinnerFocusY->getValueF32(); + mSpinnerFocusY->setValue(focus.mdV[VY]); + gSavedSettings.setVector3d("FocusOffsetRearView", focus); +} + +void LLPanelPreferenceView::onChangeFocusZ() +{ + LLVector3d focus = gSavedSettings.getVector3d("FocusOffsetRearView"); + focus.mdV[VZ] = mSpinnerFocusZ->getValueF32(); + mSpinnerFocusZ->setValue(focus.mdV[VZ]); + gSavedSettings.setVector3d("FocusOffsetRearView", focus); +} + +void LLPanelPreferenceView::refreshCameraSettings() +{ + LLVector3 camera = gSavedSettings.getVector3("CameraOffsetRearView"); + mSpinnerCameraX->setValue(camera.mV[VX]); + mSpinnerCameraY->setValue(camera.mV[VY]); + mSpinnerCameraZ->setValue(camera.mV[VZ]); + + LLVector3d focus = gSavedSettings.getVector3d("FocusOffsetRearView"); + mSpinnerFocusX->setValue(focus.mdV[VX]); + mSpinnerFocusY->setValue(focus.mdV[VY]); + mSpinnerFocusZ->setValue(focus.mdV[VZ]); +} +// + BOOL LLPanelPreferenceGraphics::postBuild() { // Improved graphics preferences diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h index bd68259a23..510d200dd3 100644 --- a/indra/newview/llfloaterpreference.h +++ b/indra/newview/llfloaterpreference.h @@ -57,6 +57,7 @@ class LLSD; class LLTextBox; class LLComboBox; class LLLineEditor; +class LLSpinCtrl; typedef std::map notifications_map; @@ -368,6 +369,24 @@ public: private: void onPresetsListChangeCamera(); LOG_CLASS(LLPanelPreferenceView); + + // Hook up camera and focus spin controls + LLSpinCtrl* mSpinnerCameraX; + LLSpinCtrl* mSpinnerCameraY; + LLSpinCtrl* mSpinnerCameraZ; + LLSpinCtrl* mSpinnerFocusX; + LLSpinCtrl* mSpinnerFocusY; + LLSpinCtrl* mSpinnerFocusZ; + + void onChangeCameraX(); + void onChangeCameraY(); + void onChangeCameraZ(); + void onChangeFocusX(); + void onChangeFocusY(); + void onChangeFocusZ(); + + void refreshCameraSettings(); + // }; class LLPanelPreferenceGraphics : public LLPanelPreference diff --git a/indra/newview/llpanelpresetscamerapulldown.cpp b/indra/newview/llpanelpresetscamerapulldown.cpp index 7612c428d9..a836703efc 100644 --- a/indra/newview/llpanelpresetscamerapulldown.cpp +++ b/indra/newview/llpanelpresetscamerapulldown.cpp @@ -66,7 +66,8 @@ BOOL LLPanelPresetsCameraPulldown::postBuild() // Make sure there is a default preference file presetsMgr->createMissingDefault(PRESETS_CAMERA); - presetsMgr->startWatching(PRESETS_CAMERA); + // Done in LLPresetsManager ctor + //presetsMgr->startWatching(PRESETS_CAMERA); presetsMgr->setPresetListChangeCameraCallback(boost::bind(&LLPanelPresetsCameraPulldown::populatePanel, this)); } diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 68fb3ac850..6f084dfa51 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -52,6 +52,10 @@ LLPresetsManager::LLPresetsManager() // This works, because the LLPresetsManager instance is created in the // STATE_WORLD_INIT phase during startup when the status bar is initialized initGraphicPresetControls(); + + // Start watching camera controls as soon as the preset + // manager gets initialized + startWatching(PRESETS_CAMERA); } LLPresetsManager::~LLPresetsManager() @@ -280,7 +284,7 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n } else if(PRESETS_CAMERA == subdirectory) { - gSavedSettings.setString("PresetGraphicActive", name); + gSavedSettings.setString("PresetCameraActive", name); name_list.clear(); getControlNames(name_list); diff --git a/indra/newview/skins/default/xui/de/panel_preferences_move.xml b/indra/newview/skins/default/xui/de/panel_preferences_move.xml index 1ef6c8bed3..b6e094dede 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_move.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_move.xml @@ -3,10 +3,19 @@ + + Aktuelle Voreinstellung: + + + Kamera-Abstand: + + + Fokus-Abstand: + @@ -16,6 +25,12 @@ + + Voreinstellungen: + + + + Date: Tue, 5 Jun 2018 16:22:08 +0200 Subject: [PATCH 023/108] Add additional controls to a camera preset: ZoomTime, CameraPositionSmoothing, EditAppearanceLighting, FSDisableMouseWheelCameraZoom & DisableCameraConstraints --- indra/newview/llpresetsmanager.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 6f084dfa51..0defe4937a 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -244,8 +244,15 @@ void LLPresetsManager::getControlNames(std::vector& names) ("CameraOffsetBuild") ("CameraOffsetRearView") ("FocusOffsetRearView") - ("CameraOffsetScale") + //("CameraOffsetScale") // Duplicate ("TrackFocusObject") + // Additional settings + ("ZoomTime") + ("CameraPositionSmoothing") + ("EditAppearanceLighting") + ("FSDisableMouseWheelCameraZoom") + ("DisableCameraConstraints") + // ; names = camera_controls; } From b3baed5cbc79f2f7f341021fb620fd15f5f41353 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Tue, 5 Jun 2018 17:02:25 +0200 Subject: [PATCH 024/108] Copy standard presets to the correct folder --- indra/newview/llpresetsmanager.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 0defe4937a..8a3833c357 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -154,7 +154,10 @@ std::string LLPresetsManager::getPresetsDir(const std::string& subdirectory) { std::string source = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, PRESETS_CAMERA, file); file = LLURI::escape(file); - std::string dest = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, PRESETS_CAMERA, file); + // FIRE-19810: Make presets global since PresetGraphicActive setting is global as well + //std::string dest = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, PRESETS_CAMERA, file); + std::string dest = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR, PRESETS_CAMERA, file); + // LLFile::copy(source, dest); } } @@ -411,7 +414,7 @@ bool LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory, std::list preset_names; loadPresetNamesFromDir(presets_dir, preset_names, default_option); - std::string preset_graphic_active = gSavedSettings.getString("PresetGraphicActive"); + //std::string preset_graphic_active = gSavedSettings.getString("PresetGraphicActive"); // Unused if (preset_names.begin() != preset_names.end()) { From c815c44754902e8af45a1dc019e68d6b4790f20d Mon Sep 17 00:00:00 2001 From: Ansariel Date: Wed, 6 Jun 2018 19:33:55 +0200 Subject: [PATCH 025/108] Wire up new debug setting CameraOpacity and let it control opacity for camera & movement floater (replaces FSAlwaysOpaqueCameraControls) --- indra/newview/app_settings/settings.xml | 11 - indra/newview/llfloatercamera.cpp | 24 - indra/newview/llfloatercamera.h | 2 - indra/newview/llmoveview.cpp | 11 +- indra/newview/llmoveview.h | 3 + .../xui/de/panel_preferences_colors.xml | 1 + .../skins/default/xui/en/floater_camera.xml | 4 +- .../skins/default/xui/en/floater_moveview.xml | 4 +- .../xui/en/panel_preferences_colors.xml | 18 + .../default/xui/en/panel_preferences_move.xml | 10 - .../skins/starlight/xui/en/floater_camera.xml | 3 +- .../starlightcui/xui/en/floater_camera.xml | 3 + .../starlightcui/xui/en/floater_moveview.xml | 422 ++++++++++++++++++ 13 files changed, 464 insertions(+), 52 deletions(-) create mode 100644 indra/newview/skins/starlightcui/xui/en/floater_moveview.xml diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 2ef1452c74..719bd1ed79 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -22086,17 +22086,6 @@ Change of this parameter will affect the layout of buttons in notification toast Value 1 - FSAlwaysOpaqueCameraControls - - Comment - Show Camera Controls always opaque - Persist - 1 - Type - Boolean - Value - 0 - FSEnableVolumeControls Comment diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index bb07838c4c..af91b6b4e6 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -345,7 +345,6 @@ void LLFloaterCamera::onOpen(const LLSD& key) LLFirstUse::viewPopup(); mZoom->onOpen(key); - setCameraFloaterTransparencyMode(LLSD(gSavedSettings.getBOOL("FSAlwaysOpaqueCameraControls"))); // FIRE-5583, FIRE-5220: Option to show Camera Controls always opaque // Returns to previous mode, see EXT-2727(View tool should remember state). // In case floater was just hidden and it isn't reset the mode @@ -393,12 +392,6 @@ LLFloaterCamera::LLFloaterCamera(const LLSD& val) // virtual BOOL LLFloaterCamera::postBuild() { - - // FIRE-5583, FIRE-5220: Option to show Camera Controls always opaque - // updateTransparency(TT_ACTIVE); // force using active floater transparency (STORM-730) - gSavedSettings.getControl("FSAlwaysOpaqueCameraControls")->getSignal()->connect(boost::bind(&LLFloaterCamera::setCameraFloaterTransparencyMode, this, _2)); - // - mRotate = getChild(ORBIT); mZoom = findChild(ZOOM); mTrack = getChild(PAN); @@ -449,23 +442,6 @@ void LLFloaterCamera::onViewButtonClick(const LLSD& user_data) } } - -// FIRE-5583, FIRE-5220: Option to show Camera Controls always opaque -void LLFloaterCamera::setCameraFloaterTransparencyMode(const LLSD &data) -{ - if(data.asBoolean()) - { - updateTransparency(TT_FORCE_OPAQUE); - setBackgroundOpaque(true); - } - else - { - updateTransparency(TT_ACTIVE); // force using active floater transparency (STORM-730) - setBackgroundOpaque(false); - } -} -// - void LLFloaterCamera::fillFlatlistFromPanel (LLFlatListView* list, LLPanel* panel) { // copying child list and then iterating over a copy, because list itself diff --git a/indra/newview/llfloatercamera.h b/indra/newview/llfloatercamera.h index cebdc835de..430b356c8a 100644 --- a/indra/newview/llfloatercamera.h +++ b/indra/newview/llfloatercamera.h @@ -81,8 +81,6 @@ public: LLPanelCameraZoom* mZoom; LLJoystickCameraTrack* mTrack; - void setCameraFloaterTransparencyMode(const LLSD &data); // FIRE-5583, FIRE-5220: Option to show Camera Controls always opaque - private: LLFloaterCamera(const LLSD& val); diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index c31a7c6713..b773dd4660 100644 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -93,7 +93,8 @@ LLFloaterMove::~LLFloaterMove() // virtual BOOL LLFloaterMove::postBuild() { - updateTransparency(TT_ACTIVE); // force using active floater transparency (STORM-730) + // Customizable floater transparency + //updateTransparency(TT_ACTIVE); // force using active floater transparency (STORM-730) // Code that implements floater buttons toggling when user moves via keyboard is located in LLAgent::propagate() @@ -534,6 +535,14 @@ void LLFloaterMove::setModeButtonToggleState(const EMovementMode mode) mModeControlButtonMap[mode]->setToggleState(TRUE); } +// Customizable floater transparency +F32 LLFloaterMove::getCurrentTransparency() +{ + static LLCachedControl camera_opacity(gSavedSettings, "CameraOpacity"); + static LLCachedControl active_floater_transparency(gSavedSettings, "ActiveFloaterTransparency"); + return llmin(camera_opacity(), active_floater_transparency()); +} +// /************************************************************************/ diff --git a/indra/newview/llmoveview.h b/indra/newview/llmoveview.h index 0e2a262486..6c394bc476 100644 --- a/indra/newview/llmoveview.h +++ b/indra/newview/llmoveview.h @@ -64,6 +64,9 @@ public: static void sUpdateMovementStatus(); // [/RLVa:KB] + // Customizable floater transparency + /*virtual*/ F32 getCurrentTransparency(); + protected: void turnLeft(); void turnRight(); diff --git a/indra/newview/skins/default/xui/de/panel_preferences_colors.xml b/indra/newview/skins/default/xui/de/panel_preferences_colors.xml index 2d5bc129a5..e196df5404 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_colors.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_colors.xml @@ -185,6 +185,7 @@ + Konsolen-Deckkraft: diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml index d11ab13068..0d107d30a0 100644 --- a/indra/newview/skins/default/xui/en/floater_camera.xml +++ b/indra/newview/skins/default/xui/en/floater_camera.xml @@ -3,7 +3,8 @@ diff --git a/indra/newview/skins/default/xui/en/floater_moveview.xml b/indra/newview/skins/default/xui/en/floater_moveview.xml index 8d4a2eaff7..6afad63765 100644 --- a/indra/newview/skins/default/xui/en/floater_moveview.xml +++ b/indra/newview/skins/default/xui/en/floater_moveview.xml @@ -4,7 +4,7 @@ right="-693" bottom="-50" legacy_header_height="18" - bg_opaque_image="Window_NoTitle_Background" + bg_opaque_image="Window_NoTitle_Foreground" bg_alpha_image="Window_NoTitle_Foreground" can_dock="false" can_minimize="false" @@ -20,7 +20,7 @@ save_visibility="true" single_instance="true" chrome="true" - title="" + show_title="false" width="86"> diff --git a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml index 85c06f1d97..91c3b67f63 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml @@ -1660,6 +1660,24 @@ show_text="true" top_pad="2" width="415" /> + (requires restart) - + + + Walk Forward (press Up Arrow or W) + + + Walk Backwards (press Down Arrow or S) + + + Walk left (press Shift + Left Arrow or A) + + + Walk right (press Shift + Right Arrow or D) + + + Run Forward (press Up Arrow or W) + + + Run Backwards (press Down Arrow or S) + + + Run left (press Shift + Left Arrow or A) + + + Run right (press Shift + Right Arrow or D) + + + Fly Forward (press Up Arrow or W) + + + Fly Backwards (press Down Arrow or S) + + + Fly left (press Shift + Left Arrow or A) + + + Fly right (press Shift + Right Arrow or D) + + + Fly up (press E) + + + Fly down (press C) + + + Jump (press E) + + + Crouch (press C) + + + + + + + + + + + + + - - - + left_pad="2" + name="buttons_panel" + top="22" + width="212"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/en/floater_preferences_view_advanced.xml b/indra/newview/skins/default/xui/en/floater_preferences_view_advanced.xml index 5b2cbee914..3826ead5c2 100644 --- a/indra/newview/skins/default/xui/en/floater_preferences_view_advanced.xml +++ b/indra/newview/skins/default/xui/en/floater_preferences_view_advanced.xml @@ -1,10 +1,10 @@ @@ -113,28 +113,4 @@ - - - diff --git a/indra/newview/skins/default/xui/en/floater_save_pref_preset.xml b/indra/newview/skins/default/xui/en/floater_save_pref_preset.xml index a9cda26f0b..178ecad0f3 100644 --- a/indra/newview/skins/default/xui/en/floater_save_pref_preset.xml +++ b/indra/newview/skins/default/xui/en/floater_save_pref_preset.xml @@ -1,51 +1,71 @@ + width="280"> Save Graphic Preset Save Camera Preset - - Save + Replace + - Type a name for the preset or choose an existing preset. - + top="15" + width="150" + name="radio_save_preset"> + + + + - diff --git a/indra/newview/skins/default/xui/en/panel_preferences_view.xml b/indra/newview/skins/default/xui/en/panel_preferences_view.xml deleted file mode 100644 index a7a69eb829..0000000000 --- a/indra/newview/skins/default/xui/en/panel_preferences_view.xml +++ /dev/null @@ -1,185 +0,0 @@ - - - - - - - Preset in use: - - - - (None) - - - - - - Automatic position for: - - - - - - - - - - - - - - - From bf5ee32838b9d4c53ff1ab709e2935d8d0b4ec0b Mon Sep 17 00:00:00 2001 From: maxim_productengine Date: Fri, 8 Nov 2019 16:47:11 +0200 Subject: [PATCH 038/108] SL-12186 WIP Add new icons --- .../default/textures/icons/Presets_Icon.png | Bin 0 -> 1293 bytes .../newview/skins/default/textures/textures.xml | 2 ++ .../skins/default/textures/windows/Icon_Gear.png | Bin 0 -> 6229 bytes .../skins/default/xui/en/panel_status_bar.xml | 10 +++++----- 4 files changed, 7 insertions(+), 5 deletions(-) create mode 100644 indra/newview/skins/default/textures/icons/Presets_Icon.png create mode 100644 indra/newview/skins/default/textures/windows/Icon_Gear.png diff --git a/indra/newview/skins/default/textures/icons/Presets_Icon.png b/indra/newview/skins/default/textures/icons/Presets_Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..503ee892a55da5add034fe7055a8baf72ce64cc5 GIT binary patch literal 1293 zcmbVLTTCNW7#@lu*_34CgK>>6lOZk@wsY$a+fJxmn4wZbu_x1WE&VNq6 z@B6?1KmU9lXnm{V!YdaL1gY>f^Fg>@%*ExU@cR|G{1V(QnN1yLn;JD!f)0=dQ4Iss zCkrtU1cKQ8(Qlw0K}xSkp$@ad-@-;z85eRGJS}UGjUe@&v?fHlfQg1dOj6v~;ZHwf zs3f|vTa2IdYaED6%{@A3>uC)|db%Pm5%au>)~8u0AOllC({e&F*t8qV>#{J;T@x6Z zhnQV%?5U{^e*ooF9iR+eXOB=6goDTW|j1V!3Oils=FCegEn!ECx1 zWrMu;EEhbvvAAh!EJ37FDLm!CRXs*fE|-fSX@aKh5MejE6;nvt6{D)4zyl+qOPVRE z3Yt?C!fMiVW6YZ`L;$9p@xdb#r zhaV_#;&nLM@pSeS{ubW_T0%`bJ3A*QCzF$tiq9{W{LwkFB)z#H~eSOJfa%yU7b8|Bg2+YjPEG#U{&(9wn9W5;_ z9UmXBt*zD8)_Oc10KnGP*1*8P@bK{d{(fa; + @@ -256,6 +257,7 @@ with the same filename but different name + diff --git a/indra/newview/skins/default/textures/windows/Icon_Gear.png b/indra/newview/skins/default/textures/windows/Icon_Gear.png new file mode 100644 index 0000000000000000000000000000000000000000..e1e89b8f32dfd9c70f89d25776a587d1726871b5 GIT binary patch literal 6229 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 literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml index ffcfc3ae91..ada980cda1 100644 --- a/indra/newview/skins/default/xui/en/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml @@ -148,19 +148,19 @@ + width="16" /> + + From 382c1845012cc4e2be78a5a03334b4157a732349 Mon Sep 17 00:00:00 2001 From: maxim_productengine Date: Tue, 12 Nov 2019 16:26:34 +0200 Subject: [PATCH 041/108] SL-12186 WIP Added ability to reset default presets and updated item list in 'My camera presets' floater --- indra/newview/app_settings/settings.xml | 2 +- indra/newview/llfloatercamera.cpp | 7 +- indra/newview/llfloatercamerapresets.cpp | 32 ++++++++- indra/newview/llfloatercamerapresets.h | 4 ++ indra/newview/llpresetsmanager.cpp | 65 +++++++++++++++++-- indra/newview/llpresetsmanager.h | 9 +++ .../xui/en/panel_camera_preset_item.xml | 20 ++++++ 7 files changed, 126 insertions(+), 13 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index f44185340a..04ab620b3a 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -1565,7 +1565,7 @@ CameraPreset Comment - Preset camera position - view (0 - rear, 1 - front, 2 - group) + Preset camera position - view (0 - rear, 1 - front, 2 - group, 3 - custom) Persist 1 Type diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index 2f85e7db34..47f05884b3 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -550,17 +550,17 @@ void LLFloaterCamera::switchToPreset(const std::string& name) if ("rear_view" == name) { gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW); - LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, PRESETS_REAR); + LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, PRESETS_REAR_VIEW); } else if ("group_view" == name) { gAgentCamera.switchCameraPreset(CAMERA_PRESET_GROUP_VIEW); - LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, PRESETS_SIDE); + LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, PRESETS_SIDE_VIEW); } else if ("front_view" == name) { gAgentCamera.switchCameraPreset(CAMERA_PRESET_FRONT_VIEW); - LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, PRESETS_FRONT); + LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, PRESETS_FRONT_VIEW); } } @@ -590,6 +590,7 @@ void LLFloaterCamera::populatePresetCombo() { mPresetCombo->setLabel(getString("inactive_combo_text")); } + updateItemsSelection(); } void LLFloaterCamera::onSavePreset() diff --git a/indra/newview/llfloatercamerapresets.cpp b/indra/newview/llfloatercamerapresets.cpp index 6a9df5d067..75660e590a 100644 --- a/indra/newview/llfloatercamerapresets.cpp +++ b/indra/newview/llfloatercamerapresets.cpp @@ -58,7 +58,10 @@ void LLFloaterCameraPresets::populateList() std::string presets_dir = presetsMgr->getPresetsDir(PRESETS_CAMERA); std::list preset_names; - presetsMgr->loadPresetNamesFromDir(presets_dir, preset_names, DEFAULT_TOP); + presetsMgr->loadPresetNamesFromDir(presets_dir, preset_names, DEFAULT_VIEWS_HIDE); + preset_names.push_back(PRESETS_FRONT_VIEW); + preset_names.push_back(PRESETS_REAR_VIEW); + preset_names.push_back(PRESETS_SIDE_VIEW); for (std::list::const_iterator it = preset_names.begin(); it != preset_names.end(); ++it) { const std::string& name = *it; @@ -86,10 +89,10 @@ LLCameraPresetFlatItem::~LLCameraPresetFlatItem() BOOL LLCameraPresetFlatItem::postBuild() { mDeleteBtn = getChild("delete_btn"); - mDeleteBtn->setVisible(!mIsDefaultPrest); + mDeleteBtn->setVisible(false); mResetBtn = getChild("reset_btn"); - mResetBtn->setVisible(mIsDefaultPrest); + mResetBtn->setVisible(false); LLStyle::Params style; LLTextBox* name_text = getChild("preset_name"); @@ -102,6 +105,29 @@ BOOL LLCameraPresetFlatItem::postBuild() return true; } +void LLCameraPresetFlatItem::onMouseEnter(S32 x, S32 y, MASK mask) +{ + mDeleteBtn->setVisible(!mIsDefaultPrest); + mResetBtn->setVisible(mIsDefaultPrest); + getChildView("hovered_icon")->setVisible(true); + LLPanel::onMouseEnter(x, y, mask); +} + +void LLCameraPresetFlatItem::onMouseLeave(S32 x, S32 y, MASK mask) +{ + mDeleteBtn->setVisible(false); + mResetBtn->setVisible(false); + getChildView("hovered_icon")->setVisible(false); + LLPanel::onMouseLeave(x, y, mask); +} + +void LLCameraPresetFlatItem::setValue(const LLSD& value) +{ + if (!value.isMap()) return;; + if (!value.has("selected")) return; + getChildView("selected_icon")->setVisible(value["selected"]); +} + void LLCameraPresetFlatItem::onDeleteBtnClick() { if (!LLPresetsManager::getInstance()->deletePreset(PRESETS_CAMERA, mPresetName)) diff --git a/indra/newview/llfloatercamerapresets.h b/indra/newview/llfloatercamerapresets.h index 8c293c57de..66430fa399 100644 --- a/indra/newview/llfloatercamerapresets.h +++ b/indra/newview/llfloatercamerapresets.h @@ -52,7 +52,11 @@ public: LLCameraPresetFlatItem(const std::string &preset_name, bool is_default); virtual ~LLCameraPresetFlatItem(); + void setValue(const LLSD& value); + virtual BOOL postBuild(); + virtual void onMouseEnter(S32 x, S32 y, MASK mask); + virtual void onMouseLeave(S32 x, S32 y, MASK mask); private: void onDeleteBtnClick(); diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index ab4f60d486..057f60a015 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -65,7 +65,13 @@ void LLPresetsManager::createMissingDefault(const std::string& subdirectory) { if(gDirUtilp->getLindenUserDir().empty()) { -return; + return; + } + + if (PRESETS_CAMERA == subdirectory) + { + createCameraDefaultPresets(); + return; } std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, @@ -83,6 +89,13 @@ return; } } +void LLPresetsManager::createCameraDefaultPresets() +{ + createDefaultCameraPreset(PRESETS_REAR_VIEW); + createDefaultCameraPreset(PRESETS_FRONT_VIEW); + createDefaultCameraPreset(PRESETS_SIDE_VIEW); +} + void LLPresetsManager::startWatching(const std::string& subdirectory) { if (PRESETS_CAMERA == subdirectory) @@ -163,6 +176,10 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam std::string name = LLURI::unescape(gDirUtilp->getBaseFileName(path, /*strip_exten = */ true)); LL_DEBUGS() << " Found preset '" << name << "'" << LL_ENDL; + if (isTemplateCameraPreset(name)) + { + continue; + } if (default_option == DEFAULT_VIEWS_HIDE) { if (isDefaultCameraPreset(name)) @@ -198,6 +215,7 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam } bool LLPresetsManager::mCameraDirty = false; +bool LLPresetsManager::mIgnoreChangedSignal = false; void LLPresetsManager::setCameraDirty(bool dirty) { @@ -215,7 +233,7 @@ void LLPresetsManager::settingChanged() static LLCachedControl preset_camera_active(gSavedSettings, "PresetCameraActive", ""); std::string preset_name = preset_camera_active; - if (!preset_name.empty()) + if (!preset_name.empty() && !mIgnoreChangedSignal) { gSavedSettings.setString("PresetCameraActive", ""); @@ -267,6 +285,12 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n return false; } + if (isTemplateCameraPreset(name)) + { + LL_WARNS() << "Should not overwrite template presets" << LL_ENDL; + return false; + } + bool saved = false; std::vector name_list; @@ -434,8 +458,10 @@ void LLPresetsManager::loadPreset(const std::string& subdirectory, std::string n LL_DEBUGS() << "attempting to load preset '"< 0) { + mIgnoreChangedSignal = false; if(PRESETS_GRAPHIC == subdirectory) { gSavedSettings.setString("PresetGraphicActive", name); @@ -453,10 +479,11 @@ void LLPresetsManager::loadPreset(const std::string& subdirectory, std::string n triggerChangeCameraSignal(); } } - else - { - LL_WARNS("Presets") << "failed to load preset '"<getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, + PRESETS_CAMERA, LLURI::escape(preset_name) + ".xml"); + if (!gDirUtilp->fileExists(preset_file) || force_reset) + { + std::string template_name = preset_name.substr(0, preset_name.size() - PRESETS_VIEW_SUFFIX.size()); + std::string default_template_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, + PRESETS_CAMERA, template_name + ".xml"); + LLFile::copy(default_template_file, preset_file); + } } boost::signals2::connection LLPresetsManager::setPresetListChangeCameraCallback(const preset_list_signal_t::slot_type& cb) diff --git a/indra/newview/llpresetsmanager.h b/indra/newview/llpresetsmanager.h index 9964cc0fcf..d489a0ad5a 100644 --- a/indra/newview/llpresetsmanager.h +++ b/indra/newview/llpresetsmanager.h @@ -39,6 +39,10 @@ static const std::string PRESETS_CAMERA = "camera"; static const std::string PRESETS_REAR = "Rear"; static const std::string PRESETS_FRONT = "Front"; static const std::string PRESETS_SIDE = "Side"; +static const std::string PRESETS_VIEW_SUFFIX = " View"; +static const std::string PRESETS_REAR_VIEW = PRESETS_REAR + PRESETS_VIEW_SUFFIX; +static const std::string PRESETS_FRONT_VIEW = PRESETS_FRONT + PRESETS_VIEW_SUFFIX; +static const std::string PRESETS_SIDE_VIEW = PRESETS_SIDE + PRESETS_VIEW_SUFFIX; enum EDefaultOptions { @@ -71,8 +75,12 @@ public: bool isCameraDirty(); static void setCameraDirty(bool dirty); + void createCameraDefaultPresets(); + + bool isTemplateCameraPreset(std::string preset_name); bool isDefaultCameraPreset(std::string preset_name); void resetCameraPreset(std::string preset_name); + void createDefaultCameraPreset(std::string preset_name, bool force_reset = false); // Emitted when a preset gets loaded, deleted, or saved. boost::signals2::connection setPresetListChangeCameraCallback(const preset_list_signal_t::slot_type& cb); @@ -95,6 +103,7 @@ public: boost::signals2::connection mCameraChangedSignal; static bool mCameraDirty; + static bool mIgnoreChangedSignal; }; #endif // LL_PRESETSMANAGER_H diff --git a/indra/newview/skins/default/xui/en/panel_camera_preset_item.xml b/indra/newview/skins/default/xui/en/panel_camera_preset_item.xml index 187f5889eb..9417ab4ac2 100644 --- a/indra/newview/skins/default/xui/en/panel_camera_preset_item.xml +++ b/indra/newview/skins/default/xui/en/panel_camera_preset_item.xml @@ -7,6 +7,26 @@ name="camera_preset_item" top="0" width="280"> + + Date: Wed, 13 Nov 2019 15:55:02 +0200 Subject: [PATCH 042/108] SL-12186 WIP Use appropriate offset names when saving presets --- indra/newview/llagentcamera.cpp | 10 +++ indra/newview/llagentcamera.h | 2 + .../newview/llpanelpresetscamerapulldown.cpp | 16 +---- indra/newview/llpresetsmanager.cpp | 63 ++++++++++++++----- .../xui/en/panel_presets_camera_pulldown.xml | 6 +- 5 files changed, 64 insertions(+), 33 deletions(-) diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index 3e56c1dd71..882e3cee55 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -1948,11 +1948,21 @@ std::string LLAgentCamera::getCameraOffsetCtrlName() return mCameraOffsetInitial[mCameraPreset]->getName(); } +std::string LLAgentCamera::getCameraOffsetCtrlName(ECameraPreset preset) +{ + return mCameraOffsetInitial[preset]->getName(); +} + std::string LLAgentCamera::getFocusOffsetCtrlName() { return mFocusOffsetInitial[mCameraPreset]->getName(); } +std::string LLAgentCamera::getFocusOffsetCtrlName(ECameraPreset preset) +{ + return mFocusOffsetInitial[preset]->getName(); +} + F32 LLAgentCamera::getCameraMaxZoomDistance() { // Ignore "DisableCameraConstraints", we don't want to be out of draw range when we focus onto objects or avatars diff --git a/indra/newview/llagentcamera.h b/indra/newview/llagentcamera.h index 294e81c2e1..5c8172bbfc 100644 --- a/indra/newview/llagentcamera.h +++ b/indra/newview/llagentcamera.h @@ -118,7 +118,9 @@ public: LLVector3d getFocusOffsetInitial(); std::string getCameraOffsetCtrlName(); + std::string getCameraOffsetCtrlName(ECameraPreset preset); std::string getFocusOffsetCtrlName(); + std::string getFocusOffsetCtrlName(ECameraPreset preset); private: /** Determines maximum camera distance from target for mouselook, opposite to LAND_MIN_ZOOM */ F32 getCameraMaxZoomDistance(); diff --git a/indra/newview/llpanelpresetscamerapulldown.cpp b/indra/newview/llpanelpresetscamerapulldown.cpp index 7612c428d9..1ac105e1c8 100644 --- a/indra/newview/llpanelpresetscamerapulldown.cpp +++ b/indra/newview/llpanelpresetscamerapulldown.cpp @@ -52,7 +52,7 @@ LLPanelPresetsCameraPulldown::LLPanelPresetsCameraPulldown() { mHoverTimer.stop(); - mCommitCallbackRegistrar.add("Presets.GoViewPrefs", boost::bind(&LLPanelPresetsCameraPulldown::onViewButtonClick, this, _2)); + mCommitCallbackRegistrar.add("Presets.toggleCameraFloater", boost::bind(&LLPanelPresetsCameraPulldown::onViewButtonClick, this, _2)); mCommitCallbackRegistrar.add("PresetsCamera.RowClick", boost::bind(&LLPanelPresetsCameraPulldown::onRowClick, this, _2)); buildFromFile( "panel_presets_camera_pulldown.xml"); @@ -205,19 +205,7 @@ void LLPanelPresetsCameraPulldown::onViewButtonClick(const LLSD& user_data) // close the minicontrol, we're bringing up the big one setVisible(FALSE); - // bring up the prefs floater - LLFloater* prefsfloater = LLFloaterReg::showInstance("preferences"); - if (prefsfloater) - { - // grab the 'view' panel from the preferences floater and - // bring it the front! - LLTabContainer* tabcontainer = prefsfloater->getChild("pref core"); - LLPanel* graphicspanel = prefsfloater->getChild("view"); - if (tabcontainer && graphicspanel) - { - tabcontainer->selectTabPanel(graphicspanel); - } - } + LLFloaterReg::toggleInstanceOrBringToFront("camera"); } //virtual diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 057f60a015..71f0cd72d4 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -275,6 +275,9 @@ void LLPresetsManager::getOffsetControlNames(std::vector& names) bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string name, bool createDefault) { + bool IS_CAMERA = (PRESETS_CAMERA == subdirectory); + bool IS_GRAPHIC = (PRESETS_GRAPHIC == subdirectory); + if (LLTrans::getString(PRESETS_DEFAULT) == name) { name = PRESETS_DEFAULT; @@ -294,7 +297,7 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n bool saved = false; std::vector name_list; - if(PRESETS_GRAPHIC == subdirectory) + if (IS_GRAPHIC) { LLFloaterPreference* instance = LLFloaterReg::findTypedInstance("preferences"); if (instance && !createDefault) @@ -309,11 +312,13 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n LL_WARNS("Presets") << "preferences floater instance not found" << LL_ENDL; } } - else if(PRESETS_CAMERA == subdirectory) + else if (IS_CAMERA) { name_list.clear(); getControlNames(name_list); name_list.push_back("PresetCameraActive"); + name_list.push_back(gAgentCamera.getCameraOffsetCtrlName()); + name_list.push_back(gAgentCamera.getFocusOffsetCtrlName()); } else { @@ -324,7 +329,7 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n LLSD paramsData(LLSD::emptyMap()); // Create a default graphics preset from hw recommended settings - if (createDefault && name == PRESETS_DEFAULT && subdirectory == PRESETS_GRAPHIC) + if (IS_GRAPHIC && createDefault && name == PRESETS_DEFAULT) { paramsData = LLFeatureManager::getInstance()->getRecommendedSettingsMap(); if (gSavedSettings.getU32("RenderAvatarMaxComplexity") == 0) @@ -335,25 +340,47 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n } else { - bool custom_camera_offsets = false; - if (subdirectory == PRESETS_CAMERA) + ECameraPreset new_camera_preset = (ECameraPreset)gSavedSettings.getU32("CameraPreset"); + bool new_camera_offsets = false; + if (IS_CAMERA) { - name_list.push_back(gAgentCamera.getCameraOffsetCtrlName()); - name_list.push_back(gAgentCamera.getFocusOffsetCtrlName()); - custom_camera_offsets = !isDefaultCameraPreset(name); + if (isDefaultCameraPreset(name)) + { + if (PRESETS_REAR_VIEW == name) + { + new_camera_preset = CAMERA_PRESET_REAR_VIEW; + } + else if (PRESETS_SIDE_VIEW == name) + { + new_camera_preset = CAMERA_PRESET_GROUP_VIEW; + } + else if (PRESETS_FRONT_VIEW == name) + { + new_camera_preset = CAMERA_PRESET_FRONT_VIEW; + } + } + else + { + new_camera_preset = CAMERA_PRESET_CUSTOM; + } + new_camera_offsets = (!isDefaultCameraPreset(name) || (ECameraPreset)gSavedSettings.getU32("CameraPreset") != new_camera_preset); } for (std::vector::iterator it = name_list.begin(); it != name_list.end(); ++it) { std::string ctrl_name = *it; std::string dest_ctrl_name = ctrl_name; - if (custom_camera_offsets && ctrl_name == gAgentCamera.getCameraOffsetCtrlName()) + if (IS_CAMERA && new_camera_offsets) { - dest_ctrl_name = "CameraOffsetCustomPreset"; - } - if (custom_camera_offsets && ctrl_name == gAgentCamera.getFocusOffsetCtrlName()) - { - dest_ctrl_name = "FocusOffsetCustomPreset"; + if (ctrl_name == gAgentCamera.getCameraOffsetCtrlName()) + { + dest_ctrl_name = gAgentCamera.getCameraOffsetCtrlName(new_camera_preset); + } + if (ctrl_name == gAgentCamera.getFocusOffsetCtrlName()) + { + dest_ctrl_name = gAgentCamera.getFocusOffsetCtrlName(new_camera_preset); + } } + LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get(); if (ctrl) { @@ -367,6 +394,10 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n paramsData[dest_ctrl_name]["Value"] = value; } } + if (IS_CAMERA) + { + gSavedSettings.setU32("CameraPreset", new_camera_preset); + } } std::string pathName(getPresetsDir(subdirectory) + gDirUtilp->getDirDelimiter() + LLURI::escape(name) + ".xml"); @@ -385,14 +416,14 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n LL_DEBUGS() << "saved preset '" << name << "'; " << paramsData.size() << " parameters" << LL_ENDL; - if (subdirectory == PRESETS_GRAPHIC) + if (IS_GRAPHIC) { gSavedSettings.setString("PresetGraphicActive", name); // signal interested parties triggerChangeSignal(); } - if (subdirectory == PRESETS_CAMERA) + if (IS_CAMERA) { gSavedSettings.setString("PresetCameraActive", name); setCameraDirty(false); diff --git a/indra/newview/skins/default/xui/en/panel_presets_camera_pulldown.xml b/indra/newview/skins/default/xui/en/panel_presets_camera_pulldown.xml index dc37270751..25d9c47449 100644 --- a/indra/newview/skins/default/xui/en/panel_presets_camera_pulldown.xml +++ b/indra/newview/skins/default/xui/en/panel_presets_camera_pulldown.xml @@ -57,13 +57,13 @@ width="215" /> From 7637f343865960ee509ae31205c097f0bb04aac1 Mon Sep 17 00:00:00 2001 From: maxim_productengine Date: Wed, 13 Nov 2019 17:39:40 +0200 Subject: [PATCH 043/108] SL-12186 WIP Get rid of excessive offset settings as we moved to store data in xml --- indra/newview/app_settings/camera/Front.xml | 4 +- indra/newview/app_settings/camera/Side.xml | 4 +- indra/newview/llagentcamera.cpp | 37 +++-------------- indra/newview/llagentcamera.h | 12 ++---- .../llfloaterpreferenceviewadvanced.cpp | 4 +- indra/newview/llpresetsmanager.cpp | 40 +++---------------- indra/newview/llpresetsmanager.h | 1 - indra/newview/llviewermenu.cpp | 8 ---- 8 files changed, 21 insertions(+), 89 deletions(-) diff --git a/indra/newview/app_settings/camera/Front.xml b/indra/newview/app_settings/camera/Front.xml index a4b5ace33c..cb3380589e 100644 --- a/indra/newview/app_settings/camera/Front.xml +++ b/indra/newview/app_settings/camera/Front.xml @@ -37,7 +37,7 @@ 6 - CameraOffsetFrontView + CameraOffsetRearView Comment Initial camera offset from avatar in Front View @@ -74,7 +74,7 @@ Value 0 - FocusOffsetFrontView + FocusOffsetRearView Comment Initial focus point offset relative to avatar for the camera preset Front View (x-axis is forward) diff --git a/indra/newview/app_settings/camera/Side.xml b/indra/newview/app_settings/camera/Side.xml index 677fd47e20..49582a8a3c 100644 --- a/indra/newview/app_settings/camera/Side.xml +++ b/indra/newview/app_settings/camera/Side.xml @@ -37,7 +37,7 @@ 6 - CameraOffsetGroupView + CameraOffsetRearView Comment Initial camera offset from avatar in Side View @@ -74,7 +74,7 @@ Value 0 - FocusOffsetGroupView + FocusOffsetRearView Comment Initial focus point offset relative to avatar for the camera preset Side View (x-axis is forward) diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index 882e3cee55..285a1509cd 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -207,15 +207,8 @@ void LLAgentCamera::init() mCameraPreset = (ECameraPreset) gSavedSettings.getU32("CameraPreset"); - mCameraOffsetInitial[CAMERA_PRESET_REAR_VIEW] = gSavedSettings.getControl("CameraOffsetRearView"); - mCameraOffsetInitial[CAMERA_PRESET_FRONT_VIEW] = gSavedSettings.getControl("CameraOffsetFrontView"); - mCameraOffsetInitial[CAMERA_PRESET_GROUP_VIEW] = gSavedSettings.getControl("CameraOffsetGroupView"); - mCameraOffsetInitial[CAMERA_PRESET_CUSTOM] = gSavedSettings.getControl("CameraOffsetCustomPreset"); - - mFocusOffsetInitial[CAMERA_PRESET_REAR_VIEW] = gSavedSettings.getControl("FocusOffsetRearView"); - mFocusOffsetInitial[CAMERA_PRESET_FRONT_VIEW] = gSavedSettings.getControl("FocusOffsetFrontView"); - mFocusOffsetInitial[CAMERA_PRESET_GROUP_VIEW] = gSavedSettings.getControl("FocusOffsetGroupView"); - mFocusOffsetInitial[CAMERA_PRESET_CUSTOM] = gSavedSettings.getControl("FocusOffsetCustomPreset"); + mCameraOffsetInitial = gSavedSettings.getControl("CameraOffsetRearView"); + mFocusOffsetInitial = gSavedSettings.getControl("FocusOffsetRearView"); mCameraCollidePlane.clearVec(); mCurrentCameraDistance = getCameraOffsetInitial().magVec() * gSavedSettings.getF32("CameraOffsetScale"); @@ -1603,7 +1596,7 @@ LLVector3d LLAgentCamera::calcThirdPersonFocusOffset() agent_rot *= ((LLViewerObject*)(gAgentAvatarp->getParent()))->getRenderRotation(); } - focus_offset = convert_from_llsd(mFocusOffsetInitial[mCameraPreset]->get(), TYPE_VEC3D, ""); + focus_offset = convert_from_llsd(mFocusOffsetInitial->get(), TYPE_VEC3D, ""); return focus_offset * agent_rot; } @@ -1935,32 +1928,12 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit) LLVector3 LLAgentCamera::getCameraOffsetInitial() { - return convert_from_llsd(mCameraOffsetInitial[mCameraPreset]->get(), TYPE_VEC3, ""); + return convert_from_llsd(mCameraOffsetInitial->get(), TYPE_VEC3, ""); } LLVector3d LLAgentCamera::getFocusOffsetInitial() { - return convert_from_llsd(mFocusOffsetInitial[mCameraPreset]->get(), TYPE_VEC3D, ""); -} - -std::string LLAgentCamera::getCameraOffsetCtrlName() -{ - return mCameraOffsetInitial[mCameraPreset]->getName(); -} - -std::string LLAgentCamera::getCameraOffsetCtrlName(ECameraPreset preset) -{ - return mCameraOffsetInitial[preset]->getName(); -} - -std::string LLAgentCamera::getFocusOffsetCtrlName() -{ - return mFocusOffsetInitial[mCameraPreset]->getName(); -} - -std::string LLAgentCamera::getFocusOffsetCtrlName(ECameraPreset preset) -{ - return mFocusOffsetInitial[preset]->getName(); + return convert_from_llsd(mFocusOffsetInitial->get(), TYPE_VEC3D, ""); } F32 LLAgentCamera::getCameraMaxZoomDistance() diff --git a/indra/newview/llagentcamera.h b/indra/newview/llagentcamera.h index 5c8172bbfc..8a922bf678 100644 --- a/indra/newview/llagentcamera.h +++ b/indra/newview/llagentcamera.h @@ -117,10 +117,6 @@ public: /** Determines default focus offset depending on the current camera preset */ LLVector3d getFocusOffsetInitial(); - std::string getCameraOffsetCtrlName(); - std::string getCameraOffsetCtrlName(ECameraPreset preset); - std::string getFocusOffsetCtrlName(); - std::string getFocusOffsetCtrlName(ECameraPreset preset); private: /** Determines maximum camera distance from target for mouselook, opposite to LAND_MIN_ZOOM */ F32 getCameraMaxZoomDistance(); @@ -128,11 +124,11 @@ private: /** Camera preset in Third Person Mode */ ECameraPreset mCameraPreset; - /** Initial camera offsets */ - std::map > mCameraOffsetInitial; + /** Initial camera offset */ + LLPointer mCameraOffsetInitial; - /** Initial focus offsets */ - std::map > mFocusOffsetInitial; + /** Initial focus offset */ + LLPointer mFocusOffsetInitial; //-------------------------------------------------------------------- // Position diff --git a/indra/newview/llfloaterpreferenceviewadvanced.cpp b/indra/newview/llfloaterpreferenceviewadvanced.cpp index 57484d0d0a..f8db738923 100644 --- a/indra/newview/llfloaterpreferenceviewadvanced.cpp +++ b/indra/newview/llfloaterpreferenceviewadvanced.cpp @@ -73,10 +73,10 @@ void LLFloaterPreferenceViewAdvanced::onCommitSettings() vector.mV[VX] = (F32)getChild("camera_x")->getValue().asReal(); vector.mV[VY] = (F32)getChild("camera_y")->getValue().asReal(); vector.mV[VZ] = (F32)getChild("camera_z")->getValue().asReal(); - gSavedSettings.setVector3(gAgentCamera.getCameraOffsetCtrlName(), vector); + gSavedSettings.setVector3("CameraOffsetRearView", vector); vector3d.mdV[VX] = (F32)getChild("focus_x")->getValue().asReal(); vector3d.mdV[VY] = (F32)getChild("focus_y")->getValue().asReal(); vector3d.mdV[VZ] = (F32)getChild("focus_z")->getValue().asReal(); - gSavedSettings.setVector3d(gAgentCamera.getFocusOffsetCtrlName(), vector3d); + gSavedSettings.setVector3d("FocusOffsetRearView", vector3d); } diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 71f0cd72d4..4f25e93ebd 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -102,7 +102,6 @@ void LLPresetsManager::startWatching(const std::string& subdirectory) { std::vector name_list; getControlNames(name_list); - getOffsetControlNames(name_list); for (std::vector::iterator it = name_list.begin(); it != name_list.end(); ++it) { @@ -254,25 +253,12 @@ void LLPresetsManager::getControlNames(std::vector& names) ("CameraOffsetBuild") ("CameraOffsetScale") ("TrackFocusObject") + ("CameraOffsetRearView") + ("FocusOffsetRearView") ; names = camera_controls; } -void LLPresetsManager::getOffsetControlNames(std::vector& names) -{ - const std::vector offset_controls = boost::assign::list_of - ("CameraOffsetRearView") - ("CameraOffsetFrontView") - ("CameraOffsetGroupView") - ("CameraOffsetCustomPreset") - ("FocusOffsetRearView") - ("FocusOffsetFrontView") - ("FocusOffsetGroupView") - ("FocusOffsetCustomPreset") - ; - names.insert(std::end(names), std::begin(offset_controls), std::end(offset_controls)); -} - bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string name, bool createDefault) { bool IS_CAMERA = (PRESETS_CAMERA == subdirectory); @@ -317,8 +303,6 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n name_list.clear(); getControlNames(name_list); name_list.push_back("PresetCameraActive"); - name_list.push_back(gAgentCamera.getCameraOffsetCtrlName()); - name_list.push_back(gAgentCamera.getFocusOffsetCtrlName()); } else { @@ -368,18 +352,6 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n for (std::vector::iterator it = name_list.begin(); it != name_list.end(); ++it) { std::string ctrl_name = *it; - std::string dest_ctrl_name = ctrl_name; - if (IS_CAMERA && new_camera_offsets) - { - if (ctrl_name == gAgentCamera.getCameraOffsetCtrlName()) - { - dest_ctrl_name = gAgentCamera.getCameraOffsetCtrlName(new_camera_preset); - } - if (ctrl_name == gAgentCamera.getFocusOffsetCtrlName()) - { - dest_ctrl_name = gAgentCamera.getFocusOffsetCtrlName(new_camera_preset); - } - } LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get(); if (ctrl) @@ -388,10 +360,10 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n std::string type = LLControlGroup::typeEnumToString(ctrl->type()); LLSD value = ctrl->getValue(); - paramsData[dest_ctrl_name]["Comment"] = comment; - paramsData[dest_ctrl_name]["Persist"] = 1; - paramsData[dest_ctrl_name]["Type"] = type; - paramsData[dest_ctrl_name]["Value"] = value; + paramsData[ctrl_name]["Comment"] = comment; + paramsData[ctrl_name]["Persist"] = 1; + paramsData[ctrl_name]["Type"] = type; + paramsData[ctrl_name]["Value"] = value; } } if (IS_CAMERA) diff --git a/indra/newview/llpresetsmanager.h b/indra/newview/llpresetsmanager.h index d489a0ad5a..09010413a9 100644 --- a/indra/newview/llpresetsmanager.h +++ b/indra/newview/llpresetsmanager.h @@ -97,7 +97,6 @@ public: LOG_CLASS(LLPresetsManager); void getControlNames(std::vector& names); - void getOffsetControlNames(std::vector& names); static void settingChanged(); boost::signals2::connection mCameraChangedSignal; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index c18d63d72b..7dfb6a6ac2 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -4109,14 +4109,6 @@ void handle_reset_view() // switching to outfit selector should automagically save any currently edited wearable LLFloaterSidePanelContainer::showPanel("appearance", LLSD().with("type", "my_outfits")); } - if ((ECameraPreset)gSavedSettings.getU32("CameraPreset") == CAMERA_PRESET_CUSTOM) - { - gAgentCamera.switchCameraPreset(CAMERA_PRESET_CUSTOM); - } - else - { - gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW); - } reset_view_final( TRUE ); LLFloaterCamera::resetCameraMode(); From 16015cfb9f1e7d9983057e35c5ab41c92271b9a5 Mon Sep 17 00:00:00 2001 From: maxim_productengine Date: Thu, 14 Nov 2019 17:51:58 +0200 Subject: [PATCH 044/108] SL-12186 Buildfix and update for creation of default presets --- indra/newview/app_settings/settings.xml | 2 +- indra/newview/llfloatersaveprefpreset.cpp | 2 +- indra/newview/llstartup.cpp | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 04ab620b3a..2fe5817772 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -16349,7 +16349,7 @@ Type String Value - + Rear View CefVerboseLog diff --git a/indra/newview/llfloatersaveprefpreset.cpp b/indra/newview/llfloatersaveprefpreset.cpp index c8d6513f4d..3142991704 100644 --- a/indra/newview/llfloatersaveprefpreset.cpp +++ b/indra/newview/llfloatersaveprefpreset.cpp @@ -112,7 +112,7 @@ void LLFloaterSavePrefPreset::onOpen(const LLSD& key) void LLFloaterSavePrefPreset::onBtnSave() { bool is_saving_new = mSaveRadioGroup->getSelectedIndex() == 0; - std::string name = is_saving_new ? mNameEditor->getValue() : mPresetCombo->getSimple(); + std::string name = is_saving_new ? mNameEditor->getText() : mPresetCombo->getSimple(); if ((name == LLTrans::getString(PRESETS_DEFAULT)) || (name == PRESETS_DEFAULT)) { diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 6e0a36be49..8a5dbf317a 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -71,6 +71,7 @@ #include "llnotifications.h" #include "llnotificationsutil.h" #include "llpersistentnotificationstorage.h" +#include "llpresetsmanager.h" #include "llteleporthistory.h" #include "llregionhandle.h" #include "llsd.h" @@ -1960,6 +1961,8 @@ bool idle_startup() // JC - 7/20/2002 gViewerWindow->sendShapeToSim(); + LLPresetsManager::getInstance()->createMissingDefault(PRESETS_CAMERA); + // The reason we show the alert is because we want to // reduce confusion for when you log in and your provided // location is not your expected location. So, if this is From db15a86f2ea1a4555204ba82bc3d960d30c0f763 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Thu, 14 Nov 2019 21:50:09 +0100 Subject: [PATCH 045/108] Remove extraneous camera floater in Starlight skins --- .../skins/starlight/xui/en/floater_camera.xml | 411 ------------------ .../xui/en/widgets/panel_camera_item.xml | 70 --- .../starlightcui/xui/en/floater_camera.xml | 341 --------------- .../xui/en/widgets/panel_camera_item.xml | 70 --- 4 files changed, 892 deletions(-) delete mode 100644 indra/newview/skins/starlight/xui/en/floater_camera.xml delete mode 100644 indra/newview/skins/starlight/xui/en/widgets/panel_camera_item.xml delete mode 100644 indra/newview/skins/starlightcui/xui/en/floater_camera.xml delete mode 100644 indra/newview/skins/starlightcui/xui/en/widgets/panel_camera_item.xml diff --git a/indra/newview/skins/starlight/xui/en/floater_camera.xml b/indra/newview/skins/starlight/xui/en/floater_camera.xml deleted file mode 100644 index f739b88187..0000000000 --- a/indra/newview/skins/starlight/xui/en/floater_camera.xml +++ /dev/null @@ -1,411 +0,0 @@ - - - - - - - - - - - - Rotate Camera Around Focus - - - Zoom Camera Towards Focus - - - Move Camera Up and Down, Left and Right - - -camera_modes_title - - -pan_mode_title - - -presets_mode_title - - -free_mode_title - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "" - - - - - - - - - - "" - - - - - - - - - - "" - - - - - - - - - - - - - "" - - - - - - - - - - "" - - - - - - - - - - "" - - - - diff --git a/indra/newview/skins/starlight/xui/en/widgets/panel_camera_item.xml b/indra/newview/skins/starlight/xui/en/widgets/panel_camera_item.xml deleted file mode 100644 index aa79d84b94..0000000000 --- a/indra/newview/skins/starlight/xui/en/widgets/panel_camera_item.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - Text - - diff --git a/indra/newview/skins/starlightcui/xui/en/floater_camera.xml b/indra/newview/skins/starlightcui/xui/en/floater_camera.xml deleted file mode 100644 index 670c3b44d3..0000000000 --- a/indra/newview/skins/starlightcui/xui/en/floater_camera.xml +++ /dev/null @@ -1,341 +0,0 @@ - - - - - - - - - Rotate Camera Around Focus - - - Zoom Camera Towards Focus - - - Move Camera Up and Down, Left and Right - - - View - - - Camera - - - Preset - - - Mode - - - - - - - - - Front View - - - - - - - - Side View - - - - - - - - Rear View - - - - - - - - Object View - - - - - - - - Mouselook - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/indra/newview/skins/starlightcui/xui/en/widgets/panel_camera_item.xml b/indra/newview/skins/starlightcui/xui/en/widgets/panel_camera_item.xml deleted file mode 100644 index 8a79e51dd6..0000000000 --- a/indra/newview/skins/starlightcui/xui/en/widgets/panel_camera_item.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - Text - - From 26732bc576f86fde532e1f9448bd127515f70612 Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Thu, 14 Nov 2019 23:43:52 +0200 Subject: [PATCH 046/108] Line endings fix --- .../default/xui/en/floater_camera_presets.xml | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/indra/newview/skins/default/xui/en/floater_camera_presets.xml b/indra/newview/skins/default/xui/en/floater_camera_presets.xml index 0d9a6bb16a..930357f568 100644 --- a/indra/newview/skins/default/xui/en/floater_camera_presets.xml +++ b/indra/newview/skins/default/xui/en/floater_camera_presets.xml @@ -1,23 +1,23 @@ - - - - + + + + From 533b3540cc8cd3d48d2e3d5cfd760bc09e21fdd3 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Thu, 14 Nov 2019 23:23:31 +0100 Subject: [PATCH 047/108] Improve camera floater --- indra/newview/llfloatercamera.cpp | 18 +++- .../llfloaterpreferenceviewadvanced.cpp | 17 ++++ .../newview/llfloaterpreferenceviewadvanced.h | 1 + .../skins/default/xui/en/floater_camera.xml | 87 ++++++++++++------- .../en/floater_preferences_view_advanced.xml | 33 ++++++- .../xui/en/panel_presets_camera_pulldown.xml | 2 +- .../xui/en/widgets/panel_camera_item.xml | 16 ++-- 7 files changed, 126 insertions(+), 48 deletions(-) diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index 830ecfff3b..cff7e3324f 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -393,9 +393,11 @@ BOOL LLFloaterCamera::postBuild() mTrack = getChild(PAN); mPresetCombo = getChild("preset_combo"); - getChild("precise_ctrs_label")->setShowCursorHand(false); - getChild("precise_ctrs_label")->setSoundFlags(LLView::MOUSE_UP); - getChild("precise_ctrs_label")->setClickedCallback(boost::bind(&LLFloaterReg::showInstance, "prefs_view_advanced", LLSD(), FALSE)); + // Improved camera floater + //getChild("precise_ctrs_label")->setShowCursorHand(false); + //getChild("precise_ctrs_label")->setSoundFlags(LLView::MOUSE_UP); + //getChild("precise_ctrs_label")->setClickedCallback(boost::bind(&LLFloaterReg::showInstance, "prefs_view_advanced", LLSD(), FALSE)); + // mPresetCombo->setCommitCallback(boost::bind(&LLFloaterCamera::onCustomPresetSelected, this)); LLPresetsManager::getInstance()->setPresetListChangeCameraCallback(boost::bind(&LLFloaterCamera::populatePresetCombo, this)); @@ -555,6 +557,16 @@ void LLFloaterCamera::onClickCameraItem(const LLSD& param) if (camera_floater) camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA); } + // Improved camera floater + else if ("reset_view" == name) + { + LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance(); + if (camera_floater) + camera_floater->switchMode(CAMERA_CTRL_MODE_PAN); + gAgentCamera.changeCameraToDefault(); + switchToPreset("rear_view"); + } + // else { LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance(); diff --git a/indra/newview/llfloaterpreferenceviewadvanced.cpp b/indra/newview/llfloaterpreferenceviewadvanced.cpp index f8db738923..131c5a3802 100644 --- a/indra/newview/llfloaterpreferenceviewadvanced.cpp +++ b/indra/newview/llfloaterpreferenceviewadvanced.cpp @@ -32,12 +32,14 @@ #include "lluictrlfactory.h" #include "llspinctrl.h" #include "llviewercontrol.h" +#include "llpresetsmanager.h" LLFloaterPreferenceViewAdvanced::LLFloaterPreferenceViewAdvanced(const LLSD& key) : LLFloater(key) { mCommitCallbackRegistrar.add("CommitSettings", boost::bind(&LLFloaterPreferenceViewAdvanced::onCommitSettings, this)); + mCommitCallbackRegistrar.add("CameraPresets.Save", boost::bind(&LLFloaterPreferenceViewAdvanced::onSavePreset, this)); // Improved camera floater } LLFloaterPreferenceViewAdvanced::~LLFloaterPreferenceViewAdvanced() @@ -80,3 +82,18 @@ void LLFloaterPreferenceViewAdvanced::onCommitSettings() vector3d.mdV[VZ] = (F32)getChild("focus_z")->getValue().asReal(); gSavedSettings.setVector3d("FocusOffsetRearView", vector3d); } + +// Improved camera floater +void LLFloaterPreferenceViewAdvanced::onSavePreset() +{ + LLFloaterReg::hideInstance("delete_pref_preset", PRESETS_CAMERA); + LLFloaterReg::hideInstance("load_pref_preset", PRESETS_CAMERA); + + LLSD key; + key["subdirectory"] = PRESETS_CAMERA; + std::string current_preset = gSavedSettings.getString("PresetCameraActive"); + bool is_custom_preset = current_preset != "" && !LLPresetsManager::getInstance()->isDefaultCameraPreset(current_preset); + key["index"] = is_custom_preset ? 1 : 0; + LLFloaterReg::showInstance("save_pref_preset", key); +} +// diff --git a/indra/newview/llfloaterpreferenceviewadvanced.h b/indra/newview/llfloaterpreferenceviewadvanced.h index 4619fdaab1..9b85ac9266 100644 --- a/indra/newview/llfloaterpreferenceviewadvanced.h +++ b/indra/newview/llfloaterpreferenceviewadvanced.h @@ -42,6 +42,7 @@ public: void onCommitSettings(); void updateCameraControl(const LLVector3& vector); void updateFocusControl(const LLVector3d& vector3d); + void onSavePreset(); // Improved camera floater private: virtual ~LLFloaterPreferenceViewAdvanced(); diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml index 97a0077fdc..b8e2677963 100644 --- a/indra/newview/skins/default/xui/en/floater_camera.xml +++ b/indra/newview/skins/default/xui/en/floater_camera.xml @@ -1,17 +1,21 @@ Use preset @@ -47,7 +52,7 @@ - - Use precise controls - + top_delta="18" + width="120"> + width="18"> @@ -160,8 +153,8 @@ + width="18" + left_pad="2"> @@ -173,8 +166,8 @@ + width="18" + left_pad="2"> + width="18" + left_pad="2"> @@ -200,8 +193,8 @@ + width="18" + left_pad="2"> @@ -210,12 +203,26 @@ + + + + + + + + diff --git a/indra/newview/skins/default/xui/en/floater_preferences_view_advanced.xml b/indra/newview/skins/default/xui/en/floater_preferences_view_advanced.xml index a61a147148..a84c4bbfcc 100644 --- a/indra/newview/skins/default/xui/en/floater_preferences_view_advanced.xml +++ b/indra/newview/skins/default/xui/en/floater_preferences_view_advanced.xml @@ -1,6 +1,6 @@ Camera offset: @@ -66,7 +66,7 @@ height="16" layout="topleft" left="10" - top_pad="20" + top_pad="10" width="100"> Focus offset: @@ -113,4 +113,31 @@ + + + + diff --git a/indra/newview/skins/default/xui/en/panel_presets_camera_pulldown.xml b/indra/newview/skins/default/xui/en/panel_presets_camera_pulldown.xml index 08d4a67f94..42b4c9fe0b 100644 --- a/indra/newview/skins/default/xui/en/panel_presets_camera_pulldown.xml +++ b/indra/newview/skins/default/xui/en/panel_presets_camera_pulldown.xml @@ -58,7 +58,7 @@ + View Object + Use preset + name="front_view" + height="20" + top="10"> @@ -88,13 +91,15 @@ + name="front_view_text" + top="22"> Front View + height="20" + top_pad="6"> @@ -103,14 +108,16 @@ + name="side_view_text" + top="22"> Side View + height="20" + top_pad="6"> @@ -119,10 +126,52 @@ + name="rear_view_text" + top="22"> Rear View + + + + + View Object + Use preset + name="front_view" + height="20" + top="10"> @@ -88,13 +91,15 @@ + name="front_view_text" + top="22"> Front View + height="20" + top_pad="6"> @@ -103,14 +108,16 @@ + name="side_view_text" + top="22"> Side View + height="20" + top_pad="6"> @@ -119,10 +126,52 @@ + name="rear_view_text" + top="22"> Rear View + + + + + Date: Sat, 23 Nov 2019 15:55:43 +0100 Subject: [PATCH 055/108] Update German translation --- .../skins/default/xui/de/floater_camera.xml | 29 +++---- .../default/xui/de/floater_camera_presets.xml | 3 + .../xui/de/floater_phototools_camera.xml | 5 ++ .../de/floater_preferences_view_advanced.xml | 11 +++ .../xui/de/floater_save_pref_preset.xml | 18 ++-- .../skins/default/xui/de/notifications.xml | 7 +- .../xui/de/panel_camera_preset_item.xml | 6 ++ .../default/xui/de/panel_preferences_move.xml | 15 ---- .../xui/de/panel_presets_camera_pulldown.xml | 2 +- .../skins/default/xui/en/floater_camera.xml | 2 +- .../xui/en/floater_phototools_camera.xml | 82 +++++++++---------- .../en/floater_preferences_view_advanced.xml | 6 +- .../xui/en/floater_phototools_camera.xml | 82 +++++++++---------- .../xui/en/floater_phototools_camera.xml | 82 +++++++++---------- 14 files changed, 185 insertions(+), 165 deletions(-) create mode 100644 indra/newview/skins/default/xui/de/floater_camera_presets.xml create mode 100644 indra/newview/skins/default/xui/de/floater_preferences_view_advanced.xml create mode 100644 indra/newview/skins/default/xui/de/panel_camera_preset_item.xml diff --git a/indra/newview/skins/default/xui/de/floater_camera.xml b/indra/newview/skins/default/xui/de/floater_camera.xml index d5b3a77e38..1151575431 100644 --- a/indra/newview/skins/default/xui/de/floater_camera.xml +++ b/indra/newview/skins/default/xui/de/floater_camera.xml @@ -13,20 +13,14 @@ Objekt ansehen - - - - - - - - - - - - - - + + + + + + + + @@ -39,8 +33,6 @@ - - @@ -54,4 +46,9 @@ + + + + - + + + + + + width="100" + name="camera_offset_label"> Camera offset: @@ -67,7 +68,8 @@ layout="topleft" left="10" top_pad="10" - width="100"> + width="100" + name="focus_offset_label"> Focus offset: diff --git a/indra/newview/skins/starlight/xui/en/floater_phototools_camera.xml b/indra/newview/skins/starlight/xui/en/floater_phototools_camera.xml index 716cd1d01b..0643f35fe5 100644 --- a/indra/newview/skins/starlight/xui/en/floater_phototools_camera.xml +++ b/indra/newview/skins/starlight/xui/en/floater_phototools_camera.xml @@ -131,47 +131,47 @@ Rear View - - - - - + + + + + - - - - - + + + + + Date: Tue, 26 Nov 2019 17:36:14 +0200 Subject: [PATCH 056/108] SL-12186 Update camera controls if preset was selected from the pulldown menu --- indra/newview/llfloatercamera.cpp | 45 +++++++++++-------- .../newview/llpanelpresetscamerapulldown.cpp | 3 +- .../skins/default/xui/en/floater_camera.xml | 6 +-- 3 files changed, 31 insertions(+), 23 deletions(-) diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index c7eb60e186..d3c1ba764b 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -524,7 +524,11 @@ void LLFloaterCamera::onClickCameraItem(const LLSD& param) { LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance(); if (camera_floater) - camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA); + { + camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA); + camera_floater->updateItemsSelection(); + camera_floater->fromFreeToPresets(); + } } else { @@ -533,13 +537,6 @@ void LLFloaterCamera::onClickCameraItem(const LLSD& param) camera_floater->switchMode(CAMERA_CTRL_MODE_PAN); switchToPreset(name); } - - LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance(); - if (camera_floater) - { - camera_floater->updateItemsSelection(); - camera_floater->fromFreeToPresets(); - } } /*static*/ @@ -547,20 +544,33 @@ void LLFloaterCamera::switchToPreset(const std::string& name) { sFreeCamera = false; clear_camera_tool(); - if ("rear_view" == name) + if (PRESETS_REAR_VIEW == name) { gAgentCamera.switchCameraPreset(CAMERA_PRESET_REAR_VIEW); - LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, PRESETS_REAR_VIEW); } - else if ("group_view" == name) + else if (PRESETS_SIDE_VIEW == name) { gAgentCamera.switchCameraPreset(CAMERA_PRESET_GROUP_VIEW); - LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, PRESETS_SIDE_VIEW); } - else if ("front_view" == name) + else if (PRESETS_FRONT_VIEW == name) { gAgentCamera.switchCameraPreset(CAMERA_PRESET_FRONT_VIEW); - LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, PRESETS_FRONT_VIEW); + } + else + { + gAgentCamera.switchCameraPreset(CAMERA_PRESET_CUSTOM); + } + + if (gSavedSettings.getString("PresetCameraActive") != name) + { + LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, name); + } + + LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance(); + if (camera_floater) + { + camera_floater->updateItemsSelection(); + camera_floater->fromFreeToPresets(); } } @@ -609,11 +619,8 @@ void LLFloaterCamera::onSavePreset() void LLFloaterCamera::onCustomPresetSelected() { std::string selected_preset = mPresetCombo->getSelectedItemLabel(); - if (gSavedSettings.getString("PresetCameraActive") != selected_preset && getString("inactive_combo_text") != selected_preset) + if (getString("inactive_combo_text") != selected_preset) { - gAgentCamera.switchCameraPreset(CAMERA_PRESET_CUSTOM); - updateItemsSelection(); - fromFreeToPresets(); - LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, selected_preset); + switchToPreset(selected_preset); } } diff --git a/indra/newview/llpanelpresetscamerapulldown.cpp b/indra/newview/llpanelpresetscamerapulldown.cpp index 1ac105e1c8..ae3d182f09 100644 --- a/indra/newview/llpanelpresetscamerapulldown.cpp +++ b/indra/newview/llpanelpresetscamerapulldown.cpp @@ -33,6 +33,7 @@ #include "llbutton.h" #include "lltabcontainer.h" +#include "llfloatercamera.h" #include "llfloaterreg.h" #include "llfloaterpreference.h" #include "llpresetsmanager.h" @@ -185,7 +186,7 @@ void LLPanelPresetsCameraPulldown::onRowClick(const LLSD& user_data) std::string name = item->getColumn(1)->getValue().asString(); LL_DEBUGS() << "selected '" << name << "'" << LL_ENDL; - LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, name); + LLFloaterCamera::switchToPreset(name); setVisible(FALSE); } diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml index 9408e68c2d..60461c5743 100644 --- a/indra/newview/skins/default/xui/en/floater_camera.xml +++ b/indra/newview/skins/default/xui/en/floater_camera.xml @@ -151,7 +151,7 @@ width="30"> + parameter="Front View" /> + parameter="Side View" /> + parameter="Rear View" /> Date: Wed, 27 Nov 2019 20:49:36 +0100 Subject: [PATCH 057/108] Adjust cam floater textures --- .../textures/bottomtray/Cam_Rotate_Center.png | Bin 0 -> 2200 bytes .../bottomtray/Cam_Tracking_Center.png | Bin 0 -> 367 bytes .../textures/bottomtray/Cam_Rotate_Center.png | Bin 0 -> 2168 bytes .../bottomtray/Cam_Tracking_Center.png | Bin 0 -> 369 bytes .../textures/bottomtray/Cam_Rotate_Center.png | Bin 0 -> 2151 bytes .../bottomtray/Cam_Tracking_Center.png | Bin 0 -> 367 bytes .../textures/bottomtray/Cam_Rotate_Center.png | Bin 0 -> 2155 bytes .../bottomtray/Cam_Tracking_Center.png | Bin 0 -> 363 bytes .../textures/bottomtray/Cam_Rotate_Center.png | Bin 10689 -> 2221 bytes .../bottomtray/Cam_Tracking_Center.png | Bin 1714 -> 372 bytes 10 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 indra/newview/skins/ansastorm/textures/bottomtray/Cam_Rotate_Center.png create mode 100644 indra/newview/skins/ansastorm/textures/bottomtray/Cam_Tracking_Center.png create mode 100644 indra/newview/skins/ansastorm/themes/blood/textures/bottomtray/Cam_Rotate_Center.png create mode 100644 indra/newview/skins/ansastorm/themes/blood/textures/bottomtray/Cam_Tracking_Center.png create mode 100644 indra/newview/skins/ansastorm/themes/classic_brown/textures/bottomtray/Cam_Rotate_Center.png create mode 100644 indra/newview/skins/ansastorm/themes/classic_brown/textures/bottomtray/Cam_Tracking_Center.png create mode 100644 indra/newview/skins/ansastorm/themes/ectoplasma/textures/bottomtray/Cam_Rotate_Center.png create mode 100644 indra/newview/skins/ansastorm/themes/ectoplasma/textures/bottomtray/Cam_Tracking_Center.png diff --git a/indra/newview/skins/ansastorm/textures/bottomtray/Cam_Rotate_Center.png b/indra/newview/skins/ansastorm/textures/bottomtray/Cam_Rotate_Center.png new file mode 100644 index 0000000000000000000000000000000000000000..11a4345e0c61d84747ccc153e1beb693dd2c0f49 GIT binary patch literal 2200 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 literal 0 HcmV?d00001 diff --git a/indra/newview/skins/ansastorm/themes/blood/textures/bottomtray/Cam_Rotate_Center.png b/indra/newview/skins/ansastorm/themes/blood/textures/bottomtray/Cam_Rotate_Center.png new file mode 100644 index 0000000000000000000000000000000000000000..ecbfa28b38a3427b05a0a1c18d5d27fae244e409 GIT binary patch literal 2168 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 literal 0 HcmV?d00001 diff --git a/indra/newview/skins/ansastorm/themes/ectoplasma/textures/bottomtray/Cam_Tracking_Center.png b/indra/newview/skins/ansastorm/themes/ectoplasma/textures/bottomtray/Cam_Tracking_Center.png new file mode 100644 index 0000000000000000000000000000000000000000..1e27fbc63b1cc022b23691b9a60780727737a151 GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^ejv=j1|<7dDaZmT#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DdTAk4@f{pUYW1B0iFV@O5Z+v~Po%z+|o7p5QdR1|xebEmoW zg;cB~Q&;1yIMnk|2i7Uxc z=95=Hca832Uw!G=9;qp=yEXE+KmNVBRG~BEXso}U{B!rSFMqF)yyl(Ve)(yQMfAQq zz4Cgmmfl;cspmC&p3I!VJ{~;n)2ymDp*HghmtWl&oT3zcJZ`Cm-o4Ct`SZC- z!Z)qHX}K28=0E8FX42i|B1iwaYj$-{T|BQYd-@wYpt^5cA}n9s&@`I3HhF!Ji1_K; sH<_hxL}u!AZ(#i~{ZA3X!GC-;=PTWb5Sf^=g9YRTPgg&ebxsLQ01&2*#sB~S literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Rotate_Center.png b/indra/newview/skins/default/textures/bottomtray/Cam_Rotate_Center.png index ffc3c85ea2a96cb82eeb487625eac03bb1c90aa2..59a2ba936901d62b5771c3f3c2b833f421773cbc 100644 GIT binary patch delta 2210 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 diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Tracking_Center.png b/indra/newview/skins/default/textures/bottomtray/Cam_Tracking_Center.png index 2812d614e6abc12f8f3ec1bcbad8f2f445e6f3e2..91beecca3bbd92f387a098b4424d94baa0dbe6c3 100644 GIT binary patch delta 346 zcmdnQ`-N$OayaV(iaYhO6<^L4o_GhJtN>whjhk= z_TI44>k=H_8rZ(J6fanAx93IB-LGnlK%*g`evR%ciDQ3{zPo$;-oHetO9yvcT)O<| z>CcZpetrFN2cJ?%0snMs^Y?c@srXO-`SRG=Dat-8@5}wVdhzP*pIffR&3KTNkzTor z@6B$-_Ht>}J!`GZLgUU?U8>_+`@+k2<=WTFoLJ23E-$-YJUMl3uAWQ5SEU)&x!HHG zFTEJi^Wfh?iQt1zrz!uRcDs1;!fR&YN;@tsf4Xpf*ydkRw_`dUcoj$g+F~=;x^$^* qq-$o2>4E)E^u=K=XE<aB^>EX>4U6ba`-PAZ2)IW&i+q+U=KHjwLA$ zhTmDmECFMDVL99^%?^6`^Fv1EwYsFLo|l&Lpc6p=VZfiU9clmd-$?(#uW-w$in%t` zj9+cFm5z$%m*2~sa=q94tNZDrkL~HTqo9d#=a)x)+Nq;m-hW=O`m~Ra?aAgN#~(pY z#}9#gW-h2aoY(<>F8-E`MK_{hTgA;-e&&L z!SQMYUv(GDBY*bG?s`>dO4GBcA6vOK41_u>-`5ny@E6qWmWJZk;smh;ngeAfYE+=@ zph}B61?_vEG_k~5b}`&bnb7-bbGFjTyin>X6vcpNC3Y~GpvGt}uWO+@Z@cqNa?HF4 zBMU*;q4=ewpEdqTc@-3KOqVG8tFExFa%>vQIONV1qkjN|;?b#G{oaz^*-d^2mO)Ui znjIVLdAx`iLT|RkmosCWMg%=N_;jqia4iD_ zNTe)E0XEDEI9|@&c*p3DEmB^Z;aUJfSlNIE2MDlg71)nehYfX{o|;5N#l)paSJtYc zs;0+Bb$?^4CZ=ZQ)~q{wb#Zlb_vXEo#&BWMv{`E2TI(H?c8KnHyJJM}qYNH($k1WK zM;m>@d}f_8b=vgVW?yCT!tr0aEG=Jc^-UY5wCk3w+qUnvd%)I$qlScrg-472O6{Tg zks5s>_iJkOP&>rx9cORU&}{ZY1RZxGhZ%^KN`D}3hX4$^9A??6)^f-lX1Ns{3MrsQ za^NgF#6YlaDiZX{?v30pxh1K;#jX4uxpdI|Kggwn?jiS;+fS&iej^HBK<5-5ox%;m zv0=dWUc8@}^vCz~PX&An`WE!>7POF6#BPL8Jo?5tZev?C+NL|!)->00Bx1T78rvSS zCV!kE96>~P4BfR`ARww$YIToV@?J%)wMBxLPG9aGDRyT(!L6Jocmd06m%IuGvJ9D{ zEw*|3IA&WT#$0V6Z;-qe7lZFm&n`*5uGPz&v)_%dxp4HZ0~)eW zUHy2Wx>pM3Fz>_XHbTt<=srQbng${nFi7g*x+g(_ ztJKyuTdT8IY&ExuWY{#b?<_hN!QErPP=Fh`PY=rB)|buNlIG*JA$%faR0Mp)AmpLD z=EB2yTG1i!pqW_PS`<9BV;QjoNd(fh81;xs9y|;I0yIP?lI|9xSD^1uf7BUp`hS;M zh7}BrQy(ycIX9qd@ww(kx}WA_bgTX|^G?4QFc$NstLQnEV=sq+uG#_UAy^3nT|h7$ zgv+j}uS-z-YEv&k3h05FD55J;S|JdHJ!3FPQ3iTPhD&<`RpN%=ji@^jgC|rvPeP6` z?YkaQ7gJq4_?pv0$`K4F11K<=(SMvlX~3e9N#jeQ?&`%xqlx_7@fA1>u^n3@!?rY^ zEe4i-Z3;&Tr%g{3JqPN<{`DXPh%*Ff$z?c1&IS*|Y&{=_otNYL2$@dtkw2ZNl>h8# zeYt-X#5K-wLS_Za91W+bT^7-Jj4&I4+@N%^zB7^mRIu~NX&eRge0@%1JAWTOa-Gd} zKX6s>TR2l)4PNT_s_xeyc73!(0=2s*mSY>RfU-?s@;r~N<1Fs5y{8h+fy|7gr1tA- z;CsmN1+qDA!q;q0P0CZK~#9! z?bp3+!cZ6m&`?5n;Vy8T$nn~vr8ER$CK607FZ+3LC3Hi|2*ds>!vM3*J2 zxU0+J#p*!4|y1pH{ t!&olDF2J5#0000002}}S0001g Date: Tue, 10 Dec 2019 15:44:01 +0200 Subject: [PATCH 058/108] SL-12429 Use different setting name to prevent crash on old viewer --- indra/newview/app_settings/settings.xml | 15 +++++++++++++-- indra/newview/llagentcamera.cpp | 4 ++-- indra/newview/llfloatercamera.cpp | 6 +++--- indra/newview/llpresetsmanager.cpp | 6 +++--- 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 2fe5817772..86c3e6cf3f 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -1562,10 +1562,10 @@ Value 1.0 - CameraPreset + CameraPreset Comment - Preset camera position - view (0 - rear, 1 - front, 2 - group, 3 - custom) + Preset camera position - view (0 - rear, 1 - front, 2 - group) Persist 1 Type @@ -16351,6 +16351,17 @@ Value Rear View + CameraPresetType + + Comment + Preset camera position - view (0 - rear, 1 - front, 2 - group, 3 - custom) + Persist + 1 + Type + U32 + Value + 0 + CefVerboseLog Comment diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index 67b117657f..eb730d105d 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -208,7 +208,7 @@ void LLAgentCamera::init() mCameraFocusOffsetTarget = LLVector4(gSavedSettings.getVector3("CameraOffsetBuild")); - mCameraPreset = (ECameraPreset) gSavedSettings.getU32("CameraPreset"); + mCameraPreset = (ECameraPreset) gSavedSettings.getU32("CameraPresetType"); mCameraOffsetInitial = gSavedSettings.getControl("CameraOffsetRearView"); mFocusOffsetInitial = gSavedSettings.getControl("FocusOffsetRearView"); @@ -2386,7 +2386,7 @@ void LLAgentCamera::switchCameraPreset(ECameraPreset preset) resetPanDiff(); resetOrbitDiff(); - gSavedSettings.setU32("CameraPreset", mCameraPreset); + gSavedSettings.setU32("CameraPresetType", mCameraPreset); } diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index d3c1ba764b..7e538d1bfc 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -498,7 +498,7 @@ void LLFloaterCamera::updateState() void LLFloaterCamera::updateItemsSelection() { - ECameraPreset preset = (ECameraPreset) gSavedSettings.getU32("CameraPreset"); + ECameraPreset preset = (ECameraPreset) gSavedSettings.getU32("CameraPresetType"); LLSD argument; argument["selected"] = (preset == CAMERA_PRESET_REAR_VIEW) && !sFreeCamera; getChild("rear_view")->setValue(argument); @@ -588,11 +588,11 @@ void LLFloaterCamera::populatePresetCombo() std::string active_preset_name = gSavedSettings.getString("PresetCameraActive"); if (active_preset_name.empty()) { - gSavedSettings.setU32("CameraPreset", CAMERA_PRESET_CUSTOM); + gSavedSettings.setU32("CameraPresetType", CAMERA_PRESET_CUSTOM); updateItemsSelection(); mPresetCombo->setLabel(getString("inactive_combo_text")); } - else if ((ECameraPreset)gSavedSettings.getU32("CameraPreset") == CAMERA_PRESET_CUSTOM) + else if ((ECameraPreset)gSavedSettings.getU32("CameraPresetType") == CAMERA_PRESET_CUSTOM) { mPresetCombo->selectByValue(active_preset_name); } diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index dda705eeca..c4161ed1bc 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -309,7 +309,7 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n } else { - ECameraPreset new_camera_preset = (ECameraPreset)gSavedSettings.getU32("CameraPreset"); + ECameraPreset new_camera_preset = (ECameraPreset)gSavedSettings.getU32("CameraPresetType"); bool new_camera_offsets = false; if (IS_CAMERA) { @@ -332,7 +332,7 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n { new_camera_preset = CAMERA_PRESET_CUSTOM; } - new_camera_offsets = (!isDefaultCameraPreset(name) || (ECameraPreset)gSavedSettings.getU32("CameraPreset") != new_camera_preset); + new_camera_offsets = (!isDefaultCameraPreset(name) || (ECameraPreset)gSavedSettings.getU32("CameraPresetType") != new_camera_preset); } for (std::vector::iterator it = name_list.begin(); it != name_list.end(); ++it) { @@ -353,7 +353,7 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n } if (IS_CAMERA) { - gSavedSettings.setU32("CameraPreset", new_camera_preset); + gSavedSettings.setU32("CameraPresetType", new_camera_preset); } } From abd5277a7b3dac90e8a555eefe855cfcca1536dc Mon Sep 17 00:00:00 2001 From: maxim_productengine Date: Wed, 18 Dec 2019 11:26:22 +0200 Subject: [PATCH 059/108] SL-12424 WIP Save mousewheel zoom fraction in preset --- indra/newview/app_settings/camera/Front.xml | 11 +++++++++++ indra/newview/app_settings/camera/Rear.xml | 11 +++++++++++ indra/newview/app_settings/camera/Side.xml | 11 +++++++++++ indra/newview/app_settings/settings.xml | 11 +++++++++++ indra/newview/llfloatercamera.cpp | 1 + indra/newview/llpresetsmanager.cpp | 4 +++- 6 files changed, 48 insertions(+), 1 deletion(-) diff --git a/indra/newview/app_settings/camera/Front.xml b/indra/newview/app_settings/camera/Front.xml index cb3380589e..e4839d48ec 100644 --- a/indra/newview/app_settings/camera/Front.xml +++ b/indra/newview/app_settings/camera/Front.xml @@ -63,6 +63,17 @@ Value 1 + CameraZoomFraction + + Comment + Mousewheel driven fraction of zoom + Persist + 1 + Type + F32 + Value + 0.9 + EditCameraMovement Comment diff --git a/indra/newview/app_settings/camera/Rear.xml b/indra/newview/app_settings/camera/Rear.xml index 0bfe5a9ed8..72e6c5d93a 100644 --- a/indra/newview/app_settings/camera/Rear.xml +++ b/indra/newview/app_settings/camera/Rear.xml @@ -63,6 +63,17 @@ Value 1 + CameraZoomFraction + + Comment + Mousewheel driven fraction of zoom + Persist + 1 + Type + F32 + Value + 0.9 + EditCameraMovement Comment diff --git a/indra/newview/app_settings/camera/Side.xml b/indra/newview/app_settings/camera/Side.xml index 49582a8a3c..eb3b3253c1 100644 --- a/indra/newview/app_settings/camera/Side.xml +++ b/indra/newview/app_settings/camera/Side.xml @@ -63,6 +63,17 @@ Value 1 + CameraZoomFraction + + Comment + Mousewheel driven fraction of zoom + Persist + 1 + Type + F32 + Value + 0.9 + EditCameraMovement Comment diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 5be89c92a8..93a3c29530 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -1525,6 +1525,17 @@ Value 1.0 + CameraZoomFraction + + Comment + Mousewheel driven fraction of zoom + Persist + 1 + Type + F32 + Value + 0.9 + CameraPosOnLogout Comment diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index 7e538d1bfc..f45033aa20 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -565,6 +565,7 @@ void LLFloaterCamera::switchToPreset(const std::string& name) { LLPresetsManager::getInstance()->loadPreset(PRESETS_CAMERA, name); } + gAgentCamera.setCameraZoomFraction(gSavedSettings.getF32("CameraZoomFraction")); LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance(); if (camera_floater) diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index c4161ed1bc..73978e9dfb 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -236,7 +236,6 @@ void LLPresetsManager::getControlNames(std::vector& names) ("AppearanceCameraMovement") // From llagentcamera.cpp ("CameraOffsetBuild") - ("CameraOffsetScale") ("TrackFocusObject") ("CameraOffsetRearView") ("FocusOffsetRearView") @@ -288,6 +287,9 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n name_list.clear(); getControlNames(name_list); name_list.push_back("PresetCameraActive"); + + gSavedSettings.setF32("CameraZoomFraction", gAgentCamera.getCameraZoomFraction()); + name_list.push_back("CameraZoomFraction"); } else { From a2f0fd64e947f96305200edbdfd496529cadb90e Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Wed, 8 Jan 2020 18:14:21 +0200 Subject: [PATCH 060/108] SL-12510 Revert changes and separate 'Save Graphic Preset' floater --- indra/newview/CMakeLists.txt | 2 + indra/newview/llfloatercamera.cpp | 3 +- indra/newview/llfloatersavecamerapreset.cpp | 153 ++++++++++++++++++ indra/newview/llfloatersavecamerapreset.h | 60 +++++++ indra/newview/llfloatersaveprefpreset.cpp | 97 +++-------- indra/newview/llfloatersaveprefpreset.h | 12 +- indra/newview/llpresetsmanager.cpp | 2 +- indra/newview/llviewerfloaterreg.cpp | 2 + .../xui/en/floater_save_camera_preset.xml | 70 ++++++++ .../xui/en/floater_save_pref_preset.xml | 76 +++------ 10 files changed, 337 insertions(+), 140 deletions(-) create mode 100644 indra/newview/llfloatersavecamerapreset.cpp create mode 100644 indra/newview/llfloatersavecamerapreset.h create mode 100644 indra/newview/skins/default/xui/en/floater_save_camera_preset.xml diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 6472b464d8..8016ce496a 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -296,6 +296,7 @@ set(viewer_SOURCE_FILES llfloaterregioninfo.cpp llfloaterreporter.cpp llfloaterregionrestarting.cpp + llfloatersavecamerapreset.cpp llfloatersaveprefpreset.cpp llfloatersceneloadstats.cpp llfloaterscriptdebug.cpp @@ -923,6 +924,7 @@ set(viewer_HEADER_FILES llfloaterregioninfo.h llfloaterreporter.h llfloaterregionrestarting.h + llfloatersavecamerapreset.h llfloatersaveprefpreset.h llfloatersceneloadstats.h llfloaterscriptdebug.h diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index f45033aa20..860005bfbe 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -610,11 +610,10 @@ void LLFloaterCamera::onSavePreset() LLFloaterReg::hideInstance("load_pref_preset", PRESETS_CAMERA); LLSD key; - key["subdirectory"] = PRESETS_CAMERA; std::string current_preset = gSavedSettings.getString("PresetCameraActive"); bool is_custom_preset = current_preset != "" && !LLPresetsManager::getInstance()->isDefaultCameraPreset(current_preset); key["index"] = is_custom_preset ? 1 : 0; - LLFloaterReg::showInstance("save_pref_preset", key); + LLFloaterReg::showInstance("save_camera_preset", key); } void LLFloaterCamera::onCustomPresetSelected() diff --git a/indra/newview/llfloatersavecamerapreset.cpp b/indra/newview/llfloatersavecamerapreset.cpp new file mode 100644 index 0000000000..b1c9e561f7 --- /dev/null +++ b/indra/newview/llfloatersavecamerapreset.cpp @@ -0,0 +1,153 @@ +/** + * @file llfloatersavecamerapreset.cpp + * @brief Floater to save a camera preset + * + * $LicenseInfo:firstyear=2020&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2020, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "LLFloaterSaveCameraPreset.h" + +#include "llbutton.h" +#include "llcombobox.h" +#include "llfloaterpreference.h" +#include "llfloaterreg.h" +#include "lllineeditor.h" +#include "llnotificationsutil.h" +#include "llpresetsmanager.h" +#include "llradiogroup.h" +#include "lltrans.h" + +LLFloaterSaveCameraPreset::LLFloaterSaveCameraPreset(const LLSD &key) + : LLModalDialog(key) +{ +} + +// virtual +BOOL LLFloaterSaveCameraPreset::postBuild() +{ + mPresetCombo = getChild("preset_combo"); + + mNameEditor = getChild("preset_txt_editor"); + mNameEditor->setKeystrokeCallback(boost::bind(&LLFloaterSaveCameraPreset::onPresetNameEdited, this), NULL); + + mSaveButton = getChild("save"); + mSaveButton->setCommitCallback(boost::bind(&LLFloaterSaveCameraPreset::onBtnSave, this)); + + mSaveRadioGroup = getChild("radio_save_preset"); + mSaveRadioGroup->setCommitCallback(boost::bind(&LLFloaterSaveCameraPreset::onSwitchSaveReplace, this)); + + getChild("cancel")->setCommitCallback(boost::bind(&LLFloaterSaveCameraPreset::onBtnCancel, this)); + + LLPresetsManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterSaveCameraPreset::onPresetsListChange, this)); + + return TRUE; +} + +void LLFloaterSaveCameraPreset::onPresetNameEdited() +{ + if (mSaveRadioGroup->getSelectedIndex() == 0) + { + // Disable saving a preset having empty name. + std::string name = mNameEditor->getValue(); + mSaveButton->setEnabled(!name.empty()); + } +} + +void LLFloaterSaveCameraPreset::onOpen(const LLSD& key) +{ + LLModalDialog::onOpen(key); + S32 index = 0; + if (key.has("index")) + { + index = key["index"].asInteger(); + } + + LLPresetsManager::getInstance()->setPresetNamesInComboBox(PRESETS_CAMERA, mPresetCombo, DEFAULT_HIDE); + + mSaveRadioGroup->setSelectedIndex(index); + onPresetNameEdited(); + onSwitchSaveReplace(); +} + +void LLFloaterSaveCameraPreset::onBtnSave() +{ + bool is_saving_new = mSaveRadioGroup->getSelectedIndex() == 0; + std::string name = is_saving_new ? mNameEditor->getText() : mPresetCombo->getSimple(); + + if ((name == LLTrans::getString(PRESETS_DEFAULT)) || (name == PRESETS_DEFAULT)) + { + LLNotificationsUtil::add("DefaultPresetNotSaved"); + } + else + { + if (is_saving_new) + { + std::list preset_names; + std::string presets_dir = LLPresetsManager::getInstance()->getPresetsDir(PRESETS_CAMERA); + LLPresetsManager::getInstance()->loadPresetNamesFromDir(presets_dir, preset_names, DEFAULT_HIDE); + if (std::find(preset_names.begin(), preset_names.end(), name) != preset_names.end()) + { + LLSD args; + args["NAME"] = name; + LLNotificationsUtil::add("PresetAlreadyExists", args); + return; + } + } + if (!LLPresetsManager::getInstance()->savePreset(PRESETS_CAMERA, name)) + { + LLSD args; + args["NAME"] = name; + LLNotificationsUtil::add("PresetNotSaved", args); + } + } + + closeFloater(); +} + +void LLFloaterSaveCameraPreset::onPresetsListChange() +{ + LLPresetsManager::getInstance()->setPresetNamesInComboBox(PRESETS_CAMERA, mPresetCombo, DEFAULT_HIDE); +} + +void LLFloaterSaveCameraPreset::onBtnCancel() +{ + closeFloater(); +} + +void LLFloaterSaveCameraPreset::onSwitchSaveReplace() +{ + bool is_saving_new = mSaveRadioGroup->getSelectedIndex() == 0; + std::string label = is_saving_new ? getString("btn_label_save") : getString("btn_label_replace"); + mSaveButton->setLabel(label); + mNameEditor->setEnabled(is_saving_new); + mPresetCombo->setEnabled(!is_saving_new); + if (is_saving_new) + { + onPresetNameEdited(); + } + else + { + mSaveButton->setEnabled(true); + } +} diff --git a/indra/newview/llfloatersavecamerapreset.h b/indra/newview/llfloatersavecamerapreset.h new file mode 100644 index 0000000000..282f213438 --- /dev/null +++ b/indra/newview/llfloatersavecamerapreset.h @@ -0,0 +1,60 @@ +/** + * @file llfloatersavecamerapreset.h + * @brief Floater to save a camera preset + + * + * $LicenseInfo:firstyear=2020&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2020, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLFLOATERSAVECAMERAPRESET_H +#define LL_LLFLOATERSAVECAMERAPRESET_H + +#include "llmodaldialog.h" + +class LLComboBox; +class LLRadioGroup; +class LLLineEditor; + +class LLFloaterSaveCameraPreset : public LLModalDialog +{ + +public: + LLFloaterSaveCameraPreset(const LLSD &key); + + /*virtual*/ BOOL postBuild(); + /*virtual*/ void onOpen(const LLSD& key); + + void onBtnSave(); + void onBtnCancel(); + void onSwitchSaveReplace(); + +private: + LLRadioGroup* mSaveRadioGroup; + LLLineEditor* mNameEditor; + LLComboBox* mPresetCombo; + LLButton* mSaveButton; + + void onPresetsListChange(); + void onPresetNameEdited(); +}; + +#endif // LL_LLFLOATERSAVECAMERAPRESET_H diff --git a/indra/newview/llfloatersaveprefpreset.cpp b/indra/newview/llfloatersaveprefpreset.cpp index 3142991704..5f3cf9d95b 100644 --- a/indra/newview/llfloatersaveprefpreset.cpp +++ b/indra/newview/llfloatersaveprefpreset.cpp @@ -1,6 +1,6 @@ /** * @file llfloatersaveprefpreset.cpp - * @brief Floater to save a graphics / camera preset + * @brief Floater to save a graphics preset * * $LicenseInfo:firstyear=2014&license=viewerlgpl$ * Second Life Viewer Source Code @@ -32,14 +32,12 @@ #include "llcombobox.h" #include "llfloaterpreference.h" #include "llfloaterreg.h" -#include "lllineeditor.h" #include "llnotificationsutil.h" #include "llpresetsmanager.h" -#include "llradiogroup.h" #include "lltrans.h" LLFloaterSavePrefPreset::LLFloaterSavePrefPreset(const LLSD &key) - : LLModalDialog(key) + : LLFloater(key) { } @@ -52,93 +50,51 @@ BOOL LLFloaterSavePrefPreset::postBuild() preferences->addDependentFloater(this); } - mPresetCombo = getChild("preset_combo"); + getChild("preset_combo")->setTextEntryCallback(boost::bind(&LLFloaterSavePrefPreset::onPresetNameEdited, this)); + getChild("preset_combo")->setCommitCallback(boost::bind(&LLFloaterSavePrefPreset::onPresetNameEdited, this)); + getChild("save")->setCommitCallback(boost::bind(&LLFloaterSavePrefPreset::onBtnSave, this)); - mNameEditor = getChild("preset_txt_editor"); - mNameEditor->setKeystrokeCallback(boost::bind(&LLFloaterSavePrefPreset::onPresetNameEdited, this), NULL); - - mSaveButton = getChild("save"); - mSaveButton->setCommitCallback(boost::bind(&LLFloaterSavePrefPreset::onBtnSave, this)); - - mSaveRadioGroup = getChild("radio_save_preset"); - mSaveRadioGroup->setCommitCallback(boost::bind(&LLFloaterSavePrefPreset::onSwitchSaveReplace, this)); - getChild("cancel")->setCommitCallback(boost::bind(&LLFloaterSavePrefPreset::onBtnCancel, this)); LLPresetsManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterSavePrefPreset::onPresetsListChange, this)); + + mSaveButton = getChild("save"); + mPresetCombo = getChild("preset_combo"); return TRUE; } void LLFloaterSavePrefPreset::onPresetNameEdited() { - if (mSaveRadioGroup->getSelectedIndex() == 0) - { - // Disable saving a preset having empty name. - std::string name = mNameEditor->getValue(); - mSaveButton->setEnabled(!name.empty()); - } + // Disable saving a preset having empty name. + std::string name = mPresetCombo->getSimple(); + + mSaveButton->setEnabled(!name.empty()); } void LLFloaterSavePrefPreset::onOpen(const LLSD& key) { - LLModalDialog::onOpen(key); - S32 index = 0; - if (key.has("subdirectory")) - { - mSubdirectory = key["subdirectory"].asString(); - if (key.has("index")) - { - index = key["index"].asInteger(); - } - } - else - { - mSubdirectory = key.asString(); - } - - std::string floater_title = getString(std::string("title_") + mSubdirectory); - - setTitle(floater_title); + mSubdirectory = key.asString(); EDefaultOptions option = DEFAULT_HIDE; LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, mPresetCombo, option); - mSaveRadioGroup->setSelectedIndex(index); onPresetNameEdited(); - onSwitchSaveReplace(); } void LLFloaterSavePrefPreset::onBtnSave() { - bool is_saving_new = mSaveRadioGroup->getSelectedIndex() == 0; - std::string name = is_saving_new ? mNameEditor->getText() : mPresetCombo->getSimple(); + std::string name = mPresetCombo->getSimple(); if ((name == LLTrans::getString(PRESETS_DEFAULT)) || (name == PRESETS_DEFAULT)) { LLNotificationsUtil::add("DefaultPresetNotSaved"); } - else + else if (!LLPresetsManager::getInstance()->savePreset(mSubdirectory, name)) { - if (is_saving_new) - { - std::list preset_names; - std::string presets_dir = LLPresetsManager::getInstance()->getPresetsDir(mSubdirectory); - LLPresetsManager::getInstance()->loadPresetNamesFromDir(presets_dir, preset_names, DEFAULT_HIDE); - if (std::find(preset_names.begin(), preset_names.end(), name) != preset_names.end()) - { - LLSD args; - args["NAME"] = name; - LLNotificationsUtil::add("PresetAlreadyExists", args); - return; - } - } - if (!LLPresetsManager::getInstance()->savePreset(mSubdirectory, name)) - { - LLSD args; - args["NAME"] = name; - LLNotificationsUtil::add("PresetNotSaved", args); - } + LLSD args; + args["NAME"] = name; + LLNotificationsUtil::add("PresetNotSaved", args); } closeFloater(); @@ -154,20 +110,3 @@ void LLFloaterSavePrefPreset::onBtnCancel() { closeFloater(); } - -void LLFloaterSavePrefPreset::onSwitchSaveReplace() -{ - bool is_saving_new = mSaveRadioGroup->getSelectedIndex() == 0; - std::string label = is_saving_new ? getString("btn_label_save") : getString("btn_label_replace"); - mSaveButton->setLabel(label); - mNameEditor->setEnabled(is_saving_new); - mPresetCombo->setEnabled(!is_saving_new); - if (is_saving_new) - { - onPresetNameEdited(); - } - else - { - mSaveButton->setEnabled(true); - } -} diff --git a/indra/newview/llfloatersaveprefpreset.h b/indra/newview/llfloatersaveprefpreset.h index c61379e5ad..ae58180e7f 100644 --- a/indra/newview/llfloatersaveprefpreset.h +++ b/indra/newview/llfloatersaveprefpreset.h @@ -1,6 +1,6 @@ /** * @file llfloatersaveprefpreset.h - * @brief Floater to save a graphics / camera preset + * @brief Floater to save a graphics preset * * $LicenseInfo:firstyear=2014&license=viewerlgpl$ @@ -28,13 +28,11 @@ #ifndef LL_LLFLOATERSAVEPREFPRESET_H #define LL_LLFLOATERSAVEPREFPRESET_H -#include "llmodaldialog.h" +#include "llfloater.h" class LLComboBox; -class LLRadioGroup; -class LLLineEditor; -class LLFloaterSavePrefPreset : public LLModalDialog +class LLFloaterSavePrefPreset : public LLFloater { public: @@ -45,11 +43,9 @@ public: void onBtnSave(); void onBtnCancel(); - void onSwitchSaveReplace(); private: - LLRadioGroup* mSaveRadioGroup; - LLLineEditor* mNameEditor; + LLComboBox* mPresetCombo; LLButton* mSaveButton; diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 73978e9dfb..6b83be2b70 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -430,7 +430,7 @@ bool LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory, else { combo->setLabel(LLTrans::getString("preset_combo_label")); - combo->setEnabled(FALSE); + combo->setEnabled(PRESETS_CAMERA != subdirectory); sts = false; } } diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index d897d59217..90682f8f43 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -112,6 +112,7 @@ #include "llfloaterregioninfo.h" #include "llfloaterregionrestarting.h" #include "llfloaterreporter.h" +#include "llfloatersavecamerapreset.h" #include "llfloatersaveprefpreset.h" #include "llfloatersceneloadstats.h" #include "llfloaterscriptdebug.h" @@ -318,6 +319,7 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("properties", "floater_inventory_item_properties.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("publish_classified", "floater_publish_classified.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("save_pref_preset", "floater_save_pref_preset.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); + LLFloaterReg::add("save_camera_preset", "floater_save_camera_preset.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("script_colors", "floater_script_ed_prefs.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("telehubs", "floater_telehub.xml",&LLFloaterReg::build); diff --git a/indra/newview/skins/default/xui/en/floater_save_camera_preset.xml b/indra/newview/skins/default/xui/en/floater_save_camera_preset.xml new file mode 100644 index 0000000000..54fdb6d167 --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_save_camera_preset.xml @@ -0,0 +1,70 @@ + + + + Save + Replace + + + + + + Date: Sun, 17 May 2020 18:53:52 +0200 Subject: [PATCH 104/108] Make phototools layout a bit nicer --- .../skins/default/xui/en/floater_phototools.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/indra/newview/skins/default/xui/en/floater_phototools.xml b/indra/newview/skins/default/xui/en/floater_phototools.xml index e21fba25eb..73e70fa6b8 100644 --- a/indra/newview/skins/default/xui/en/floater_phototools.xml +++ b/indra/newview/skins/default/xui/en/floater_phototools.xml @@ -287,7 +287,7 @@ layout="topleft" top_pad="5" left="4" - width="165" + width="275" height="135" border_visible="true" background_visible="true"> @@ -310,7 +310,7 @@ left="10" name="horiz_separator1" top_pad="-7" - width="145"/> + width="255"/> + function="Button.SetFloaterToggle" + parameter="about_land" /> + + width="38" /> diff --git a/indra/newview/skins/starlightcui/xui/en/panel_navigation_bar.xml b/indra/newview/skins/starlightcui/xui/en/panel_navigation_bar.xml index df48d218b2..08feada684 100644 --- a/indra/newview/skins/starlightcui/xui/en/panel_navigation_bar.xml +++ b/indra/newview/skins/starlightcui/xui/en/panel_navigation_bar.xml @@ -40,7 +40,7 @@ auto_resize="false"> + inactive parts. Will be bound to right click in code, so keep the name intact. --> - - + width="38" /> @@ -174,7 +170,7 @@ - + -