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/llfloaterdeleteprefpreset.cpp | 18 +++++---- indra/newview/llfloaterpreference.cpp | 17 ++++----- indra/newview/llfloaterpreference.h | 2 +- indra/newview/llfloatersaveprefpreset.cpp | 6 ++- indra/newview/llpanelpresetspulldown.cpp | 4 ++ indra/newview/llpresetsmanager.cpp | 43 +++++++++++++++++++--- indra/newview/llpresetsmanager.h | 14 ++++++- .../default/xui/en/panel_preferences_graphics1.xml | 4 +- 8 files changed, 77 insertions(+), 31 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llfloaterdeleteprefpreset.cpp b/indra/newview/llfloaterdeleteprefpreset.cpp index 74f8805d03..50abf1038b 100644 --- a/indra/newview/llfloaterdeleteprefpreset.cpp +++ b/indra/newview/llfloaterdeleteprefpreset.cpp @@ -58,7 +58,8 @@ void LLFloaterDeletePrefPreset::onOpen(const LLSD& key) LLComboBox* combo = getChild("preset_combo"); - LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, combo); + EDefaultOptions option = DEFAULT_HIDE; + LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, combo, option); } void LLFloaterDeletePrefPreset::onBtnDelete() @@ -66,19 +67,20 @@ void LLFloaterDeletePrefPreset::onBtnDelete() LLComboBox* combo = getChild("preset_combo"); std::string name = combo->getSimple(); - // Ignore return status - LLPresetsManager::getInstance()->deletePreset(mSubdirectory, name); - - LLSD args; - args["NAME"] = name; - LLNotificationsUtil::add("PresetDeleted", args); + if (LLPresetsManager::getInstance()->deletePreset(mSubdirectory, name)) + { + LLSD args; + args["NAME"] = name; + LLNotificationsUtil::add("PresetDeleted", args); + } } void LLFloaterDeletePrefPreset::onPresetsListChange() { LLComboBox* combo = getChild("preset_combo"); - LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, combo); + EDefaultOptions option = DEFAULT_HIDE; + LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, combo, option); } void LLFloaterDeletePrefPreset::onBtnCancel() diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 521cc59dda..97af9d6ce0 100755 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -744,15 +744,7 @@ void LLFloaterPreference::onOpen(const LLSD& key) saveSettings(); // Make sure there is a default preference file - 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, "Default"); - } + LLPresetsManager::getInstance()->createMissingDefault(); bool started = (LLStartUp::getStartupState() == STATE_STARTED); @@ -2121,6 +2113,10 @@ void LLPanelPreference::onChangePreset(const LLSD& user_data) } } +void LLPanelPreference::setHardwareDefaults() +{ +} + class LLPanelPreferencePrivacy : public LLPanelPreference { public: @@ -2183,7 +2179,8 @@ void LLPanelPreferenceGraphics::setPresetNamesInComboBox() { LLComboBox* combo = getChild("graphic_preset_combo"); - LLPresetsManager::getInstance()->setPresetNamesInComboBox(PRESETS_GRAPHIC, combo); + EDefaultOptions option = DEFAULT_POSITION_TOP; + LLPresetsManager::getInstance()->setPresetNamesInComboBox(PRESETS_GRAPHIC, combo, option); } void LLPanelPreferenceGraphics::draw() diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h index 5452dc6442..99d133c1ac 100755 --- a/indra/newview/llfloaterpreference.h +++ b/indra/newview/llfloaterpreference.h @@ -211,7 +211,7 @@ public: virtual void apply(); virtual void cancel(); void setControlFalse(const LLSD& user_data); - virtual void setHardwareDefaults(){}; + virtual void setHardwareDefaults(); // Disables "Allow Media to auto play" check box only when both // "Streaming Music" and "Media" are unchecked. Otherwise enables it. diff --git a/indra/newview/llfloatersaveprefpreset.cpp b/indra/newview/llfloatersaveprefpreset.cpp index 16d77c0750..3148978778 100644 --- a/indra/newview/llfloatersaveprefpreset.cpp +++ b/indra/newview/llfloatersaveprefpreset.cpp @@ -70,7 +70,8 @@ void LLFloaterSavePrefPreset::onOpen(const LLSD& key) setTitle(floater_title); - LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, mPresetCombo); + EDefaultOptions option = DEFAULT_POSITION_TOP; + LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, mPresetCombo, option); onPresetNameEdited(); } @@ -88,7 +89,8 @@ void LLFloaterSavePrefPreset::onBtnSave() void LLFloaterSavePrefPreset::onPresetsListChange() { - LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, mPresetCombo); + EDefaultOptions option = DEFAULT_POSITION_TOP; + LLPresetsManager::getInstance()->setPresetNamesInComboBox(mSubdirectory, mPresetCombo, option); } void LLFloaterSavePrefPreset::onBtnCancel() diff --git a/indra/newview/llpanelpresetspulldown.cpp b/indra/newview/llpanelpresetspulldown.cpp index fc459a27e7..977e9ff5e2 100644 --- a/indra/newview/llpanelpresetspulldown.cpp +++ b/indra/newview/llpanelpresetspulldown.cpp @@ -35,6 +35,7 @@ #include "lltabcontainer.h" #include "llfloaterreg.h" #include "llfloaterpreference.h" +#include "llpresetsmanager.h" #include "llsliderctrl.h" /* static */ const F32 LLPanelPresetsPulldown::sAutoCloseFadeStartTimeSec = 4.0f; @@ -56,6 +57,9 @@ LLPanelPresetsPulldown::LLPanelPresetsPulldown() BOOL LLPanelPresetsPulldown::postBuild() { + // Make sure there is a default preference file + LLPresetsManager::getInstance()->createMissingDefault(); + return LLPanel::postBuild(); } 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; diff --git a/indra/newview/llpresetsmanager.h b/indra/newview/llpresetsmanager.h index 878116e5aa..1bac2c65e1 100644 --- a/indra/newview/llpresetsmanager.h +++ b/indra/newview/llpresetsmanager.h @@ -32,19 +32,29 @@ #include #include +static const std::string PRESETS_DEFAULT = "Default"; static const std::string PRESETS_DIR = "presets"; static const std::string PRESETS_GRAPHIC = "graphic"; static const std::string PRESETS_CAMERA = "camera"; +enum EDefaultOptions +{ + DEFAULT_POSITION_TOP, // Put "Default" as the first item in the combobox + DEFAULT_POSITION_NORMAL, // No special positioning + DEFAULT_HIDE // Do not display "Default" in the combobox +}; + class LLPresetsManager : public LLSingleton { public: + typedef std::list preset_name_list_t; typedef boost::signals2::signal preset_list_signal_t; + void createMissingDefault(); static std::string getPresetsDir(const std::string& subdirectory); - void setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo); - void loadPresetNamesFromDir(const std::string& dir, preset_name_list_t& presets); + void setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option); + void loadPresetNamesFromDir(const std::string& dir, preset_name_list_t& presets, EDefaultOptions default_option); void savePreset(const std::string& subdirectory, const std::string & name); void loadPreset(const std::string& subdirectory, const std::string & name); bool deletePreset(const std::string& subdirectory, const std::string& name); diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml index 32de123895..4248de4d96 100755 --- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml @@ -962,9 +962,9 @@