Subversion Repositories svn1

Rev

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

Rev 176 Rev 180
Line 2... Line 2...
2
#include "qmconfig.h"
2
#include "qmconfig.h"
3
#include "ui_qmconfclass.h"
3
#include "ui_qmconfclass.h"
4
#include    "consts.h"
4
#include    "consts.h"
5
#include    "structs.h"
5
#include    "structs.h"
6
#include    "proto.h"
6
#include    "proto.h"
-
 
7
#include "mainwindow.h"
7
 
8
 
8
#include "QTableWidgetItem"
9
#include "QTableWidgetItem"
9
#include "spinboxdelegate.h"
10
#include "spinboxdelegate.h"
10
#include "timedelegate.h"
11
#include "timedelegate.h"
11
#include "textdelegate.h"
12
#include "textdelegate.h"
-
 
13
#include <QMenu>
12
 
14
 
13
QmConfClass::QmConfClass(QWidget *parent) :
15
QmConfClass::QmConfClass(QWidget *parent) :
14
    QWidget(parent),
16
    QWidget(parent),
15
    ui(new Ui::QmConfClass)
17
    ui(new Ui::QmConfClass)
16
{
18
{
Line 19... Line 21...
19
    connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(cancel()) );
21
    connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(cancel()) );
20
 
22
 
21
    QStringList labels;
23
    QStringList labels;
22
         labels << "Abr" << "Full Name" << "Start Time" << "Winners";
24
         labels << "Abr" << "Full Name" << "Start Time" << "Winners";
23
 
25
 
-
 
26
 
24
    ui->tableWidget->setHorizontalHeaderLabels(labels);
27
    ui->tableWidget->setRowCount(config.num_class + 1);
25
    ui->tableWidget->setRowCount(MAX_CLASS);
28
    ui->tableWidget->setColumnCount(8);
-
 
29
    ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
-
 
30
    connect(ui->tableWidget, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(ctxMenu(const QPoint &)));
-
 
31
 
26
 
32
 
27
    /*
33
    /*
28
    **  Setup delegated for specialised editing
34
    **  Setup delegated for specialised editing
29
    */
35
    */
30
    ui->tableWidget->setItemDelegateForColumn(0, new textDelegate(2));
36
    ui->tableWidget->setItemDelegateForColumn(0, new textDelegate(2));
31
    ui->tableWidget->setItemDelegateForColumn(1, new textDelegate(LEN_CLASS_NAME));
37
    ui->tableWidget->setItemDelegateForColumn(1, new textDelegate(LEN_CLASS_NAME));
32
    ui->tableWidget->setItemDelegateForColumn(2, new timeDelegate());
38
    ui->tableWidget->setItemDelegateForColumn(2, new timeDelegate());
33
    ui->tableWidget->setItemDelegateForColumn(3, new SpinBoxDelegate(0,50));
39
    ui->tableWidget->setItemDelegateForColumn(3, new SpinBoxDelegate(0,50));
34
 
40
 
35
    populate();
41
    populate();
-
 
42
 
-
 
43
 
-
 
44
    // Wire in the status button
-
 
45
    connect(ui->statusButton, SIGNAL(clicked()), this, SLOT(updateStatus()));
-
 
46
    statusShown = false;
-
 
47
    ui->tableWidget->setColumnHidden(5, true);
-
 
48
    ui->tableWidget->setColumnHidden(6, true);
-
 
49
    ui->tableWidget->setColumnHidden(7, true);
-
 
50
 
-
 
51
    labels << "" << "Total" <<"Disqual" << "NonEq";
-
 
52
 
-
 
53
    ui->tableWidget->setHorizontalHeaderLabels(labels);
36
    ui->tableWidget->resizeColumnsToContents();
54
    ui->tableWidget->resizeColumnsToContents();
-
 
55
 
37
}
56
}
38
 
57
 
