Subversion Repositories svn1

Rev

Rev 226 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 226 Rev 227
Line 10... Line 10...
10
#include "spinboxdelegate.h"
10
#include "spinboxdelegate.h"
11
#include "timedelegate.h"
11
#include "timedelegate.h"
12
#include "textdelegate.h"
12
#include "textdelegate.h"
13
#include <QMenu>
13
#include <QMenu>
14
 
14
 
-
 
15
#define COL_ABR 0
-
 
16
#define COL_CLASS 1
-
 
17
#define COL_TIME 2
-
 
18
#define COL_WINNERS 3
-
 
19
#define COL_NE 4
-
 
20
#define COL_NE_WINNERS 5
-
 
21
#define COL_ST_TOTAL 6
-
 
22
#define COL_ST_DISQ 7
-
 
23
#define COL_ST_NONEQ 8
-
 
24
#define COL_ST_VET 9
-
 
25
#define COL_COUNT 10
-
 
26
 
-
 
27
 
15
QmConfClass::QmConfClass(QWidget *parent) :
28
QmConfClass::QmConfClass(QWidget *parent) :
16
    QWidget(parent),
29
    QWidget(parent),
17
    ui(new Ui::QmConfClass)
30
    ui(new Ui::QmConfClass)
18
{
31
{
19
    ui->setupUi(this);
32
    ui->setupUi(this);
20
    populating = false;
33
    populating = false;
21
    connect(ui->pushButtonSave, SIGNAL(clicked(bool)), this, SLOT(save()) );
34
    connect(ui->pushButtonSave, SIGNAL(clicked(bool)), this, SLOT(save()) );
22
    connect(ui->pushButtonRestore, SIGNAL(clicked(bool)), this, SLOT(cancel()) );
35
    connect(ui->pushButtonRestore, SIGNAL(clicked(bool)), this, SLOT(cancel()) );
23
 
36
 
24
    QStringList labels;
37
    QStringList labels;
25
         labels << "Abr" << "Full Name" << "Start Time" << "Winners" << "NE";
38
         labels << "Abr" << "Full Name" << "Start Time" << "Winners" << "NE" << "NE Winners";
26
 
39
 
27
 
40
 
28
    ui->tableWidget->setRowCount(config.num_class + 1);
41
    ui->tableWidget->setRowCount(config.num_class + 1);
29
    ui->tableWidget->setColumnCount(9);
42
    ui->tableWidget->setColumnCount(COL_COUNT);
30
    ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
43
    ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
31
    connect(ui->tableWidget, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(ctxMenu(const QPoint &)));
44
    connect(ui->tableWidget, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(ctxMenu(const QPoint &)));
32
    connect(ui->tableWidget, SIGNAL(cellChanged(int,int)), this, SLOT(cellChanged(int,int)));
45
    connect(ui->tableWidget, SIGNAL(cellChanged(int,int)), this, SLOT(cellChanged(int,int)));
33
 
46
 
34
 
47
 
35
    /*
48
    /*
36
    **  Setup delegated for specialised editing
49
    **  Setup delegated for specialised editing
37
    */
50
    */
38
    ui->tableWidget->setItemDelegateForColumn(0, new textDelegate(2));
51
    ui->tableWidget->setItemDelegateForColumn(COL_ABR, new textDelegate(2));
39
    ui->tableWidget->setItemDelegateForColumn(1, new textDelegate(LEN_CLASS_NAME));
52
    ui->tableWidget->setItemDelegateForColumn(COL_CLASS, new textDelegate(LEN_CLASS_NAME));
40
    ui->tableWidget->setItemDelegateForColumn(2, new timeDelegate());
53
    ui->tableWidget->setItemDelegateForColumn(COL_TIME, new timeDelegate());
41
    ui->tableWidget->setItemDelegateForColumn(3, new SpinBoxDelegate(0,50));
54
    ui->tableWidget->setItemDelegateForColumn(COL_WINNERS, new SpinBoxDelegate(0,50));
-
 
55
    ui->tableWidget->setItemDelegateForColumn(COL_NE_WINNERS, new SpinBoxDelegate(0,50));
42
 
56
 
43
    populate();
57
    populate();
44
 
58
 
45
 
59
 
46
    // Wire in the status button
60
    // Wire in the status button
47
    connect(ui->statusButton, SIGNAL(clicked()), this, SLOT(updateStatus()));
61
    connect(ui->statusButton, SIGNAL(clicked()), this, SLOT(updateStatus()));
48
    statusShown = false;
62
    statusShown = false;
49
    ui->tableWidget->setColumnHidden(5, true);
63
    ui->tableWidget->setColumnHidden(COL_ST_TOTAL, true);
50
    ui->tableWidget->setColumnHidden(6, true);
64
    ui->tableWidget->setColumnHidden(COL_ST_DISQ, true);
51
    ui->tableWidget->setColumnHidden(7, true);
65
    ui->tableWidget->setColumnHidden(COL_ST_NONEQ, true);
52
    ui->tableWidget->setColumnHidden(8, true);
66
    ui->tableWidget->setColumnHidden(COL_ST_VET, true);
53
 
67
 
54
    labels << "Total" <<"Disqual" << "NonEq" << "VetCheck";
68
    labels << "Total" <<"Disqual" << "NonEq" << "VetCheck";
55
 
69
 
56
    ui->tableWidget->setHorizontalHeaderLabels(labels);
70
    ui->tableWidget->setHorizontalHeaderLabels(labels);
57
    ui->tableWidget->resizeColumnsToContents();
71
    ui->tableWidget->resizeColumnsToContents();
Line 62... Line 76...
62
{
76
{
63
    populating = true;
77
    populating = true;
64
    ui->tableWidget->setRowCount(config.num_class + 1);
78
    ui->tableWidget->setRowCount(config.num_class + 1);
65
    for ( int ii = 0; ii < MAX_CLASS; ii++)
79
    for ( int ii = 0; ii < MAX_CLASS; ii++)
66
    {
80
    {
67
        ui->tableWidget->setItem(ii, 0, new QTableWidgetItem(config.team_class[ii].abr) );
81
        ui->tableWidget->setItem(ii, COL_ABR, new QTableWidgetItem(config.team_class[ii].abr) );
68
        ui->tableWidget->setItem(ii, 1, new QTableWidgetItem(config.team_class[ii].full_name ));
82
        ui->tableWidget->setItem(ii, COL_CLASS, new QTableWidgetItem(config.team_class[ii].full_name ));
69
 
83
 
70
        if ( *config.team_class[ii].abr )
84
        if ( *config.team_class[ii].abr )
71
        {
85
        {
72
            QTableWidgetItem *item;
86
            QTableWidgetItem *item;
73
            item = new QTableWidgetItem();
87
            item = new QTableWidgetItem();
74
            item->setData(Qt::EditRole,QTime().addSecs(config.team_class[ii].start) );
88
            item->setData(Qt::EditRole,QTime().addSecs(config.team_class[ii].start) );
75
            ui->tableWidget->setItem(ii, 2, item);
89
            ui->tableWidget->setItem(ii, COL_TIME, item);
76
 
90
 
77
            item = new QTableWidgetItem();
91
            item = new QTableWidgetItem();
78
            item->setData(Qt::EditRole,config.class_winners[ii] );
92
            item->setData(Qt::EditRole,config.class_winners[ii] );
79
            ui->tableWidget->setItem(ii, 3, item);
93
            ui->tableWidget->setItem(ii, COL_WINNERS, item);
80
 
94
 
81
            item = new QTableWidgetItem();
95
            item = new QTableWidgetItem();
82
            item->setCheckState(config.nonequestrian_class == 1 + ii ? Qt::Checked : Qt::Unchecked);
96
            item->setCheckState(config.nonequestrian_class == 1 + ii ? Qt::Checked : Qt::Unchecked);
83
            ui->tableWidget->setItem(ii, 4, item);
97
            ui->tableWidget->setItem(ii, COL_NE, item);
84
 
98
 
-
 
99
            item = new QTableWidgetItem();
-
 
100
            item->setData(Qt::EditRole,config.class_ne_winners[ii] );
-
 
101
            ui->tableWidget->setItem(ii, COL_NE_WINNERS, item);
85
        }
102
        }
86
    }
103
    }
87
    updateChanged(false);
104
    updateChanged(false);
88
    populating = false;
105
    populating = false;
89
}
106
}
Line 98... Line 115...
98
    /*
115
    /*
99
    **  Extract the data from the Widgets
116
    **  Extract the data from the Widgets
100
    */
117
    */
101
    for ( int ii = 0; ii < MAX_CLASS; ii++)
118
    for ( int ii = 0; ii < MAX_CLASS; ii++)
102
    {
119
    {
103
        QTableWidgetItem *item = ui->tableWidget->item ( ii, 0 );
120
        QTableWidgetItem *item = ui->tableWidget->item ( ii, COL_ABR );
104
        if ( item )
121
        if ( item )
105
        {
122
        {
106
            strncpy(newcfg.team_class[ii].abr, qPrintable(item->text()), sizeof(newcfg.team_class[ii].abr)-1);
123
            strncpy(newcfg.team_class[ii].abr, qPrintable(item->text()), sizeof(newcfg.team_class[ii].abr)-1);
107
        }
124
        }
108
        else
125
        else
109
        {
126
        {
110
            *newcfg.team_class[ii].abr = 0;
127
            *newcfg.team_class[ii].abr = 0;
111
        }
128
        }
112
 
129
 
113
        item = ui->tableWidget->item ( ii, 1 );
130
        item = ui->tableWidget->item ( ii, COL_CLASS );
114
        if ( item )
131
        if ( item )
115
        {
132
        {
116
            strncpy(newcfg.team_class[ii].full_name, qPrintable(item->text()), sizeof(newcfg.team_class[ii].full_name)-1);
133
            strncpy(newcfg.team_class[ii].full_name, qPrintable(item->text()), sizeof(newcfg.team_class[ii].full_name)-1);
117
        }
134
        }
118
        else
135
        else
119
        {
136
        {
120
            *newcfg.team_class[ii].full_name = 0;
137
            *newcfg.team_class[ii].full_name = 0;
121
        }
138
        }
122
 
139
 
123
        item = ui->tableWidget->item( ii, 2 );
140
        item = ui->tableWidget->item( ii, COL_TIME );
124
        if ( item )
141
        if ( item )
125
        {
142
        {
126
            QVariant data = item->data(Qt::EditRole);
143
            QVariant data = item->data(Qt::EditRole);
127
            if (data.isValid())
144
            if (data.isValid())
128
            {
145
            {
Line 136... Line 153...
136
        else
153
        else
137
        {
154
        {
138
            newcfg.team_class[ii].start = -1;
155
            newcfg.team_class[ii].start = -1;
139
        }
156
        }
140
 
157
 
141
        item = ui->tableWidget->item( ii, 3 );
158
        item = ui->tableWidget->item( ii, COL_WINNERS );
142
        if ( item )
159
        if ( item )
143
        {
160
        {
144
            newcfg.class_winners[ii] = item->data(Qt::EditRole).toInt();
161
            newcfg.class_winners[ii] = item->data(Qt::EditRole).toInt();
145
        }
162
        }
146
        else
163
        else
147
        {
164
        {
148
            newcfg.class_winners[ii] = 0;
165
            newcfg.class_winners[ii] = 0;
149
        }
166
        }
-
 
167
 
150
        item = ui->tableWidget->item( ii, 4 );
168
        item = ui->tableWidget->item( ii, COL_NE );
151
        if ( item )
169
        if ( item )
152
        {
170
        {
153
            if ( item->checkState() == Qt::Checked)
171
            if ( item->checkState() == Qt::Checked)
154
            {
172
            {
155
                newcfg.nonequestrian_class = ii;
173
                newcfg.nonequestrian_class = ii;
156
                strncpy(newcfg.nonequestrian_class_abr, newcfg.team_class[ii].abr, sizeof(newcfg.team_class[ii].abr)-1);
174
                strncpy(newcfg.nonequestrian_class_abr, newcfg.team_class[ii].abr, sizeof(newcfg.team_class[ii].abr)-1);
157
            }
175
            }
158
        }
176
        }
-
 
177
 
-
 
178
        item = ui->tableWidget->item( ii, COL_NE_WINNERS );
-
 
179
        if ( item )
-
 
180
        {
-
 
181
            newcfg.class_ne_winners[ii] = item->data(Qt::EditRole).toInt();
-
 
182
        }
-
 
183
        else
-
 
184
        {
-
 
185
            newcfg.class_ne_winners[ii] = 0;
-
 
186
        }
159
    }
187
    }
160
    
188
    
161
    // Validate the data
189
    // Validate the data
162
    try
190
    try
163
    {
191
    {
Line 219... Line 247...
219
 
247
 
220
                MainWindow::showMessage( QString("Warning: Class without winners:") + newcfg.team_class[i].abr );
248
                MainWindow::showMessage( QString("Warning: Class without winners:") + newcfg.team_class[i].abr );
221
            }
249
            }
222
        }
250
        }
223
 
251
 
-
 
252
        /*
-
 
253
        ** Cannot mix winners for NE class and NE Winners for each class
-
 
254
        */
-
 
255
        if (newcfg.nonequestrian_class)
-
 
256
        {
-
 
257
            newcfg.class_ne_winners_by_class = false;
-
 
258
            for( int i = 0; i < MAX_CLASS; i++ )
-
 
259
            {
-
 
260
                newcfg.class_ne_winners_by_class = true;
-
 
261
                break;
-
 
262
            }
-
 
263
            if (newcfg.class_winners[newcfg.nonequestrian_class - 1] && newcfg.class_ne_winners_by_class )
-
 
264
            {
-
 
265
                MainWindow::showMessage( QString("Should not mix NE winners by each class and by NE Class"));
-
 
266
                //throw( "Error: Cannot mix NE winners by each class and by NE Class" );
-
 
267
            }
-
 
268
        }
-
 
269
 
-
 
270
 
224
        config = newcfg;
271
        config = newcfg;
225
        config.write_config();
272
        config.write_config();
226
        updateChanged(false);
273
        updateChanged(false);
227
 
274
 
228
    }
275
    }
Line 272... Line 319...
272
void QmConfClass::updateStatus(void)
319
void QmConfClass::updateStatus(void)
273
{
320
{
274
    populating = true;
321
    populating = true;
275
    if (!statusShown)
322
    if (!statusShown)
276
    {
323
    {
277
        ui->tableWidget->setColumnHidden(5, false);
324
        ui->tableWidget->setColumnHidden(COL_ST_TOTAL, false);
278
        ui->tableWidget->setColumnHidden(6, false);
325
        ui->tableWidget->setColumnHidden(COL_ST_DISQ, false);
279
        ui->tableWidget->setColumnHidden(7, false);
326
        ui->tableWidget->setColumnHidden(COL_ST_NONEQ, false);
280
        ui->tableWidget->setColumnHidden(8, false);
327
        ui->tableWidget->setColumnHidden(COL_ST_VET, false);
281
        statusShown = true;
328
        statusShown = true;
282
    }
329
    }
283
 
330
 
284
    if( load_report_data() )
331
    if( load_report_data() )
285
    {
332
    {
Line 291... Line 338...
291
        for (ii = 0; ii < config.num_class; ii++)
338
        for (ii = 0; ii < config.num_class; ii++)
292
        {
339
        {
293
            QTableWidgetItem *item;
340
            QTableWidgetItem *item;
294
            item = new QTableWidgetItem(QString::number(data.teamclass[ii+1].total));
341
            item = new QTableWidgetItem(QString::number(data.teamclass[ii+1].total));
295
            item->setFlags(Qt::NoItemFlags);
342
            item->setFlags(Qt::NoItemFlags);
296
            ui->tableWidget->setItem(ii,5, item );
343
            ui->tableWidget->setItem(ii,COL_ST_TOTAL, item );
297
 
344
 
298
            item = new QTableWidgetItem(QString::number(data.teamclass[ii+1].disqualified)) ;
345
            item = new QTableWidgetItem(QString::number(data.teamclass[ii+1].disqualified)) ;
299
            item->setFlags(Qt::NoItemFlags);
346
            item->setFlags(Qt::NoItemFlags);
300
            ui->tableWidget->setItem(ii,6, item);
347
            ui->tableWidget->setItem(ii,COL_ST_DISQ, item);
301
 
348
 
302
            item = new QTableWidgetItem(QString::number(data.teamclass[ii+1].non_equestrian));
349
            item = new QTableWidgetItem(QString::number(data.teamclass[ii+1].non_equestrian));
303
            item->setFlags(Qt::NoItemFlags);
350
            item->setFlags(Qt::NoItemFlags);
304
            ui->tableWidget->setItem(ii,7, item);
351
            ui->tableWidget->setItem(ii,COL_ST_NONEQ, item);
305
 
352
 
306
            item = new QTableWidgetItem(QString::number(data.teamclass[ii+1].vet_check));
353
            item = new QTableWidgetItem(QString::number(data.teamclass[ii+1].vet_check));
307
            item->setFlags(Qt::NoItemFlags);
354
            item->setFlags(Qt::NoItemFlags);
308
            ui->tableWidget->setItem(ii,8, item);
355
            ui->tableWidget->setItem(ii,COL_ST_VET, item);
309
        }
356
        }
310
 
357
 
311
        ui->tableWidget->resizeColumnsToContents();
358
        ui->tableWidget->resizeColumnsToContents();
312
        ui->tableWidget->resizeRowsToContents();
359
        ui->tableWidget->resizeRowsToContents();
313
    }
360
    }
Line 319... Line 366...
319
    if ( populating )
366
    if ( populating )
320
        return;
367
        return;
321
    updateChanged(true);
368
    updateChanged(true);
322
    populating = true;
369
    populating = true;
323
    //qDebug("Cell changed: %d, %d", row, col);
370
    //qDebug("Cell changed: %d, %d", row, col);
324
    if (col == 4)
371
    if (col == COL_NE)
325
    {
372
    {
326
        for (int ii = 0; ii < ui->tableWidget->rowCount(); ii++)
373
        for (int ii = 0; ii < ui->tableWidget->rowCount(); ii++)
327
        {
374
        {
328
            QTableWidgetItem *item = ui->tableWidget->item(ii, 4);
375
            QTableWidgetItem *item = ui->tableWidget->item(ii, COL_NE);
329
            if (item)
376
            if (item)
330
            {
377
            {
331
                item->setCheckState(ii == row ? Qt::Checked : Qt::Unchecked);
378
                item->setCheckState(ii == row ? Qt::Checked : Qt::Unchecked);
332
            }
379
            }
333
        }
380
        }
Line 340... Line 387...
340
    if (newDirty != dirty)
387
    if (newDirty != dirty)
341
    {
388
    {
342
        dirty = newDirty;
389
        dirty = newDirty;
343
        if (dirty)
390
        if (dirty)
344
        {
391
        {
345
            ui->Changed->setVisible(true);
-
 
346
            ui->pushButtonSave->setEnabled(true);
392
            ui->pushButtonSave->setEnabled(true);
347
            ui->pushButtonSave->setStyleSheet("background-color: rgb(255, 0, 0);");
393
            ui->pushButtonSave->setStyleSheet("background-color: rgb(255, 0, 0);");
348
        }
394
        }
349
        else
395
        else
350
        {
396
        {
351
            ui->Changed->setVisible(false);
-
 
352
            ui->pushButtonSave->setEnabled(false);
397
            ui->pushButtonSave->setEnabled(false);
353
            ui->pushButtonSave->setStyleSheet("");
398
            ui->pushButtonSave->setStyleSheet("");
354
        }
399
        }
355
    }
400
    }
356
}
401
}