Subversion Repositories svn1-original

Rev

Rev 130 | Rev 142 | 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
{
53
    team = team_number;
54
    g_record( team, &team_buf );
55
 
56
    /*
57
    ** Basic Data
58
    */
59
    ui->name->setText( team_buf.name );
60
    ui->category_abr->setText( config.team_class[team_buf.teamclass - 1].abr );
61
    ui->category->setCurrentIndex(team_buf.teamclass - 1);
127 - 62
    //TODO: Link update of combo box to the abreviation display
116 david 63
 
140 - 64
    ui->disqualified->setCheckState(team_buf.flags.disqualified ? Qt::Checked : Qt::Unchecked);
65
    ui->nonEquestrian->setCheckState(team_buf.flags.non_equestrian ? Qt::Checked : Qt::Unchecked);
66
 
116 david 67
    /*
68
    ** Team Member data
69
    */
70
    for ( int ii = 0; ii < config.num_legs; ii ++)
71
    {
72
         QTableWidgetItem *item;
73
        ui->members->setItem(ii, 0, new QTableWidgetItem(team_buf.members[ii].name) );
74
 
75
        item = new QTableWidgetItem();
76
        enum Qt::CheckState sex;
77
        switch ( team_buf.members[ii].sex )
78
        {
117 david 79
            case male:   sex = Qt::Unchecked;        break;
80
            case female: sex = Qt::Checked;          break;
81
            default:     sex = Qt::PartiallyChecked; break;
116 david 82
        }
83
        item->setCheckState(sex );
84
        ui->members->setItem(ii, 1, item );
85
 
86
        item = new QTableWidgetItem();
87
        item->setData(Qt::EditRole,team_buf.members[ii].age);
88
        ui->members->setItem(ii, 2, item );
89
    }
117 david 90
    ui->members->resizeColumnsToContents();
123 david 91
 
92
    /*
93
    ** Leg Times
94
    */
127 - 95
    for ( int ii = 0 ; ii <= config.num_legs; ii++)
123 david 96
    {
127 - 97
        lt[ii]->setData(&team_buf.leg[ii]);
123 david 98
    }
116 david 99
}
100
 
130 david 101
void qmTeamDisplay::recalculateTimes( void )
125 david 102
{
127 - 103
    for ( int ii = 0 ; ii <= config.num_legs; ii++)
125 david 104
    {
127 - 105
        lt[ii]->getData(&team_buf.leg[ii]);
125 david 106
    }
107
    set_times( &team_buf );
108
    test_times( &team_buf, 0 );
127 - 109
    for ( int ii = 0 ; ii <= config.num_legs; ii++)
125 david 110
    {
127 - 111
        lt[ii]->setData(&team_buf.leg[ii]);
125 david 112
    }
113
}
114
 
130 david 115
void qmTeamDisplay::save(void)
116 david 116
{
125 david 117
    /*
118
    ** Extract data from the widgets
119
    ** The time stuff is done on the fly as it changes
120
    */
127 - 121
    strncpy(team_buf.name , qPrintable(ui->name->text()), sizeof(team_buf.name));
122
    team_buf.teamclass = ui->category->currentIndex() + 1;
123
 
140 - 124
    team_buf.flags.disqualified =  ( ui->disqualified->checkState () == Qt::Checked);
125
    team_buf.flags.non_equestrian =  ( ui->nonEquestrian->checkState () == Qt::Checked);
126
 
127 - 127
    /*
128
    ** Extract Team Member Data
129
    */
130
    for ( int ii = 0; ii < config.num_legs; ii ++)
131
    {
132
        QTableWidgetItem *item;
133
        item = ui->members->item ( ii, 0 );
134
        strncpy(team_buf.members[ii].name , qPrintable(item->text()), sizeof(team_buf.members[ii].name));
135
 
136
        //TODO: Make Sex edit work
137
        item = ui->members->item ( ii, 1 );
138
        switch (item->data(Qt::EditRole).toInt())
139
        {
140
            case Qt::Unchecked: team_buf.members[ii].sex = male;  break;
141
            case Qt::Checked: team_buf.members[ii].sex = female; break;
142
            default: team_buf.members[ii].sex = unknown; break;
143
        }
144
 
145
        item = ui->members->item ( ii, 2 );
146
        team_buf.members[ii].age = item->data(Qt::EditRole).toInt();
147
 
148
    }
149
    //TODO : Mainatin age summary
150
 
151
    /*
152
    ** Save the record back to disk
153
    */
154
    put_team_record( team, &team_buf );
116 david 155
}
156
 
130 david 157
void qmTeamDisplay::cancel(void)
116 david 158
{
159
    populate(team);
160
}
161
 
130 david 162
void qmTeamDisplay::changeEvent(QEvent *e)
116 david 163
{
117 david 164
//qDebug("ChangeEvent: %d",e->type());
116 david 165
    QWidget::changeEvent(e);
166
    switch (e->type()) {
167
    case QEvent::LanguageChange:
168
        ui->retranslateUi(this);
169
        break;
170
    default:
171
        break;
172
    }
173
}