Subversion Repositories svn1

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
307 david 1
#include <QVBoxLayout>
2
#include <QGroupBox>
3
#include <QDialogButtonBox>
4
#include <QTableWidget>
5
#include <QHeaderView>
6
#include "qmfulldata.h"
7
#include    "consts.h"
8
#include    "structs.h"
9
#include    "proto.h"
10
#include "mainwindow.h"
11
#include "qmdialogteameditor.h"
12
 
13
 
14
 
15
qmFullData::qmFullData(QWidget *parent) :
16
    QWidget(parent)
17
{
18
    QVBoxLayout *verticalLayout = new QVBoxLayout(this);
19
    verticalLayout->setContentsMargins(0, 0, 0, 0);
20
 
21
    QGroupBox *groupBox = new QGroupBox("Class");
22
    verticalLayout->addWidget(groupBox);
23
    QVBoxLayout *verticalLayout2 = new QVBoxLayout(groupBox);
24
    tableWidget = new QTableWidget(groupBox);
25
    tableWidget->setAlternatingRowColors(true);
26
    tableWidget->setRowCount(config.num_teams + 1);
27
    tableWidget->setColumnCount(config.num_legs + 3);
28
    //tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
29
    tableWidget->horizontalHeader()->setVisible(true);
30
    tableWidget->horizontalHeader()->setDefaultSectionSize(70);
31
    tableWidget->horizontalHeader()->setHighlightSections(true);
32
 
33
    tableWidget->verticalHeader()->setVisible(true);
34
    tableWidget->verticalHeader()->setDefaultSectionSize(20);
35
 
36
    verticalLayout2->addWidget(tableWidget);
37
 
38
    QHBoxLayout *horizontalLayout;
39
    horizontalLayout = new QHBoxLayout();
40
    horizontalLayout->setContentsMargins(0, 0, 5, 5);
41
    verticalLayout->addLayout(horizontalLayout);
42
 
43
    QDialogButtonBox *buttonBox = new QDialogButtonBox();
44
    refreshButton = buttonBox->addButton("Refresh Data",QDialogButtonBox::ActionRole );
45
    horizontalLayout->addWidget(buttonBox);
46
 
47
    //  Wire in the button
48
    connect(refreshButton, SIGNAL(clicked(bool)), this, SLOT(loadData()) );
49
    connect(tableWidget, SIGNAL(cellDoubleClicked(int,int)), this, SLOT(selectTeam(int,int)));
50
 
51
    // Insert Labels
52
    QStringList labels;
53
    labels << "Team" << "Full Name" << "Cat";
54
    for (int ii = 0; ii < config.num_legs; ii++)
55
    {
56
        labels << config.leg_name[ii];
57
    }
58
//    loadData();
59
 
60
    tableWidget->setHorizontalHeaderLabels(labels);
61
    tableWidget->resizeColumnsToContents();
62
}
63
 
