Subversion Repositories svn1-original

Rev

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

Rev Author Line No. Line
130 david 1
#include "qmteamdisplay.h"
2
#include "ui_qmteamdisplay.h"
116 david 3
#include "spinboxdelegate.h"
4
#include "timedelegate.h"
5
#include "textdelegate.h"
6
 
130 david 7
qmTeamDisplay::qmTeamDisplay(QWidget *parent) :
116 david 8
    QWidget(parent),
130 david 9
    ui(new Ui::QmTeamDisplay)
143 david 10
 
116 david 11
{
12
    ui->setupUi(this);
13
    team = 0;
14
 
15
    /*
16
    ** Populate the Combo Box
17
    ** Should do more often
18
    */
19
    for ( int ii = 0; ii < config.num_class ; ii++)
20
    {
21
        ui->category->addItem(config.team_class[ii].full_name, ii);
22
    }
23
    ui->category->setCurrentIndex(-1);
24
 
117 david 25
    ui->members->setItemDelegateForColumn(0, new textDelegate(MAX_PERSON_NAME));
26
  //ui->members->setItemDelegateForColumn(1, new timeDelegate());
27
    ui->members->setItemDelegateForColumn(2, new SpinBoxDelegate(0,120));
116 david 28
 
125 david 29
    /*
30
    ** Insert widgets for the Team Times
31
    */
127 - 32
    int ii;
33
    for ( ii = 1 ; ii <= config.num_legs; ii++)
122 david 34
    {
130 david 35
        lt[ii] = new QmLegTimes(ii, config.leg_name[ii-1]);
123 david 36
        ui->legTime_layout->addWidget(lt[ii]);
125 david 37
        connect (lt[ii], SIGNAL(dataChanged()), this, SLOT(recalculateTimes()) );
122 david 38
    }
127 - 39
    lt[0] = new QmLegTimes(0, "Overall Event");
40
    ui->legTime_layout->addWidget(lt[0]);
122 david 41
 
116 david 42
    connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(save()) );
43
    connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(cancel()) );
44
    connect(ui->teamNumber, SIGNAL(valueChanged(int)), this, SLOT(populate(int)) );
45
}
46
 
130 david 47
qmTeamDisplay::~qmTeamDisplay()
116 david 48
{
49
    delete ui;
50
}
51
 
130 david 52
void qmTeamDisplay::populate(int team_number)
116 david 53
{
142 david 54
    ui->teamNumber->setMaximum(config.max_team);
143 david 55
    ui->teamNumber->setValue(team_number);
116 david 56
    team = team_number;
57
    g_record( team, &team_buf );
58
 
59
    /*
60
    ** Basic Data
61
    */
62
    ui->name->setText( team_buf.name );
63
    ui->category_abr->setText( config.team_class[team_buf.teamclass - 1].abr );
64
    ui->category->setCurrentIndex(team_buf.teamclass - 1);
127 - 65
    //TODO: Link update of combo box to the abreviation display
116 david 66
 
140 - 67
    ui->disqualified->setCheckState(team_buf.flags.disqualified ? Qt::Checked : Qt::Unchecked);
68
    ui->nonEquestrian->setCheckState(team_buf.flags.non_equestrian ? Qt::Checked : Qt::Unchecked);
142 david 69
    ui->disabled->setCheckState( !team_buf.flags.valid ? Qt::Checked : Qt::Unchecked);
140 - 70
 
142 david 71
 
116 david 72
    /*
73
    ** Team Member data
74
    */
142 david 75
    int age_sum = 0;
116 david 76
    for ( int ii = 0; ii < config.num_legs; ii ++)
77
    {
78
         QTableWidgetItem *item;
79
        ui->members->setItem(ii, 0, new QTableWidgetItem(team_buf.members[ii].name) );
80
 
81
        item = new QTableWidgetItem();
142 david 82
        item->setFlags(Qt::ItemIsTristate | item->flags());
116 david 83
        enum Qt::CheckState sex;
84
        switch ( team_buf.members[ii].sex )
85
        {
117 david 86
            case male:   sex = Qt::Unchecked;        break;
87
            case female: sex = Qt::Checked;          break;
88
            default:     sex = Qt::PartiallyChecked; break;
116 david 89
        }
142 david 90
        //qDebug("RSex:%d, %d, %d, %d", team, ii, sex, team_buf.members[ii].sex);
116 david 91
        item->setCheckState(sex );
92
        ui->members->setItem(ii, 1, item );
93
 
94
        item = new QTableWidgetItem();
95
        item->setData(Qt::EditRole,team_buf.members[ii].age);
96
        ui->members->setItem(ii, 2, item );
142 david 97
 
98
        /*
99
        **  Sum ages
100
        **  -1 indicates invalid age
101
        */
102
        if ( age_sum >= 0 )
103
        {
104
            ushort age = team_buf.members[ii].age;
105
            if ( age > 0 && age < 255 )
106
            {
107
                age_sum += age;
108
            }
109
            else
110
            {
111
                age_sum = -1;
112
            }
113
        }
116 david 114
    }
142 david 115
 
116
    if ( age_sum <= 0 )
117
    {
118
        ui->totalAge->setText("--");
119
    }
120
    else
121
    {
122
        ui->totalAge->setText(QString::number(age_sum));
123
    }
124
 
117 david 125
    ui->members->resizeColumnsToContents();
123 david 126
 
127
    /*
128
    ** Leg Times
129
    */
127 - 130
    for ( int ii = 0 ; ii <= config.num_legs; ii++)
123 david 131
    {
127 - 132
        lt[ii]->setData(&team_buf.leg[ii]);
123 david 133
    }
116 david 134
}
135
 
