Subversion Repositories svn1

Rev

Rev 109 | Rev 111 | 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"
99 david 10
 
104 - 11
QmConfClass::QmConfClass(QWidget *parent) :
95 david 12
    QWidget(parent),
104 - 13
    ui(new Ui::QmConfClass)
95 david 14
{
15
    ui->setupUi(this);
99 david 16
    connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(save()) );
17
    connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(cancel()) );
18
 
109 david 19
    QStringList labels;
20
         labels << "Abr" << "Full Name" << "Start Time" << "Winners";
21
 
22
    ui->tableWidget->setHorizontalHeaderLabels(labels);
99 david 23
    ui->tableWidget->setRowCount(MAX_CLASS);
107 david 24
 
25
    /*
26
    **  Setup delegated for specialised editing
27
    */
28
    ui->tableWidget->setItemDelegateForColumn(2, new timeDelegate());
110 - 29
    ui->tableWidget->setItemDelegateForColumn(3, new SpinBoxDelegate(0,50));
107 david 30
 
99 david 31
    populate();
95 david 32
}
33
 
104 - 34
void QmConfClass::populate(void)
99 david 35
{
36
    for ( int ii = 0; ii < MAX_CLASS; ii++)
37
    {
105 - 38
        QTableWidgetItem *item;
39
        item = new QTableWidgetItem(config.team_class[ii].abr);
40
        ui->tableWidget->setItem(ii, 0, item );
41
 
42
        item = new QTableWidgetItem(config.team_class[ii].full_name );
43
        ui->tableWidget->setItem(ii, 1, item);
107 david 44
 
45
        item = new QTableWidgetItem();
46
        item->setData(Qt::EditRole,QTime().addSecs(config.team_class[ii].start) );
47
        ui->tableWidget->setItem(ii, 2, item);
109 david 48
 
49
        item = new QTableWidgetItem();
50
        item->setData(Qt::EditRole,config.class_winners[ii] );
51
        ui->tableWidget->setItem(ii, 3, item);
99 david 52
    }
53
}
54
 
104 - 55
void QmConfClass::save(void)
99 david 56
{
104 - 57
    int error = 0;
99 david 58
 
104 - 59
    /*
60
    **    Copy original data
61
    */
62
    MARA_CFG    newcfg = config;
63
 
64
    /*
65
    **  Extract the data from the Widgets
66
    */
67
    for ( int ii = 0; ii < MAX_CLASS; ii++)
68
    {
69
        QTableWidgetItem *item = ui->tableWidget->item ( ii, 0 );
70
        strncpy(newcfg.team_class[ii].abr, qPrintable(item->text()), sizeof(newcfg.team_class[ii].abr)-1);
71
 
72
        item = ui->tableWidget->item ( ii, 1 );
73
        strncpy(newcfg.team_class[ii].full_name, qPrintable(item->text()), sizeof(newcfg.team_class[ii].full_name)-1);
108 david 74
 
75
        item = ui->tableWidget->item( ii, 2 );
76
        newcfg.team_class[ii].start = QTime(0,0,0).secsTo(item->data(Qt::EditRole).toTime());
104 - 77
    }
78
 
79
 
80
    /*
81
     **  Now do the Class definitions
82
     */
83
    for( int i = 0; i < MAX_CLASS; i++ )
84
    {
85
        compact( newcfg.team_class[i].abr );
86
        compact( newcfg.team_class[i].full_name );
87
    }
88
 
89
    for( int i = 0; i < MAX_CLASS; i++ )
90
    {
91
        if( ( newcfg.team_class[i].abr[0] == '\0' ) != ( newcfg.team_class[i].full_name[0] == '\0' ) )
92
        {
93
            printf( "Configuration error. Class without description\n" );
94
            error++;
95
        }
96
        if( newcfg.team_class[i].abr[0] != '\0' && newcfg.team_class[i].start < 0L )
97
        {
98
            printf( "Configuration error. Bad start time on class\n" );
99
            error++;
100
        }
101
    }
102
 
103
    newcfg.num_class = 0;
104
    for( int i = 0; i < MAX_CLASS; i++ )
105
        if( newcfg.team_class[i].full_name[0] )
106
            newcfg.num_class++;
107
 
108
    for( int i = newcfg.num_class; i < MAX_CLASS; i++ )
109
        if( newcfg.team_class[i].full_name[0] )
110
        {
111
            printf( "Configuration error: Missing Class name. Gaps not allowed\n" );
112
            error++;
113
        }
114
 
115
    if( newcfg.num_class == 0 )
116
    {
117
        printf( "Error: No categories defined\n" );
118
        error++;
119
    }
120
 
121
    newcfg.nonequestrian_class = lookup_class( newcfg.nonequestrian_class_abr, &newcfg );
122
    if( newcfg.equestrian_leg && newcfg.nonequestrian_class == 0 )
123
        printf( "WARNING: Non-equestrian class not found\n" );
124
 
125
    if ( error == 0 )
126
    {
127
        config = newcfg;
128
        wt_config();
129
    }
130
 
99 david 131
}
132
 
104 - 133
void QmConfClass::cancel(void)
99 david 134
{
135
    populate();
136
}
137
 
104 - 138
QmConfClass::~QmConfClass()
95 david 139
{
140
    delete ui;
141
}
142
 
104 - 143
void QmConfClass::changeEvent(QEvent *e)
95 david 144
{
145
    QWidget::changeEvent(e);
146
    switch (e->type()) {
147
    case QEvent::LanguageChange:
148
        ui->retranslateUi(this);
149
        break;
150
    default:
151
        break;
152
    }
153
}