Subversion Repositories svn1

Rev

Rev 197 | Rev 211 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
126 david 1
#include "mainwindow.h"
2
#include "ui_mainwindow.h"
171 david 3
#include "qmconfteams.h"
126 david 4
#include "qmconfclass.h"
5
#include "qmconfwinners.h"
6
#include "qmteamdisplay.h"
7
#include "QMessageBox"
129 david 8
#include "QInputDialog"
130 - 9
#include "QTime"
10
#include "qmdialoglegstarttimes.h"
134 david 11
#include "qmdisqualified.h"
137 - 12
#include "qmdatacheck.h"
144 - 13
#include "qmdialogloadexternalteams.h"
145 - 14
#include "QFileDialog"
153 david 15
#include "qmdialoguploadlegtimes.h"
163 david 16
#include "qmdialogstatus.h"
168 david 17
#include "qmreportwindow.h"
169 david 18
#include "QTabWidget"
19
#include "QLayout"
188 - 20
#include "qmeventstatus.h"
126 david 21
 
22
#include    "consts.h"
23
#include    "structs.h"
24
#include    "proto.h"
25
 
26
MainWindow *mw = NULL;
27
 
28
MainWindow::MainWindow(QWidget *parent) :
29
    QMainWindow(parent),
30
    ui(new Ui::MainWindow)
31
{
32
    ui->setupUi(this);
33
    mw = this;
34
 
169 david 35
    QTabWidget *tabWidget = new QTabWidget();
36
    setCentralWidget(tabWidget);
126 david 37
 
171 david 38
    tabWidget->addTab( new QmConfTeams,    "Configure");
169 david 39
    tabWidget->addTab( new QmConfClass,    "Class");
40
    tabWidget->addTab( new QmConfWinners,  "Winners");
189 - 41
    tabWidget->addTab( new QmEventStatus,  "Status");
169 david 42
    tabWidget->addTab( new qmTeamDisplay,  "Team Data");
43
    tabWidget->addTab( new qmDisqualified, "Disqual");
44
    tabWidget->addTab( new qmDataCheck,    "Data Check");
203 - 45
    tabWidget->addTab( reportWindow = new QmReportWindow, "Reports");
169 david 46
 
194 david 47
    QMenu *m0 = new QMenu ("Team");
140 david 48
    ui->menuBar->addMenu(m0);
49
    m0->addAction("Reset All Team Data", this, SLOT(resetTeamData()));
50
    m0->addAction("Generate dummy team names", this, SLOT(generateDummyTeamNames()));
51
 
127 - 52
    QMenu *m1 = new QMenu ("Leg Time Setup");
53
    ui->menuBar->addMenu(m1);
54
    m1->addAction("Clear ALL Leg Times", this, SLOT(clearLegTimes()));
129 david 55
    m1->addAction("Clear single leg start times", this, SLOT(ClearOneLegTimes()));
140 david 56
    m1->addSeparator();
57
    m1->addAction("Set Start Times", this, SLOT(setStartTimes()));
203 - 58
    m1->addSeparator();
129 david 59
    m1->addAction("Set calculated leg start", this, SLOT(setCalcLegStart()));
131 david 60
    m1->addAction("Set ordered incremental leg start", this, SLOT(setOrderedIncLegStart()));
61
    m1->addAction("Set staggered start time", this, SLOT(setStaggeredLegStart()));
62
    m1->addAction("Set fixed start time", this, SLOT(setFixedLegStart()));
140 david 63
 
64
    QMenu *m2 = new QMenu ("Upload");
65
    ui->menuBar->addMenu(m2);
144 - 66
    m2->addAction("Load team information from external file", this, SLOT(loadExternalTeams()));
149 - 67
    m2->addAction("Store team information to external file", this, SLOT(storeExternalTeams()));
153 david 68
    m2->addAction("Create external leg data file", this, SLOT(storeLegData()));
69
    m2->addAction("Upload time information", this, SLOT(uploadLegData()));
140 david 70
 
156 - 71
    QMenu *m3 = new QMenu ("Reports");
72
    ui->menuBar->addMenu(m3);
73
    m3->addAction("Generate All Reports", this, SLOT(generateReports()));
197 - 74
    m3->addAction("Display Summary", this, SLOT(displaySummary()));
126 david 75
}
76
 
77
MainWindow::~MainWindow()
78
{
79
    delete ui;
80
}
81
 