130 david 136
void qmTeamDisplay::recalculateTimes( void )
125 david 137
{
127 - 138
    for ( int ii = 0 ; ii <= config.num_legs; ii++)
125 david 139
    {
127 - 140
        lt[ii]->getData(&team_buf.leg[ii]);
125 david 141
    }
142
    set_times( &team_buf );
143
    test_times( &team_buf, 0 );
127 - 144
    for ( int ii = 0 ; ii <= config.num_legs; ii++)
125 david 145
    {
127 - 146
        lt[ii]->setData(&team_buf.leg[ii]);
125 david 147
    }
148
}
149
 
130 david 150
void qmTeamDisplay::save(void)
116 david 151
{
125 david 152
    /*
153
    ** Extract data from the widgets
154
    ** The time stuff is done on the fly as it changes
155
    */
127 - 156
    strncpy(team_buf.name , qPrintable(ui->name->text()), sizeof(team_buf.name));
157
    team_buf.teamclass = ui->category->currentIndex() + 1;
158
 
140 - 159
    team_buf.flags.disqualified =  ( ui->disqualified->checkState () == Qt::Checked);
160
    team_buf.flags.non_equestrian =  ( ui->nonEquestrian->checkState () == Qt::Checked);
142 david 161
    team_buf.flags.valid =  ( ui->disabled->checkState () != Qt::Checked);
140 - 162
 
127 - 163
    /*
164
    ** Extract Team Member Data
165
    */
166
    for ( int ii = 0; ii < config.num_legs; ii ++)
167
    {
168
        QTableWidgetItem *item;
169
        item = ui->members->item ( ii, 0 );
170
        strncpy(team_buf.members[ii].name , qPrintable(item->text()), sizeof(team_buf.members[ii].name));
171
 
172
        //TODO: Make Sex edit work
173
        item = ui->members->item ( ii, 1 );
142 david 174
        enum Qt::CheckState sex = item->checkState();
175
        switch (sex)
127 - 176
        {
177
            case Qt::Unchecked: team_buf.members[ii].sex = male;  break;
178
            case Qt::Checked: team_buf.members[ii].sex = female; break;
179
            default: team_buf.members[ii].sex = unknown; break;
180
        }
142 david 181
        //qDebug("WSex:%d, %d, %d, %d", team, ii, sex, team_buf.members[ii].sex);
127 - 182
 
183
        item = ui->members->item ( ii, 2 );
184
        team_buf.members[ii].age = item->data(Qt::EditRole).toInt();
185
 
186
    }
187
    //TODO : Mainatin age summary
188
 
189
    /*
190
    ** Save the record back to disk
191
    */
192
    put_team_record( team, &team_buf );
142 david 193
    populate(team);
116 david 194
}
195
 
130 david 196
void qmTeamDisplay::cancel(void)
116 david 197
{
198
    populate(team);
199
}
200
 
130 david 201
void qmTeamDisplay::changeEvent(QEvent *e)
116 david 202
{
117 david 203
//qDebug("ChangeEvent: %d",e->type());
116 david 204
    QWidget::changeEvent(e);
205
    switch (e->type()) {
206
    case QEvent::LanguageChange:
207
        ui->retranslateUi(this);
208
        break;
209
    default:
210
        break;
211
    }
212
}