X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fcommon%2Fsettings.cpp;h=7c252194c3daf6eb4d9ef67e59b7cb20e174d6bf;hb=71122b1057b6c12b250b37f6693ed8259f20b34c;hp=c0296cd0720f83b9295d705f834f3636fb72ff49;hpb=9127dc5e47aee7fa6659f45ae60a9394612f27b1;p=jenirok diff --git a/src/common/settings.cpp b/src/common/settings.cpp index c0296cd..7c25219 100644 --- a/src/common/settings.cpp +++ b/src/common/settings.cpp @@ -19,10 +19,29 @@ #include #include #include +#include +#include #include #include "settings.h" #include "db.h" +namespace +{ + static int const LANGUAGE_COUNT = 3; + + static QString const LANGUAGE_NAMES[LANGUAGE_COUNT] = { + "English", + "Norsk", + "Suomi" + }; + + static QString const LANGUAGE_IDS[LANGUAGE_COUNT] = { + "en_US", + "nb_NO", + "fi_FI" + }; +} + Settings* Settings::instance_ = 0; Settings* Settings::instance() @@ -35,23 +54,59 @@ Settings* Settings::instance() return instance_; } +void Settings::getLanguages(QList& 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"); @@ -65,9 +120,9 @@ bool Settings::set(QString const& name, QString const& value) bool returnValue = query.exec(); - if(!connected) + if(close) { - DB::disconnect(); + endEdit(); } return returnValue; @@ -77,15 +132,9 @@ QString Settings::get(QString const& name) { QString result = ""; - bool connected = DB::connected(); + bool close = !editing_; - if(!connected) - { - if(!DB::connect()) - { - return result; - } - } + startEdit(); QSqlQuery query; @@ -101,9 +150,9 @@ QString Settings::get(QString const& name) result = getDefaultValue(name); } - if(!connected) + if(close) { - DB::disconnect(); + endEdit(); } return result; @@ -137,23 +186,17 @@ QString Settings::getDefaultValue(QString const& name) 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; @@ -208,7 +251,6 @@ Settings::ConnectionType Settings::getConnectionType() values.push_back((char *)list->data); list = list->next; } - } g_object_unref(gcClient); @@ -245,6 +287,11 @@ Settings::ConnectionType Settings::getConnectionType() return ALWAYS_ASK; } -Settings::Settings() +Settings::Settings(): editing_(false) +{ +} + +Settings::~Settings() { + DB::removeDatabase(); }