Subversion Repositories svn1-original

Rev

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