Subversion Repositories svn1

Rev

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