STORM-2082 Get writing out and loading presets working
parent
f71247ea54
commit
f30e518f17
|
|
@ -109,6 +109,7 @@
|
|||
#include "lllogininstance.h" // to check if logged in yet
|
||||
#include "llsdserialize.h"
|
||||
#include "llpresetsmanager.h"
|
||||
#include "llviewercontrol.h"
|
||||
|
||||
const F32 MAX_USER_FAR_CLIP = 512.f;
|
||||
const F32 MIN_USER_FAR_CLIP = 64.f;
|
||||
|
|
@ -742,7 +743,13 @@ 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_DIR, "default.xml");
|
||||
if (!gDirUtilp->fileExists(default_file))
|
||||
{
|
||||
LL_WARNS() << "No " << default_file << " found -- creating one" << LL_ENDL;
|
||||
// Write current graphic settings to default.xml
|
||||
LLPresetsManager::getInstance()->savePreset("Default");
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterPreference::onVertexShaderEnable()
|
||||
|
|
@ -1873,6 +1880,7 @@ LLPanelPreference::LLPanelPreference()
|
|||
{
|
||||
mCommitCallbackRegistrar.add("Pref.setControlFalse", boost::bind(&LLPanelPreference::setControlFalse,this, _2));
|
||||
mCommitCallbackRegistrar.add("Pref.updateMediaAutoPlayCheckbox", boost::bind(&LLPanelPreference::updateMediaAutoPlayCheckbox, this, _1));
|
||||
mCommitCallbackRegistrar.add("Pref.Preset", boost::bind(&LLPanelPreference::onChangePreset, this));
|
||||
}
|
||||
|
||||
//virtual
|
||||
|
|
@ -2070,6 +2078,19 @@ void LLPanelPreference::updateMediaAutoPlayCheckbox(LLUICtrl* ctrl)
|
|||
}
|
||||
}
|
||||
|
||||
void LLPanelPreference::onChangePreset()
|
||||
{
|
||||
LLComboBox* combo = getChild<LLComboBox>("graphic_preset_combo");
|
||||
std::string name = combo->getSimple();
|
||||
|
||||
LLPresetsManager::getInstance()->loadPreset(name);
|
||||
LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
|
||||
if (instance)
|
||||
{
|
||||
instance->refreshEnabledGraphics();
|
||||
}
|
||||
}
|
||||
|
||||
class LLPanelPreferencePrivacy : public LLPanelPreference
|
||||
{
|
||||
public:
|
||||
|
|
@ -2113,28 +2134,43 @@ static LLPanelInjector<LLPanelPreferencePrivacy> t_pref_privacy("panel_preferenc
|
|||
|
||||
BOOL LLPanelPreferenceGraphics::postBuild()
|
||||
{
|
||||
LLComboBox* graphic_preset = getChild<LLComboBox>("graphic_preset_combo");
|
||||
graphic_preset->setLabel(getString("graphic_preset_combo_label"));
|
||||
LLComboBox* combo = getChild<LLComboBox>("graphic_preset_combo");
|
||||
combo->setLabel(getString("graphic_preset_combo_label"));
|
||||
|
||||
setPresetNamesInCombobox();
|
||||
|
||||
LLPresetsManager::instance().setPresetListChangeCallback(boost::bind(&LLPanelPreferenceGraphics::onPresetsListChange, this));
|
||||
|
||||
return LLPanelPreference::postBuild();
|
||||
}
|
||||
|
||||
void LLPanelPreferenceGraphics::onPresetsListChange()
|
||||
{
|
||||
setPresetNamesInCombobox();
|
||||
}
|
||||
|
||||
void LLPanelPreferenceGraphics::setPresetNamesInCombobox()
|
||||
{
|
||||
LLComboBox* combo = getChild<LLComboBox>("graphic_preset_combo");
|
||||
combo->clearRows();
|
||||
|
||||
std::string presets_dir = LLPresetsManager::getGraphicPresetsDir();
|
||||
|
||||
if (!presets_dir.empty())
|
||||
{
|
||||
LLPresetsManager::getInstance()->loadPresetsFromDir(presets_dir);
|
||||
LLPresetsManager::getInstance()->loadPresetNamesFromDir(presets_dir);
|
||||
std::list<std::string> preset_names;
|
||||
LLPresetsManager::getInstance()->getPresetNames(preset_names);
|
||||
|
||||
for (std::list<std::string>::const_iterator it = preset_names.begin(); it != preset_names.end(); ++it)
|
||||
{
|
||||
const std::string& name = *it;
|
||||
graphic_preset->add(name, LLSD().with(0, name));
|
||||
combo->add(name, LLSD().with(0, name));
|
||||
}
|
||||
}
|
||||
else {
|
||||
LL_WARNS() << "Could not obtain graphic presets path" << LL_ENDL;
|
||||
}
|
||||
|
||||
return LLPanelPreference::postBuild();
|
||||
}
|
||||
|
||||
void LLPanelPreferenceGraphics::draw()
|
||||
|
|
|
|||
|
|
@ -220,7 +220,9 @@ public:
|
|||
// This function squirrels away the current values of the controls so that
|
||||
// cancel() can restore them.
|
||||
virtual void saveSettings();
|
||||
|
||||
|
||||
void onChangePreset();
|
||||
|
||||
class Updater;
|
||||
|
||||
protected:
|
||||
|
|
@ -248,11 +250,13 @@ public:
|
|||
void cancel();
|
||||
void saveSettings();
|
||||
void setHardwareDefaults();
|
||||
void setPresetNamesInCombobox();
|
||||
static const std::string getPresetsPath();
|
||||
|
||||
protected:
|
||||
bool hasDirtyChilds();
|
||||
void resetDirtyChilds();
|
||||
|
||||
void onPresetsListChange();
|
||||
};
|
||||
|
||||
class LLFloaterPreferenceProxy : public LLFloater
|
||||
|
|
|
|||
|
|
@ -26,17 +26,15 @@
|
|||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include <boost/assign/list_of.hpp>
|
||||
|
||||
#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))
|
||||
{
|
||||
break; // no more files
|
||||
}
|
||||
found = dir_iter.next(file);
|
||||
|
||||
std::string path = gDirUtilp->add(dir, file);
|
||||
std::string name(gDirUtilp->getBaseFileName(LLURI::unescape(path), /*strip_exten = */ true));
|
||||
mPresetNames.push_back(name);
|
||||
if (found)
|
||||
{
|
||||
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<std::string> 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<std::string>::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<LLSDFormatter> 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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,6 +30,10 @@
|
|||
#include <list>
|
||||
#include <map>
|
||||
|
||||
static const std::string PRESETS_DIR = "presets";
|
||||
static const std::string PRESETS_GRAPHIC_DIR = "graphic";
|
||||
static const std::string PRESETS_CAMERA_DIR = "camera";
|
||||
|
||||
class LLPresetsManager : public LLSingleton<LLPresetsManager>
|
||||
{
|
||||
public:
|
||||
|
|
@ -37,12 +41,13 @@ public:
|
|||
typedef boost::signals2::signal<void()> preset_list_signal_t;
|
||||
|
||||
void getPresetNames(preset_name_list_t& presets) const;
|
||||
void loadPresetsFromDir(const std::string& dir);
|
||||
void loadPresetNamesFromDir(const std::string& dir);
|
||||
void savePreset(const std::string & name);
|
||||
void loadPreset(const std::string & name);
|
||||
static std::string getGraphicPresetsDir();
|
||||
bool removeParamSet(const std::string& name, bool delete_from_disk);
|
||||
|
||||
/// Emitted when a preset gets added or deleted.
|
||||
/// Emitted when a preset gets loaded or deleted.
|
||||
boost::signals2::connection setPresetListChangeCallback(const preset_list_signal_t::slot_type& cb);
|
||||
|
||||
preset_name_list_t mPresetNames;
|
||||
|
|
|
|||
|
|
@ -30,7 +30,10 @@
|
|||
max_chars="100"
|
||||
name="graphic_preset_combo"
|
||||
top_delta="0"
|
||||
width="150"/>
|
||||
width="150">
|
||||
<combo_box.commit_callback
|
||||
function="Pref.Preset" />
|
||||
</combo_box>
|
||||
<button
|
||||
follows="top|left"
|
||||
height="23"
|
||||
|
|
|
|||
Loading…
Reference in New Issue