39
void QmConfClass::populate(void)
58
void QmConfClass::populate(void)
40
{
59
{
-
 
60
    ui->tableWidget->setRowCount(config.num_class + 1);
41
    for ( int ii = 0; ii < MAX_CLASS; ii++)
61
    for ( int ii = 0; ii < MAX_CLASS; ii++)
42
    {
62
    {
43
        ui->tableWidget->setItem(ii, 0, new QTableWidgetItem(config.team_class[ii].abr) );
63
        ui->tableWidget->setItem(ii, 0, new QTableWidgetItem(config.team_class[ii].abr) );
44
        ui->tableWidget->setItem(ii, 1, new QTableWidgetItem(config.team_class[ii].full_name ));
64
        ui->tableWidget->setItem(ii, 1, new QTableWidgetItem(config.team_class[ii].full_name ));
45
 
65
 
Line 124... Line 144...
124
 
144
 
125
    for( int i = 0; i < MAX_CLASS; i++ )
145
    for( int i = 0; i < MAX_CLASS; i++ )
126
    {
146
    {
127
        if( ( newcfg.team_class[i].abr[0] == '\0' ) != ( newcfg.team_class[i].full_name[0] == '\0' ) )
147
        if( ( newcfg.team_class[i].abr[0] == '\0' ) != ( newcfg.team_class[i].full_name[0] == '\0' ) )
128
        {
148
        {
129
            printf( "Configuration error. Class without description\n" );
149
            MainWindow::showMessage( "Configuration error. Class without description" );
130
            error++;
150
            error++;
131
        }
151
        }
132
        if( newcfg.team_class[i].abr[0] != '\0' && newcfg.team_class[i].start < 0L )
152
        if( newcfg.team_class[i].abr[0] != '\0' && newcfg.team_class[i].start < 0L )
133
        {
153
        {
134
            printf( "Configuration error. Bad start time on class\n" );
154
            MainWindow::showMessage( "Configuration error. Bad start time on class" );
135
            error++;
155
            error++;
136
        }
156
        }
137
    }
157
    }
138
 
158
 
139
    newcfg.num_class = 0;
159
    newcfg.num_class = 0;
Line 142... Line 162...
142
            newcfg.num_class++;
162
            newcfg.num_class++;
143
 
163
 
144
    for( int i = newcfg.num_class; i < MAX_CLASS; i++ )
164
    for( int i = newcfg.num_class; i < MAX_CLASS; i++ )
145
        if( newcfg.team_class[i].full_name[0] )
165
        if( newcfg.team_class[i].full_name[0] )
146
        {
166
        {
147
            printf( "Configuration error: Missing Class name. Gaps not allowed\n" );
167
            MainWindow::showMessage( "Configuration error: Missing Class name. Gaps not allowed" );
148
            error++;
168
            error++;
149
        }
169
        }
150
 
170
 
151
    if( newcfg.num_class == 0 )
171
    if( newcfg.num_class == 0 )
152
    {
172
    {
153
        printf( "Error: No categories defined\n" );
173
        MainWindow::showMessage( "Error: No categories defined" );
154
        error++;
174
        error++;
155
    }
175
    }
156
 
176
 
157
    newcfg.nonequestrian_class = newcfg.lookup_class( newcfg.nonequestrian_class_abr );
177
    newcfg.nonequestrian_class = newcfg.lookup_class( newcfg.nonequestrian_class_abr );
158
    if( newcfg.equestrian_leg && newcfg.nonequestrian_class == 0 )
178
    if( newcfg.equestrian_leg && newcfg.nonequestrian_class == 0 )
159
        printf( "WARNING: Non-equestrian class not found\n" );
179
        MainWindow::showMessage( "WARNING: Non-equestrian class not found" );
160
 
180
 
161
    /*
181
    /*
162
    **  Sanity test of the data
182
    **  Sanity test of the data
163
    */
183
    */
164
    for( int i = 0; i < MAX_CLASS; i++ )
184
    for( int i = 0; i < MAX_CLASS; i++ )
165
    {
185
    {
166
        if( newcfg.team_class[i].abr[0] != '\0' && newcfg.class_winners[i] == 0 )
186
        if( newcfg.team_class[i].abr[0] != '\0' && newcfg.class_winners[i] == 0 )
167
        {
187
        {
168
            printf( "  Warning: Class without winners: %s\n", newcfg.team_class[i].abr );
188
            //MainWindow::showMessage( "  Warning: Class without winners: %s", newcfg.team_class[i].abr );
-
 
189
            MainWindow::showMessage( QString("Warning: Class without winners:") + newcfg.team_class[i].abr );
169
        }
190
        }
170
 
191
 
171
//        if ( newcfg.class_winners[i] > class_summary.teamclass[i+1].total )
192
//        if ( newcfg.class_winners[i] > class_summary.teamclass[i+1].total )
172
//        {
193
//        {
173
//            printf( "  Warning: Num winners greater than those in class: %s\n", newcfg.team_class[i].abr );
194
//            printf( "  Warning: Num winners greater than those in class: %s\n", newcfg.team_class[i].abr );
Line 177... Line 198...
177
 
198
 
178
    if ( error == 0 )
199
    if ( error == 0 )
179
    {
200
    {
180
        config = newcfg;
201
        config = newcfg;
181
        config.write_config();
202
        config.write_config();
-
 
203
        MainWindow::showMessage( "Config Saved");
182
    }
204
    }
183
 
205
 
184
}
206
}
185
 
207
 
186
void QmConfClass::cancel(void)
208
void QmConfClass::cancel(void)
Line 191... Line 213...
191
QmConfClass::~QmConfClass()
213
QmConfClass::~QmConfClass()
192
{
214
{
193
    delete ui;
215
    delete ui;
194
}
216
}
195
 
217
 
-
 
218
void QmConfClass::ctxMenu(const QPoint & pos)
-
 
219
{
-
 
220
    qDebug("Context Menu");
-
 
221
    QMenu *menu = new QMenu;
-
 
222
    int trow = 0;
-
 
223
    menu->setTitle("Add/Remove Category");
-
 
224
 
-
 
225
    QTableWidgetItem *item;
-
 
226
    item = ui->tableWidget->itemAt(pos);
-
 
227
    menu->addAction(tr("New Category"), this, SLOT(ctxMenuAddRow()));
-
 
228
    if (item)
-
 
229
    {
-
 
230
        menu->addAction(tr("Delete Category"), this, SLOT(ctxMenuDeleteRow()));
-
 
231
    }
-
 
232
   menu->exec(ui->tableWidget->mapToGlobal(pos));
-
 
233
 
-
 
234
}
-
 
235
 
-
 
236
void QmConfClass::ctxMenuDeleteRow(void)
-
 
237
{
-
 
238
    //qDebug ("DELETE ROW: %d", ui->tableWidget->currentRow () );
-
 
239
    ui->tableWidget->removeRow(ui->tableWidget->currentRow ());
-
 
240
}
-
 
241
 
-
 
242
void QmConfClass::ctxMenuAddRow(void)
-
 
243
{
-
 
244
    ui->tableWidget->setRowCount( 1+ ui->tableWidget->rowCount());
-
 
245
}
-
 
246
 
-
 
247
void QmConfClass::updateStatus(void)
-
 
248
{
-
 
249
    if (!statusShown)
-
 
250
    {
-
 
251
        ui->tableWidget->setColumnHidden(5, false);
-
 
252
        ui->tableWidget->setColumnHidden(6, false);
-
 
253
        ui->tableWidget->setColumnHidden(7, false);
-
 
254
        statusShown = true;
-
 
255
    }
-
 
256
 
-
 
257
    if( load_report_data() )
-
 
258
    {
-
 
259
        t_class_summary data;
-
 
260
        calc_class_summary( & data );
-
 
261
 
-
 
262
        // Insert summary data
-
 
263
        int ii;
-
 
264
        for (ii = 0; ii < config.num_class; ii++)
-
 
265
        {
-
 
266
            QTableWidgetItem *item;
-
 
267
            item = new QTableWidgetItem(QString::number(data.teamclass[ii+1].total));
-
 
268
            item->setFlags(Qt::NoItemFlags);
-
 
269
            ui->tableWidget->setItem(ii,5, item );
-
 
270
 
-
 
271
            item = new QTableWidgetItem(QString::number(data.teamclass[ii+1].disqualified)) ;
-
 
272
            item->setFlags(Qt::NoItemFlags);
-
 
273
            ui->tableWidget->setItem(ii,6, item);
-
 
274
 
-
 
275
            item = new QTableWidgetItem(QString::number(data.teamclass[ii+1].non_equestrian));
-
 
276
            item->setFlags(Qt::NoItemFlags);
-
 
277
            ui->tableWidget->setItem(ii,7, item);
-
 
278
        }
-
 
279
 
-
 
280
        ui->tableWidget->resizeColumnsToContents();
-
 
281
        ui->tableWidget->resizeRowsToContents();
-
 
282
    }
-
 
283
}
-
 
284
 
196
void QmConfClass::changeEvent(QEvent *e)
285
void QmConfClass::changeEvent(QEvent *e)
197
{
286
{
198
    QWidget::changeEvent(e);
287
    QWidget::changeEvent(e);
199
    switch (e->type()) {
288
    switch (e->type()) {
200
    case QEvent::LanguageChange:
289
    case QEvent::LanguageChange: