Subversion Repositories svn1

Rev

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

Rev 180 Rev 181
Line 15... Line 15...
15
QmConfClass::QmConfClass(QWidget *parent) :
15
QmConfClass::QmConfClass(QWidget *parent) :
16
    QWidget(parent),
16
    QWidget(parent),
17
    ui(new Ui::QmConfClass)
17
    ui(new Ui::QmConfClass)
18
{
18
{
19
    ui->setupUi(this);
19
    ui->setupUi(this);
-
 
20
    populating = false;
20
    connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(save()) );
21
    connect(ui->pushButtonSave, SIGNAL(clicked(bool)), this, SLOT(save()) );
21
    connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(cancel()) );
22
    connect(ui->pushButtonRestore, SIGNAL(clicked(bool)), this, SLOT(cancel()) );
22
 
23
 
23
    QStringList labels;
24
    QStringList labels;
24
         labels << "Abr" << "Full Name" << "Start Time" << "Winners";
25
         labels << "Abr" << "Full Name" << "Start Time" << "Winners" << "NE";
25
 
26
 
26
 
27
 
27
    ui->tableWidget->setRowCount(config.num_class + 1);
28
    ui->tableWidget->setRowCount(config.num_class + 1);
28
    ui->tableWidget->setColumnCount(8);
29
    ui->tableWidget->setColumnCount(8);
29
    ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
30
    ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
30
    connect(ui->tableWidget, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(ctxMenu(const QPoint &)));
31
    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)));
31
 
33
 
32
 
34
 
33
    /*
35
    /*
34
    **  Setup delegated for specialised editing
36
    **  Setup delegated for specialised editing
35
    */
37
    */
Line 46... Line 48...
46
    statusShown = false;
48
    statusShown = false;
47
    ui->tableWidget->setColumnHidden(5, true);
49
    ui->tableWidget->setColumnHidden(5, true);
48
    ui->tableWidget->setColumnHidden(6, true);
50
    ui->tableWidget->setColumnHidden(6, true);
49
    ui->tableWidget->setColumnHidden(7, true);
51
    ui->tableWidget->setColumnHidden(7, true);
50
 
52
 
51
    labels << "" << "Total" <<"Disqual" << "NonEq";
53
    labels << "Total" <<"Disqual" << "NonEq";
52
 
54
 
53
    ui->tableWidget->setHorizontalHeaderLabels(labels);
55
    ui->tableWidget->setHorizontalHeaderLabels(labels);
54
    ui->tableWidget->resizeColumnsToContents();
56
    ui->tableWidget->resizeColumnsToContents();
55
 
57
 
56
}
58
}
57
 
59
 
58
void QmConfClass::populate(void)
60
void QmConfClass::populate(void)
59
{
61
{
-
 
62
    populating = true;
60
    ui->tableWidget->setRowCount(config.num_class + 1);
63
    ui->tableWidget->setRowCount(config.num_class + 1);
61
    for ( int ii = 0; ii < MAX_CLASS; ii++)
64
    for ( int ii = 0; ii < MAX_CLASS; ii++)
62
    {
65
    {
63
        ui->tableWidget->setItem(ii, 0, new QTableWidgetItem(config.team_class[ii].abr) );
66
        ui->tableWidget->setItem(ii, 0, new QTableWidgetItem(config.team_class[ii].abr) );
64
        ui->tableWidget->setItem(ii, 1, new QTableWidgetItem(config.team_class[ii].full_name ));
67
        ui->tableWidget->setItem(ii, 1, new QTableWidgetItem(config.team_class[ii].full_name ));
Line 71... Line 74...
71
            ui->tableWidget->setItem(ii, 2, item);
74
            ui->tableWidget->setItem(ii, 2, item);
72
 
75
 
73
            item = new QTableWidgetItem();
76
            item = new QTableWidgetItem();
74
            item->setData(Qt::EditRole,config.class_winners[ii] );
77
            item->setData(Qt::EditRole,config.class_winners[ii] );
75
            ui->tableWidget->setItem(ii, 3, item);
78
            ui->tableWidget->setItem(ii, 3, item);
-
 
79
 
-
 
80
            item = new QTableWidgetItem();
-
 
81
            item->setCheckState(config.nonequestrian_class == 1 + ii ? Qt::Checked : Qt::Unchecked);
-
 
82
            ui->tableWidget->setItem(ii, 4, item);
-
 
83
 
76
        }
84
        }
77
    }
85
    }
-
 
86
    updateChanged(false);
-
 
87
    populating = false;
78
}
88
}
79
 
89
 
80
void QmConfClass::save(void)
90
void QmConfClass::save(void)
81
{
91
{
82
    int error = 0;
-
 
83
 
-
 
84
    /*
92
    /*
85
    **    Copy original data
93
    **    Copy original data
86
    */
94
    */
87
    QmConfig newcfg(config);
95
    QmConfig newcfg(config);
88
 
96
 
Line 128... Line 136...
128
        }
136
        }
129
        else
137
        else
130
        {
138
        {
131
            newcfg.class_winners[ii] = 0;
139
            newcfg.class_winners[ii] = 0;
132
        }
140
        }