64
void qmFullData::loadData(void)
65
{
66
    team_type team_buf;
67
 
68
    /*
69
    ** Delete existing entries in the table
70
    */
71
    tableWidget->clearContents();
72
    tableWidget->setRowCount(config.max_team+1);
73
    tableWidget->setColumnCount(config.num_legs + 3 + 5);
74
    tableWidget->setSortingEnabled(FALSE);
75
 
76
    /*
77
    ** Scan all the team data
78
    */
79
    for ( int team = config.min_team; team <= config.max_team; team++)
80
    {
81
        int leg;
82
        tableWidget->hideRow ( team );
83
        if( valid_field( team ) )
84
        {
85
            g_record( team, &team_buf );
86
            if( team_buf.flags.valid )
87
            {
88
                tableWidget->showRow( team );
89
 
90
                tableWidget->setItem(team, 0, new qmTwiNumber(team) );
91
                tableWidget->setItem(team, 1, new qmTwiString(team_buf.name));
92
                tableWidget->setItem(team, 2, new qmTwiString(config.team_class[team_buf.teamclass-1].abr));
93
 
94
                for (leg=0; leg < config.num_legs; leg++)
95
                {
96
                    tableWidget->setItem(team, 3 + leg, new qmTwiTime(team_buf.leg[leg+1].elapsed));
97
                }
98
 
99
                tableWidget->setItem(team, 3+leg++, new qmTwiFlag("Disq", team_buf.flags.disqualified) );
100
                tableWidget->setItem(team, 3+leg++, new qmTwiFlag("Non Equest",team_buf.flags.non_equestrian) );
101
                tableWidget->setItem(team, 3+leg++, new qmTwiFlag("Enable", team_buf.flags.valid) );
102
                tableWidget->setItem(team, 3+leg++, new qmTwiFlag("VetCheck", team_buf.flags.vet_check) );
103
                tableWidget->setItem(team, 3+leg++, new qmTwiFlag("Bad Times", team_buf.flags.bad_times) );
104
            }
105
        }
106
    }
107
    tableWidget->sortByColumn(0,Qt::AscendingOrder);
108
    tableWidget->setSortingEnabled(TRUE);
109
    tableWidget->resizeColumnsToContents();
110
}
111
 
112
void qmFullData::selectTeam( int row, int col)
113
{
114
    //qDebug("qmFullData::selectTeam:%d,%d",row,col);
115
    QTableWidgetItem *item = tableWidget->item(row,0);
116
    if (item)
117
    {
118
        const qmTwiNumber * itemNumber = dynamic_cast<const qmTwiNumber*>(item);
119
        if ( itemNumber)
120
            qDebug("qmFullData::selectTeam: Team:%d",itemNumber->number);
121
            qmDialogTeamEditor dialog(itemNumber->number, this);
122
            dialog.exec();
123
            loadData();
124
 
125
    }
126
}
127
 
128
qmTwiString::qmTwiString ( QString value  ) :  QTableWidgetItem(0)
129
{
130
    setData(0,value);
131
    setFlags(flags() & ~Qt::ItemIsEditable);
132
}
133
 
134
qmTwiNumber::qmTwiNumber ( int value  ) :  QTableWidgetItem(0)
135
{
136
    number = value;
137
    setData(0,value);
138
    setFlags(flags() & ~Qt::ItemIsEditable);
139
}
140
 
141
bool qmTwiNumber::operator< ( const QTableWidgetItem & other ) const
142
{
143
    const qmTwiNumber * other_widget = dynamic_cast<const qmTwiNumber*>(&other);
144
    return number < other_widget->number;
145
}
146
 
147
qmTwiTime::qmTwiTime ( int value  ) :  QTableWidgetItem(0)
148
{
149
    number = value;
150
    setData(0,time_a(value));
151
    setFlags(flags() & ~Qt::ItemIsEditable);
152
}
153
 
154
bool qmTwiTime::operator< ( const QTableWidgetItem & other ) const
155
{
156
    const qmTwiTime * other_widget = dynamic_cast<const qmTwiTime*>(&other);
157
    if (number >= 0 && other_widget->number >= 0)
158
    {
159
        return number < other_widget->number;
160
    }
161
    else if (number >= 0 && other_widget->number < 0)
162
    {
163
        return true;
164
    }
165
    else
166
    {
167
        return false;
168
    }
169
}
170
 
171
qmTwiFlag::qmTwiFlag ( const QString txt, int checked  ) :  QTableWidgetItem(txt)
172
{
173
    setCheckState(checked ? Qt::Checked : Qt::Unchecked);
174
    setFlags(flags() & ~(Qt::ItemIsEditable | Qt::ItemIsUserCheckable));
175
}
176
 
177
bool qmTwiFlag::operator< ( const QTableWidgetItem & other ) const
178
{
179
    const qmTwiFlag * other_widget = dynamic_cast<const qmTwiFlag*>(&other);
180
    return (other_widget->checkState() < checkState() );
181
}
182
 
183