380c097fbc0e1458d618530c3c38e93821c63d1e
[scorecard] / src / score-dialog.h
1 /*
2  * Copyright (C) 2009 Sakari Poussa
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, version 2.
7  */
8
9 #ifndef SCORE_DIALOG_H
10 #define SCORE_DIALOG_H
11
12 #include <QDialog>
13 #include <QMainWindow>
14 #include <QTableWidget>
15 #include <QListWidget>
16 #include <QComboBox>
17 #include <QLabel>
18 #include <QPushButton>
19 #include <QDateEdit>
20 #include <QLayout>
21 #ifdef Q_WS_MAEMO_5
22 #include <QtMaemo5/QMaemo5ValueButton>
23 #include <QtMaemo5/QMaemo5DatePickSelector>
24 #endif
25
26 #include "data.h"
27 #include "table-model.h"
28
29 class ScoreWindow: public QMainWindow
30 {
31     Q_OBJECT;
32
33 public:
34     ScoreWindow(QWidget *parent = 0);
35     ~ScoreWindow();
36
37     void setup(Score * score, Course * course);
38
39 private:
40     ScoreTableModel *model;
41 };
42
43 class SelectDialog: public QDialog
44 {
45     Q_OBJECT;
46
47 public:
48     SelectDialog(QWidget *parent = 0);
49     
50     void results(QString &club, QString &course, QString &date);
51     void init(QList<Club *> &list);
52
53     private slots:
54     void next(void);
55
56 private:
57
58     bool validate(void);
59     void reject(void);
60
61     void comboBoxCourseUpdate(void);
62     void createLayout(QWidget *parent = 0);
63
64     // Widgets
65     QListWidget  *listWidgetClub;
66 #ifdef Q_WS_MAEMO_5
67     QMaemo5ValueButton *dateButton;
68 #else
69     QLineEdit    *lineEditDate;
70     QDateEdit    *date;
71 #endif
72     QLabel       *labelClub;
73     QLabel       *labelCourse;
74     QPushButton  *pushButtonNext;
75
76     // Layouts
77     QVBoxLayout *leftLayout;
78     QVBoxLayout *rightLayout;
79
80     QList<Club *> clubList;
81 };
82
83 // Base class for multiple score edit dialog
84 class ScoreDialog: public QDialog
85 {
86     Q_OBJECT;
87
88 public:
89     ScoreDialog(QWidget *parent = 0) : QDialog(parent) {};
90     
91     virtual void init(Course *course, Score *score = 0) = 0;
92     virtual void results(QVector<QString> &scores) = 0;
93
94 private:
95 };
96
97 // Class for editing 18 holes in one dialog
98 class ScoreDialog18: public ScoreDialog
99 {
100     Q_OBJECT;
101
102 public:
103     ScoreDialog18(QWidget *parent = 0);
104     ~ScoreDialog18();
105     void init(Course *course, Score *score = 0);
106     void results(QVector<QString> &scores);
107     bool validate(void);
108
109     private slots:
110     void up(void);
111     void down(void);
112     void next(void);
113     void finish(void);
114
115 private:
116
117     void createTable(QWidget *parent = 0);
118     void createButton(QWidget *parent = 0);
119     void createLayout(QWidget *parent = 0);
120     void setDefaultScore(QTableWidget *table);
121     void moveToNextCell(QTableWidgetItem *item);
122     void showNote(QString msg);
123   
124     enum { ROWS = 8, COLS = 9 };
125     enum { ROW_HOLE = 0, ROW_PAR = 1, ROW_HCP = 2, ROW_SCORE = 3, 
126            ROW_HOLE_2 = 4, ROW_PAR_2 = 5, ROW_HCP_2 = 6, ROW_SCORE_2 = 7};
127
128     void reject(void);
129
130     // Widgets
131     QTableWidget *table;
132
133     QPushButton  *pushButtonFinish;
134     QPushButton  *pushButtonUp;
135     QPushButton  *pushButtonDown;
136     QPushButton  *pushButtonNext;
137
138     // Layouts
139     QVBoxLayout *leftLayout;
140     QVBoxLayout *rightLayout;
141 };
142
143 // Class for editing single hole in one dialog
144 class ScoreDialogSingle: public QDialog
145 {
146     Q_OBJECT;
147
148 public:
149     ScoreDialogSingle(QWidget *parent = 0);
150     ~ScoreDialogSingle();
151
152     void init(Course *course, Score *score = 0);
153     void results(QVector<QString> &scores);
154
155 private:
156
157     void createTable(QWidget *parent = 0);
158     void createButton(QWidget *parent = 0);
159     void createLayout(QWidget *parent = 0);
160
161     // Widgets
162     QTableWidget *table;
163
164     QPushButton  *pushButtonFinish;
165     QPushButton  *pushButtonUp;
166     QPushButton  *pushButtonDown;
167     QPushButton  *pushButtonNext;
168
169     // Layouts
170     QVBoxLayout *leftLayout;
171     QVBoxLayout *rightLayout;
172 };
173 #endif