Subversion Repositories svn1

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
112 david 1
#include "teamdisplay.h"
2
#include "ui_teamdisplay.h"
3
#include "spinboxdelegate.h"
4
#include "timedelegate.h"
5
#include "textdelegate.h"
6
 
7
teamDisplay::teamDisplay(QWidget *parent) :
8
    QWidget(parent),
9
    ui(new Ui::teamDisplay)
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
 
113 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));
112 david 27
 
121 david 28
    /*
29
    ** Insert widgets for the Team Times
30
    */
123 - 31
    int ii;
32
    for ( ii = 1 ; ii <= config.num_legs; ii++)
118 david 33
    {
123 - 34
        lt[ii] = new QmLegTimes(ii-1, config.leg_name[ii-1]);
119 david 35
        ui->legTime_layout->addWidget(lt[ii]);
121 david 36
        connect (lt[ii], SIGNAL(dataChanged()), this, SLOT(recalculateTimes()) );
118 david 37
    }
123 - 38
    lt[0] = new QmLegTimes(0, "Overall Event");
39
    ui->legTime_layout->addWidget(lt[0]);
118 david 40
 
112 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
 
46
teamDisplay::~teamDisplay()
47
{
48
    delete ui;
49
}
50
 
51
void teamDisplay::populate(int team_number)
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);
123 - 62
    //TODO: Link update of combo box to the abreviation display
112 david 63
 
64
    /*
65
    ** Team Member data
66
    */
67
    for ( int ii = 0; ii < config.num_legs; ii ++)
68
    {
69
         QTableWidgetItem *item;
70
        ui->members->setItem(ii, 0, new QTableWidgetItem(team_buf.members[ii].name) );
71
 
72
        item = new QTableWidgetItem();
73
        enum Qt::CheckState sex;
74
        switch ( team_buf.members[ii].sex )
75
        {
113 david 76
            case male:   sex = Qt::Unchecked;        break;
77
            case female: sex = Qt::Checked;          break;
78
            default:     sex = Qt::PartiallyChecked; break;
112 david 79
        }
80
        item->setCheckState(sex );
81
        ui->members->setItem(ii, 1, item );
82
 
83
        item = new QTableWidgetItem();
84
        item->setData(Qt::EditRole,team_buf.members[ii].age);
85
        ui->members->setItem(ii, 2, item );
86
    }
113 david 87
    ui->members->resizeColumnsToContents();
119 david 88
 
89
    /*
90
    ** Leg Times
91
    */
123 - 92
    for ( int ii = 0 ; ii <= config.num_legs; ii++)
119 david 93
    {
123 - 94
        lt[ii]->setData(&team_buf.leg[ii]);
119 david 95
    }
112 david 96
}
97
 
121 david 98
void teamDisplay::recalculateTimes( void )
99
{
123 - 100
    for ( int ii = 0 ; ii <= config.num_legs; ii++)
121 david 101
    {
123 - 102
        lt[ii]->getData(&team_buf.leg[ii]);
121 david 103
    }
104
    set_times( &team_buf );
105
    test_times( &team_buf, 0 );
123 - 106
    for ( int ii = 0 ; ii <= config.num_legs; ii++)
121 david 107
    {
123 - 108
        lt[ii]->setData(&team_buf.leg[ii]);
121 david 109
    }
110
}
111
 
112 david 112
void teamDisplay::save(void)
113
{
121 david 114
    /*
115
    ** Extract data from the widgets
116
    ** The time stuff is done on the fly as it changes
117
    */
123 - 118
    strncpy(team_buf.name , qPrintable(ui->name->text()), sizeof(team_buf.name));
119
    team_buf.teamclass = ui->category->currentIndex() + 1;
120
 
121
    /*
122
    ** Extract Team Member Data
123
    */
124
    for ( int ii = 0; ii < config.num_legs; ii ++)
125
    {
126
        QTableWidgetItem *item;
127
        item = ui->members->item ( ii, 0 );
128
        strncpy(team_buf.members[ii].name , qPrintable(item->text()), sizeof(team_buf.members[ii].name));
129
 
130
        //TODO: Make Sex edit work
131
        item = ui->members->item ( ii, 1 );
132
        switch (item->data(Qt::EditRole).toInt())
133
        {
134
            case Qt::Unchecked: team_buf.members[ii].sex = male;  break;
135
            case Qt::Checked: team_buf.members[ii].sex = female; break;
136
            default: team_buf.members[ii].sex = unknown; break;
137
        }
138
 
139
        item = ui->members->item ( ii, 2 );
140
        team_buf.members[ii].age = item->data(Qt::EditRole).toInt();
141
 
142
    }
143
    //TODO : Mainatin age summary
144
 
145
    /*
146
    ** Save the record back to disk
147
    */
148
    put_team_record( team, &team_buf );
112 david 149
}
150
 
151
void teamDisplay::cancel(void)
152
{
153
    populate(team);
154
}
155
 
156
void teamDisplay::changeEvent(QEvent *e)
157
{
113 david 158
//qDebug("ChangeEvent: %d",e->type());
112 david 159
    QWidget::changeEvent(e);
160
    switch (e->type()) {
161
    case QEvent::LanguageChange:
162
        ui->retranslateUi(this);
163
        break;
164
    default:
165
        break;
166
    }
167
}