Finish implemetation of update settings.
authorMax Lapan <max.lapan@gmail.com>
Mon, 15 Mar 2010 15:26:22 +0000 (18:26 +0300)
committerMax Lapan <max.lapan@gmail.com>
Mon, 15 Mar 2010 15:26:22 +0000 (18:26 +0300)
mainwidget.cpp
settings.cpp
settings.hpp
settingsDialog.cpp
settingsDialog.hpp

index 1cbb934..b3d43a5 100644 (file)
@@ -27,7 +27,7 @@ MainWidget::MainWidget ()
     layout->addWidget (_label);
     setLayout (layout);
 
-    _light->setVisible (_settings->check (Settings::C_Light));
+    _light->setVisible (_settings->check (Settings::C_ShowLight));
 
     updateSize ();
 
@@ -79,20 +79,20 @@ void MainWidget::trafficUpdated ()
         bool first = true;
         _light->setColor (info.color ());
 
-        if (_settings->check (Settings::C_Rank)) {
+        if (_settings->check (Settings::C_ShowRank)) {
             data.append (QString::number (info.level ()));
             data.append (info.level () > 1 ? tr (" points") : tr (" point"));
             first = false;
         }
 
-        if (_settings->check (Settings::C_Time)) {
+        if (_settings->check (Settings::C_ShowTime)) {
             if (!first)
                 data.append (", ");
             data.append (info.localtime ());
             first = false;
         }
 
-        if (_settings->check (Settings::C_Hint)) {
+        if (_settings->check (Settings::C_ShowHint)) {
             if (!first)
                 data.append ("\n");
             data.append (info.hint ());
@@ -119,7 +119,7 @@ void MainWidget::settingsDialog ()
     dlg.exec ();
 
     // Handle settings
-    _light->setVisible (_settings->check (Settings::C_Light));
+    _light->setVisible (_settings->check (Settings::C_ShowLight));
 
     updateSize ();
     trafficUpdated ();
@@ -130,14 +130,14 @@ void MainWidget::updateSize ()
 {
     QSize minSize (0, 80);
 
-    if (_settings->check (Settings::C_Light))
+    if (_settings->check (Settings::C_ShowLight))
         minSize += QSize (80, 0);
-    if (_settings->check (Settings::C_Hint))
+    if (_settings->check (Settings::C_ShowHint))
         minSize += QSize (270, 0);
     else {
-        if (_settings->check (Settings::C_Time))
+        if (_settings->check (Settings::C_ShowTime))
             minSize += QSize (75, 0);
-        if (_settings->check (Settings::C_Rank))
+        if (_settings->check (Settings::C_ShowRank))
             minSize += QSize (75, 0);
     }
 
index cd847fb..c294802 100644 (file)
@@ -16,12 +16,16 @@ void Settings::load ()
 
     _regionID = settings.value ("region", _regionID).toString ();
 
-    _checks[C_Light] = settings.value ("checks/light", _checks[C_Light]).toBool ();
-    _checks[C_Rank] = settings.value ("checks/rank", _checks[C_Rank]).toBool ();
-    _checks[C_Time] = settings.value ("checks/time", _checks[C_Time]).toBool ();
-    _checks[C_Hint] = settings.value ("checks/hint", _checks[C_Hint]).toBool ();
+    _checks[C_ShowLight] = settings.value ("checks/light", _checks[C_ShowLight]).toBool ();
+    _checks[C_ShowRank] = settings.value ("checks/rank", _checks[C_ShowRank]).toBool ();
+    _checks[C_ShowTime] = settings.value ("checks/time", _checks[C_ShowTime]).toBool ();
+    _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);
+
+    _updateIntervalIndex = minutes2IntervalIndex (settings.value ("updateInterval", intervalIndex2Minutes (_updateIntervalIndex)).toInt ());
 }
 
 
@@ -31,10 +35,14 @@ void Settings::save ()
 
     settings.setValue ("region", _regionID);
 
-    settings.setValue ("checks/light", _checks[C_Light]);
-    settings.setValue ("checks/rank", _checks[C_Rank]);
-    settings.setValue ("checks/time", _checks[C_Time]);
-    settings.setValue ("checks/hint", _checks[C_Hint]);
+    settings.setValue ("checks/light", _checks[C_ShowLight]);
+    settings.setValue ("checks/rank", _checks[C_ShowRank]);
+    settings.setValue ("checks/time", _checks[C_ShowTime]);
+    settings.setValue ("checks/hint", _checks[C_ShowHint]);
+    settings.setValue ("checks/updateOnWifi", _checks[C_UpdateOnWiFi]);
+    settings.setValue ("checks/updateOnGSM", _checks[C_UpdateOnGSM]);
+
+    settings.setValue ("updateInterval", intervalIndex2Minutes (_updateIntervalIndex));
 
     saveCities (&settings);
 }
@@ -85,7 +93,58 @@ void Settings::makeDefault ()
     _cities["11162"] = tr ("Ekaterinburg");
     _cities["11079"] = tr ("N.Novgorod");
 
-    setCheck (C_Light, true);
-    setCheck (C_Rank, true);
-    setCheck (C_Hint, true);
+    setCheck (C_ShowLight, true);
+    setCheck (C_ShowRank, true);
+    setCheck (C_ShowHint, true);
+
+    setCheck (C_UpdateOnWiFi, true);
+
+    _updateIntervalIndex = 3;
+}
+
+
+QStringList Settings::updateIntervals () const
+{
+    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"));
+
+    return res;
+}
+
+
+int Settings::intervalIndex2Minutes (int index) const
+{
+    int int2min[] = { -1, 1, 2, 5, 15, 30 };
+
+    if (index < 0 || sizeof (int2min) / sizeof (int2min[0]))
+        return -1;
+
+    return int2min[index];
+}
+
+
+int Settings::minutes2IntervalIndex (int minutes) const
+{
+    switch (minutes) {
+        case -1:
+            return 0;
+        case 1:
+            return 1;
+        case 2:
+            return 2;
+        case 5:
+            return 3;
+        case 15:
+            return 4;
+        case 30:
+            return 5;
+        default:
+            return 0;
+    }
 }
index fdeb6f8..1fd19ef 100644 (file)
@@ -9,22 +9,28 @@ class Settings : public QObject
     Q_OBJECT
 public:
     enum check_t {
-        C_Light = 0,
-        C_Rank,
-        C_Time,
-        C_Hint,
+        C_ShowLight = 0,
+        C_ShowRank,
+        C_ShowTime,
+        C_ShowHint,
+        C_UpdateOnWiFi,
+        C_UpdateOnGSM,
     };
 
 private:
     QString _regionID;          // region ID which will be displayed
     QMap<QString, QString> _cities;
     QMap<check_t, bool> _checks;
+    int _updateIntervalIndex;
 
     void makeDefault ();
 
     void loadCities (QSettings *settings);
     void saveCities (QSettings *settings);
 
+    int intervalIndex2Minutes (int index) const;
+    int minutes2IntervalIndex (int minutes) const;
+
 public:
     Settings ();
 
@@ -44,7 +50,15 @@ public:
     { return _checks[entry]; };
 
     void setCheck (check_t entry, bool val)
-    { _checks[entry] = val; }
+    { _checks[entry] = val; };
+
+    QStringList updateIntervals () const;
+
+    int getUpdateIntervalIndex () const
+    { return _updateIntervalIndex; };
+
+    void setUpdateIntervalIndex (int index)
+    { _updateIntervalIndex = index; };
 };
 
 
index 3e48230..629bcb8 100644 (file)
@@ -56,9 +56,13 @@ BaseSettingsDialog::BaseSettingsDialog (Settings *settings)
 {
     QHBoxLayout *layout = new QHBoxLayout (this);
     QVBoxLayout *right_layout = new QVBoxLayout ();
+    QSizePolicy policy;
 
     // Right side
     _saveButton = new QPushButton (tr ("Save"), this);
+    policy = _saveButton->sizePolicy ();
+    policy.setHorizontalPolicy (QSizePolicy::Maximum);
+    _saveButton->setSizePolicy (policy);
     connect (_saveButton, SIGNAL (clicked ()), SLOT (saveClicked ()));
 
     right_layout->addStretch ();
@@ -83,8 +87,8 @@ void BaseSettingsDialog::saveClicked ()
 // --------------------------------------------------
 // DisplaySettingsDialog
 // --------------------------------------------------
-DisplaySettingsDialog::DisplaySettingsDialog (Settings *settings)
-    : BaseSettingsDialog (settings)
+DisplaySettingsDialog::DisplaySettingsDialog (Settings *_settings)
+    : BaseSettingsDialog (_settings)
 {
     setWindowTitle (tr ("Display settings"));
     setMinimumSize (300, 400);
@@ -119,13 +123,13 @@ void DisplaySettingsDialog::initChecks (QBoxLayout *layout)
     QGridLayout *grid = new QGridLayout;
 
     _showLight = new QCheckBox (tr ("Light"), this);
-    _showLight->setChecked (settings ()->check (Settings::C_Light));
+    _showLight->setChecked (settings ()->check (Settings::C_ShowLight));
     _showRank = new QCheckBox (tr ("Rank"), this);
-    _showRank->setChecked (settings ()->check (Settings::C_Rank));
+    _showRank->setChecked (settings ()->check (Settings::C_ShowRank));
     _showTime = new QCheckBox (tr ("Time"), this);
-    _showTime->setChecked (settings ()->check (Settings::C_Time));
+    _showTime->setChecked (settings ()->check (Settings::C_ShowTime));
     _showHint = new QCheckBox (tr ("Hint"), this);
-    _showHint->setChecked (settings ()->check (Settings::C_Hint));
+    _showHint->setChecked (settings ()->check (Settings::C_ShowHint));
 
     grid->addWidget (_showLight, 0, 0);
     grid->addWidget (_showRank, 0, 1);
@@ -143,23 +147,65 @@ void DisplaySettingsDialog::saveSettings ()
     if (cur)
         settings ()->setRegionID (cur->data (Qt::UserRole).toString ());
 
-    settings ()->setCheck (Settings::C_Light, _showLight->isChecked ());
-    settings ()->setCheck (Settings::C_Rank,  _showRank->isChecked ());
-    settings ()->setCheck (Settings::C_Time,  _showTime->isChecked ());
-    settings ()->setCheck (Settings::C_Hint,  _showHint->isChecked ());
+    settings ()->setCheck (Settings::C_ShowLight, _showLight->isChecked ());
+    settings ()->setCheck (Settings::C_ShowRank,  _showRank->isChecked ());
+    settings ()->setCheck (Settings::C_ShowTime,  _showTime->isChecked ());
+    settings ()->setCheck (Settings::C_ShowHint,  _showHint->isChecked ());
 }
 
 
 // --------------------------------------------------
 // UpdateSettingsDialog
 // --------------------------------------------------
-UpdateSettingsDialog::UpdateSettingsDialog (Settings *settings)
-    : BaseSettingsDialog (settings)
+UpdateSettingsDialog::UpdateSettingsDialog (Settings *_settings)
+    : BaseSettingsDialog (_settings)
 {
     setWindowTitle (tr ("Update settings"));
+
+    _wifiUpdate = new QCheckBox (tr ("Update on WiFi connection"), this);
+    _wifiUpdate->setChecked (settings ()->check (Settings::C_UpdateOnWiFi));
+    _gsmUpdate  = new QCheckBox (tr ("Update on GSM connection"), this);
+    _gsmUpdate->setChecked (settings ()->check (Settings::C_UpdateOnGSM));
+
+    initUpdateInterval (layout ());
+
+    layout ()->addWidget (_wifiUpdate);
+    layout ()->addWidget (_gsmUpdate);
 }
 
 
 void UpdateSettingsDialog::saveSettings ()
 {
+#ifdef Q_WS_MAEMO_5
+    QMaemo5ListPickSelector *selector = static_cast<QMaemo5ListPickSelector*> (_intervalButton->pickSelector ());
+
+    if (selector)
+        settings ()->setUpdateIntervalIndex (selector->currentIndex ());
+#endif
+    settings ()->setCheck (Settings::C_UpdateOnWiFi, _wifiUpdate->isChecked ());
+    settings ()->setCheck (Settings::C_UpdateOnGSM,  _gsmUpdate->isChecked ());
+}
+
+
+void UpdateSettingsDialog::initUpdateInterval (QBoxLayout *layout)
+{
+    _intervalButton = new QMaemo5ValueButton (tr ("Update interval"), this);
+    layout->addWidget (_intervalButton);
+
+#ifdef Q_WS_MAEMO_5
+    QMaemo5ListPickSelector *selector = new QMaemo5ListPickSelector;
+    QStandardItemModel *model = new QStandardItemModel (0, 1);
+    QStringList updateIntervals = settings ()->updateIntervals ();
+    QStringList::iterator it = updateIntervals.begin ();
+
+    while (it != updateIntervals.end ()) {
+        model->appendRow (new QStandardItem (*it));
+        it++;
+    }
+
+    selector->setModel (model);
+    selector->setCurrentIndex (settings ()->getUpdateIntervalIndex ());
+
+    _intervalButton->setPickSelector (selector);
+#endif
 }
index eeb29a9..933b6a0 100644 (file)
@@ -84,6 +84,8 @@ private:
     QMaemo5ValueButton *_intervalButton;
     QCheckBox *_wifiUpdate, *_gsmUpdate;
 
+    void initUpdateInterval (QBoxLayout *layout);
+
 protected:
     virtual void saveSettings ();