Score list sort order in settings: date/score
authorSakari Poussa <spoussa@gmail.com>
Fri, 28 May 2010 01:45:34 +0000 (04:45 +0300)
committerSakari Poussa <spoussa@gmail.com>
Fri, 28 May 2010 01:45:34 +0000 (04:45 +0300)
TODO
src/main-window.cpp
src/main-window.h
src/score-common.h
src/settings-dialog.cpp
src/settings-dialog.h

diff --git a/TODO b/TODO
index dca0dee..d91d71d 100644 (file)
--- a/TODO
+++ b/TODO
@@ -5,8 +5,6 @@ TODO General:
   subtotals, totals, and score colors).
 - Use syslog
 - Year filters and maybe more, must be easy to apply
-- If course is missing the score view should show NA in par/hcp. Now
-  it shows score.
 
 Settings
   - Sort order: score, date, club
index ad85c04..58d3f9f 100644 (file)
@@ -37,13 +37,19 @@ QString titleCourses("ScoreCard - Courses");
 
 bool dateLessThan(const Score *s1, const Score *s2)
 {
-  return (*s1) < (*s2);
+    return (*s1) < (*s2);
 }
 
 bool dateMoreThan(const Score *s1, const Score *s2)
 {
-  return (*s1) > (*s2);
+    return (*s1) > (*s2);
 }
+
+bool scoreMoreThan(const Score *s1, const Score *s2)
+{
+    return s1->getTotal(Total) > s2->getTotal(Total);
+}
+
 // Find score based on club and course name
 Score *MainWindow::findScore(QString & clubName, QString & courseName)
 {
@@ -156,6 +162,14 @@ void MainWindow::markHomeClub()
     }
 }
 