133 david 82
void MainWindow::showMessage( const QString & msg, int timeout)
83
{
84
    if ( mw )
85
    {
86
        mw->ui->statusBar->showMessage(msg, timeout);
87
    }
88
}
89
 
203 - 90
void MainWindow::registerReport(const QString &report, const QString &name)
91
{
92
    if (mw && mw->reportWindow)
93
    {
94
        mw->reportWindow->addReport(report, name);
95
    }
96
}
97
 
126 david 98
void MainWindow::changeEvent(QEvent *e)
99
{
100
    QMainWindow::changeEvent(e);
101
    switch (e->type()) {
102
    case QEvent::LanguageChange:
103
        ui->retranslateUi(this);
104
        break;
105
    default:
106
        break;
107
    }
108
}
109
 
110
void MainWindow::setStartTimes(void)
111
{
127 - 112
    if ( QMessageBox::Ok == QMessageBox::warning(this, tr("Mara"),
131 david 113
                                    tr("This will reset the start times for all teams based on the Category configuration.\n"
126 david 114
                                       "Are you sure you want to do this?"),
115
                                    QMessageBox::Cancel,
116
                                    QMessageBox::Ok))
117
    {
127 - 118
        leg_start();
126 david 119
    }
127 - 120
 
126 david 121
}
122
 
127 - 123
void MainWindow::clearLegTimes(void)
124
{
125
    if ( QMessageBox::Ok == QMessageBox::warning(this, tr("Mara"),
126
                                    tr("This will clear ALL leg times for ALL teams.\n"
127
                                       "Are you sure you want to do this?"),
128
                                    QMessageBox::Cancel,
129
                                    QMessageBox::Ok))
130
    {
131
        leg_ini();
132
    }
133
}
134
 
135
void MainWindow::resetTeamData(void)
136
{
137
    if ( QMessageBox::Ok == QMessageBox::warning(this, tr("Mara"),
138
                                    tr("This will clear ALL team information.\n"
139
                                       "Are you sure you want to do this?"),
140
                                    QMessageBox::Cancel,
141
                                    QMessageBox::Ok))
142
    {
143
        tm_init();
144
    }
145
}
146
 
128 - 147
void MainWindow::generateDummyTeamNames(void)
148
{
149
    if ( QMessageBox::Ok == QMessageBox::warning(this, tr("Mara"),
150
                                    tr("This will generate DUMMY team names.\n"
151
                                       "Are you sure you want to do this?"),
152
                                    QMessageBox::Cancel,
153
                                    QMessageBox::Ok))
154
    {
155
        tm_gen();
156
    }
157
}
158
 
129 david 159
void MainWindow::ClearOneLegTimes(void)
160
{
161
    bool ok;
162
    int leg = QInputDialog::getInt(this, tr("Clear One Leg Start Time"),
163
                                              tr("Leg:"), 0, 0, config.num_legs, 1, &ok);
164
    if ( ok && leg)
165
    {
133 david 166
        tm_clearleg_specified(leg, FALSE);
129 david 167
    }
168
}
169
 
170
void MainWindow::setCalcLegStart(void)
171
{
130 - 172
    QmDialogLegStartTimes dialog("Calculate Leg Start Time",this);
131 david 173
    dialog.setDeltaTimeLabel("Delta Time");
203 - 174
    dialog.setDescription("The start time is based on the end time of the previous leg with a constant Delta time added");
175
 
131 david 176
qDebug ("Must disable stuff");
130 - 177
    if ( QDialog::Accepted == dialog.exec() )
129 david 178
    {
130 - 179
        if ( dialog.getLeg() )
180
        {
181
            tm_lgs(dialog.getLeg(),
131 david 182
                   dialog.getDeltaTime(),
183
                   dialog.getReport(),
184
                   dialog.getClear() );
185
        }
186
    }
187
}
188
 
189
void MainWindow::setOrderedIncLegStart(void)
190
{
191
    QmDialogLegStartTimes dialog("Ordered Incremental Leg Start Time",this);
192
    dialog.setTimeLabel("Start Time");
193
    dialog.setDeltaTimeLabel("Delta Time");
203 - 194
    dialog.setDescription("The specified start time is given to the fastest team. Teams are then set at specified Delta from that time.");
131 david 195
    if ( QDialog::Accepted == dialog.exec() )
196
    {
197
        if ( dialog.getLeg() )
198
        {
199
            tm_lgs1(dialog.getLeg(),
130 - 200
                   dialog.getTime(),
131 david 201
                   dialog.getDeltaTime(),
130 - 202
                   dialog.getReport(),
203
                   dialog.getClear() );
204
        }
129 david 205
    }
131 david 206
}
130 - 207
 
