From 78060b7fd2688b113917b58dea25b072779ac4f6 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Wed, 26 Nov 2014 16:28:11 -0500 Subject: STORM-2082 Start to convert code to support xml file processing --- indra/newview/llpresetsmanager.cpp | 142 +++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 indra/newview/llpresetsmanager.cpp (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp new file mode 100644 index 0000000000..6ebb111be1 --- /dev/null +++ b/indra/newview/llpresetsmanager.cpp @@ -0,0 +1,142 @@ +/** + * @file llpresetsmanager.cpp + * @brief Implementation for the LLPresetsManager class. + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, 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 "llpresetsmanager.h" + +#include "lldiriterator.h" +#include "lluictrlfactory.h" +#include "llsdserialize.h" +#include "llviewercontrol.h" + +static const std::string PRESETS_DIR = "presets"; +static const std::string GRAPHIC_DIR = "graphic"; +static const std::string CAMERA_DIR = "camera"; + +LLPresetsManager::LLPresetsManager() +{ +} + +LLPresetsManager::~LLPresetsManager() +{ +} + +std::string LLPresetsManager::getUserDir(const std::string& subdirectory) +{ + std::string presets_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR); + std::string full_path; + + if (!gDirUtilp->fileExists(presets_path)) + { + LLFile::mkdir(presets_path); + + full_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR, subdirectory); + if (!gDirUtilp->fileExists(full_path)) + { + LLFile::mkdir(full_path); + } + } + + return full_path; +} + +std::string LLPresetsManager::getGraphicPresetsDir() +{ + return getUserDir(GRAPHIC_DIR); +} + +void LLPresetsManager::getPresetsFromDir(const std::string& dir) +{ + LL_INFOS("AppInit") << "Loading presets from " << dir << LL_ENDL; + + mPresetNames.clear(); + + LLDirIterator dir_iter(dir, "*.xml"); + while (1) + { + std::string file; + if (!dir_iter.next(file)) + { + break; // no more files + } + + std::string path = gDirUtilp->add(dir, file); + std::string name(gDirUtilp->getBaseFileName(LLURI::unescape(path), /*strip_exten = */ true)); + mPresetNames.push_back(name); +llwarns << "DBG " << name << llendl; + } +} + +void LLPresetsManager::savePreset(const std::string & name) +{ + llassert(!name.empty()); + + // make an empty llsd + LLSD paramsData(LLSD::emptyMap()); + std::string pathName(getUserDir(GRAPHIC_DIR) + LLURI::escape(name) + ".xml"); + +// Get all graphic settings +// paramsData = mParamList[name].getAll(); + + // write to file + llofstream presetsXML(pathName); + LLPointer formatter = new LLSDXMLFormatter(); + formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY); + presetsXML.close(); +} + +bool LLPresetsManager::removeParamSet(const std::string& name, bool delete_from_disk) +{ + // remove from param list + preset_name_list_t::iterator it = find(mPresetNames.begin(), mPresetNames.end(), name); + if (it == mPresetNames.end()) + { + LL_WARNS("Presets") << "No preset named " << name << LL_ENDL; + return false; + } + + mPresetNames.erase(it); + + // remove from file system if requested + if (delete_from_disk) + { + if (gDirUtilp->deleteFilesInDir(getUserDir(GRAPHIC_DIR), LLURI::escape(name) + ".xml") < 1) + { + LL_WARNS("Presets") << "Error removing preset " << name << " from disk" << LL_ENDL; + } + } + + // signal interested parties + mPresetListChangeSignal(); + + return true; +} + +boost::signals2::connection LLPresetsManager::setPresetListChangeCallback(const preset_list_signal_t::slot_type& cb) +{ + return mPresetListChangeSignal.connect(cb); +} -- cgit v1.2.3 From f71247ea542805819b82640759e1f44fd0599e7f Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Wed, 26 Nov 2014 18:03:36 -0500 Subject: STORM-2082 Code now fills combobox --- indra/newview/llpresetsmanager.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 6ebb111be1..d97e9312e2 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -53,12 +53,12 @@ std::string LLPresetsManager::getUserDir(const std::string& subdirectory) if (!gDirUtilp->fileExists(presets_path)) { LLFile::mkdir(presets_path); + } - full_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR, subdirectory); - if (!gDirUtilp->fileExists(full_path)) - { - LLFile::mkdir(full_path); - } + full_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR, subdirectory); + if (!gDirUtilp->fileExists(full_path)) + { + LLFile::mkdir(full_path); } return full_path; @@ -69,7 +69,13 @@ std::string LLPresetsManager::getGraphicPresetsDir() return getUserDir(GRAPHIC_DIR); } -void LLPresetsManager::getPresetsFromDir(const std::string& dir) +void LLPresetsManager::getPresetNames(preset_name_list_t& presets) const +{ + presets = mPresetNames; + +} + +void LLPresetsManager::loadPresetsFromDir(const std::string& dir) { LL_INFOS("AppInit") << "Loading presets from " << dir << LL_ENDL; @@ -87,7 +93,6 @@ void LLPresetsManager::getPresetsFromDir(const std::string& dir) std::string path = gDirUtilp->add(dir, file); std::string name(gDirUtilp->getBaseFileName(LLURI::unescape(path), /*strip_exten = */ true)); mPresetNames.push_back(name); -llwarns << "DBG " << name << llendl; } } -- cgit v1.2.3 From f30e518f1774cc3c1b4641e97c26afa496fb85e5 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Thu, 27 Nov 2014 16:20:39 -0500 Subject: STORM-2082 Get writing out and loading presets working --- indra/newview/llpresetsmanager.cpp | 96 ++++++++++++++++++++++++++++++-------- 1 file changed, 77 insertions(+), 19 deletions(-) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index d97e9312e2..8fd9024fef 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -26,17 +26,15 @@ #include "llviewerprecompiledheaders.h" +#include + #include "llpresetsmanager.h" #include "lldiriterator.h" -#include "lluictrlfactory.h" #include "llsdserialize.h" +#include "lluictrlfactory.h" #include "llviewercontrol.h" -static const std::string PRESETS_DIR = "presets"; -static const std::string GRAPHIC_DIR = "graphic"; -static const std::string CAMERA_DIR = "camera"; - LLPresetsManager::LLPresetsManager() { } @@ -66,7 +64,7 @@ std::string LLPresetsManager::getUserDir(const std::string& subdirectory) std::string LLPresetsManager::getGraphicPresetsDir() { - return getUserDir(GRAPHIC_DIR); + return getUserDir(PRESETS_GRAPHIC_DIR); } void LLPresetsManager::getPresetNames(preset_name_list_t& presets) const @@ -75,43 +73,103 @@ void LLPresetsManager::getPresetNames(preset_name_list_t& presets) const } -void LLPresetsManager::loadPresetsFromDir(const std::string& dir) +void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir) { LL_INFOS("AppInit") << "Loading presets from " << dir << LL_ENDL; mPresetNames.clear(); LLDirIterator dir_iter(dir, "*.xml"); - while (1) + bool found = true; + while (found) { std::string file; - if (!dir_iter.next(file)) + found = dir_iter.next(file); + + if (found) { - break; // no more files + std::string path = gDirUtilp->add(dir, file); + std::string name(gDirUtilp->getBaseFileName(LLURI::unescape(path), /*strip_exten = */ true)); + mPresetNames.push_back(name); } - - std::string path = gDirUtilp->add(dir, file); - std::string name(gDirUtilp->getBaseFileName(LLURI::unescape(path), /*strip_exten = */ true)); - mPresetNames.push_back(name); } } -void LLPresetsManager::savePreset(const std::string & name) +void LLPresetsManager::savePreset(const std::string& name) { llassert(!name.empty()); + // This ugliness is the current list of all the control variables in the graphics and hardware + // preferences floaters. Additions or subtractions to the floaters must also be reflected here. + std::vector name_list = boost::assign::list_of + ("RenderQualityPerformance") + ("RenderFarClip") + ("RenderMaxPartCount") + ("RenderGlowResolutionPow") + ("RenderTerrainDetail") + ("RenderAvatarLODFactor") + ("RenderAvatarMaxVisible") + ("RenderUseImpostors") + ("RenderTerrainLODFactor") + ("RenderTreeLODFactor") + ("RenderVolumeLODFactor") + ("RenderFlexTimeFactor") + ("RenderTransparentWater") + ("RenderObjectBump") + ("RenderLocalLights") + ("VertexShaderEnable") + ("RenderAvatarVP") + ("RenderAvatarCloth") + ("RenderReflectionDetail") + ("WindLightUseAtmosShaders") + ("WLSkyDetail") + ("RenderDeferred") + ("RenderDeferredSSAO") + ("RenderDepthOfField") + ("RenderShadowDetail") + + ("RenderAnisotropic") + ("RenderFSAASamples") + ("RenderGamma") + ("RenderVBOEnable") + ("RenderCompressTextures") + ("TextureMemory") + ("RenderFogRatio"); + // make an empty llsd LLSD paramsData(LLSD::emptyMap()); - std::string pathName(getUserDir(GRAPHIC_DIR) + LLURI::escape(name) + ".xml"); -// Get all graphic settings -// paramsData = mParamList[name].getAll(); + 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 = gSavedSettings.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(getUserDir(PRESETS_GRAPHIC_DIR) + "\\" + LLURI::escape(name) + ".xml"); // write to file llofstream presetsXML(pathName); LLPointer formatter = new LLSDXMLFormatter(); formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY); presetsXML.close(); + + // signal interested parties + mPresetListChangeSignal(); +} + +void LLPresetsManager::loadPreset(const std::string& name) +{ + std::string pathName(getUserDir(PRESETS_GRAPHIC_DIR) + "\\" + LLURI::escape(name) + ".xml"); + + gSavedSettings.loadFromFile(pathName, false, true); } bool LLPresetsManager::removeParamSet(const std::string& name, bool delete_from_disk) @@ -129,7 +187,7 @@ bool LLPresetsManager::removeParamSet(const std::string& name, bool delete_from_ // remove from file system if requested if (delete_from_disk) { - if (gDirUtilp->deleteFilesInDir(getUserDir(GRAPHIC_DIR), LLURI::escape(name) + ".xml") < 1) + if (gDirUtilp->deleteFilesInDir(getUserDir(PRESETS_GRAPHIC_DIR), LLURI::escape(name) + ".xml") < 1) { LL_WARNS("Presets") << "Error removing preset " << name << " from disk" << LL_ENDL; } -- cgit v1.2.3 From af827615acc6cce0457ba00810136c41283f6158 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Fri, 28 Nov 2014 10:00:41 -0500 Subject: STORM-2082 Initial support for presets popup from status bar --- indra/newview/llpresetsmanager.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 8fd9024fef..642d9819fe 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -62,6 +62,11 @@ std::string LLPresetsManager::getUserDir(const std::string& subdirectory) return full_path; } +std::string LLPresetsManager::getCameraPresetsDir() +{ + return getUserDir(PRESETS_CAMERA_DIR); +} + std::string LLPresetsManager::getGraphicPresetsDir() { return getUserDir(PRESETS_GRAPHIC_DIR); @@ -70,7 +75,6 @@ std::string LLPresetsManager::getGraphicPresetsDir() void LLPresetsManager::getPresetNames(preset_name_list_t& presets) const { presets = mPresetNames; - } void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir) @@ -90,7 +94,14 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir) { std::string path = gDirUtilp->add(dir, file); std::string name(gDirUtilp->getBaseFileName(LLURI::unescape(path), /*strip_exten = */ true)); - mPresetNames.push_back(name); + if ("Default" != name) + { + mPresetNames.push_back(name); + } + else + { + mPresetNames.insert(mPresetNames.begin(), name); + } } } } -- cgit v1.2.3 From 34a79a6ece28fbc560bde907142ecaadf95e910f Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Sun, 30 Nov 2014 07:15:00 -0500 Subject: STORM-2082 Implement delete floater --- indra/newview/llpresetsmanager.cpp | 53 ++++++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 13 deletions(-) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 642d9819fe..6b0023d97a 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -31,7 +31,9 @@ #include "llpresetsmanager.h" #include "lldiriterator.h" +#include "llfloater.h" #include "llsdserialize.h" +#include "lltrans.h" #include "lluictrlfactory.h" #include "llviewercontrol.h" @@ -64,12 +66,12 @@ std::string LLPresetsManager::getUserDir(const std::string& subdirectory) std::string LLPresetsManager::getCameraPresetsDir() { - return getUserDir(PRESETS_CAMERA_DIR); + return getUserDir(PRESETS_CAMERA); } std::string LLPresetsManager::getGraphicPresetsDir() { - return getUserDir(PRESETS_GRAPHIC_DIR); + return getUserDir(PRESETS_GRAPHIC); } void LLPresetsManager::getPresetNames(preset_name_list_t& presets) const @@ -164,7 +166,7 @@ void LLPresetsManager::savePreset(const std::string& name) paramsData[ctrl_name]["Value"] = value; } - std::string pathName(getUserDir(PRESETS_GRAPHIC_DIR) + "\\" + LLURI::escape(name) + ".xml"); + std::string pathName(getUserDir(PRESETS_GRAPHIC) + "\\" + LLURI::escape(name) + ".xml"); // write to file llofstream presetsXML(pathName); @@ -176,14 +178,40 @@ void LLPresetsManager::savePreset(const std::string& name) mPresetListChangeSignal(); } +void LLPresetsManager::setPresetNamesInComboBox(LLComboBox* combo) +{ + combo->clearRows(); + + std::string presets_dir = getGraphicPresetsDir(); + + if (!presets_dir.empty()) + { + loadPresetNamesFromDir(presets_dir); + std::list preset_names; + getPresetNames(preset_names); + + combo->setLabel(LLTrans::getString("preset_combo_label")); + + for (std::list::const_iterator it = preset_names.begin(); it != preset_names.end(); ++it) + { + const std::string& name = *it; + combo->add(name, LLSD().with(0, name)); + } + } + else + { + LL_WARNS() << "Could not obtain graphic presets path" << LL_ENDL; + } +} + void LLPresetsManager::loadPreset(const std::string& name) { - std::string pathName(getUserDir(PRESETS_GRAPHIC_DIR) + "\\" + LLURI::escape(name) + ".xml"); + std::string pathName(getUserDir(PRESETS_GRAPHIC) + "\\" + LLURI::escape(name) + ".xml"); gSavedSettings.loadFromFile(pathName, false, true); } -bool LLPresetsManager::removeParamSet(const std::string& name, bool delete_from_disk) +bool LLPresetsManager::deletePreset(const std::string& name) { // remove from param list preset_name_list_t::iterator it = find(mPresetNames.begin(), mPresetNames.end(), name); @@ -193,15 +221,14 @@ bool LLPresetsManager::removeParamSet(const std::string& name, bool delete_from_ return false; } - mPresetNames.erase(it); - - // remove from file system if requested - if (delete_from_disk) + // (*TODO Should the name be escaped here? + if (gDirUtilp->deleteFilesInDir(getUserDir(PRESETS_GRAPHIC), name + ".xml") < 1) { - if (gDirUtilp->deleteFilesInDir(getUserDir(PRESETS_GRAPHIC_DIR), LLURI::escape(name) + ".xml") < 1) - { - LL_WARNS("Presets") << "Error removing preset " << name << " from disk" << LL_ENDL; - } + LL_WARNS("Presets") << "Error removing preset " << name << " from disk" << LL_ENDL; + } + else + { + mPresetNames.erase(it); } // signal interested parties -- cgit v1.2.3 From 563e22e81c6bf14bca6370b098a257f94f4f843f Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Sun, 30 Nov 2014 11:24:22 -0500 Subject: STORM-2082 Make code more generic to handle the future camera presets. --- indra/newview/llpresetsmanager.cpp | 122 ++++++++++++++++++------------------- 1 file changed, 60 insertions(+), 62 deletions(-) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 6b0023d97a..6e00a90ae5 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -45,7 +45,8 @@ LLPresetsManager::~LLPresetsManager() { } -std::string LLPresetsManager::getUserDir(const std::string& subdirectory) +//std::string LLPresetsManager::getUserDir(const std::string& subdirectory) +std::string LLPresetsManager::getPresetsDir(const std::string& subdirectory) { std::string presets_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR); std::string full_path; @@ -64,22 +65,7 @@ std::string LLPresetsManager::getUserDir(const std::string& subdirectory) return full_path; } -std::string LLPresetsManager::getCameraPresetsDir() -{ - return getUserDir(PRESETS_CAMERA); -} - -std::string LLPresetsManager::getGraphicPresetsDir() -{ - return getUserDir(PRESETS_GRAPHIC); -} - -void LLPresetsManager::getPresetNames(preset_name_list_t& presets) const -{ - presets = mPresetNames; -} - -void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir) +void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_name_list_t& presets) { LL_INFOS("AppInit") << "Loading presets from " << dir << LL_ENDL; @@ -106,48 +92,61 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir) } } } + + presets = mPresetNames; } -void LLPresetsManager::savePreset(const std::string& name) +void LLPresetsManager::savePreset(const std::string& subdirectory, const std::string& name) { llassert(!name.empty()); + std::vector name_list; // This ugliness is the current list of all the control variables in the graphics and hardware - // preferences floaters. Additions or subtractions to the floaters must also be reflected here. - std::vector name_list = boost::assign::list_of - ("RenderQualityPerformance") - ("RenderFarClip") - ("RenderMaxPartCount") - ("RenderGlowResolutionPow") - ("RenderTerrainDetail") - ("RenderAvatarLODFactor") - ("RenderAvatarMaxVisible") - ("RenderUseImpostors") - ("RenderTerrainLODFactor") - ("RenderTreeLODFactor") - ("RenderVolumeLODFactor") - ("RenderFlexTimeFactor") - ("RenderTransparentWater") - ("RenderObjectBump") - ("RenderLocalLights") - ("VertexShaderEnable") - ("RenderAvatarVP") - ("RenderAvatarCloth") - ("RenderReflectionDetail") - ("WindLightUseAtmosShaders") - ("WLSkyDetail") - ("RenderDeferred") - ("RenderDeferredSSAO") - ("RenderDepthOfField") - ("RenderShadowDetail") - - ("RenderAnisotropic") - ("RenderFSAASamples") - ("RenderGamma") - ("RenderVBOEnable") - ("RenderCompressTextures") - ("TextureMemory") - ("RenderFogRatio"); + // preferences floaters or the settings for camera views. + // Additions or subtractions to the control variables in the floaters must also be reflected here. + if(PRESETS_GRAPHIC == subdirectory) + { + name_list = boost::assign::list_of + ("RenderQualityPerformance") + ("RenderFarClip") + ("RenderMaxPartCount") + ("RenderGlowResolutionPow") + ("RenderTerrainDetail") + ("RenderAvatarLODFactor") + ("RenderAvatarMaxVisible") + ("RenderUseImpostors") + ("RenderTerrainLODFactor") + ("RenderTreeLODFactor") + ("RenderVolumeLODFactor") + ("RenderFlexTimeFactor") + ("RenderTransparentWater") + ("RenderObjectBump") + ("RenderLocalLights") + ("VertexShaderEnable") + ("RenderAvatarVP") + ("RenderAvatarCloth") + ("RenderReflectionDetail") + ("WindLightUseAtmosShaders") + ("WLSkyDetail") + ("RenderDeferred") + ("RenderDeferredSSAO") + ("RenderDepthOfField") + ("RenderShadowDetail") + + ("RenderAnisotropic") + ("RenderFSAASamples") + ("RenderGamma") + ("RenderVBOEnable") + ("RenderCompressTextures") + ("TextureMemory") + ("RenderFogRatio"); + } + + if(PRESETS_CAMERA == subdirectory) + { + name_list = boost::assign::list_of + ("Placeholder"); + } // make an empty llsd LLSD paramsData(LLSD::emptyMap()); @@ -166,7 +165,7 @@ void LLPresetsManager::savePreset(const std::string& name) paramsData[ctrl_name]["Value"] = value; } - std::string pathName(getUserDir(PRESETS_GRAPHIC) + "\\" + LLURI::escape(name) + ".xml"); + std::string pathName(getPresetsDir(subdirectory) + "\\" + LLURI::escape(name) + ".xml"); // write to file llofstream presetsXML(pathName); @@ -178,17 +177,16 @@ void LLPresetsManager::savePreset(const std::string& name) mPresetListChangeSignal(); } -void LLPresetsManager::setPresetNamesInComboBox(LLComboBox* combo) +void LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo) { combo->clearRows(); - std::string presets_dir = getGraphicPresetsDir(); + std::string presets_dir = getPresetsDir(subdirectory); if (!presets_dir.empty()) { - loadPresetNamesFromDir(presets_dir); std::list preset_names; - getPresetNames(preset_names); + loadPresetNamesFromDir(presets_dir, preset_names); combo->setLabel(LLTrans::getString("preset_combo_label")); @@ -206,9 +204,9 @@ void LLPresetsManager::setPresetNamesInComboBox(LLComboBox* combo) void LLPresetsManager::loadPreset(const std::string& name) { - std::string pathName(getUserDir(PRESETS_GRAPHIC) + "\\" + LLURI::escape(name) + ".xml"); + std::string full_path(getPresetsDir(PRESETS_GRAPHIC) + "\\" + LLURI::escape(name) + ".xml"); - gSavedSettings.loadFromFile(pathName, false, true); + gSavedSettings.loadFromFile(full_path, false, true); } bool LLPresetsManager::deletePreset(const std::string& name) @@ -221,10 +219,10 @@ bool LLPresetsManager::deletePreset(const std::string& name) return false; } - // (*TODO Should the name be escaped here? - if (gDirUtilp->deleteFilesInDir(getUserDir(PRESETS_GRAPHIC), name + ".xml") < 1) + if (gDirUtilp->deleteFilesInDir(getPresetsDir(PRESETS_GRAPHIC), LLURI::escape(name) + ".xml") < 1) { LL_WARNS("Presets") << "Error removing preset " << name << " from disk" << LL_ENDL; + return false; } else { -- cgit v1.2.3 From 6d1296f71640c9c25affcff4e784ea5798ba2d5c Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Mon, 1 Dec 2014 08:09:17 -0500 Subject: STORM-2082 Implement save floater and some code cleanup. --- indra/newview/llpresetsmanager.cpp | 41 ++++++++++++++------------------------ 1 file changed, 15 insertions(+), 26 deletions(-) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 6e00a90ae5..f6f2275da9 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -165,7 +165,7 @@ void LLPresetsManager::savePreset(const std::string& subdirectory, const std::st paramsData[ctrl_name]["Value"] = value; } - std::string pathName(getPresetsDir(subdirectory) + "\\" + LLURI::escape(name) + ".xml"); + std::string pathName(getPresetsDir(subdirectory) + gDirUtilp->getDirDelimiter() + LLURI::escape(name) + ".xml"); // write to file llofstream presetsXML(pathName); @@ -188,46 +188,35 @@ void LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory, std::list preset_names; loadPresetNamesFromDir(presets_dir, preset_names); - combo->setLabel(LLTrans::getString("preset_combo_label")); - - for (std::list::const_iterator it = preset_names.begin(); it != preset_names.end(); ++it) + if (preset_names.begin() != preset_names.end()) { - const std::string& name = *it; - combo->add(name, LLSD().with(0, name)); + for (std::list::const_iterator it = preset_names.begin(); it != preset_names.end(); ++it) + { + const std::string& name = *it; + combo->add(name, LLSD().with(0, name)); + } + } + else + { + combo->setLabel(LLTrans::getString("preset_combo_label")); } - } - else - { - LL_WARNS() << "Could not obtain graphic presets path" << LL_ENDL; } } -void LLPresetsManager::loadPreset(const std::string& name) +void LLPresetsManager::loadPreset(const std::string& subdirectory, const std::string& name) { - std::string full_path(getPresetsDir(PRESETS_GRAPHIC) + "\\" + LLURI::escape(name) + ".xml"); + std::string full_path(getPresetsDir(subdirectory) + gDirUtilp->getDirDelimiter() + LLURI::escape(name) + ".xml"); gSavedSettings.loadFromFile(full_path, false, true); } -bool LLPresetsManager::deletePreset(const std::string& name) +bool LLPresetsManager::deletePreset(const std::string& subdirectory, const std::string& name) { - // remove from param list - preset_name_list_t::iterator it = find(mPresetNames.begin(), mPresetNames.end(), name); - if (it == mPresetNames.end()) - { - LL_WARNS("Presets") << "No preset named " << name << LL_ENDL; - return false; - } - - if (gDirUtilp->deleteFilesInDir(getPresetsDir(PRESETS_GRAPHIC), LLURI::escape(name) + ".xml") < 1) + if (gDirUtilp->deleteFilesInDir(getPresetsDir(subdirectory), LLURI::escape(name) + ".xml") < 1) { LL_WARNS("Presets") << "Error removing preset " << name << " from disk" << LL_ENDL; return false; } - else - { - mPresetNames.erase(it); - } // signal interested parties mPresetListChangeSignal(); -- cgit v1.2.3 From 7360f046634d013fec1e9b37c60840a83b470ce1 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Mon, 1 Dec 2014 15:36:59 -0500 Subject: STORM-2082 Better control on how (or if) to display Default preset Make sure default preset is created when flyout panel is activated Only display deleted notification upon successful deletion --- indra/newview/llpresetsmanager.cpp | 43 ++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index f6f2275da9..b9497efde6 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -45,7 +45,19 @@ LLPresetsManager::~LLPresetsManager() { } -//std::string LLPresetsManager::getUserDir(const std::string& subdirectory) +void LLPresetsManager::createMissingDefault() +{ + std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR, PRESETS_GRAPHIC, "default.xml"); + if (!gDirUtilp->fileExists(default_file)) + { + LL_WARNS() << "No " << default_file << " found -- creating one" << LL_ENDL; + // Write current graphic settings to default.xml + // If this name is to be localized additional code will be needed to delete the old default + // when changing languages. + LLPresetsManager::getInstance()->savePreset(PRESETS_GRAPHIC, PRESETS_DEFAULT); + } +} + std::string LLPresetsManager::getPresetsDir(const std::string& subdirectory) { std::string presets_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR); @@ -65,7 +77,7 @@ std::string LLPresetsManager::getPresetsDir(const std::string& subdirectory) return full_path; } -void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_name_list_t& presets) +void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_name_list_t& presets, EDefaultOptions default_option) { LL_INFOS("AppInit") << "Loading presets from " << dir << LL_ENDL; @@ -82,13 +94,26 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam { std::string path = gDirUtilp->add(dir, file); std::string name(gDirUtilp->getBaseFileName(LLURI::unescape(path), /*strip_exten = */ true)); - if ("Default" != name) + if (PRESETS_DEFAULT != name) { mPresetNames.push_back(name); } else { - mPresetNames.insert(mPresetNames.begin(), name); + switch (default_option) + { + case DEFAULT_POSITION_TOP: + mPresetNames.insert(mPresetNames.begin(), name); + break; + + case DEFAULT_POSITION_NORMAL: + mPresetNames.push_back(name); + break; + + case DEFAULT_HIDE: + default: + break; + } } } } @@ -177,7 +202,7 @@ void LLPresetsManager::savePreset(const std::string& subdirectory, const std::st mPresetListChangeSignal(); } -void LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo) +void LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option) { combo->clearRows(); @@ -186,7 +211,7 @@ void LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory, if (!presets_dir.empty()) { std::list preset_names; - loadPresetNamesFromDir(presets_dir, preset_names); + loadPresetNamesFromDir(presets_dir, preset_names, default_option); if (preset_names.begin() != preset_names.end()) { @@ -212,6 +237,12 @@ void LLPresetsManager::loadPreset(const std::string& subdirectory, const std::st bool LLPresetsManager::deletePreset(const std::string& subdirectory, const std::string& name) { + if (PRESETS_DEFAULT == name) + { + LL_WARNS("Presets") << "You are not allowed to delete the default preset." << LL_ENDL; + return false; + } + if (gDirUtilp->deleteFilesInDir(getPresetsDir(subdirectory), LLURI::escape(name) + ".xml") < 1) { LL_WARNS("Presets") << "Error removing preset " << name << " from disk" << LL_ENDL; -- cgit v1.2.3 From ade3953e380d9211ad6d332b9b27fa23e57a7d81 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Tue, 2 Dec 2014 07:42:32 -0500 Subject: STORM-2082 Add Recommended button --- indra/newview/llpresetsmanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index b9497efde6..709181b3ad 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -54,7 +54,7 @@ void LLPresetsManager::createMissingDefault() // Write current graphic settings to default.xml // If this name is to be localized additional code will be needed to delete the old default // when changing languages. - LLPresetsManager::getInstance()->savePreset(PRESETS_GRAPHIC, PRESETS_DEFAULT); + savePreset(PRESETS_GRAPHIC, PRESETS_DEFAULT); } } -- cgit v1.2.3 From cc22efa4c0d6b06bac6f49b6243df7726f89c7c4 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Wed, 3 Dec 2014 06:35:46 -0500 Subject: STORM-2082 Remove Apply button. Add new control variable to track which preset is active. Save settings to active preset when clicking on Ok button. Initial work to make pulldown operational. Still to do: add pretty icon for current preset. Notifications do not appear when called from this panel. --- indra/newview/llpresetsmanager.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 709181b3ad..ddcd54162c 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -56,6 +56,11 @@ void LLPresetsManager::createMissingDefault() // when changing languages. savePreset(PRESETS_GRAPHIC, PRESETS_DEFAULT); } + + if (gSavedSettings.getString("PresetGraphicActive").empty()) + { + gSavedSettings.setString("PresetGraphicActive", PRESETS_DEFAULT); + } } std::string LLPresetsManager::getPresetsDir(const std::string& subdirectory) @@ -93,7 +98,7 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam if (found) { std::string path = gDirUtilp->add(dir, file); - std::string name(gDirUtilp->getBaseFileName(LLURI::unescape(path), /*strip_exten = */ true)); + std::string name = gDirUtilp->getBaseFileName(LLURI::unescape(path), /*strip_exten = */ true); if (PRESETS_DEFAULT != name) { mPresetNames.push_back(name); @@ -131,6 +136,8 @@ void LLPresetsManager::savePreset(const std::string& subdirectory, const std::st // Additions or subtractions to the control variables in the floaters must also be reflected here. if(PRESETS_GRAPHIC == subdirectory) { + gSavedSettings.setString("PresetGraphicActive", name); + name_list = boost::assign::list_of ("RenderQualityPerformance") ("RenderFarClip") @@ -164,7 +171,9 @@ void LLPresetsManager::savePreset(const std::string& subdirectory, const std::st ("RenderVBOEnable") ("RenderCompressTextures") ("TextureMemory") - ("RenderFogRatio"); + ("RenderFogRatio") + + ("PresetGraphicActive"); } if(PRESETS_CAMERA == subdirectory) -- cgit v1.2.3 From afd12a6e784574e69ef3b3e7cac14573fe7c3197 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Wed, 3 Dec 2014 09:38:10 -0500 Subject: STORM-2082 Send signal to pulldown panel to refresh itself --- indra/newview/llpresetsmanager.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index ddcd54162c..260f2c9547 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -242,6 +242,9 @@ void LLPresetsManager::loadPreset(const std::string& subdirectory, const std::st std::string full_path(getPresetsDir(subdirectory) + gDirUtilp->getDirDelimiter() + LLURI::escape(name) + ".xml"); gSavedSettings.loadFromFile(full_path, false, true); + + // signal interested parties + mPresetListChangeSignal(); } bool LLPresetsManager::deletePreset(const std::string& subdirectory, const std::string& name) -- cgit v1.2.3 From 47282ceb7e8b8083cf816dd26bd4907aba313959 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Tue, 9 Dec 2014 16:48:00 -0500 Subject: STORM-2082 Improve file error handling, add help topic labels to new floaters. --- indra/newview/llpresetsmanager.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 260f2c9547..971a5ecf52 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -126,7 +126,7 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam presets = mPresetNames; } -void LLPresetsManager::savePreset(const std::string& subdirectory, const std::string& name) +bool LLPresetsManager::savePreset(const std::string& subdirectory, const std::string& name) { llassert(!name.empty()); @@ -203,12 +203,20 @@ void LLPresetsManager::savePreset(const std::string& subdirectory, const std::st // write to file llofstream presetsXML(pathName); + if (!presetsXML.is_open()) + { + LL_WARNS("Presets") << "Cannot open for output preset file " << pathName << LL_ENDL; + return false; + } + LLPointer formatter = new LLSDXMLFormatter(); formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY); presetsXML.close(); // signal interested parties mPresetListChangeSignal(); + + return true; } void LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option) @@ -241,10 +249,10 @@ void LLPresetsManager::loadPreset(const std::string& subdirectory, const std::st { std::string full_path(getPresetsDir(subdirectory) + gDirUtilp->getDirDelimiter() + LLURI::escape(name) + ".xml"); - gSavedSettings.loadFromFile(full_path, false, true); - - // signal interested parties - mPresetListChangeSignal(); + if(gSavedSettings.loadFromFile(full_path, false, true) > 0) + { + mPresetListChangeSignal(); + } } bool LLPresetsManager::deletePreset(const std::string& subdirectory, const std::string& name) -- cgit v1.2.3 From 8d12072979ee46a1eb2d13fdfef8bef62ff3f619 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Fri, 12 Dec 2014 11:13:11 -0500 Subject: STORM-2082 Merge Hardware floater into main graphics preferences display Change notifications so they are emitted only when an error occurs Put active preset at top of list Add Maximum ARC slider Merge two small methods into slider update code --- indra/newview/llpresetsmanager.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 971a5ecf52..1c14cc6ece 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -99,20 +99,26 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam { std::string path = gDirUtilp->add(dir, file); std::string name = gDirUtilp->getBaseFileName(LLURI::unescape(path), /*strip_exten = */ true); + // Two things are happening here: + // 1 - Always put the active preset at the top of the list + // 2 - Possibly hide the default preset if (PRESETS_DEFAULT != name) { - mPresetNames.push_back(name); + if (name != gSavedSettings.getString("PresetGraphicActive")) + { + mPresetNames.push_back(name); + } + else + { + mPresetNames.insert(mPresetNames.begin(), name); + } } else { switch (default_option) { - case DEFAULT_POSITION_TOP: - mPresetNames.insert(mPresetNames.begin(), name); - break; - - case DEFAULT_POSITION_NORMAL: - mPresetNames.push_back(name); + case DEFAULT_SHOW: + mPresetNames.push_back(LLTrans::getString(PRESETS_DEFAULT)); break; case DEFAULT_HIDE: @@ -164,6 +170,7 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, const std::st ("RenderDeferredSSAO") ("RenderDepthOfField") ("RenderShadowDetail") + ("RenderAutoMuteRenderWeightLimit") ("RenderAnisotropic") ("RenderFSAASamples") -- cgit v1.2.3 From 8f5ddebf0abfbcf73f25313214b06b98f2c7889c Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Sun, 14 Dec 2014 19:17:52 -0500 Subject: STORM-2082 Remove ugly list of control names. Instead, obtain the list from the View data Remove a few remants used by the old hardware floater --- indra/newview/llpresetsmanager.cpp | 49 +++++++------------------------------- 1 file changed, 9 insertions(+), 40 deletions(-) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 1c14cc6ece..05a135b19c 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -36,6 +36,8 @@ #include "lltrans.h" #include "lluictrlfactory.h" #include "llviewercontrol.h" +#include "llfloaterpreference.h" +#include "llfloaterreg.h" LLPresetsManager::LLPresetsManager() { @@ -137,51 +139,18 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, const std::st llassert(!name.empty()); std::vector name_list; - // This ugliness is the current list of all the control variables in the graphics and hardware - // preferences floaters or the settings for camera views. - // Additions or subtractions to the control variables in the floaters must also be reflected here. + if(PRESETS_GRAPHIC == subdirectory) { gSavedSettings.setString("PresetGraphicActive", name); - name_list = boost::assign::list_of - ("RenderQualityPerformance") - ("RenderFarClip") - ("RenderMaxPartCount") - ("RenderGlowResolutionPow") - ("RenderTerrainDetail") - ("RenderAvatarLODFactor") - ("RenderAvatarMaxVisible") - ("RenderUseImpostors") - ("RenderTerrainLODFactor") - ("RenderTreeLODFactor") - ("RenderVolumeLODFactor") - ("RenderFlexTimeFactor") - ("RenderTransparentWater") - ("RenderObjectBump") - ("RenderLocalLights") - ("VertexShaderEnable") - ("RenderAvatarVP") - ("RenderAvatarCloth") - ("RenderReflectionDetail") - ("WindLightUseAtmosShaders") - ("WLSkyDetail") - ("RenderDeferred") - ("RenderDeferredSSAO") - ("RenderDepthOfField") - ("RenderShadowDetail") - ("RenderAutoMuteRenderWeightLimit") - - ("RenderAnisotropic") - ("RenderFSAASamples") - ("RenderGamma") - ("RenderVBOEnable") - ("RenderCompressTextures") - ("TextureMemory") - ("RenderFogRatio") - - ("PresetGraphicActive"); + LLFloaterPreference* instance = LLFloaterReg::findTypedInstance("preferences"); + if (instance) + { + instance->getControlNames(name_list); + name_list.push_back("PresetGraphicActive"); } + } if(PRESETS_CAMERA == subdirectory) { -- cgit v1.2.3 From f6a1980c256474b96d5fe7943bfe1bd582826860 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Wed, 7 Jan 2015 19:14:46 -0500 Subject: STORM-2082 Display active preset as first choice in dropdown box --- indra/newview/llpresetsmanager.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 05a135b19c..36a82db916 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -206,12 +206,21 @@ void 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"); + if (preset_names.begin() != preset_names.end()) { for (std::list::const_iterator it = preset_names.begin(); it != preset_names.end(); ++it) { const std::string& name = *it; - combo->add(name, LLSD().with(0, name)); + if (name != preset_graphic_active) + { + combo->add(name, LLSD().with(0, name)); + } + else + { + combo->add(name, LLSD().with(0, name), ADD_TOP); + } } } else -- cgit v1.2.3 From d1bc2fe292edcea60b49ce8111a495974e9415a2 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Wed, 14 Jan 2015 19:55:58 -0500 Subject: STORM-2082 Assorted UI tweaks, better MaximumARC formula, pulldowns disappear faster --- indra/newview/llpresetsmanager.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 36a82db916..67d06ff5dd 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -106,14 +106,8 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam // 2 - Possibly hide the default preset if (PRESETS_DEFAULT != name) { - if (name != gSavedSettings.getString("PresetGraphicActive")) - { - mPresetNames.push_back(name); - } - else - { - mPresetNames.insert(mPresetNames.begin(), name); - } + mPresetNames.push_back(name); + } else { @@ -123,6 +117,10 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam mPresetNames.push_back(LLTrans::getString(PRESETS_DEFAULT)); break; + case DEFAULT_TOP: + mPresetNames.push_front(LLTrans::getString(PRESETS_DEFAULT)); + break; + case DEFAULT_HIDE: default: break; -- cgit v1.2.3 From 611391a818746f560ad49847ae643613313ac216 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Tue, 20 Jan 2015 09:17:23 -0500 Subject: STORM-2082 Update to new UI design. Bugs are not worked out yet. --- indra/newview/llpresetsmanager.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 67d06ff5dd..05138ee0c3 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -54,14 +54,14 @@ void LLPresetsManager::createMissingDefault() { LL_WARNS() << "No " << default_file << " found -- creating one" << LL_ENDL; // Write current graphic settings to default.xml - // If this name is to be localized additional code will be needed to delete the old default + // *TODO: If this name is to be localized additional code will be needed to delete the old default // when changing languages. savePreset(PRESETS_GRAPHIC, PRESETS_DEFAULT); - } - if (gSavedSettings.getString("PresetGraphicActive").empty()) - { - gSavedSettings.setString("PresetGraphicActive", PRESETS_DEFAULT); + if (gSavedSettings.getString("PresetGraphicActive").empty()) + { + gSavedSettings.setString("PresetGraphicActive", PRESETS_DEFAULT); + } } } @@ -187,6 +187,8 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, const std::st formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY); presetsXML.close(); + gSavedSettings.setString("PresetGraphicActive", name); + // signal interested parties mPresetListChangeSignal(); @@ -234,6 +236,10 @@ void LLPresetsManager::loadPreset(const std::string& subdirectory, const std::st if(gSavedSettings.loadFromFile(full_path, false, true) > 0) { + if(PRESETS_GRAPHIC == subdirectory) + { + gSavedSettings.setString("PresetGraphicActive", name); + } mPresetListChangeSignal(); } } @@ -252,6 +258,12 @@ bool LLPresetsManager::deletePreset(const std::string& subdirectory, const std:: return false; } + // If you delete the preset that is currently marked as loaded then also indicate that no preset is loaded. + if (gSavedSettings.getString("PresetGraphicActive") == name) + { + gSavedSettings.setString("PresetGraphicActive", ""); + } + // signal interested parties mPresetListChangeSignal(); -- cgit v1.2.3 From 56f43a390015f3ba721554ef9a0e436b6bfad5f9 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Tue, 20 Jan 2015 13:35:26 -0500 Subject: STORM-2082 Still trying to work out the dirtyChilds issue. Also made some small UI adjustments. --- indra/newview/llpresetsmanager.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 05138ee0c3..a08f77eeb1 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -47,6 +47,11 @@ LLPresetsManager::~LLPresetsManager() { } +void LLPresetsManager::triggerChangeSignal() +{ + mPresetListChangeSignal(); +} + void LLPresetsManager::createMissingDefault() { std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR, PRESETS_GRAPHIC, "default.xml"); @@ -86,7 +91,7 @@ std::string LLPresetsManager::getPresetsDir(const std::string& subdirectory) void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_name_list_t& presets, EDefaultOptions default_option) { - LL_INFOS("AppInit") << "Loading presets from " << dir << LL_ENDL; + LL_INFOS("AppInit") << "Loading list of preset names from " << dir << LL_ENDL; mPresetNames.clear(); @@ -190,7 +195,7 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, const std::st gSavedSettings.setString("PresetGraphicActive", name); // signal interested parties - mPresetListChangeSignal(); + triggerChangeSignal(); return true; } @@ -240,7 +245,7 @@ void LLPresetsManager::loadPreset(const std::string& subdirectory, const std::st { gSavedSettings.setString("PresetGraphicActive", name); } - mPresetListChangeSignal(); + triggerChangeSignal(); } } @@ -265,7 +270,7 @@ bool LLPresetsManager::deletePreset(const std::string& subdirectory, const std:: } // signal interested parties - mPresetListChangeSignal(); + triggerChangeSignal(); return true; } -- cgit v1.2.3 From 58577702a8c185683e089afc3f7fbcbaaf40122c Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Tue, 20 Jan 2015 18:24:02 -0500 Subject: STORM-2082 Finally(?) deal properly with dirty UI processing. Code cleanup, some per bitbucket comments. --- indra/newview/llpresetsmanager.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index a08f77eeb1..e67ebcc0c6 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -58,9 +58,8 @@ void LLPresetsManager::createMissingDefault() if (!gDirUtilp->fileExists(default_file)) { LL_WARNS() << "No " << default_file << " found -- creating one" << LL_ENDL; + // Write current graphic settings to default.xml - // *TODO: If this name is to be localized additional code will be needed to delete the old default - // when changing languages. savePreset(PRESETS_GRAPHIC, PRESETS_DEFAULT); if (gSavedSettings.getString("PresetGraphicActive").empty()) @@ -106,13 +105,10 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam { std::string path = gDirUtilp->add(dir, file); std::string name = gDirUtilp->getBaseFileName(LLURI::unescape(path), /*strip_exten = */ true); - // Two things are happening here: - // 1 - Always put the active preset at the top of the list - // 2 - Possibly hide the default preset + if (PRESETS_DEFAULT != name) { mPresetNames.push_back(name); - } else { @@ -245,6 +241,12 @@ void LLPresetsManager::loadPreset(const std::string& subdirectory, const std::st { gSavedSettings.setString("PresetGraphicActive", name); } + + LLFloaterPreference* instance = LLFloaterReg::findTypedInstance("preferences"); + if (instance) + { + instance->refreshEnabledGraphics(); + } triggerChangeSignal(); } } -- cgit v1.2.3 From 60311c6409b2ec6590b0f08135c7715f982c94ea Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Wed, 21 Jan 2015 04:57:42 -0500 Subject: STORM-2082 Put "Default" at the top of the non-Delete comboboxes. --- indra/newview/llpresetsmanager.cpp | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index e67ebcc0c6..205c5e6dfb 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -214,14 +214,7 @@ void LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory, for (std::list::const_iterator it = preset_names.begin(); it != preset_names.end(); ++it) { const std::string& name = *it; - if (name != preset_graphic_active) - { - combo->add(name, LLSD().with(0, name)); - } - else - { - combo->add(name, LLSD().with(0, name), ADD_TOP); - } + combo->add(name, LLSD().with(0, name)); } } else -- cgit v1.2.3 From 2d31abfcd97d844343b642b4aef56e26d7883a00 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Thu, 19 Feb 2015 14:34:31 -0500 Subject: STORM-2082 Fix edge case bug --- indra/newview/llpresetsmanager.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 205c5e6dfb..9fa5282862 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -246,16 +246,19 @@ void LLPresetsManager::loadPreset(const std::string& subdirectory, const std::st bool LLPresetsManager::deletePreset(const std::string& subdirectory, const std::string& name) { + bool sts = true; + if (PRESETS_DEFAULT == name) { + // This code should never execute LL_WARNS("Presets") << "You are not allowed to delete the default preset." << LL_ENDL; - return false; + sts = false; } if (gDirUtilp->deleteFilesInDir(getPresetsDir(subdirectory), LLURI::escape(name) + ".xml") < 1) { LL_WARNS("Presets") << "Error removing preset " << name << " from disk" << LL_ENDL; - return false; + sts = false; } // If you delete the preset that is currently marked as loaded then also indicate that no preset is loaded. @@ -267,7 +270,7 @@ bool LLPresetsManager::deletePreset(const std::string& subdirectory, const std:: // signal interested parties triggerChangeSignal(); - return true; + return sts; } boost::signals2::connection LLPresetsManager::setPresetListChangeCallback(const preset_list_signal_t::slot_type& cb) -- cgit v1.2.3 From 1cfa126279f06bf4de7b78af0a2ab09a5a3a9759 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Fri, 19 Jun 2015 17:49:05 -0400 Subject: workarounds to get this building again; note: review mute list caching change before promoting --- indra/newview/llpresetsmanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 9fa5282862..dd25c0d1b8 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -177,7 +177,7 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, const std::st std::string pathName(getPresetsDir(subdirectory) + gDirUtilp->getDirDelimiter() + LLURI::escape(name) + ".xml"); // write to file - llofstream presetsXML(pathName); + llofstream presetsXML(pathName.c_str()); if (!presetsXML.is_open()) { LL_WARNS("Presets") << "Cannot open for output preset file " << pathName << LL_ENDL; -- cgit v1.2.3 From 1f40ba89e63c19a292958f5935596558552d39f6 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Wed, 19 Aug 2015 11:32:02 -0400 Subject: STORM-2120 Make graphics presets account specific --- indra/newview/llpresetsmanager.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index dd25c0d1b8..c84baeba78 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -54,7 +54,7 @@ void LLPresetsManager::triggerChangeSignal() void LLPresetsManager::createMissingDefault() { - std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR, PRESETS_GRAPHIC, "default.xml"); + std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, PRESETS_GRAPHIC, "default.xml"); if (!gDirUtilp->fileExists(default_file)) { LL_WARNS() << "No " << default_file << " found -- creating one" << LL_ENDL; @@ -71,7 +71,7 @@ void LLPresetsManager::createMissingDefault() std::string LLPresetsManager::getPresetsDir(const std::string& subdirectory) { - std::string presets_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR); + std::string presets_path = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR); std::string full_path; if (!gDirUtilp->fileExists(presets_path)) @@ -79,7 +79,7 @@ std::string LLPresetsManager::getPresetsDir(const std::string& subdirectory) LLFile::mkdir(presets_path); } - full_path = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, PRESETS_DIR, subdirectory); + full_path = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, subdirectory); if (!gDirUtilp->fileExists(full_path)) { LLFile::mkdir(full_path); -- cgit v1.2.3 From 453dee2d21477ad534fa9982b844c40adde9b93e Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Mon, 28 Sep 2015 15:00:17 -0400 Subject: MAINT-5542: fix initialization of Default graphics preset so that it is selectable --- indra/newview/llpresetsmanager.cpp | 126 ++++++++++++++++++++++--------------- 1 file changed, 76 insertions(+), 50 deletions(-) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index c84baeba78..8aad37e505 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -54,19 +54,18 @@ void LLPresetsManager::triggerChangeSignal() void LLPresetsManager::createMissingDefault() { - std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, PRESETS_GRAPHIC, "default.xml"); + std::string default_file = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, PRESETS_DIR, PRESETS_GRAPHIC, PRESETS_DEFAULT + ".xml"); if (!gDirUtilp->fileExists(default_file)) { - LL_WARNS() << "No " << default_file << " found -- creating one" << LL_ENDL; + LL_INFOS() << "No default preset found -- creating one at " << default_file << LL_ENDL; - // Write current graphic settings to default.xml + // Write current graphic settings as the default savePreset(PRESETS_GRAPHIC, PRESETS_DEFAULT); - - if (gSavedSettings.getString("PresetGraphicActive").empty()) - { - gSavedSettings.setString("PresetGraphicActive", PRESETS_DEFAULT); - } } + else + { + LL_DEBUGS() << "default preset exists; no-op" << LL_ENDL; + } } std::string LLPresetsManager::getPresetsDir(const std::string& subdirectory) @@ -106,6 +105,8 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam std::string path = gDirUtilp->add(dir, file); std::string name = gDirUtilp->getBaseFileName(LLURI::unescape(path), /*strip_exten = */ true); + LL_DEBUGS() << " Found preset '" << name << "'" << LL_ENDL; + if (PRESETS_DEFAULT != name) { mPresetNames.push_back(name); @@ -135,8 +136,7 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam bool LLPresetsManager::savePreset(const std::string& subdirectory, const std::string& name) { - llassert(!name.empty()); - + bool saved = false; std::vector name_list; if(PRESETS_GRAPHIC == subdirectory) @@ -147,53 +147,73 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, const std::st if (instance) { instance->getControlNames(name_list); + LL_DEBUGS() << "saving preset '" << name << "'; " << name_list.size() << " names" << LL_ENDL; name_list.push_back("PresetGraphicActive"); } + else + { + LL_WARNS() << "preferences floater instance not found" << LL_ENDL; + } } - - if(PRESETS_CAMERA == subdirectory) + else if(PRESETS_CAMERA == subdirectory) { name_list = boost::assign::list_of ("Placeholder"); } - - // make an empty llsd - LLSD paramsData(LLSD::emptyMap()); - - 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 = gSavedSettings.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()) - { - LL_WARNS("Presets") << "Cannot open for output preset file " << pathName << LL_ENDL; - return false; - } - - LLPointer formatter = new LLSDXMLFormatter(); - formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY); - presetsXML.close(); - - gSavedSettings.setString("PresetGraphicActive", name); - - // signal interested parties - triggerChangeSignal(); - - return true; + 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 + { + // make an empty llsd + LLSD paramsData(LLSD::emptyMap()); + + 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 = gSavedSettings.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; + + 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; + } + + return saved; } void LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option) @@ -228,6 +248,8 @@ void LLPresetsManager::loadPreset(const std::string& subdirectory, const std::st { std::string full_path(getPresetsDir(subdirectory) + gDirUtilp->getDirDelimiter() + LLURI::escape(name) + ".xml"); + LL_DEBUGS() << "attempting to load preset '"< 0) { if(PRESETS_GRAPHIC == subdirectory) @@ -242,6 +264,10 @@ void LLPresetsManager::loadPreset(const std::string& subdirectory, const std::st } triggerChangeSignal(); } + else + { + LL_WARNS() << "failed to load preset '"< Date: Fri, 19 Feb 2016 22:08:28 +0100 Subject: FIXED Graphics presets do not work properly when localized "Default" string --- indra/newview/llpresetsmanager.cpp | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 8aad37e505..152001eb46 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -134,9 +134,14 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam presets = mPresetNames; } -bool LLPresetsManager::savePreset(const std::string& subdirectory, const std::string& name) +bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string name) { - bool saved = false; + if (LLTrans::getString(PRESETS_DEFAULT) == name) + { + name = PRESETS_DEFAULT; + } + + bool saved = false; std::vector name_list; if(PRESETS_GRAPHIC == subdirectory) @@ -244,8 +249,13 @@ void LLPresetsManager::setPresetNamesInComboBox(const std::string& subdirectory, } } -void LLPresetsManager::loadPreset(const std::string& subdirectory, const std::string& name) +void LLPresetsManager::loadPreset(const std::string& subdirectory, std::string name) { + if (LLTrans::getString(PRESETS_DEFAULT) == name) + { + name = PRESETS_DEFAULT; + } + std::string full_path(getPresetsDir(subdirectory) + gDirUtilp->getDirDelimiter() + LLURI::escape(name) + ".xml"); LL_DEBUGS() << "attempting to load preset '"< Date: Wed, 23 Mar 2016 11:50:39 -0400 Subject: improve settings error log, and make type conversion methods static --- indra/newview/llpresetsmanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview/llpresetsmanager.cpp') diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index 152001eb46..d95546f11d 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -180,7 +180,7 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n std::string ctrl_name = *it; LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get(); std::string comment = ctrl->getComment(); - std::string type = gSavedSettings.typeEnumToString(ctrl->type()); + std::string type = LLControlGroup::typeEnumToString(ctrl->type()); LLSD value = ctrl->getValue(); paramsData[ctrl_name]["Comment"] = comment; -- cgit v1.2.3