// Find score based on club and course name
Score *MainWindow::findScore(QString & clubName, QString & courseName)
{
+ TRACE;
QListIterator<Score *> i(scoreList);
Score * s;
// Find club based on name
Club *MainWindow::findClub(QString &name)
{
+ TRACE;
QListIterator<Club *> i(clubList);
Club *c;
Course *MainWindow::findCourse(const QString &clubName,
const QString &courseName)
{
+ TRACE;
QListIterator<Club *> i(clubList);
Club *c;
// Find course based on current selection on the list
// TODO: make sure this is only called when course list is the model...
-Course *MainWindow::findCourse()
+Course *MainWindow::currentCourse()
{
+ TRACE;
QModelIndex index = selectionModel->currentIndex();
+
+ if (!index.isValid())
+ return 0;
+
const QAbstractItemModel *model = selectionModel->model();
QString str = model->data(index, Qt::DisplayRole).toString();
- QStringList strList = str.split(",");
+ QStringList strList = str.split(", ");
if (strList.count() != 2) {
showNote(tr("Invalid course selection"));
return 0;
return findCourse(strList[0], strList[1]);
}
+// Find score based on current selection on the list
+// TODO: make sure this is only called when score list is the model...
+Score *MainWindow::currentScore()
+{
+ TRACE;
+ QModelIndex index = selectionModel->currentIndex();
+
+ if (!index.isValid())
+ return 0;
+
+ return scoreList.at(index.row());
+}
+
+void MainWindow::flushReadOnlyItems()
+{
+ TRACE;
+ QMutableListIterator<Club *> i(clubList);
+ Club *c;
+
+ while (i.hasNext()) {
+ c = i.next();
+ if (c->isReadOnly()) {
+ qDebug() << "Del:" << c->getName();
+ i.remove();
+ }
+ }
+}
+
+void MainWindow::markHomeClub()
+{
+ TRACE;
+ QListIterator<Club *> i(clubList);
+ Club *c;
+
+ while (i.hasNext()) {
+ c = i.next();
+ if (c->getName() == conf.homeClub)
+ c->setHomeClub(true);
+ else
+ c->setHomeClub(false);
+ }
+}
+
MainWindow::MainWindow(QMainWindow *parent): QMainWindow(parent)
{
- resize(800, 480);
+ resize(800, 480);
#ifdef Q_WS_MAEMO_5
- setAttribute(Qt::WA_Maemo5StackedWindow);
+ setAttribute(Qt::WA_Maemo5StackedWindow);
#endif
- loadSettings();
+ loadSettings();
+
+ centralWidget = new QWidget(this);
- centralWidget = new QWidget(this);
+ setCentralWidget(centralWidget);
- setCentralWidget(centralWidget);
+ loadScoreFile(scoreFile, scoreList);
+ if (conf.defaultCourses == "Yes")
+ loadClubFile(masterFile, clubList, true);
+ loadClubFile(clubFile, clubList);
+ markHomeClub();
- loadScoreFile(scoreFile, scoreList);
- loadClubFile(masterFile, clubList, true);
- loadClubFile(clubFile, clubList);
+ // Sort the scores based on dates
+ qSort(scoreList.begin(), scoreList.end(), dateMoreThan);
+ createActions();
+ createMenus();
- // Sort the scores based on dates
- qSort(scoreList.begin(), scoreList.end(), dateMoreThan);
- createActions();
- createMenus();
+ createListView(scoreList, clubList);
- createListView(scoreList, clubList);
+ createLayoutList(centralWidget);
- createLayoutList(centralWidget);
+ scoreWindow = new ScoreWindow(this);
+ courseWindow = new CourseWindow(this);
}
void MainWindow::loadSettings(void)
{
+ TRACE;
bool external = false;
QDir mmc(mmcDir);
}
qDebug() << "Data is at:" + dataDir;
- settings.beginGroup("Settings");
- conf.hcp = settings.value("hcp");
- conf.homeClub = settings.value("home-club");
- conf.defaultCourses = settings.value("default-courses");
+ 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";
+
qDebug() << "Settings: " << conf.hcp << conf.homeClub << conf.defaultCourses;
}
void MainWindow::saveSettings(void)
{
- settings.beginGroup("Settings");
+ TRACE;
+ settings.beginGroup(settingsGroup);
if (conf.hcp.isValid())
- settings.setValue("hcp", conf.hcp);
+ settings.setValue(settingsHcp, conf.hcp);
if (conf.homeClub.isValid())
- settings.setValue("home-club", conf.homeClub);
+ settings.setValue(settingsHomeClub, conf.homeClub);
if (conf.defaultCourses.isValid())
- settings.setValue("default-courses", conf.defaultCourses);
+ settings.setValue(settingsDefaultCourses, conf.defaultCourses);
settings.endGroup();
}
-
void MainWindow::createLayoutList(QWidget *parent)
{
+ TRACE;
QVBoxLayout * tableLayout = new QVBoxLayout;
tableLayout->addWidget(list);
void MainWindow::createListView(QList<Score *> &scoreList,
QList <Club *> &clubList)
{
+ TRACE;
list = new QListView(this);
scoreListModel = new ScoreListModel(scoreList, clubList);
courseListModel = new CourseListModel(clubList);
- list->setStyleSheet(ScoreStyle::style());
+ list->setStyleSheet(defaultStyleSheet);
list->setSelectionMode(QAbstractItemView::SingleSelection);
list->setProperty("FingerScrolling", true);
void MainWindow::listScores()
{
+ TRACE;
list->setModel(scoreListModel);
selectionModel = list->selectionModel();
updateTitleBar(titleScores);
void MainWindow::listCourses()
{
+ TRACE;
list->setModel(courseListModel);
selectionModel = list->selectionModel();
updateTitleBar(titleCourses);
void MainWindow::createActions()
{
+ TRACE;
newScoreAction = new QAction(tr("New Score"), this);
connect(newScoreAction, SIGNAL(triggered()), this, SLOT(newScore()));
void MainWindow::createMenus()
{
+ TRACE;
#ifdef Q_WS_MAEMO_5
menu = menuBar()->addMenu("");
#else
void MainWindow::updateTitleBar(QString & msg)
{
+ TRACE;
setWindowTitle(msg);
}
void MainWindow::clickedList(const QModelIndex &index)
{
+ TRACE;
int row = index.row();
const QAbstractItemModel *m = index.model();
}
else if (m == courseListModel) {
QString str = courseListModel->data(index, Qt::DisplayRole).toString();
- QStringList strList = str.split(",");
+ QStringList strList = str.split(", ");
if (strList.count() != 2) {
showNote(QString("Invalid course selection"));
}
}
-
-void MainWindow::newCourse()
-{
- CourseSelectDialog *selectDialog = new CourseSelectDialog(this);
-
- int result = selectDialog->exec();
- if (result) {
- QString clubName;
- QString courseName;
- QString date;
-
- selectDialog->results(clubName, courseName);
-
- CourseDialog *courseDialog = new CourseDialog(this);
- courseDialog->init();
- QString title = "New Course: " + clubName + "," + courseName;
- courseDialog->setWindowTitle(title);
-
- int result = courseDialog->exec();
- if (result) {
- QVector<QString> par(18);
- QVector<QString> hcp(18);
- QVector<QString> len(18);
-
- courseDialog->results(par, hcp, len);
-
- Course *course = 0;
- Club *club = findClub(clubName);
- if (club) {
- course = club->getCourse(courseName);
- if (course) {
- qDebug() << "Error: club/course already in the database";
- return;
- }
- else {
- course = new Course(courseName, par, hcp);
- club->addCourse(course);
- }
- }
- else {
- // New club and course
- club = new Club(clubName);
- course = new Course(courseName, par, hcp);
- club->addCourse(course);
- clubList << club;
- }
- // Save it
- saveClubFile(clubFile, clubList);
- courseListModel->update(clubList);
- list->update();
- }
- }
-}
-
-void MainWindow::deleteCourse()
+void MainWindow::viewScore(Score * score, Course * course)
{
- Course * course = findCourse();
- Club * club = course->parent();
-
- // Can not delete course if it has scores -- check
- if (findScore(club->getName(), course->getName()) != 0) {
- showNote(tr("Can not delete course, delete scores on the course first"));
- return;
- }
- // Close the window
- if (courseWin)
- courseWin->close();
-
- club->delCourse(course);
-
- if (club->isEmpty()) {
- int index = clubList.indexOf(club);
- if (index != -1)
- clubList.removeAt(index);
- }
-
- // Save it
- saveClubFile(clubFile, clubList);
- courseListModel->update(clubList);
- list->update();
-}
-
-void MainWindow::editCourse()
-{
- Course *course = findCourse();
-
- if (!course) {
- showNote(tr("No course on edit"));
- return;
- }
-
- CourseDialog *courseDialog = new CourseDialog(this);
- courseDialog->init(course);
-
- QString title = "Edit Course: " + course->getName();
- courseDialog->setWindowTitle(title);
-
- int result = courseDialog->exec();
- if (result) {
- QVector<QString> par(18);
- QVector<QString> hcp(18);
- QVector<QString> len(18);
-
- courseDialog->results(par, hcp, len);
-
- course->update(par, hcp, len);
- saveClubFile(clubFile, clubList);
- }
+ TRACE;
+ qDebug() << score << course;
+ scoreWindow->setup(score, course);
+ scoreWindow->show();
}
void MainWindow::newScore()
{
+ TRACE;
SelectDialog *selectDialog = new SelectDialog(this);
selectDialog->init(clubList);
}
}
-void MainWindow::deleteScore()
-{
- if (scoreWin)
- scoreWin->close();
-
- QModelIndex index = selectionModel->currentIndex();
- scoreList.removeAt(index.row());
- // Save it
- saveScoreFile(scoreFile, scoreList);
- scoreListModel->update(scoreList);
- list->update();
-}
-
void MainWindow::editScore()
{
- QModelIndex index = selectionModel->currentIndex();
- Score * score = scoreList.at(index.row());
+ TRACE;
Course * course = 0;
+ Score *score = currentScore();
+
if (score)
course = findCourse(score->getClubName(), score->getCourseName());
QString date = score->getDate();
- ScoreDialog *scoreDialog = new ScoreDialog;
+ ScoreDialog *scoreDialog = new ScoreDialog(this);
+ scoreDialog->init(course, score);
QString title = "Edit Score: " + course->getName() + ", " + date;
scoreDialog->setWindowTitle(title);
- scoreDialog->init(course, score);
-
int result = scoreDialog->exec();
-
if (result) {
QVector<QString> scores(18);
qSort(scoreList.begin(), scoreList.end(), dateMoreThan);
// Save it
saveScoreFile(scoreFile, scoreList);
- // Update the model
- scoreListModel->update(scoreList);
}
+ if (scoreDialog)
+ delete scoreDialog;
}
-void MainWindow::viewScore(Score * score, Course * course)
+void MainWindow::deleteScore()
{
- scoreWin = new QMainWindow(this);
- QString title = QString("Score: %1, %2 - %3").arg(score->getClubName()).arg(score->getCourseName()).arg(score->getDate());
- scoreWin->setWindowTitle(title);
-#ifdef Q_WS_MAEMO_5
- scoreWin->setAttribute(Qt::WA_Maemo5StackedWindow);
-#endif
+ TRACE;
+ if (scoreWindow)
+ scoreWindow->close();
- QAction *editAction = new QAction(tr("Edit"), scoreWin);
- connect(editAction, SIGNAL(triggered()), this, SLOT(editScore()));
- scoreWin->menuBar()->addAction(editAction);
-
- QAction *delAction = new QAction(tr("Delete"), scoreWin);
- connect(delAction, SIGNAL(triggered()), this, SLOT(deleteScore()));
- scoreWin->menuBar()->addAction(delAction);
-
- ScoreTableModel *model = new ScoreTableModel(score, course);
-
- QTableView * table = new QTableView;
- table->showGrid();
- table->setSelectionMode(QAbstractItemView::NoSelection);
- table->setStyleSheet(ScoreStyle::style());
- table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
- table->verticalHeader()->setResizeMode(QHeaderView::Stretch);
- table->horizontalHeader()->hide();
- table->setModel(model);
-
- QWidget *central = new QWidget(scoreWin);
- scoreWin->setCentralWidget(central);
-
- QVBoxLayout *layout = new QVBoxLayout;
- layout->addWidget(table);
+ QModelIndex index = selectionModel->currentIndex();
+ if (!index.isValid()) {
+ qDebug() << "Invalid index";
+ return;
+ }
- central->setLayout(layout);
- scoreWin->show();
+ scoreList.removeAt(index.row());
+ // Save it
+ saveScoreFile(scoreFile, scoreList);
+ scoreListModel->update(scoreList);
+ list->update();
}
void MainWindow::viewCourse(Course * course)
{
- courseWin = new QMainWindow(this);
- QString title = QString("Course: %1, Par - %2").arg(course->getName()).arg(course->getTotal(Total));
- courseWin->setWindowTitle(title);
-#ifdef Q_WS_MAEMO_5
- courseWin->setAttribute(Qt::WA_Maemo5StackedWindow);
-#endif
+ TRACE;
+ courseWindow->setup(course);
+ courseWindow->show();
+}
- QAction *editAction = new QAction(tr("Edit"), courseWin);
- connect(editAction, SIGNAL(triggered()), this, SLOT(editCourse()));
- courseWin->menuBar()->addAction(editAction);
+void MainWindow::newCourse()
+{
+ TRACE;
+ CourseSelectDialog *selectDialog = new CourseSelectDialog(this);
- QAction *delAction = new QAction(tr("Delete"), courseWin);
- connect(delAction, SIGNAL(triggered()), this, SLOT(deleteCourse()));
- courseWin->menuBar()->addAction(delAction);
+ int result = selectDialog->exec();
+ if (result) {
+ QString clubName;
+ QString courseName;
+ QString date;
- CourseTableModel *model = new CourseTableModel(course);
-
- QTableView * table = new QTableView;
- table->showGrid();
- table->setSelectionMode(QAbstractItemView::NoSelection);
- //table->setStyleSheet(ScoreStyle::headerView());
- table->setStyleSheet(ScoreStyle::style());
- table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
- table->verticalHeader()->setResizeMode(QHeaderView::Stretch);
- table->horizontalHeader()->hide();
- table->setModel(model);
-
- QWidget *central = new QWidget(courseWin);
- courseWin->setCentralWidget(central);
+ selectDialog->results(clubName, courseName);
+
+ CourseDialog *courseDialog = new CourseDialog(this);
+ courseDialog->init();
+ QString title = "New Course: " + clubName + "," + courseName;
+ courseDialog->setWindowTitle(title);
+
+ int result = courseDialog->exec();
+ if (result) {
+ QVector<QString> par(18);
+ QVector<QString> hcp(18);
+ QVector<QString> len(18);
+
+ courseDialog->results(par, hcp, len);
+
+ Course *course = 0;
+ Club *club = findClub(clubName);
+ if (club) {
+ course = club->getCourse(courseName);
+ if (course) {
+ showNote(tr("Club/course already in the database"));
+ return;
+ }
+ else {
+ course = new Course(courseName, par, hcp);
+ club->addCourse(course);
+ }
+ }
+ else {
+ // New club and course
+ club = new Club(clubName);
+ course = new Course(courseName, par, hcp);
+ club->addCourse(course);
+ clubList << club;
+ }
+ // Save it
+ saveClubFile(clubFile, clubList);
+ courseListModel->update(clubList);
+ list->update();
+ }
+ }
+}
+
+void MainWindow::editCourse()
+{
+ TRACE;
+ Course *course = currentCourse();
+
+ if (!course) {
+ showNote(tr("No course on edit"));
+ return;
+ }
+
+ CourseDialog *courseDialog = new CourseDialog(this);
+ courseDialog->init(course);
+
+ QString title = "Edit Course: " + course->getName();
+ courseDialog->setWindowTitle(title);
+
+ int result = courseDialog->exec();
+ if (result) {
+ QVector<QString> par(18);
+ QVector<QString> hcp(18);
+ QVector<QString> len(18);
- QVBoxLayout *layout = new QVBoxLayout;
- layout->addWidget(table);
+ courseDialog->results(par, hcp, len);
- central->setLayout(layout);
- courseWin->show();
+ course->update(par, hcp, len);
+ saveClubFile(clubFile, clubList);
+ }
+ if (courseDialog)
+ delete courseDialog;
+}
+
+void MainWindow::deleteCourse()
+{
+ TRACE;
+ Club *club = 0;
+ Course * course = currentCourse();
+
+ if (!course) {
+ qDebug() << "Invalid course for deletion";
+ return;
+ }
+ club = course->parent();
+
+ // Can not delete course if it has scores -- check
+ if (findScore(club->getName(), course->getName()) != 0) {
+ showNote(tr("Can not delete course, delete scores on the course first"));
+ return;
+ }
+ // Close the window
+ if (courseWindow)
+ courseWindow->close();
+
+ club->delCourse(course);
+
+ if (club->isEmpty()) {
+ int index = clubList.indexOf(club);
+ if (index != -1)
+ clubList.removeAt(index);
+ }
+
+ // Save it
+ saveClubFile(clubFile, clubList);
+ courseListModel->update(clubList);
+ list->update();
}
void MainWindow::viewStatistics()
{
- QMainWindow *win = new QMainWindow(this);
- QString title = "Statistics";
- win->setWindowTitle(title);
+ TRACE;
+ QMainWindow *win = new QMainWindow(this);
+ QString title = "Statistics";
+ win->setWindowTitle(title);
#ifdef Q_WS_MAEMO_5
- win->setAttribute(Qt::WA_Maemo5StackedWindow);
+ win->setAttribute(Qt::WA_Maemo5StackedWindow);
#endif
- StatModel *model = new StatModel(clubList, scoreList);
+ StatModel *model = new StatModel(clubList, scoreList);
- QTableView *table = new QTableView;
- table->showGrid();
- table->setSelectionMode(QAbstractItemView::NoSelection);
- table->setStyleSheet(ScoreStyle::style());
- table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
- table->verticalHeader()->setResizeMode(QHeaderView::Stretch);
- table->verticalHeader()->setAutoFillBackground(true);
- table->setModel(model);
+ QTableView *table = new QTableView;
+ table->showGrid();
+ table->setSelectionMode(QAbstractItemView::NoSelection);
+ table->setStyleSheet(statStyleSheet);
+ table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
+ table->verticalHeader()->setResizeMode(QHeaderView::Stretch);
+ table->verticalHeader()->setAutoFillBackground(true);
+ table->setModel(model);
- QWidget *central = new QWidget(win);
- win->setCentralWidget(central);
+ QWidget *central = new QWidget(win);
+ win->setCentralWidget(central);
- QTextEdit *textEdit = new QTextEdit;
+ QTextEdit *textEdit = new QTextEdit;
- textEdit->setReadOnly(true);
+ textEdit->setReadOnly(true);
- QVBoxLayout *infoLayout = new QVBoxLayout;
- infoLayout->addWidget(table);
+ QVBoxLayout *infoLayout = new QVBoxLayout;
+ infoLayout->addWidget(table);
- QHBoxLayout *mainLayout = new QHBoxLayout(central);
- mainLayout->addLayout(infoLayout);
- central->setLayout(mainLayout);
+ QHBoxLayout *mainLayout = new QHBoxLayout(central);
+ mainLayout->addLayout(infoLayout);
+ central->setLayout(mainLayout);
- win->show();
+ win->show();
}
void MainWindow::viewSettings()
{
+ TRACE;
SettingsDialog *dlg = new SettingsDialog(this);
dlg->init(conf, clubList);
int result = dlg->exec();
if (result) {
- QString a, b, c;
-
+ QString oldValue = conf.defaultCourses.toString();
dlg->results(conf);
- //qDebug() << << b << c;
+ QString newValue = conf.defaultCourses.toString();
saveSettings();
+
+ // Reload club list, or drop r/o courses from list
+ if (oldValue == "Yes" && newValue == "No") {
+ flushReadOnlyItems();
+ courseListModel->update(clubList);
+ list->update();
+ }
+ else if ((oldValue == "No" || oldValue == "") && newValue == "Yes") {
+ loadClubFile(masterFile, clubList, true);
+ courseListModel->update(clubList);
+ list->update();
+ }
+ markHomeClub();
}
}
void MainWindow::loadClubFile(QString &fileName, QList<Club *> &list, bool readOnly)
{
- ClubXmlHandler handler(list);
+ ClubXmlHandler handler(list);
- if (handler.parse(fileName, readOnly))
- qDebug() << "File loaded:" << fileName << " entries:" << list.size();
+ if (handler.parse(fileName, readOnly))
+ qDebug() << "File loaded:" << fileName << " entries:" << list.size();
}
void MainWindow::saveClubFile(QString &fileName, QList<Club *> &list)