From d7733285ccbb3c059ea862993d8fefff824b7cff Mon Sep 17 00:00:00 2001 From: Sakari Poussa Date: Fri, 28 May 2010 04:45:34 +0300 Subject: [PATCH 1/1] Score list sort order in settings: date/score --- TODO | 2 - src/main-window.cpp | 136 ++++++++++++++++++++++++++++------------------- src/main-window.h | 1 + src/score-common.h | 2 + src/settings-dialog.cpp | 30 ++++++++++- src/settings-dialog.h | 4 +- 6 files changed, 115 insertions(+), 60 deletions(-) diff --git a/TODO b/TODO index dca0dee..d91d71d 100644 --- 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 diff --git a/src/main-window.cpp b/src/main-window.cpp index ad85c04..58d3f9f 100644 --- a/src/main-window.cpp +++ b/src/main-window.cpp @@ -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 &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 &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 &list, bool readOnly) @@ -720,12 +745,11 @@ void MainWindow::loadClubFile(QString &fileName, QList &list, bool readO void MainWindow::saveClubFile(QString &fileName, QList &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; } diff --git a/src/main-window.h b/src/main-window.h index bd39659..5ee01f3 100644 --- a/src/main-window.h +++ b/src/main-window.h @@ -69,6 +69,7 @@ private: Score * findScore(QString & clubName, QString & courseName); void flushReadOnlyItems(); void markHomeClub(); + void sortScoreList(); void showNote(QString msg); void getStat(QTextEdit *); diff --git a/src/score-common.h b/src/score-common.h index 52dc8c6..65d1a45 100644 --- a/src/score-common.h +++ b/src/score-common.h @@ -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; }; diff --git a/src/settings-dialog.cpp b/src/settings-dialog.cpp index f3fa57f..863af35 100644 --- a/src/settings-dialog.cpp +++ b/src/settings-dialog.cpp @@ -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 &list) } QListIterator 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 &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()); diff --git a/src/settings-dialog.h b/src/settings-dialog.h index 68ae754..15d6772 100644 --- a/src/settings-dialog.h +++ b/src/settings-dialog.h @@ -32,14 +32,16 @@ private slots: private: void createLayout(QWidget *parent); - QStandardItemModel *homeClubModel; QStandardItemModel *hcpModel; + QStandardItemModel *homeClubModel; + QStandardItemModel *sortModel; QStandardItemModel *defaultCoursesModel; QList clubList; #ifdef Q_WS_MAEMO_5 QMaemo5ValueButton * hcpButton; QMaemo5ValueButton * homeClubButton; + QMaemo5ValueButton * sortButton; QMaemo5ValueButton * defaultCoursesButton; #endif }; -- 1.7.9.5