Subversion Repositories svn1

Rev

Rev 147 | Rev 149 | 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
    }
28
 
29
    ui->tableWidget->setColumnCount(3 + ( 2 * config.num_legs) );
30
 
31
 
32
    // Process Each line of the file
33
    QTextStream in(&file);
34
    int ii = 0;
148 - 35
    int bad_cat = 0;
145 - 36
    QRegExp csv_split("\"?,\"?");
37
    while (!in.atEnd())
38
    {
39
         QString line = in.readLine();
40
         line = line.trimmed();             // Remove leading and training White Space
41
         line.remove(0xA0);                 // M$ special uglyness
42
 
43
         QStringList parts = line.split(csv_split);
44
         QString first = parts.value(0);
45
         bool ok;
46
         if ( first.isEmpty() )
47
             continue;
48
         int team = first.toInt(&ok);
49
         if ( ! ok || team <= 0 )
50
             continue;
51
         ui->tableWidget->setRowCount(1+ii);
52
 
53
         // Insert Team number
54
         ui->tableWidget->setItem(ii, 0, new QTableWidgetItem(first));
55
         parts.removeFirst();
56
 
57
         // Extract Team Name
58
         ui->tableWidget->setItem(ii, 1, new QTableWidgetItem( parts.value(0) ) );
59
         parts.removeFirst();
60
 
61
         // Extract Team Cat
148 - 62
         QTableWidgetItem *item = new QTableWidgetItem( parts.value(0)) ;
63
         ui->tableWidget->setItem(ii, 2, item );
145 - 64
 
148 - 65
        if (lookup_class(qPrintable(parts.value(0)), &config ) <= 0 )
66
        {
67
            item->setBackgroundColor(QColor(200,0,0,50));
68
            bad_cat++;
69
        }
70
        parts.removeFirst();
71
 
145 - 72
         int yy = 0;
73
         while ( parts.count() > 0)
74
         {
75
             // Name of competitor
76
             ui->tableWidget->setItem(ii, 3+yy, new QTableWidgetItem( parts.value(0)));
77
             parts.removeFirst();
78
 
79
             // Posible age - if its a number
80
             int age = parts.value(0).toInt(&ok);
81
             if ( ok && age > 0 )
82
             {
83
                 ui->tableWidget->setItem(ii, 4+yy, new QTableWidgetItem( parts.value(0)));
84
                 parts.removeFirst();
85
             }
86
             yy += 2;
87
         }
88
         ii++;
146 david 89
     }
145 - 90
 
148 - 91
    // Report errors
92
    if (bad_cat)
93
    {
94
        MainWindow::showMessage("Invalid Categories in data");
95
    }
96
 
146 david 97
    // Connect up buttons
145 - 98
 
148 - 99
    connect (ui->load, SIGNAL(clicked()), this, SLOT(loadData()));
144 - 100
}
101
 
102
QmDialogLoadExternalTeams::~QmDialogLoadExternalTeams()
103
{
104
    delete ui;
105
}
146 david 106
 
107
void QmDialogLoadExternalTeams::loadData(void)
108
{
109
    qDebug ("LoadData");
110
    team_type team_buf;
148 - 111
    int bad_cat = 0;
146 david 112
    for ( int ii = 0; ii < ui->tableWidget->rowCount(); ii++)
113
    {
148 - 114
        if ( ui->tableWidget->isRowHidden(ii))
115
        {
116
            continue;
117
        }
118
        bool bad = false;
146 david 119
        QTableWidgetItem *item;
120
        item = ui->tableWidget->item(ii,0);
121
        if (item)
122
        {
123
            int team = item->data(Qt::EditRole).toInt();
124
            if ( team > 0 && team <= config.max_team )
125
            {
126
                g_record( team, &team_buf );
127
 
128
                // Name
129
                item = ui->tableWidget->item(ii,1);
130
                if (item)
131
                {
132
                    strncpy(team_buf.name , qPrintable(item->data(Qt::EditRole).toString()), sizeof(team_buf.name));
133
                }
134
 
135
                // Category
136
                item = ui->tableWidget->item(ii,2);
137
                if (item)
138
                {
139
                    int category = lookup_class(qPrintable(item->data(Qt::EditRole).toString()), &config );
140
                    if (category)
141
                    {
142
                        team_buf.teamclass = category;
143
                    }
148 - 144
                    else
145
                    {
146
                        bad_cat++;
147
                        bad = true;
148
                    }
146 david 149
                }
150
 
151
                // Team member names and ages
152
                int member = 0;
147 david 153
                for (int yy = 3; yy < ui->tableWidget->columnCount(); yy+= 2, member++)
146 david 154
                {
147 david 155
                    if (member > config.num_legs)
156
                    {
157
                        break;
158
                    }
146 david 159
                    item = ui->tableWidget->item(ii,yy);
160
                    if (item)
161
                    {
162
                        strncpy(team_buf.members[member].name , qPrintable(item->data(Qt::EditRole).toString()), sizeof(team_buf.members[member].name));
163
                    }
164
                    item = ui->tableWidget->item(ii,1+yy);
165
                    if (item)
166
                    {
167
                        int age = item->data(Qt::EditRole).toInt();
168
                        if (age)
169
                        {
170
                            team_buf.members[member].age = age;
171
                        }
172
                    }
173
                }
174
 
175
                put_team_record( team, &team_buf );
176
            }
148 - 177
            else
178
            {
179
                bad = true;
180
            }
146 david 181
        }
148 - 182
        else
183
        {
184
            bad = true;
185
        }
186
        if (!bad)
187
        {
188
            ui->tableWidget->hideRow(ii);
189
        }
146 david 190
    }
148 - 191
 
192
    // Report errors
193
    if (bad_cat)
194
    {
195
        MainWindow::showMessage("Invalid Categories in data");
196
    }
146 david 197
}