+void MainWindow::sortScoreList()
+{
+    if (conf.sortOrder == "Date")
+        qSort(scoreList.begin(), scoreList.end(), dateMoreThan); 
+    else if (conf.sortOrder == "Score")
+        qSort(scoreList.begin(), scoreList.end(), scoreMoreThan); 
+}
+
 MainWindow::MainWindow(QMainWindow *parent): QMainWindow(parent)
 {
     resize(800, 480);
@@ -176,8 +190,9 @@ MainWindow::MainWindow(QMainWindow *parent): QMainWindow(parent)
     loadClubFile(clubFile, clubList);
     markHomeClub();
 
-    // Sort the scores based on dates
-    qSort(scoreList.begin(), scoreList.end(), dateMoreThan); 
+    // Sort the scores based on settings
+    sortScoreList();
+
     createActions();
     createMenus();
 
@@ -192,48 +207,53 @@ MainWindow::MainWindow(QMainWindow *parent): QMainWindow(parent)
 void MainWindow::loadSettings(void)
 {
     TRACE;
-  bool external = false;
+    bool external = false;
 
-  QDir mmc(mmcDir);
-  if (mmc.exists())
-    external = true;
+    QDir mmc(mmcDir);
+    if (mmc.exists())
+        external = true;
 
-  // TODO: make via user option, automatic will never work
-  external = false;
+    // TODO: make via user option, automatic will never work
+    external = false;
 
 #ifndef Q_WS_MAEMO_5
-  dataDir = "./" + dataDirName;
+    dataDir = "./" + dataDirName;
 #else
-  if (external) {
-    dataDir = mmcDir + "/" + appName + "/" + dataDirName;
-  }
-  else {
-    dataDir = topDir + "/" + appName + "/" + dataDirName;
-  }
-#endif
-  scoreFile = dataDir + "/" + scoreFileName;
-  clubFile = dataDir + "/" + clubFileName;
-  masterFile = dataDir + "/" + masterFileName;
-
-  QDir dir(dataDir);
-  if (!dir.exists())
-    if (!dir.mkpath(dataDir)) {
-      qWarning() << "Unable to create: " + dataDir;
-      return;
+    if (external) {
+        dataDir = mmcDir + "/" + appName + "/" + dataDirName;
     }
-  qDebug() << "Data is at:" + dataDir;
+    else {
+        dataDir = topDir + "/" + appName + "/" + dataDirName;
+    }
+#endif
+    scoreFile = dataDir + "/" + scoreFileName;
+    clubFile = dataDir + "/" + clubFileName;
+    masterFile = dataDir + "/" + masterFileName;
+
+    QDir dir(dataDir);
+    if (!dir.exists())
+        if (!dir.mkpath(dataDir)) {
+            qWarning() << "Unable to create: " + dataDir;
+            return;
+        }
+    qDebug() << "Data is at:" + dataDir;
+
+    settings.beginGroup(settingsGroup);
+    conf.hcp = settings.value(settingsHcp);
+    conf.homeClub = settings.value(settingsHomeClub);
+    conf.sortOrder = settings.value(settingsSortOrder);
+    conf.defaultCourses = settings.value(settingsDefaultCourses);
+    settings.endGroup();
 
-  settings.beginGroup(settingsGroup);
-  conf.hcp = settings.value(settingsHcp);
-  conf.homeClub = settings.value(settingsHomeClub);
-  conf.defaultCourses = settings.value(settingsDefaultCourses);
-  settings.endGroup();
+    // Use default courses if no settings for that
+    if (!conf.defaultCourses.isValid())
+        conf.defaultCourses = "Yes";
 
-  // Use default courses if no settings for that
-  if (!conf.defaultCourses.isValid())
-      conf.defaultCourses = "Yes";
+    // Use date sort order if no settings for that
+    if (!conf.sortOrder.isValid())
+        conf.sortOrder = "Yes";
 
-  qDebug() << "Settings: " << conf.hcp << conf.homeClub << conf.defaultCourses;
+    qDebug() << "Settings: " << conf.hcp << conf.homeClub << conf.sortOrder << conf.defaultCourses;
 }
 
 void MainWindow::saveSettings(void)
@@ -244,6 +264,8 @@ void MainWindow::saveSettings(void)
         settings.setValue(settingsHcp, conf.hcp);
     if (conf.homeClub.isValid())
         settings.setValue(settingsHomeClub, conf.homeClub);
+    if (conf.sortOrder.isValid())
+        settings.setValue(settingsSortOrder, conf.sortOrder);
     if (conf.defaultCourses.isValid())
         settings.setValue(settingsDefaultCourses, conf.defaultCourses);
     settings.endGroup();
@@ -386,7 +408,6 @@ void MainWindow::clickedList(const QModelIndex &index)
 void MainWindow::viewScore(Score * score, Course * course)
 {
     TRACE;
-    qDebug() << score << course;
     scoreWindow->setup(score, course);
     scoreWindow->show();
 }
@@ -429,8 +450,8 @@ void MainWindow::newScore()
             Score *score = new Score(scores, clubName, courseName, date);
             scoreList << score;
 
-            // Sort the scores based on dates
-            qSort(scoreList.begin(), scoreList.end(), dateMoreThan); 
+            // Sort the scores based on settings
+            sortScoreList();
             // Save it
             saveScoreFile(scoreFile, scoreList);
             scoreListModel->update(scoreList);
@@ -687,27 +708,31 @@ void MainWindow::viewSettings()
             courseListModel->update(clubList);
             list->update();
         }
+        // TODO: do these only if needed
         markHomeClub();
+        sortScoreList();
+        scoreListModel->update(scoreList);
+        list->update();
     }
 }
 
 void MainWindow::loadScoreFile(QString &fileName, QList<Score *> &list)
 {
-  ScoreXmlHandler handler(list);
+    ScoreXmlHandler handler(list);
 
-  if (handler.parse(fileName))
-    qDebug() << "File loaded:" << fileName << " entries:" << list.size();
+    if (handler.parse(fileName))
+        qDebug() << "File loaded:" << fileName << " entries:" << list.size();
 }
 
 void MainWindow::saveScoreFile(QString &fileName, QList<Score *> &list)
 {
-  ScoreXmlHandler handler(list);
+    ScoreXmlHandler handler(list);
 
-  if (handler.save(fileName))
-    // TODO: banner
-    qDebug() << "File saved:" << fileName << " entries:" << list.size();
-  else
-    qWarning() << "Unable to save:" << fileName;
+    if (handler.save(fileName))
+        // TODO: banner
+        qDebug() << "File saved:" << fileName << " entries:" << list.size();
+    else
+        qWarning() << "Unable to save:" << fileName;
 }
 
 void MainWindow::loadClubFile(QString &fileName, QList<Club *> &list, bool readOnly)