-
 
141
        item = ui->tableWidget->item( ii, 4 );
-
 
142
        if ( item )
-
 
143
        {
-
 
144
            if ( item->checkState() == Qt::Checked)
-
 
145
            {
-
 
146
                newcfg.nonequestrian_class = ii;
-
 
147
                strncpy(newcfg.nonequestrian_class_abr, newcfg.team_class[ii].abr, sizeof(newcfg.team_class[ii].abr)-1);
-
 
148
            }
-
 
149
        }
133
    }
150
    }
134
    
151
    
135
 
-
 
136
    /*
-
 
137
     **  Now do the Class definitions
152
    // Validate the data
138
     */
153
    try
139
    for( int i = 0; i < MAX_CLASS; i++ )
-
 
140
    {
154
    {
141
        compact( newcfg.team_class[i].abr );
-
 
142
        compact( newcfg.team_class[i].full_name );
155
        MainWindow::showMessage( "Saving Config");
143
    }
-
 
144
 
156
 
-
 
157
        /*
145
    for( int i = 0; i < MAX_CLASS; i++ )
158
         **  Now do the Class definitions
146
    {
159
         */
-
 
160
 
147
        if( ( newcfg.team_class[i].abr[0] == '\0' ) != ( newcfg.team_class[i].full_name[0] == '\0' ) )
161
        for( int i = 0; i < MAX_CLASS; i++ )
148
        {
162
        {
149
            MainWindow::showMessage( "Configuration error. Class without description" );
163
            compact( newcfg.team_class[i].abr );
150
            error++;
164
            compact( newcfg.team_class[i].full_name );
151
        }
165
        }
-
 
166
 
152
        if( newcfg.team_class[i].abr[0] != '\0' && newcfg.team_class[i].start < 0L )
167
        for( int i = 0; i < MAX_CLASS; i++ )
153
        {
168
        {
-
 
169
            if( ( newcfg.team_class[i].abr[0] == '\0' ) != ( newcfg.team_class[i].full_name[0] == '\0' ) )
-
 
170
            {
-
 
171
                throw( "Configuration error. Class without description" );
-
 
172
 
-
 
173
            }
-
 
174
            if( newcfg.team_class[i].abr[0] != '\0' && newcfg.team_class[i].start < 0L )
-
 
175
            {
154
            MainWindow::showMessage( "Configuration error. Bad start time on class" );
176
                throw( "Configuration error. Bad start time on class" );
-
 
177
 
155
            error++;
178
            }
156
        }
179
        }
157
    }
-
 
158
 
180
 
159
    newcfg.num_class = 0;
181
        newcfg.num_class = 0;
160
    for( int i = 0; i < MAX_CLASS; i++ )
182
        for( int i = 0; i < MAX_CLASS; i++ )
161
        if( newcfg.team_class[i].full_name[0] )
183
            if( newcfg.team_class[i].full_name[0] )
162
            newcfg.num_class++;
184
                newcfg.num_class++;
163
 
185
 
164
    for( int i = newcfg.num_class; i < MAX_CLASS; i++ )
186
        for( int i = newcfg.num_class; i < MAX_CLASS; i++ )
165
        if( newcfg.team_class[i].full_name[0] )
187
            if( newcfg.team_class[i].full_name[0] )
-
 
188
            {
-
 
189
                throw( "Configuration error: Missing Class name. Gaps not allowed" );
-
 
190
 
-
 
191
            }
-
 
192
 
-
 
193
        if( newcfg.num_class == 0 )
166
        {
194
        {
167
            MainWindow::showMessage( "Configuration error: Missing Class name. Gaps not allowed" );
195
            throw( "Error: No categories defined" );
168
            error++;
-
 
169
        }
-
 
170
 
196
 
171
    if( newcfg.num_class == 0 )
-
 
172
    {
-
 
173
        MainWindow::showMessage( "Error: No categories defined" );
-
 
174
        error++;
-
 
175
    }
197
        }
176
 
198
 
177
    newcfg.nonequestrian_class = newcfg.lookup_class( newcfg.nonequestrian_class_abr );
199
        newcfg.nonequestrian_class = newcfg.lookup_class( newcfg.nonequestrian_class_abr );
178
    if( newcfg.equestrian_leg && newcfg.nonequestrian_class == 0 )
200
        if( newcfg.equestrian_leg && newcfg.nonequestrian_class == 0 )
179
        MainWindow::showMessage( "WARNING: Non-equestrian class not found" );
201
            MainWindow::showMessage( "WARNING: Non-equestrian class not found" );
180
 
202
 
181
    /*
203
        /*
182
    **  Sanity test of the data
204
        **  Sanity test of the data
183
    */
205
        */
184
    for( int i = 0; i < MAX_CLASS; i++ )
206
        for( int i = 0; i < MAX_CLASS; i++ )
