Subversion Repositories svn1

Rev

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

Rev Author Line No. Line
144 - 1
#include "qmdialogloadexternalteams.h"
2
#include "ui_qmdialogloadexternalteams.h"
145 - 3
#include "QFile"
4
#include "QTextStream"
5
#include "mainwindow.h"
6
#include <QRegExp>
144 - 7
 
145 - 8
#include    "consts.h"
9
#include    "structs.h"
10
#include    "proto.h"
11
 
12
QmDialogLoadExternalTeams::QmDialogLoadExternalTeams(const QString &efile,QWidget *parent) :
144 - 13
    QDialog(parent),
14
    ui(new Ui::QmDialogLoadExternalTeams)
15
{
16
    ui->setupUi(this);
145 - 17
    setWindowTitle("Load External Team Data");
18
    ui->fileName->setText(efile);
19
 
20
    // Open the users file
21
 
22
    QFile file(efile);
23
    if ( ! file.open(QIODevice::ReadOnly | QIODevice::Text) )
24
    {
25
        MainWindow::showMessage("Cannot open external data file");
26
        return;
27
    }
149 - 28
    MainWindow::showMessage("Loading External Data");
145 - 29
 
149 - 30
    // Insert column headers
145 - 31
    ui->tableWidget->setColumnCount(3 + ( 2 * config.num_legs) );
149 - 32
    QStringList labels;
33
    labels << "Team" << "Team Name" << "Cat";
34
    for (int ii = 1; ii <= config.num_legs; ii++ )
35
    {
36
        labels += QString("Leg:%1").arg(QString::number(ii));
37
        labels += QString("Sex:%1").arg(QString::number(ii));
38
    }
39
    ui->tableWidget->setHorizontalHeaderLabels(labels);
145 - 40
 
41
    // Process Each line of the file
42
    QTextStream in(&file);
43
    int ii = 0;
148 - 44
    int bad_cat = 0;
145 - 45
    QRegExp csv_split("\"?,\"?");
46
    while (!in.atEnd())
47
    {
48
         QString line = in.readLine();
49
         line = line.trimmed();             // Remove leading and training White Space
50
         line.remove(0xA0);                 // M$ special uglyness
51
 
52
         QStringList parts = line.split(csv_split);
53
         QString first = parts.value(0);
54
         bool ok;
55
         if ( first.isEmpty() )
56
             continue;
57
         int team = first.toInt(&ok);
58
         if ( ! ok || team <= 0 )
59
             continue;
60
         ui->tableWidget->setRowCount(1+ii);
61
 
62
         // Insert Team number
63
         ui->tableWidget->setItem(ii, 0, new QTableWidgetItem(first));
64
         parts.removeFirst();
65
 
66
         // Extract Team Name
67
         ui->tableWidget->setItem(ii, 1, new QTableWidgetItem( parts.value(0) ) );
68
         parts.removeFirst();
69
 
70
         // Extract Team Cat
148 - 71
         QTableWidgetItem *item = new QTableWidgetItem( parts.value(0)) ;
72
         ui->tableWidget->setItem(ii, 2, item );
145 - 73
 
148 - 74
        if (lookup_class(qPrintable(parts.value(0)), &config ) <= 0 )
75
        {
76
            item->setBackgroundColor(QColor(200,0,0,50));
77
            bad_cat++;
78
        }
79
        parts.removeFirst();
80
 
145 - 81
         int yy = 0;
82
         while ( parts.count() > 0)
83
         {
84
             // Name of competitor
85
             ui->tableWidget->setItem(ii, 3+yy, new QTableWidgetItem( parts.value(0)));
86
             parts.removeFirst();
87
 
88
             // Posible age - if its a number
89
             int age = parts.value(0).toInt(&ok);
90
             if ( ok && age > 0 )
91
             {
92
                 ui->tableWidget->setItem(ii, 4+yy, new QTableWidgetItem( parts.value(0)));
93
                 parts.removeFirst();
94
             }
95
             yy += 2;
96
         }
97
         ii++;
146 david 98
     }
149 - 99
    ui->tableWidget->resizeColumnsToContents();
145 - 100
 
148 - 101
    // Report errors
102
    if (bad_cat)
103
    {
104
        MainWindow::showMessage("Invalid Categories in data");
105
    }
106
 
146 david 107
    // Connect up buttons
145 - 108
 
148 - 109
    connect (ui->load, SIGNAL(clicked()), this, SLOT(loadData()));
144 - 110
}
111
 
112
QmDialogLoadExternalTeams::~QmDialogLoadExternalTeams()
113
{
114
    delete ui;
115
}
146 david 116
 
