Subversion Repositories svn1-original

Rev

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

Rev Author Line No. Line
130 david 1
#include "mainwindow.h"
2
#include "ui_mainwindow.h"
3
#include "qmconfigure.h"
4
#include "qmconfclass.h"
5
#include "qmconfwinners.h"
6
#include "qmteamdisplay.h"
7
#include "QMessageBox"
133 david 8
#include "QInputDialog"
134 - 9
#include "QTime"
10
#include "qmdialoglegstarttimes.h"
138 david 11
#include "qmdisqualified.h"
141 - 12
#include "qmdatacheck.h"
148 - 13
#include "qmdialogloadexternalteams.h"
149 - 14
#include "QFileDialog"
15
#include "QDir"
157 david 16
#include "qmdialoguploadlegtimes.h"
130 david 17
 
18
#include    "consts.h"
19
#include    "structs.h"
20
#include    "proto.h"
21
 
22
MainWindow *mw = NULL;
23
 
24
MainWindow::MainWindow(QWidget *parent) :
25
    QMainWindow(parent),
26
    ui(new Ui::MainWindow)
27
{
28
    ui->setupUi(this);
29
    mw = this;
30
 
148 - 31
    ui->tabWidget->addTab( new QmConfigure,    "Configure");
32
    ui->tabWidget->addTab( new QmConfClass,    "Class");
33
    ui->tabWidget->addTab( new QmConfWinners,  "Winners");
34
    ui->tabWidget->addTab( new qmTeamDisplay,  "Team Data");
138 david 35
    ui->tabWidget->addTab( new qmDisqualified, "Disqual");
148 - 36
    ui->tabWidget->addTab( new qmDataCheck,    "Data Check");
130 david 37
 
144 david 38
    QMenu *m0 = new QMenu ("Team");
39
    ui->menuBar->addMenu(m0);
40
    m0->addAction("Reset All Team Data", this, SLOT(resetTeamData()));
41
    m0->addAction("Generate dummy team names", this, SLOT(generateDummyTeamNames()));
42
 
131 - 43
    QMenu *m1 = new QMenu ("Leg Time Setup");
44
    ui->menuBar->addMenu(m1);
45
    m1->addAction("Clear ALL Leg Times", this, SLOT(clearLegTimes()));
133 david 46
    m1->addAction("Clear single leg start times", this, SLOT(ClearOneLegTimes()));
144 david 47
    m1->addSeparator();
48
    m1->addAction("Set Start Times", this, SLOT(setStartTimes()));
133 david 49
    m1->addAction("Set calculated leg start", this, SLOT(setCalcLegStart()));
135 david 50
    m1->addAction("Set ordered incremental leg start", this, SLOT(setOrderedIncLegStart()));
51
    m1->addAction("Set staggered start time", this, SLOT(setStaggeredLegStart()));
52
    m1->addAction("Set fixed start time", this, SLOT(setFixedLegStart()));
144 david 53
 
54
    QMenu *m2 = new QMenu ("Upload");
55
    ui->menuBar->addMenu(m2);
148 - 56
    m2->addAction("Load team information from external file", this, SLOT(loadExternalTeams()));
153 - 57
    m2->addAction("Store team information to external file", this, SLOT(storeExternalTeams()));
157 david 58
    m2->addAction("Create external leg data file", this, SLOT(storeLegData()));
59
    m2->addAction("Upload time information", this, SLOT(uploadLegData()));
144 david 60
 
160 - 61
    QMenu *m3 = new QMenu ("Reports");
62
    ui->menuBar->addMenu(m3);
63
    m3->addAction("Update event and class placings", this, SLOT(updatePlacings()));
64
    m3->addAction("Generate All Reports", this, SLOT(generateReports()));
165 - 65
    m3->addAction("Display Summary Results", this, SLOT(displaySummary()));
130 david 66
}
67
 
68
MainWindow::~MainWindow()
69
{
70
    delete ui;
71
}
72
 
137 david 73
void MainWindow::showMessage( const QString & msg, int timeout)
74
{
75
    if ( mw )
76
    {
77
        mw->ui->statusBar->showMessage(msg, timeout);
78
    }
79
}
80
 
130 david 81
void MainWindow::changeEvent(QEvent *e)
82
{
83
    QMainWindow::changeEvent(e);
84
    switch (e->type()) {
85
    case QEvent::LanguageChange:
86
        ui->retranslateUi(this);
87
        break;
88
    default:
89
        break;
90
    }
91
}
92
 
93
void MainWindow::setStartTimes(void)
94
{
131 - 95
    if ( QMessageBox::Ok == QMessageBox::warning(this, tr("Mara"),
135 david 96
                                    tr("This will reset the start times for all teams based on the Category configuration.\n"
130 david 97
                                       "Are you sure you want to do this?"),
98
                                    QMessageBox::Cancel,
99
                                    QMessageBox::Ok))
100
    {
131 - 101
        leg_start();
130 david 102
    }
131 - 103
 
130 david 104
}
105
 
