From: Max Lapan Date: Mon, 15 Mar 2010 14:24:32 +0000 (+0300) Subject: Reorganization of settings dialog to eliminate code duplication. X-Git-Tag: v0.1~36 X-Git-Url: https://vcs.maemo.org/git/?p=yandex-traffic;a=commitdiff_plain;h=4532dbdbf761173ac30ae7dede777b607df9dddd Reorganization of settings dialog to eliminate code duplication. --- diff --git a/.gitignore b/.gitignore index beccf51..4244b7e 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ Makefile traffic regions widget +settings *.so \ No newline at end of file diff --git a/settingsDialog.cpp b/settingsDialog.cpp index b2475b7..82c2dc2 100644 --- a/settingsDialog.cpp +++ b/settingsDialog.cpp @@ -20,60 +20,84 @@ SettingsDialog::SettingsDialog (Settings *settings) QVBoxLayout *layout = new QVBoxLayout (this); - displayButton = new QMaemo5ValueButton (tr ("Display"), this); - layout->addWidget (displayButton); - updateButton = new QMaemo5ValueButton (tr ("Update"), this); - layout->addWidget (updateButton); - alertsButton = new QMaemo5ValueButton (tr ("Alerts"), this); - layout->addWidget (alertsButton); - - connect (displayButton, SIGNAL (clicked ()), SLOT (displayClicked ())); + _displayButton = new QMaemo5ValueButton (tr ("Display"), this); + layout->addWidget (_displayButton); + _updateButton = new QMaemo5ValueButton (tr ("Update"), this); + layout->addWidget (_updateButton); + _alertsButton = new QMaemo5ValueButton (tr ("Alerts"), this); + layout->addWidget (_alertsButton); + + connect (_displayButton, SIGNAL (clicked ()), SLOT (displayClicked ())); + connect (_updateButton, SIGNAL (clicked ()), SLOT (updateClicked ())); } void SettingsDialog::displayClicked () { DisplaySettingsDialog dlg (_settings); + dlg.exec (); +} + +void SettingsDialog::updateClicked () +{ + UpdateSettingsDialog dlg (_settings); dlg.exec (); } // -------------------------------------------------- -// DisplaySettingsDialog +// BaseSettingsDialog // -------------------------------------------------- -DisplaySettingsDialog::DisplaySettingsDialog (Settings *settings) - : QDialog (0), - _settings (settings) +BaseSettingsDialog::BaseSettingsDialog (Settings *settings) + : QDialog (), + _settings (settings), + _layout (new QVBoxLayout) { - setWindowTitle (tr ("Display settings")); - setMinimumSize (300, 400); - QHBoxLayout *layout = new QHBoxLayout (this); - QVBoxLayout *left_layout = new QVBoxLayout (); QVBoxLayout *right_layout = new QVBoxLayout (); // Right side - _saveButton = new QPushButton (tr ("&Save"), this); + _saveButton = new QPushButton (tr ("Save"), this); connect (_saveButton, SIGNAL (clicked ()), SLOT (saveClicked ())); right_layout->addStretch (); right_layout->addWidget (_saveButton); - // Left side - initCities (left_layout); - initChecks (left_layout); - - // Pack them together - layout->addLayout (left_layout); + // Path them together + layout->addLayout (_layout); layout->addLayout (right_layout); + + // Left side would be initialized later +} + + +void BaseSettingsDialog::saveClicked () +{ + saveSettings (); + _settings->save (); + accept (); +} + + +// -------------------------------------------------- +// DisplaySettingsDialog +// -------------------------------------------------- +DisplaySettingsDialog::DisplaySettingsDialog (Settings *settings) + : BaseSettingsDialog (settings) +{ + setWindowTitle (tr ("Display settings")); + setMinimumSize (300, 400); + + initCities (layout ()); + initChecks (layout ()); } void DisplaySettingsDialog::initCities (QBoxLayout *layout) { _cities = new QListWidget (this); - QMap cities_map = _settings->cities (); + QMap cities_map = settings ()->cities (); QMap::iterator it = cities_map.begin (); // Populate list with cities @@ -81,7 +105,7 @@ void DisplaySettingsDialog::initCities (QBoxLayout *layout) QListWidgetItem *item = new QListWidgetItem (it.value (), _cities); item->setData (Qt::UserRole, QVariant (it.key ())); - if (it.key () == _settings->regionID ()) + if (it.key () == settings ()->regionID ()) _cities->setCurrentItem (item); it++; } @@ -95,13 +119,13 @@ void DisplaySettingsDialog::initChecks (QBoxLayout *layout) QGridLayout *grid = new QGridLayout; _showLight = new QCheckBox ("Light", this); - _showLight->setChecked (_settings->check (Settings::C_Light)); + _showLight->setChecked (settings ()->check (Settings::C_Light)); _showRank = new QCheckBox ("Rank", this); - _showRank->setChecked (_settings->check (Settings::C_Rank)); + _showRank->setChecked (settings ()->check (Settings::C_Rank)); _showTime = new QCheckBox ("Time", this); - _showTime->setChecked (_settings->check (Settings::C_Time)); + _showTime->setChecked (settings ()->check (Settings::C_Time)); _showHint = new QCheckBox ("Hint", this); - _showHint->setChecked (_settings->check (Settings::C_Hint)); + _showHint->setChecked (settings ()->check (Settings::C_Hint)); grid->addWidget (_showLight, 0, 0); grid->addWidget (_showRank, 0, 1); @@ -112,17 +136,30 @@ void DisplaySettingsDialog::initChecks (QBoxLayout *layout) } -void DisplaySettingsDialog::saveClicked () +void DisplaySettingsDialog::saveSettings () { QListWidgetItem *cur = _cities->currentItem (); if (cur) - _settings->setRegionID (cur->data (Qt::UserRole).toString ()); + 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->save (); - accept (); + 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 ()); +} + + +// -------------------------------------------------- +// UpdateSettingsDialog +// -------------------------------------------------- +UpdateSettingsDialog::UpdateSettingsDialog (Settings *settings) + : BaseSettingsDialog (settings) +{ + setWindowTitle (tr ("Update settings")); +} + + +void UpdateSettingsDialog::saveSettings () +{ } diff --git a/settingsDialog.hpp b/settingsDialog.hpp index 21b681e..eeb29a9 100644 --- a/settingsDialog.hpp +++ b/settingsDialog.hpp @@ -17,39 +17,79 @@ class SettingsDialog : public QDialog Q_OBJECT private: - QMaemo5ValueButton *displayButton; - QMaemo5ValueButton *updateButton; - QMaemo5ValueButton *alertsButton; + QMaemo5ValueButton *_displayButton; + QMaemo5ValueButton *_updateButton; + QMaemo5ValueButton *_alertsButton; Settings *_settings; protected slots: void displayClicked (); + void updateClicked (); public: SettingsDialog (Settings *settings); }; -class DisplaySettingsDialog : public QDialog +class BaseSettingsDialog : public QDialog { Q_OBJECT - private: Settings *_settings; + QVBoxLayout *_layout; + QPushButton *_saveButton; + +protected slots: + void saveClicked (); + +protected: + Settings* settings () const + { return _settings; }; + + QVBoxLayout* layout () const + { return _layout; }; + + virtual void saveSettings () = 0; + +public: + BaseSettingsDialog (Settings *settings); +}; + + +class DisplaySettingsDialog : public BaseSettingsDialog +{ + Q_OBJECT + +private: QListWidget *_cities; QCheckBox *_showLight, *_showRank, *_showTime, *_showHint; - QPushButton *_saveButton; void initCities (QBoxLayout *layout); void initChecks (QBoxLayout *layout); -protected slots: - void saveClicked (); +protected: + virtual void saveSettings (); public: DisplaySettingsDialog (Settings *settings); }; +class UpdateSettingsDialog : public BaseSettingsDialog +{ + Q_OBJECT + +private: + QMaemo5ValueButton *_intervalButton; + QCheckBox *_wifiUpdate, *_gsmUpdate; + +protected: + virtual void saveSettings (); + +public: + UpdateSettingsDialog (Settings *settings); +}; + + #endif // __SETTINGSDIALOG_H__