@@ -720,12 +745,11 @@ void MainWindow::loadClubFile(QString &fileName, QList<Club *> &list, bool readO
 
 void MainWindow::saveClubFile(QString &fileName, QList<Club *> &list)
 {
-  ClubXmlHandler handler(list);
-
-  if (handler.save(fileName))
-    // TODO: banner
-    qDebug() << "File saved:" << fileName << " entries:" << list.size();
-  else
-    qWarning() << "Unable to save:" << fileName;
+    ClubXmlHandler handler(list);
 
+    if (handler.save(fileName))
+        // TODO: banner
+        qDebug() << "File saved:" << fileName << " entries:" << list.size();
+    else
+        qWarning() << "Unable to save:" << fileName;
 }
index bd39659..5ee01f3 100644 (file)
@@ -69,6 +69,7 @@ private:
   Score * findScore(QString & clubName, QString & courseName);
   void flushReadOnlyItems();
   void markHomeClub();
+  void sortScoreList();
                                
   void showNote(QString msg);
   void getStat(QTextEdit *);
index 52dc8c6..65d1a45 100644 (file)
@@ -13,6 +13,7 @@
 static QString settingsGroup("Settings");
 static QString settingsHcp("hcp");
 static QString settingsHomeClub("home-club");
+static QString settingsSortOrder("sort-order");
 static QString settingsDefaultCourses("default-courses");
 
 #ifndef WANT_DEBUG
@@ -28,6 +29,7 @@ class AppSettings {
 public:
     QVariant hcp;
     QVariant homeClub;
+    QVariant sortOrder;
     QVariant defaultCourses;
 };
 
index f3fa57f..863af35 100644 (file)
@@ -56,6 +56,22 @@ void SettingsDialog::createLayout(QWidget *parent)
     homeClubButton->setPickSelector(listPickSelector2);
     homeClubButton->setText(QString::fromUtf8("Home Club"));
 
+    // Sort Order
+    sortButton = new QMaemo5ValueButton();
+    sortButton->setValueLayout(QMaemo5ValueButton::ValueBesideText);
+    QMaemo5ListPickSelector * listPickSelector4 = new QMaemo5ListPickSelector;
+    QStringList sortList;
+    sortList << "Date" << "Score";
+    sortModel = new QStandardItemModel(sortList.count(), 0);
+    for (int i = 0; i < sortList.count(); i++) {
+        item = new QStandardItem(QString("%0").arg(sortList.at(i)));
+        item->setTextAlignment(Qt::AlignCenter);
+        sortModel->setItem(i, item);
+    }
+    listPickSelector4->setModel(sortModel);
+    sortButton->setPickSelector(listPickSelector4);
+    sortButton->setText(QString::fromUtf8("Sort Order"));
+
     // Use Default Courses
     defaultCoursesButton = new QMaemo5ValueButton();
     defaultCoursesButton->setValueLayout(QMaemo5ValueButton::ValueBesideText);
@@ -74,6 +90,7 @@ void SettingsDialog::createLayout(QWidget *parent)
 
     leftLayout->addWidget(hcpButton);
     leftLayout->addWidget(homeClubButton);
+    leftLayout->addWidget(sortButton);
     leftLayout->addWidget(defaultCoursesButton);
 #endif
 
@@ -101,7 +118,7 @@ void SettingsDialog::init(AppSettings &conf, QList<Club *> &list)
     }
 
     QListIterator<Club *> i(clubList);
-
+    
     while (i.hasNext()) {
         Club *club = i.next();
         QStandardItem *item = new QStandardItem(QString("%0").arg(club->getName()));
@@ -114,6 +131,12 @@ void SettingsDialog::init(AppSettings &conf, QList<Club *> &list)
         index++;
     }
 
+    if (conf.sortOrder.isValid()) {
+        int index = conf.sortOrder.toString() == "Date" ? 0 : 1;
+        sel = (QMaemo5ListPickSelector *)sortButton->pickSelector();
+        sel->setCurrentIndex(index);
+    }
+
     if (conf.defaultCourses.isValid()) {
         int index = conf.defaultCourses.toString() == "Yes" ? 0 : 1;
         sel = (QMaemo5ListPickSelector *)defaultCoursesButton->pickSelector();
@@ -139,6 +162,11 @@ void SettingsDialog::results(AppSettings &conf)
         item = homeClubModel->item(sel->currentIndex());
         conf.homeClub = item->data(Qt::DisplayRole);
     }
+    sel = (QMaemo5ListPickSelector *)sortButton->pickSelector();
+    if (sel->currentIndex() != -1) {
+        item = sortModel->item(sel->currentIndex());
+        conf.sortOrder = item->data(Qt::DisplayRole);
+    }
     sel = (QMaemo5ListPickSelector *)defaultCoursesButton->pickSelector();
     if (sel->currentIndex() != -1) {
         item = defaultCoursesModel->item(sel->currentIndex());
index 68ae754..15d6772 100644 (file)
@@ -32,14 +32,16 @@ private slots:
 
 private:
     void createLayout(QWidget *parent);
-    QStandardItemModel *homeClubModel;
     QStandardItemModel *hcpModel;
+    QStandardItemModel *homeClubModel;
+    QStandardItemModel *sortModel;
     QStandardItemModel *defaultCoursesModel;
 
     QList<Club *> clubList;
 #ifdef Q_WS_MAEMO_5
     QMaemo5ValueButton * hcpButton;
     QMaemo5ValueButton * homeClubButton;
+    QMaemo5ValueButton * sortButton;
     QMaemo5ValueButton * defaultCoursesButton;
 #endif
 };