131 - 106
void MainWindow::clearLegTimes(void)
107
{
108
    if ( QMessageBox::Ok == QMessageBox::warning(this, tr("Mara"),
109
                                    tr("This will clear ALL leg times for ALL teams.\n"
110
                                       "Are you sure you want to do this?"),
111
                                    QMessageBox::Cancel,
112
                                    QMessageBox::Ok))
113
    {
114
        leg_ini();
115
    }
116
}
117
 
118
void MainWindow::resetTeamData(void)
119
{
120
    if ( QMessageBox::Ok == QMessageBox::warning(this, tr("Mara"),
121
                                    tr("This will clear ALL team information.\n"
122
                                       "Are you sure you want to do this?"),
123
                                    QMessageBox::Cancel,
124
                                    QMessageBox::Ok))
125
    {
126
        tm_init();
127
    }
128
}
129
 
132 - 130
void MainWindow::generateDummyTeamNames(void)
131
{
132
    if ( QMessageBox::Ok == QMessageBox::warning(this, tr("Mara"),
133
                                    tr("This will generate DUMMY team names.\n"
134
                                       "Are you sure you want to do this?"),
135
                                    QMessageBox::Cancel,
136
                                    QMessageBox::Ok))
137
    {
138
        tm_gen();
139
    }
140
}
141
 
133 david 142
void MainWindow::ClearOneLegTimes(void)
143
{
144
    bool ok;
145
    int leg = QInputDialog::getInt(this, tr("Clear One Leg Start Time"),
146
                                              tr("Leg:"), 0, 0, config.num_legs, 1, &ok);
147
    if ( ok && leg)
148
    {
137 david 149
        tm_clearleg_specified(leg, FALSE);
133 david 150
    }
151
}
152
 
153
void MainWindow::setCalcLegStart(void)
154
{
134 - 155
    QmDialogLegStartTimes dialog("Calculate Leg Start Time",this);
135 david 156
    dialog.setDeltaTimeLabel("Delta Time");
157
qDebug ("Must disable stuff");
134 - 158
    if ( QDialog::Accepted == dialog.exec() )
133 david 159
    {
134 - 160
        if ( dialog.getLeg() )
161
        {
162
            tm_lgs(dialog.getLeg(),
135 david 163
                   dialog.getDeltaTime(),
164
                   dialog.getReport(),
165
                   dialog.getClear() );
166
        }
167
    }
168
}
169
 
170
void MainWindow::setOrderedIncLegStart(void)
171
{
172
    QmDialogLegStartTimes dialog("Ordered Incremental Leg Start Time",this);
173
    dialog.setTimeLabel("Start Time");
174
    dialog.setDeltaTimeLabel("Delta Time");
175
    if ( QDialog::Accepted == dialog.exec() )
176
    {
177
        if ( dialog.getLeg() )
178
        {
179
            tm_lgs1(dialog.getLeg(),
134 - 180
                   dialog.getTime(),
135 david 181
                   dialog.getDeltaTime(),
134 - 182
                   dialog.getReport(),
183
                   dialog.getClear() );
184
        }
133 david 185
    }
135 david 186
}
134 - 187
 
135 david 188
void MainWindow::setStaggeredLegStart(void)
189
{
190
    QmDialogLegStartTimes dialog("Staggered Leg Start Time",this);
191
    dialog.setTimeLabel("Start Time");
192
    dialog.setDeltaTimeLabel("Stagger Time");
193
    if ( QDialog::Accepted == dialog.exec() )
194
    {
195
        if ( dialog.getLeg() )
196
        {
197
            tm_staggered(dialog.getLeg(),
198
                   dialog.getTime(),
199
                   dialog.getDeltaTime(),
200
                   dialog.getReport(),
201
                   dialog.getClear() );
202
        }
203
    }
133 david 204
}
135 david 205
 
206
void MainWindow::setFixedLegStart(void)
207
{
208
    QmDialogLegStartTimes dialog("Fixed Leg Start Time",this);
209
    dialog.setTimeLabel("Start Time");
210
    //dialog.setDeltaTimeLabel("Stagger Time");
211
qDebug ("Must Hide stagger time");
212
    if ( QDialog::Accepted == dialog.exec() )
213
    {
214
        if ( dialog.getLeg() )
215
        {
216
            tm_fixedstart(dialog.getLeg(),
217
                   dialog.getTime(),
218
                   //dialog.getDeltaTime(),
219
                   dialog.getReport(),
220
                   dialog.getClear() );
221
        }
222
    }
223
}
148 - 224
 
225
void MainWindow::loadExternalTeams(void)
226
{
149 - 227
    QString fileName = QFileDialog::getOpenFileName(this, tr("Load File"),
228
                                                     QDir::currentPath(),
229
                                                     tr("Data (*.csv);;All (*.*)"),
230
                                                     0,
231
                                                     QFileDialog::ReadOnly);
232
    if ( fileName.isEmpty() )
233
    {
234
        return;
235
    }
236
 
237
    QmDialogLoadExternalTeams dialog(fileName,this);
148 - 238
    dialog.exec();
239
}
240
 
153 - 241
void MainWindow::storeExternalTeams(void)
242
{
243
    QString fileName = QFileDialog::getSaveFileName(this, tr("Store File"),
244
                                                     QDir::currentPath(),
245
                                                     tr("Data (*.csv);;All (*.*)"),
246
 
247
                                                     );
248
    if ( fileName.isEmpty() )
249
    {
250
        return;
251
    }
252
    MainWindow::showMessage("Writing external data");
253
    QmDialogLoadExternalTeams::storeData(fileName);
155 david 254
    MainWindow::showMessage("Writing external data completed");
153 - 255
}
256
 
156 david 257
void MainWindow::storeTeamInfo(void)
258
{
259
    QString fileName = QFileDialog::getSaveFileName(this, tr("Store Team Info File"),
260
                                                     QDir::currentPath(),
261
                                                     tr("Data (*.txt);;All (*.*)"),
262
 
263
                                                     );
264
    if ( fileName.isEmpty() )
265
    {
266
        return;
267
    }
268
    MainWindow::showMessage("Writing team info");
269
    QmDialogLoadExternalTeams::storeTeamInfo(fileName);
270
    MainWindow::showMessage("Writing team info completed");
271
}
272
 
157 david 273
void MainWindow::storeLegData(void)
274
{
275
    MainWindow::showMessage("Store Leg Data: Not yet implemented");
276
}
277
 
278
void MainWindow::uploadLegData(void)
279
{
280
    QmDialogUploadLegTimes  dialog(this);
281
    dialog.exec();
282
}
283
 
160 - 284
void MainWindow::updatePlacings(void)
285
{
286
    if( load_report_data() )
287
    {
288
        srt_place();
289
    }
290
}
291
 
292
void MainWindow::generateReports(void)
293
{
294
    if( load_report_data() )
295
    {
296
        pri_all_reports();
297
    }
298
}
299
 
165 - 300
#include <QGroupBox>
301
#include <QTableWidget>
302
#include <QVBoxLayout>
303
#include <QStringList>
304
void MainWindow::displaySummary(void)
305
{
306
    if( load_report_data() )
307
    {
308
        t_class_summary data;
309
        calc_class_summary( & data );
310
        QDialog dialog(this);
311
        QVBoxLayout *layout = new QVBoxLayout;
312
        dialog.setLayout(layout);
313
        dialog.setSizeGripEnabled(true);
314
        QGroupBox *gb = new QGroupBox("Summary Display", &dialog);
315
        layout->addWidget(gb);
130 david 316
 
165 - 317
        QVBoxLayout *layout2 = new QVBoxLayout;
318
        gb->setLayout(layout2);
319
 
320
        QTableWidget *tb = new QTableWidget(config.num_class + 1,4);
321
        tb->horizontalHeader()->setStretchLastSection(true);
322
        tb->horizontalHeader()->setAlternatingRowColors(true);
323
        tb->horizontalHeader()->setSortIndicatorShown(true);
324
        QStringList labels;
325
        labels << "Category" << "Total" << "Disq" << "NonEq";
326
        tb->setHorizontalHeaderLabels(labels);
327
        tb->verticalHeader()->setDefaultSectionSize(17);
328
        tb->setSortingEnabled(false);
329
        layout2->addWidget(tb);
330
 
331
        // Insert summary data
332
        int ii;
333
        QTableWidgetItem *item;
334
        for (ii = 0; ii < config.num_class; ii++)
335
        {
336
 
337
            tb->setItem(ii,0, new QTableWidgetItem(config.team_class[ii].full_name));
338
 
339
            item = new QTableWidgetItem();
340
            item->setData(0,data.teamclass[ii+1].total);
341
            tb->setItem(ii,1, item);
342
 
343
            item = new QTableWidgetItem();
344
            item->setData(0,data.teamclass[ii+1].disqualified);
345
            tb->setItem(ii,2, item);
346
 
347
            item = new QTableWidgetItem();
348
            item->setData(0,data.teamclass[ii+1].non_equestrian);
349
            tb->setItem(ii,3, item);
350
 
351
        }
352
 
353
        tb->setItem(ii,0, new QTableWidgetItem("Totals"));
354
        item = new QTableWidgetItem();
355
        item->setData(0,data.total.total);
356
        tb->setItem(ii,1, item);
357
 
358
        item = new QTableWidgetItem();
359
        item->setData(0,data.total.disqualified);
360
        tb->setItem(ii,2, item);
361
 
362
        item = new QTableWidgetItem();
363
        item->setData(0,data.total.non_equestrian);
364
        tb->setItem(ii,3, item);
365
 
366
        tb->setSortingEnabled(true);
367
        tb->resizeColumnsToContents();
368
        tb->resizeRowsToContents();
369
 
370
        // Show the dialog
371
        dialog.exec();
372
    }
373
}
374
 
375