117
void QmDialogLoadExternalTeams::loadData(void)
118
{
119
    qDebug ("LoadData");
120
    team_type team_buf;
148 - 121
    int bad_cat = 0;
146 david 122
    for ( int ii = 0; ii < ui->tableWidget->rowCount(); ii++)
123
    {
148 - 124
        if ( ui->tableWidget->isRowHidden(ii))
125
        {
126
            continue;
127
        }
128
        bool bad = false;
146 david 129
        QTableWidgetItem *item;
130
        item = ui->tableWidget->item(ii,0);
131
        if (item)
132
        {
133
            int team = item->data(Qt::EditRole).toInt();
134
            if ( team > 0 && team <= config.max_team )
135
            {
136
                g_record( team, &team_buf );
137
 
138
                // Name
139
                item = ui->tableWidget->item(ii,1);
140
                if (item)
141
                {
142
                    strncpy(team_buf.name , qPrintable(item->data(Qt::EditRole).toString()), sizeof(team_buf.name));
143
                }
144
 
145
                // Category
146
                item = ui->tableWidget->item(ii,2);
147
                if (item)
148
                {
149
                    int category = lookup_class(qPrintable(item->data(Qt::EditRole).toString()), &config );
150
                    if (category)
151
                    {
152
                        team_buf.teamclass = category;
153
                    }
148 - 154
                    else
155
                    {
156
                        bad_cat++;
157
                        bad = true;
158
                    }
146 david 159
                }
160
 
161
                // Team member names and ages
162
                int member = 0;
147 david 163
                for (int yy = 3; yy < ui->tableWidget->columnCount(); yy+= 2, member++)
146 david 164
                {
147 david 165
                    if (member > config.num_legs)
166
                    {
167
                        break;
168
                    }
146 david 169
                    item = ui->tableWidget->item(ii,yy);
170
                    if (item)
171
                    {
172
                        strncpy(team_buf.members[member].name , qPrintable(item->data(Qt::EditRole).toString()), sizeof(team_buf.members[member].name));
173
                    }
174
                    item = ui->tableWidget->item(ii,1+yy);
175
                    if (item)
176
                    {
177
                        int age = item->data(Qt::EditRole).toInt();
178
                        if (age)
179
                        {
180
                            team_buf.members[member].age = age;
181
                        }
182
                    }
183
                }
184
 
185
                put_team_record( team, &team_buf );
186
            }
148 - 187
            else
188
            {
189
                bad = true;
190
            }
146 david 191
        }
148 - 192
        else
193
        {
194
            bad = true;
195
        }
196
        if (!bad)
197
        {
198
            ui->tableWidget->hideRow(ii);
199
        }
146 david 200
    }
148 - 201
 
202
    // Report errors
203
    if (bad_cat)
204
    {
205
        MainWindow::showMessage("Invalid Categories in data");
206
    }
146 david 207
}
149 - 208
 
209
/*========================================================================
210
 *
211
 *  Generate team name file
212
 *
213
 *  Purpose:
214
 *      This function is called to Generate team name file in the format
215
 *      that can be read by the load command
216
 *
217
 *      The file contains team number,Team name,Team class
218
 *      The operator is prompted to enter the name of the file
219
 *
220
 *  Parameters:
221
 *      None
222
 *
223
 *  Returns:
224
 *      Nothing
225
 *
226
 *========================================================================*/
227
void QmDialogLoadExternalTeams::storeData(const QString &efile)
228
{
229
    QFile file(efile);
230
    if ( ! file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text) )
231
    {
232
        MainWindow::showMessage("Cannot open external data file");
233
        return;
234
    }
235
    QTextStream out(&file);
236
 
237
    // Print headings
238
    out << "\"Team Number\"," << "\"Team Name\"," << "\"Class Abr\"";
239
 
240
    for( int j = 1; j <= config.num_legs; j++ )
241
    {
242
        out << ",\"Competitor Name\"";
243
        out << ",\"Age\"";
244
    }
245
    out << endl;
246
 
247
    /*
248
     * Put the data into the file
249
     */
250
 
251
    for(int i = config.min_team; i <= config.max_team; i++ )
252
    {
253
        if( valid_field( i ) && g_record( i, &team_buf ) )
254
        {
255
            /*
256
            **  Basic information
257
            **      - Team number
258
            **      - Full team name
259
            */
260
            out << team_buf.numb;
261
            out << ",\"" << team_buf.name << "\"";
262
            out << ",\"" <<(team_buf.teamclass == 0 ? "" : config.team_class[team_buf.teamclass - 1].abr)  << "\"";
263
 
264
            for(int j = 1; j <= config.num_legs; j++ )
265
            {
266
                out << ",\"" << team_buf.members[j-1].name << "\"";
267
                out << ",\"" << team_buf.members[j-1].age << "\"";
268
            }
269
            out <<endl;
270
        }
271
    }
272
}