Added edit score functionality
[scorecard] / src / main-window.cpp
index 46d7328..34958fa 100644 (file)
@@ -28,7 +28,7 @@ bool dateLessThan(const Score *s1, const Score *s2)
   return (*s1) < (*s2);
 }
 
-MainWindow::MainWindow(QMainWindow *parent) : QMainWindow(parent)
+MainWindow::MainWindow(QMainWindow *parent): QMainWindow(parent)
 {
   resize(800, 480);
 
@@ -36,9 +36,6 @@ MainWindow::MainWindow(QMainWindow *parent) : QMainWindow(parent)
 
   QWidget *centralWidget = new QWidget(this);
 
-  // TODO: move to proper function
-  table = new QTableView(centralWidget);
-
   setCentralWidget(centralWidget);
 
   loadScoreFile(scoreFile, scoreList);
@@ -109,6 +106,8 @@ void MainWindow::createLayout(QWidget *parent)
 // Setup 'score' tab view
 void MainWindow::createTableView(QList<Score *> &scoreList, QList <Club *> &clubList)
 {
+  table = new QTableView;
+
   nextButton = new QPushButton(tr(">"));
   prevButton = new QPushButton(tr("<"));
   firstButton = new QPushButton(tr("<<"));
@@ -127,9 +126,6 @@ void MainWindow::createTableView(QList<Score *> &scoreList, QList <Club *> &club
 
   table->setModel(scoreTableModel);
 
-  // Flag model items which one belongs to front and back nines
-  table->setRootIndex(scoreTableModel->index(0, 1));
-
   // Fill out all the space with the tables
   table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
   table->verticalHeader()->setResizeMode(QHeaderView::Stretch);
@@ -182,12 +178,15 @@ void MainWindow::createStatusBar()
 
 void MainWindow::createActions()
 {
-  newScoreAct = new QAction(tr("&New Score"), this);
+  newScoreAct = new QAction(tr("New Score"), this);
   connect(newScoreAct, SIGNAL(triggered()), this, SLOT(newScore()));
 
-  newCourseAct = new QAction(tr("&New Course"), this);
+  newCourseAct = new QAction(tr("New Course"), this);
   connect(newCourseAct, SIGNAL(triggered()), this, SLOT(newCourse()));
 
+  editScoreAct = new QAction(tr("Edit Score"), this);
+  connect(editScoreAct, SIGNAL(triggered()), this, SLOT(editScore()));
+
 #if 0
   viewScoreAct = new QAction(tr("&View Scores"), this);
   connect(viewScoreAct, SIGNAL(triggered()), this, SLOT(viewScore()));
@@ -210,6 +209,7 @@ void MainWindow::createMenus()
 #endif
   menu->addAction(newScoreAct);
   menu->addAction(newCourseAct);
+  menu->addAction(editScoreAct);
 }
 
 void MainWindow::updateStatusBar()
@@ -269,7 +269,7 @@ void MainWindow::newCourse()
 
     CourseDialog *courseDialog = new CourseDialog(this);
 
-    QString title = "New Course : " + clubName + "," + courseName;
+    QString title = "New Course: " + clubName + "," + courseName;
     courseDialog->setWindowTitle(title);
 
     int result = courseDialog->exec();
@@ -323,7 +323,7 @@ void MainWindow::newScore()
     selectDialog->results(clubName, courseName, date);
 
     ScoreDialog *scoreDialog = new ScoreDialog(this);
-    QString title = "New Score : " + courseName + ", " + date;
+    QString title = "New Score: " + courseName + ", " + date;
     scoreDialog->setWindowTitle(title);
 
     Club *club = findClub(clubName);
@@ -360,12 +360,45 @@ void MainWindow::newScore()
   }
 }
 
+void MainWindow::editScore()
+{
+  Course *course = scoreTableModel->getCourse();
+  Score *score = scoreTableModel->getScore();
+  QString date = score->getDate();
+
+  ScoreDialog *scoreDialog = new ScoreDialog(this);
+  
+  QString title = "Edit Score: " + course->getName() + ", " + date;
+  scoreDialog->setWindowTitle(title);
+
+  scoreDialog->init(course, score);
+
+  int result = scoreDialog->exec();
+
+  if (result) {
+    QVector<QString> scores(18);
+
+    scoreDialog->results(scores);
+    
+    score->update(scores);
+
+    // Sort the scores based on dates
+    qSort(scoreList.begin(), scoreList.end(), dateLessThan); 
+    // Save it
+    saveScoreFile(scoreFile, scoreList);
+
+    // TODO: does this really work? No mem leaks?
+    scoreTableModel->setScore(scoreList, score);
+    updateStatusBar();
+  }
+}
+
 void MainWindow::loadScoreFile(QString &fileName, QList<Score *> &list)
 {
   ScoreXmlHandler handler(list);
 
   if (handler.parse(fileName))
-    qDebug() << "File loaded: " << fileName << " entries : " << list.size();
+    qDebug() << "File loaded: " << fileName << " entries: " << list.size();
 }
 
 void MainWindow::saveScoreFile(QString &fileName, QList<Score *> &list)
@@ -374,9 +407,9 @@ void MainWindow::saveScoreFile(QString &fileName, QList<Score *> &list)
 
   if (handler.save(fileName))
     // TODO: banner
-    qDebug() << "File saved : " << fileName << " entries : " << list.size();
+    qDebug() << "File saved: " << fileName << " entries: " << list.size();
   else
-    qDebug() << "Unable to save : " << fileName;
+    qDebug() << "Unable to save: " << fileName;
 }
 
 void MainWindow::loadClubFile(QString &fileName, QList<Club *> &list)
@@ -384,7 +417,7 @@ void MainWindow::loadClubFile(QString &fileName, QList<Club *> &list)
   ClubXmlHandler handler(list);
 
   if (handler.parse(fileName))
-    qDebug() << "File loaded: " << fileName << " entries : " << list.size();
+    qDebug() << "File loaded: " << fileName << " entries: " << list.size();
 }
 
 void MainWindow::saveClubFile(QString &fileName, QList<Club *> &list)
@@ -393,8 +426,8 @@ void MainWindow::saveClubFile(QString &fileName, QList<Club *> &list)
 
   if (handler.save(fileName))
     // TODO: banner
-    qDebug() << "File saved : " << fileName << " entries : " << list.size();
+    qDebug() << "File saved: " << fileName << " entries: " << list.size();
   else
-    qDebug() << "Unable to save : " << fileName;
+    qDebug() << "Unable to save: " << fileName;
 
 }