#include <QtSql/QSqlQuery>
#include <QtCore/QVariant>
#include <QtCore/QDebug>
+#include <QtCore/QTranslator>
+#include <QtCore/QLocale>
#include <gconf/gconf-client.h>
#include "settings.h"
#include "db.h"
+namespace
+{
+ static int const LANGUAGE_COUNT = 5;
+
+ static QString const LANGUAGE_NAMES[LANGUAGE_COUNT] = {
+ "English",
+ "Deutsch",
+ "Norsk",
+ "Suomi",
+ "Svenska"
+ };
+
+ static QString const LANGUAGE_IDS[LANGUAGE_COUNT] = {
+ "en_US",
+ "de_DE",
+ "nb_NO",
+ "fi_FI",
+ "sv_SE"
+ };
+}
+
Settings* Settings::instance_ = 0;
Settings* Settings::instance()
return instance_;
}
+void Settings::getLanguages(QList<Settings::Language>& languages)
+{
+ for(int i = 0; i < LANGUAGE_COUNT; i++)
+ {
+ Language lang;
+ lang.name = LANGUAGE_NAMES[i];
+ lang.id = LANGUAGE_IDS[i];
+ languages.push_back(lang);
+ }
+}
+
+void Settings::loadLanguage(QApplication& app)
+{
+ QString language = get("language");
+
+ if(language.isEmpty())
+ {
+ language = QLocale::system().name();
+ }
+
+ QTranslator* translator = new QTranslator(&app);
+ translator->load(":/translations/" + language);
+ app.installTranslator(translator);
+}
+
void Settings::close()
{
delete instance_;
instance_ = 0;
}
-bool Settings::set(QString const& name, QString const& value)
+void Settings::startEdit()
{
- bool connected = DB::connected();
+ if(!editing_ && !DB::connected())
+ {
+ editing_ = DB::connect();
+ }
+}
- if(!connected)
+void Settings::endEdit()
+{
+ if(editing_)
{
- if(!DB::connect())
- {
- return false;
- }
+ DB::disconnect();
+ editing_ = false;
}
+}
+
+bool Settings::set(QString const& name, QString const& value)
+{
+ bool close = !editing_;
+
+ startEdit();
QSqlQuery deleteQuery;
deleteQuery.prepare("DELETE FROM settings WHERE name = :name");
bool returnValue = query.exec();
- if(!connected)
+ if(close)
{
- DB::disconnect();
+ endEdit();
}
+ settings_[name] = value;
+
return returnValue;
}
QString Settings::get(QString const& name)
{
- QString result = "";
+ QMap<QString, QString>::iterator it;
- bool connected = DB::connected();
-
- if(!connected)
+ if((it = settings_.find(name)) != settings_.end())
{
- if(!DB::connect())
- {
- return result;
- }
+ return it.value();
}
+ QString result = "";
+
+ bool close = !editing_;
+
+ startEdit();
+
QSqlQuery query;
query.prepare("SELECT value FROM settings WHERE name = :name");
result = getDefaultValue(name);
}
- if(!connected)
+ if(close)
{
- DB::disconnect();
+ endEdit();
}
+ settings_[name] = result;
+
return result;
}
bool Settings::reset()
{
- bool connected = DB::connected();
+ bool close = !editing_;
- if(!connected)
- {
- if(!DB::connect())
- {
- return false;
- }
- }
+ startEdit();
QSqlQuery query;
bool ret = query.exec("DELETE FROM settings");
- if(!connected)
+ if(close)
{
- DB::disconnect();
+ endEdit();
}
return ret;
return ALWAYS_ASK;
}
-Settings::Settings()
+Settings::Settings(): editing_(false)
+{
+}
+
+Settings::~Settings()
{
+ DB::removeDatabase();
}