131 david 208
void MainWindow::setStaggeredLegStart(void)
209
{
210
    QmDialogLegStartTimes dialog("Staggered Leg Start Time",this);
211
    dialog.setTimeLabel("Start Time");
212
    dialog.setDeltaTimeLabel("Stagger Time");
203 - 213
    dialog.setDescription("The lowest numbered team is given the start time. The teams are then starggered by team number from that time.");
131 david 214
    if ( QDialog::Accepted == dialog.exec() )
215
    {
216
        if ( dialog.getLeg() )
217
        {
218
            tm_staggered(dialog.getLeg(),
219
                   dialog.getTime(),
220
                   dialog.getDeltaTime(),
221
                   dialog.getReport(),
222
                   dialog.getClear() );
223
        }
224
    }
129 david 225
}
131 david 226
 
227
void MainWindow::setFixedLegStart(void)
228
{
229
    QmDialogLegStartTimes dialog("Fixed Leg Start Time",this);
230
    dialog.setTimeLabel("Start Time");
203 - 231
    dialog.setDescription("The specified start time is given to all teams.");
131 david 232
    if ( QDialog::Accepted == dialog.exec() )
233
    {
234
        if ( dialog.getLeg() )
235
        {
236
            tm_fixedstart(dialog.getLeg(),
237
                   dialog.getTime(),
238
                   //dialog.getDeltaTime(),
239
                   dialog.getReport(),
240
                   dialog.getClear() );
241
        }
242
    }
243
}
144 - 244
 
245
void MainWindow::loadExternalTeams(void)
246
{
145 - 247
    QString fileName = QFileDialog::getOpenFileName(this, tr("Load File"),
174 - 248
                                                     filepath,
145 - 249
                                                     tr("Data (*.csv);;All (*.*)"),
250
                                                     0,
251
                                                     QFileDialog::ReadOnly);
252
    if ( fileName.isEmpty() )
253
    {
254
        return;
255
    }
256
 
257
    QmDialogLoadExternalTeams dialog(fileName,this);
144 - 258
    dialog.exec();
259
}
260
 
149 - 261
void MainWindow::storeExternalTeams(void)
262
{
263
    QString fileName = QFileDialog::getSaveFileName(this, tr("Store File"),
174 - 264
                                                     filepath,
149 - 265
                                                     tr("Data (*.csv);;All (*.*)"),
266
 
267
                                                     );
268
    if ( fileName.isEmpty() )
269
    {
270
        return;
271
    }
272
    MainWindow::showMessage("Writing external data");
273
    QmDialogLoadExternalTeams::storeData(fileName);
151 david 274
    MainWindow::showMessage("Writing external data completed");
149 - 275
}
276
 
152 david 277
void MainWindow::storeTeamInfo(void)
278
{
279
    QString fileName = QFileDialog::getSaveFileName(this, tr("Store Team Info File"),
174 - 280
                                                     filepath,
152 david 281
                                                     tr("Data (*.txt);;All (*.*)"),
282
 
283
                                                     );
284
    if ( fileName.isEmpty() )
285
    {
286
        return;
287
    }
288
    MainWindow::showMessage("Writing team info");
289
    QmDialogLoadExternalTeams::storeTeamInfo(fileName);
290
    MainWindow::showMessage("Writing team info completed");
291
}
292
 
153 david 293
void MainWindow::storeLegData(void)
294
{
295
    MainWindow::showMessage("Store Leg Data: Not yet implemented");
296
}
297
 
298
void MainWindow::uploadLegData(void)
299
{
300
    QmDialogUploadLegTimes  dialog(this);
301
    dialog.exec();
302
}
303
 
156 - 304
void MainWindow::generateReports(void)
305
{
306
    if( load_report_data() )
307
    {
308
        pri_all_reports();
309
    }
310
}
311
 
163 david 312
 
161 - 313
void MainWindow::displaySummary(void)
314
{
163 david 315
    QmDialogStatus dialog(this);
316
    dialog.exec();
161 - 317
}
318
 
319