#include <QtCore>
#include <settings.hpp>
+#include "globals.hpp"
+
+
+// --------------------------------------------------
+// Language
+// --------------------------------------------------
+QString Language::title () const
+{
+ return Settings::tr (_title.toUtf8 ());
+}
+
+
+// --------------------------------------------------
+// Settings
+// --------------------------------------------------
+static Settings* _settings;
+
+
+Settings* Settings::instance ()
+{
+ if (!_settings)
+ _settings = new Settings;
+ return _settings;
+}
+
Settings::Settings ()
+ : _ts (NULL)
{
load ();
}
_checks[C_ShowHint] = settings.value ("checks/hint", _checks[C_ShowHint]).toBool ();
_checks[C_UpdateOnWiFi] = settings.value ("checks/updateOnWifi", _checks[C_UpdateOnWiFi]).toBool ();
_checks[C_UpdateOnGSM] = settings.value ("checks/updateOnGSM", _checks[C_UpdateOnGSM]).toBool ();
-
- loadCities (&settings);
+ _checks[C_UpdateWhenLocked] = settings.value ("checks/updateWhenLocked", _checks[C_UpdateWhenLocked]).toBool ();
_updateIntervalIndex = minutes2IntervalIndex (settings.value ("updateInterval", intervalIndex2Minutes (_updateIntervalIndex)).toInt ());
+
+ setLanguageIndex (settings.value ("langIndex", _langIndex).toInt ());
}
settings.setValue ("checks/hint", _checks[C_ShowHint]);
settings.setValue ("checks/updateOnWifi", _checks[C_UpdateOnWiFi]);
settings.setValue ("checks/updateOnGSM", _checks[C_UpdateOnGSM]);
+ settings.setValue ("checks/updateWhenLocked", _checks[C_UpdateWhenLocked]);
settings.setValue ("updateInterval", intervalIndex2Minutes (_updateIntervalIndex));
- saveCities (&settings);
-}
-
-
-void Settings::loadCities (QSettings *settings)
-{
- QMap<QString, QVariant> v;
- QMap<QString, QVariant>::const_iterator it;
-
- v = settings->value ("cities", v).toMap ();
-
- if (v.size () == 0)
- return;
-
- it = v.begin ();
- _cities.clear ();
-
- while (it != v.end ()) {
- _cities[it.key ()] = it.value ().toString ();
- it++;
- }
-}
-
-
-void Settings::saveCities (QSettings *settings)
-{
- QMap<QString, QVariant> v;
- QMap<QString, QString>::const_iterator it;
-
- it = _cities.begin ();
-
- while (it != _cities.end ()) {
- v[it.key ()] = it.value ();
- it++;
- }
-
- settings->setValue ("cities", v);
+ settings.setValue ("langIndex", _langIndex);
}
+// This routine called before any translations loaded, so strings must be translated explicitly.
void Settings::makeDefault ()
{
_regionID = "1"; // Default city
setCheck (C_UpdateOnWiFi, true);
+ setCheck (C_UpdateWhenLocked, true);
+
_updateIntervalIndex = 3;
+
+ // languages
+ _langs.append (Language (QString (""), tr ("System")));
+ _langs.append (Language (QString ("en"), tr ("English")));
+ _langs.append (Language (QString ("ru"), tr ("Russian")));
+ setLanguageIndex (0);
}
QStringList res;
res.append (tr ("Never"));
- res.append (tr ("1 min"));
- res.append (tr ("2 min"));
- res.append (tr ("5 min"));
- res.append (tr ("15 min"));
- res.append (tr ("30 min"));
+ res.append (tr ("1 minute"));
+ res.append (tr ("2 minutes"));
+ res.append (tr ("5 minutes"));
+ res.append (tr ("15 minutes"));
+ res.append (tr ("30 minutes"));
+ res.append (tr ("1 hour"));
+ res.append (tr ("2 hours"));
return res;
}
int Settings::intervalIndex2Minutes (int index) const
{
- int int2min[] = { -1, 1, 2, 5, 15, 30 };
+ int int2min[] = { -1, 1, 2, 5, 15, 30, 60, 120 };
if (index < 0 || sizeof (int2min) / sizeof (int2min[0]) <= (unsigned int)index)
return -1;
return 4;
case 30:
return 5;
+ case 60:
+ return 6;
+ case 120:
+ return 7;
default:
return 0;
}
}
+
+
+void Settings::setLanguageIndex (int index)
+{
+ if (index < 0 || index >= _langs.count ())
+ _langIndex = 0;
+ else
+ _langIndex = index;
+
+ // load settings
+ if (_ts) {
+ QCoreApplication::removeTranslator (_ts);
+ _ts = NULL;
+ }
+
+ QString alias = _langs[_langIndex].alias ();
+ QString fileName = QString (APPLICATION_NAME) + "_";
+
+ _ts = new QTranslator;
+
+ if (alias.isEmpty ())
+ fileName += QLocale::system ().name ();
+ else
+ fileName += alias;
+
+ if (_ts->load (fileName, TRANSLATION_PATH)) {
+ QCoreApplication::installTranslator (_ts);
+ translationsUpdated ();
+ }
+ else {
+ delete _ts;
+ _ts = NULL;
+ }
+}
+
+
+QString Settings::regionName (const QString &id) const
+{
+ return Settings::tr (_cities[id].toUtf8 ());
+}