TODO list update. Initial screen for pro mode
[scorecard] / src / score-dialog.cpp
index 25a4f28..29b5189 100644 (file)
@@ -478,7 +478,7 @@ void ScoreDialog18::showNote(QString msg)
 // ScoreDialogSingle based on QDialog
 // Usage: edit scorecard data for single hole
 ////////////////////////////////////////////////////////////////////////////////
-ScoreDialogSingle::ScoreDialogSingle(QWidget *parent) : QDialog(parent)
+ScoreDialogSingle::ScoreDialogSingle(QWidget *parent) : ScoreDialog(parent)
 {
     TRACE;
     resize(800, 400);
@@ -536,7 +536,10 @@ void ScoreDialogSingle::createLayout(QWidget *parent)
 void ScoreDialogSingle::createTable(QWidget *parent)
 {
     TRACE;
-    table = new QTableWidget(5, 5, parent);
+    table = new QTableWidget(ROWS, COLS, parent);
+    QFont font;
+    font.setPointSize(32);
+    table->setFont(font);
 
     table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
     table->verticalHeader()->setResizeMode(QHeaderView::Stretch);
@@ -545,7 +548,7 @@ void ScoreDialogSingle::createTable(QWidget *parent)
     table->setStyleSheet(defaultStyleSheet);
 
     QStringList headers;
-    headers << "" << "Par" << "HCP" << "Score" << "" << "Par" << "HCP" << "Score";
+    headers << "Hole" << "Par" << "HCP" << "Score" << "Putts" << "Fairway" << "Green";
     table->setVerticalHeaderLabels(headers);
 }
 
@@ -565,3 +568,139 @@ void ScoreDialogSingle::createButton(QWidget *parent)
     pushButtonFinish = new QPushButton(tr("Finish"));
     connect(pushButtonFinish, SIGNAL(clicked()), this, SLOT(finish()));
 }
+
+void ScoreDialogSingle::init(Course *course, Score *score)
+{
+    TRACE;
+    QTableWidgetItem *holeNum, *par, *hcp, *scoreItem, *putts, *fairway, *green;
+
+    for (int i = 0; i < 3; i++) {
+        par = new QTableWidgetItem(course->getPar(i));
+        hcp = new QTableWidgetItem(course->getHcp(i));
+        
+        if (score)
+            scoreItem = new QTableWidgetItem(score->getScore(i));
+        else
+            scoreItem = new QTableWidgetItem("");
+
+        putts = new QTableWidgetItem("2");
+        fairway = new QTableWidgetItem("Yes");
+        green = new QTableWidgetItem("Yes");
+
+        holeNum = new QTableWidgetItem(QString::number(i+1));
+
+        holeNum->setTextAlignment(Qt::AlignCenter);
+        holeNum->setFlags(Qt::NoItemFlags);
+        holeNum->setForeground(ScoreColor::holeBg());
+        
+        par->setTextAlignment(Qt::AlignCenter);
+        par->setFlags(Qt::NoItemFlags);
+
+        hcp->setTextAlignment(Qt::AlignCenter);
+        hcp->setFlags(Qt::NoItemFlags);
+        
+        scoreItem->setTextAlignment(Qt::AlignCenter);
+        putts->setTextAlignment(Qt::AlignCenter);
+        fairway->setTextAlignment(Qt::AlignCenter);
+        green->setTextAlignment(Qt::AlignCenter);
+
+        table->setItem(ROW_HOLE, i, holeNum);
+        table->setItem(ROW_PAR, i, par);
+        table->setItem(ROW_HCP, i, hcp);
+        table->setItem(ROW_SCORE, i, scoreItem);
+        table->setItem(ROW_PUTTS, i, putts);
+        table->setItem(ROW_FAIRWAY, i, fairway);
+        table->setItem(ROW_GREEN, i, green);
+    }
+    // Set focus to 1st cell
+    table->setCurrentCell(ROW_SCORE, 0);
+    if (!score)
+        setDefaultScore(table);
+}
+
+// Set default score to par if not set
+// TODO: merge the two methods since they are the same
+void ScoreDialogSingle::setDefaultScore(QTableWidget *table)
+{
+    int row = table->currentRow();
+    int col = table->currentColumn();
+  
+    if (row == ROW_SCORE)
+        row = ROW_PAR;
+    else {
+        qDebug() << "ERROR: unknown row in default score";
+        return;
+    }
+    QTableWidgetItem *par = table->item(row, col);
+    QTableWidgetItem *score = table->item(row + 2, col);
+
+    if (par && score && score->text() == "") {
+        QVariant value(par->text());
+        score->setData(Qt::DisplayRole, value);
+    }
+}
+
+void ScoreDialogSingle::up(void)
+{
+    QTableWidgetItem *item = table->currentItem();
+
+    if (!item) {
+        qWarning() << "ERROR: no current item";
+        return;
+    }
+
+    int i = (item->text()).toInt();
+    QVariant value(i+1);
+    item->setData(Qt::DisplayRole, value);
+}
+
+void ScoreDialogSingle::down(void)
+{
+    QTableWidgetItem *item = table->currentItem();
+
+    if (!item)
+        return;
+
+    int i = (item->text()).toInt();
+    QVariant value(i-1);
+    item->setData(Qt::DisplayRole, value);
+}
+
+void ScoreDialogSingle::next(void)
+{
+    if (table) {
+        QTableWidgetItem *item = table->currentItem();
+        moveToNextCell(item);
+        setDefaultScore(table);
+    }
+}
+
+void ScoreDialogSingle::moveToNextCell(QTableWidgetItem *item)
+{
+    if (!item)
+        return;
+
+    QTableWidget *table = item->tableWidget();
+
+    if (!table)
+        return;
+
+    int row = table->currentRow();
+    int col = table->currentColumn();
+
+    qDebug() << row << col;
+    if (row < (ROWS - 1)) {
+        row++;
+    }
+    else if (row == (ROWS - 1)) {
+        row = ROW_SCORE;
+        col = (col == COLS-1) ? 0 : col + 1;
+    }
+    qDebug() << row << col;
+    table->setCurrentCell(row, col);
+}
+
+void ScoreDialogSingle::results(QVector<QString> &scores)
+{
+    TRACE;
+}