RetroShare/retroshare-gui/src/gui/settings/rsettings.cpp
2011-10-12 23:36:25 +00:00

132 lines
3.9 KiB
C++

/****************************************************************
* This file is distributed under the following license:
*
* Copyright (c) 2008, crypton
* Copyright (c) 2008, Matt Edman, Justin Hipple
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
****************************************************************/
#include <rshare.h>
#include <iostream>
#include "rsettings.h"
#include <retroshare/rsinit.h>
/** The file in which all settings will read and written. */
#define SETTINGS_FILE (QString::fromUtf8(RsInit::RsProfileConfigDirectory().c_str()) + "/RetroShare.conf")
/** Constructor */
RSettings::RSettings(const QString settingsGroup)
: QSettings(SETTINGS_FILE, QSettings::IniFormat)
{
std::string sPreferedId;
m_bValid = RsInit::getPreferedAccountId(sPreferedId);
if (!settingsGroup.isEmpty())
beginGroup(settingsGroup);
}
RSettings::RSettings(std::string fileName, const QString settingsGroup)
: QSettings(QString::fromStdString(fileName), QSettings::IniFormat)
{
m_bValid = true;
if (!settingsGroup.isEmpty())
beginGroup(settingsGroup);
}
/** Returns the saved value associated with <b>key</b>. If no value has been
* set, the default value is returned.
* \sa setDefault
*/
QVariant
RSettings::value(const QString &key, const QVariant &defaultVal) const
{
if (m_bValid == false) {
// return only default value
return defaultVal.isNull() ? defaultValue(key) : defaultVal;
}
return QSettings::value(key, defaultVal.isNull() ? defaultValue(key) : defaultVal);
}
/** Sets the value associated with <b>key</b> to <b>val</b>. */
void
RSettings::setValue(const QString &key, const QVariant &val)
{
if (m_bValid == false) {
std::cerr << "RSettings::setValue() Calling on invalid object, key = " << key.toStdString() << std::endl;
return;
}
if (val == defaultValue(key))
QSettings::remove(key);
else if (val != value(key))
QSettings::setValue(key, val);
}
QVariant RSettings::valueFromGroup(const QString &group, const QString &key, const QVariant &defaultVal)
{
beginGroup(group);
QVariant val = value(key, defaultVal);
endGroup();
return val;
}
void RSettings::setValueToGroup(const QString &group, const QString &key, const QVariant &val)
{
beginGroup(group);
setValue(key, val);
endGroup();
}
/** Sets the default setting for <b>key</b> to <b>val</b>. */
void
RSettings::setDefault(const QString &key, const QVariant &val)
{
_defaults.insert(key, val);
}
/** Returns the default setting value associated with <b>key</b>. If
* <b>key</b> has no default value, then an empty QVariant is returned. */
QVariant
RSettings::defaultValue(const QString &key) const
{
if (_defaults.contains(key))
return _defaults.value(key);
return QVariant();
}
/** Resets all settings. */
void
RSettings::reset()
{
/* Static method, so we have to create a QSettings object. */
QSettings settings(SETTINGS_FILE, QSettings::IniFormat);
settings.clear();
}
/** Returns a map of all currently saved settings at the last appyl() point. */
/*QMap<QString, QVariant>
RSettings::allSettings() const
{
QMap<QString, QVariant> settings;
foreach (QString key, allKeys()) {
settings.insert(key, value(key));
}
return settings;
}*/