Subversion Repositories svn1

Rev

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

Rev Author Line No. Line
95 david 1
#include "qmconfclass.h"
174 - 2
#include "qmconfig.h"
95 david 3
#include "ui_qmconfclass.h"
99 david 4
#include    "consts.h"
5
#include    "structs.h"
6
#include    "proto.h"
95 david 7
 
99 david 8
#include "QTableWidgetItem"
107 david 9
#include "spinboxdelegate.h"
10
#include "timedelegate.h"
111 david 11
#include "textdelegate.h"
99 david 12
 
104 - 13
QmConfClass::QmConfClass(QWidget *parent) :
95 david 14
    QWidget(parent),
104 - 15
    ui(new Ui::QmConfClass)
95 david 16
{
17
    ui->setupUi(this);
99 david 18
    connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(save()) );
19
    connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(cancel()) );
20
 
109 david 21
    QStringList labels;
22
         labels << "Abr" << "Full Name" << "Start Time" << "Winners";
23
 
24
    ui->tableWidget->setHorizontalHeaderLabels(labels);
99 david 25
    ui->tableWidget->setRowCount(MAX_CLASS);
107 david 26
 
27
    /*
28
    **  Setup delegated for specialised editing
29
    */
111 david 30
    ui->tableWidget->setItemDelegateForColumn(0, new textDelegate(2));
31
    ui->tableWidget->setItemDelegateForColumn(1, new textDelegate(LEN_CLASS_NAME));
107 david 32
    ui->tableWidget->setItemDelegateForColumn(2, new timeDelegate());
110 - 33
    ui->tableWidget->setItemDelegateForColumn(3, new SpinBoxDelegate(0,50));
107 david 34
 
99 david 35
    populate();
111 david 36
    ui->tableWidget->resizeColumnsToContents();
95 david 37
}
38
 
104 - 39
void QmConfClass::populate(void)
99 david 40
{
41
    for ( int ii = 0; ii < MAX_CLASS; ii++)
42
    {
111 david 43
        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 ));
105 - 45
 
111 david 46
        if ( *config.team_class[ii].abr )
47
        {
48
            QTableWidgetItem *item;
49
            item = new QTableWidgetItem();
50
            item->setData(Qt::EditRole,QTime().addSecs(config.team_class[ii].start) );
51
            ui->tableWidget->setItem(ii, 2, item);
107 david 52
 
111 david 53
            item = new QTableWidgetItem();
54
            item->setData(Qt::EditRole,config.class_winners[ii] );
55
            ui->tableWidget->setItem(ii, 3, item);
56
        }
99 david 57
    }
58
}
59
 
104 - 60
void QmConfClass::save(void)
99 david 61
{
104 - 62
    int error = 0;
99 david 63
 
104 - 64
    /*
65
    **    Copy original data
66
    */
176 - 67
    QmConfig newcfg(config);
104 - 68
 
69
    /*
70
    **  Extract the data from the Widgets
71
    */
72
    for ( int ii = 0; ii < MAX_CLASS; ii++)
73
    {
74
        QTableWidgetItem *item = ui->tableWidget->item ( ii, 0 );
111 david 75
        if ( item )
76
        {
77
            strncpy(newcfg.team_class[ii].abr, qPrintable(item->text()), sizeof(newcfg.team_class[ii].abr)-1);
78
        }
79
        else
80
        {
81
            *newcfg.team_class[ii].abr = 0;
82
        }
104 - 83
 
84
        item = ui->tableWidget->item ( ii, 1 );
111 david 85
        if ( item )
86
        {
87
            strncpy(newcfg.team_class[ii].full_name, qPrintable(item->text()), sizeof(newcfg.team_class[ii].full_name)-1);
88
        }
89
        else
90
        {
91
            *newcfg.team_class[ii].full_name = 0;
92
        }
108 david 93
 
94
        item = ui->tableWidget->item( ii, 2 );
111 david 95
        if ( item )
96
        {
97
            newcfg.team_class[ii].start = QTime(0,0,0).secsTo(item->data(Qt::EditRole).toTime());
98
        }
99
        else
100
        {
101
            newcfg.team_class[ii].start = 0;
102
        }
103
 
104
        item = ui->tableWidget->item( ii, 3 );
105
        if ( item )
106
        {
107
            newcfg.class_winners[ii] = item->data(Qt::EditRole).toInt();
108
        }
109
        else
110
        {
111
            newcfg.class_winners[ii] = 0;
112
        }
104 - 113
    }
114
 
115
 
116
    /*
117
     **  Now do the Class definitions
118
     */
119
    for( int i = 0; i < MAX_CLASS; i++ )
120
    {
121
        compact( newcfg.team_class[i].abr );
122
        compact( newcfg.team_class[i].full_name );
123
    }
124
 
125
    for( int i = 0; i < MAX_CLASS; i++ )
126
    {
127
        if( ( newcfg.team_class[i].abr[0] == '\0' ) != ( newcfg.team_class[i].full_name[0] == '\0' ) )
128
        {
129
            printf( "Configuration error. Class without description\n" );
130
            error++;
131
        }
132
        if( newcfg.team_class[i].abr[0] != '\0' && newcfg.team_class[i].start < 0L )
133
        {
134
            printf( "Configuration error. Bad start time on class\n" );
135
            error++;
136
        }
137
    }
138
 
139
    newcfg.num_class = 0;
140
    for( int i = 0; i < MAX_CLASS; i++ )
141
        if( newcfg.team_class[i].full_name[0] )
142
            newcfg.num_class++;
143
 
144
    for( int i = newcfg.num_class; i < MAX_CLASS; i++ )
145
        if( newcfg.team_class[i].full_name[0] )
146
        {
147
            printf( "Configuration error: Missing Class name. Gaps not allowed\n" );
148
            error++;
149
        }
150
 
151
    if( newcfg.num_class == 0 )
152
    {
153
        printf( "Error: No categories defined\n" );
154
        error++;
155
    }
156
 
176 - 157
    newcfg.nonequestrian_class = newcfg.lookup_class( newcfg.nonequestrian_class_abr );
104 - 158
    if( newcfg.equestrian_leg && newcfg.nonequestrian_class == 0 )
159
        printf( "WARNING: Non-equestrian class not found\n" );
160
 
111 david 161
    /*
162
    **  Sanity test of the data
163
    */
164
    for( int i = 0; i < MAX_CLASS; i++ )
165
    {
166
        if( newcfg.team_class[i].abr[0] != '\0' && newcfg.class_winners[i] == 0 )
167
        {
168
            printf( "  Warning: Class without winners: %s\n", newcfg.team_class[i].abr );
169
        }
170
 
171
//        if ( newcfg.class_winners[i] > class_summary.teamclass[i+1].total )
172
//        {
173
//            printf( "  Warning: Num winners greater than those in class: %s\n", newcfg.team_class[i].abr );
174
//        }
175
    }
176
 
177
 
104 - 178
    if ( error == 0 )
179
    {
180
        config = newcfg;
176 - 181
        config.write_config();
104 - 182
    }
183
 
99 david 184
}
185
 
104 - 186
void QmConfClass::cancel(void)
99 david 187
{
188
    populate();
189
}
190
 
104 - 191
QmConfClass::~QmConfClass()
95 david 192
{
193
    delete ui;
194
}
195
 
104 - 196
void QmConfClass::changeEvent(QEvent *e)
95 david 197
{
198
    QWidget::changeEvent(e);
199
    switch (e->type()) {
200
    case QEvent::LanguageChange:
201
        ui->retranslateUi(this);
202
        break;
203
    default:
204
        break;
205
    }
206
}