185
    {
-
 
186
        if( newcfg.team_class[i].abr[0] != '\0' && newcfg.class_winners[i] == 0 )
-
 
187
        {
207
        {
-
 
208
            if( newcfg.team_class[i].abr[0] != '\0' && newcfg.class_winners[i] == 0 )
-
 
209
            {
-
 
210
 
188
            //MainWindow::showMessage( "  Warning: Class without winners: %s", newcfg.team_class[i].abr );
211
                MainWindow::showMessage( QString("Warning: Class without winners:") + newcfg.team_class[i].abr );
-
 
212
            }
-
 
213
 
-
 
214
        //        if ( newcfg.class_winners[i] > class_summary.teamclass[i+1].total )
-
 
215
        //        {
189
            MainWindow::showMessage( QString("Warning: Class without winners:") + newcfg.team_class[i].abr );
216
        //            printf( "  Warning: Num winners greater than those in class: %s\n", newcfg.team_class[i].abr );
-
 
217
        //        }
190
        }
218
        }
191
 
219
 
192
//        if ( newcfg.class_winners[i] > class_summary.teamclass[i+1].total )
-
 
193
//        {
-
 
194
//            printf( "  Warning: Num winners greater than those in class: %s\n", newcfg.team_class[i].abr );
-
 
195
//        }
-
 
196
    }
-
 
197
 
220
 
198
 
221
 
199
    if ( error == 0 )
-
 
200
    {
-
 
201
        config = newcfg;
222
        config = newcfg;
202
        config.write_config();
223
        config.write_config();
-
 
224
        updateChanged(false);
-
 
225
 
-
 
226
    }
-
 
227
    catch (const char * str )
-
 
228
    {
203
        MainWindow::showMessage( "Config Saved");
229
        MainWindow::showMessage(str);
204
    }
230
    }
205
 
231
 
206
}
232
}
207
 
233
 
208
void QmConfClass::cancel(void)
234
void QmConfClass::cancel(void)
Line 217... Line 243...
217
 
243
 
218
void QmConfClass::ctxMenu(const QPoint & pos)
244
void QmConfClass::ctxMenu(const QPoint & pos)
219
{
245
{
220
    qDebug("Context Menu");
246
    qDebug("Context Menu");
221
    QMenu *menu = new QMenu;
247
    QMenu *menu = new QMenu;
222
    int trow = 0;
-
 
223
    menu->setTitle("Add/Remove Category");
-
 
224
 
-
 
225
    QTableWidgetItem *item;
-
 
226
    item = ui->tableWidget->itemAt(pos);
248
    QTableWidgetItem *item = ui->tableWidget->itemAt(pos);
227
    menu->addAction(tr("New Category"), this, SLOT(ctxMenuAddRow()));
249
    menu->addAction(tr("New Category"), this, SLOT(ctxMenuAddRow()));
228
    if (item)
250
    if (item)
229
    {
251
    {
230
        menu->addAction(tr("Delete Category"), this, SLOT(ctxMenuDeleteRow()));
252
        menu->addAction(tr("Delete Category"), this, SLOT(ctxMenuDeleteRow()));
231
    }
253
    }
Line 280... Line 302...
280
        ui->tableWidget->resizeColumnsToContents();
302
        ui->tableWidget->resizeColumnsToContents();
281
        ui->tableWidget->resizeRowsToContents();
303
        ui->tableWidget->resizeRowsToContents();
282
    }
304
    }
283
}
305
}
284
 
306
 
-
 
307
void QmConfClass::cellChanged(int row,int col)
-
 
308
{
-
 
309
    if ( populating )
-
 
310
        return;
-
 
311
    updateChanged(true);
-
 
312
    populating = true;
-
 
313
    //qDebug("Cell changed: %d, %d", row, col);
-
 
314
    if (col == 4)
-
 
315
    {
-
 
316
        for (int ii = 0; ii < ui->tableWidget->rowCount(); ii++)
-
 
317
        {
-
 
318
            QTableWidgetItem *item = ui->tableWidget->item(ii, 4);
-
 
319
            if (item)
-
 
320
            {
-
 
321
                item->setCheckState(ii == row ? Qt::Checked : Qt::Unchecked);
-
 
322
            }
-
 
323
        }
-
 
324
    }
-
 
325
    populating = false;
-
 
326
}
-
 
327
 
-
 
328
void QmConfClass::updateChanged(bool newDirty)
-
 
329
{
-
 
330
    if (newDirty != dirty)
-
 
331
    {
-
 
332
        dirty = newDirty;
-
 
333
        if (dirty)
-
 
334
        {
-
 
335
            ui->Changed->setVisible(true);
-
 
336
            ui->pushButtonSave->setEnabled(true);
-
 
337
        }
-
 
338
        else
-
 
339
        {
-
 
340
            ui->Changed->setVisible(false);
-
 
341
            ui->pushButtonSave->setEnabled(false);
-
 
342
        }
-
 
343
    }
-
 
344
}
-
 
345
 
285
void QmConfClass::changeEvent(QEvent *e)
346
void QmConfClass::changeEvent(QEvent *e)
286
{
347
{
287
    QWidget::changeEvent(e);
348
    QWidget::changeEvent(e);
288
    switch (e->type()) {
349
    switch (e->type()) {
289
    case QEvent::LanguageChange:
350
    case QEvent::LanguageChange: