Subversion Repositories svn1-original

Rev

Rev 190 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
157 david 1
#include "qmdialoguploadlegtimes.h"
2
#include "ui_qmdialoguploadlegtimes.h"
3
#include "QTableWidgetItem"
4
#include "QFile"
5
#include "QString"
6
#include "QFileDialog"
7
#include "mainwindow.h"
8
#include "QTextStream"
9
#include "timedelegate.h"
10
 
11
#include    "consts.h"
12
#include    "structs.h"
13
#include    "proto.h"
14
 
15
QmDialogUploadLegTimes::QmDialogUploadLegTimes(QWidget *parent) :
16
    QDialog(parent),
17
    ui(new Ui::QmDialogUploadLegTimes)
18
{
19
    ui->setupUi(this);
20
    ui->legNumber->setMaximum(config.num_legs);
21
 
22
    // Connect up buttons
23
    connect(ui->load, SIGNAL(clicked()), this, SLOT(load()));
24
    connect(ui->cancel,SIGNAL(clicked()), this, SLOT(close()));
159 - 25
    connect(ui->update,SIGNAL(clicked()), this, SLOT(update()));
189 - 26
    connect(ui->deltaTime, SIGNAL(valueChanged(int)), this, SLOT(updateDeltaDisplay()));
27
    connect(ui->hideOk, SIGNAL(clicked()), this, SLOT(updateDeltaDisplay()));
157 david 28
 
29
 
30
    // Set up the table
191 - 31
     ui->tableWidget->setColumnCount(6);
157 david 32
 
33
     QStringList labels;
191 - 34
     labels << "Team" << "Delta" << "Use" << "Time" << "Time" << "Time";
157 david 35
     ui->tableWidget->setHorizontalHeaderLabels(labels);
36
 
161 david 37
     ui->tableWidget->setItemDelegateForColumn(1, new timeDelegate());
157 david 38
     ui->tableWidget->setItemDelegateForColumn(2, new timeDelegate());
39
     ui->tableWidget->setItemDelegateForColumn(3, new timeDelegate());
40
     ui->tableWidget->setItemDelegateForColumn(4, new timeDelegate());
191 - 41
     ui->tableWidget->setItemDelegateForColumn(5, new timeDelegate());
42
     connect(ui->tableWidget,SIGNAL(itemDoubleClicked (QTableWidgetItem*)), this,SLOT(itemActivated(QTableWidgetItem*)));
159 - 43
 
44
     ui->status->setText("Load Leg File");
157 david 45
}
46
 
47
QmDialogUploadLegTimes::~QmDialogUploadLegTimes()
48
{
49
    delete ui;
50
}
51
 
52
void QmDialogUploadLegTimes::load(void)
53
{
54
    QString fileName = QFileDialog::getOpenFileName(this, tr("Load File"),
178 - 55
                                                 filepath,
189 - 56
                                                 tr("Legs (*leg*);;Data (*.leg);;All (*.*)"),
157 david 57
                                                 0,
58
                                                 QFileDialog::ReadOnly);
59
    if ( fileName.isEmpty() )
60
    {
61
        MainWindow::showMessage("No File Specified");
62
        return;
63
    }
64
 
65
    // Open the file
66
 
67
    QFile file(fileName);
68
    if ( ! file.open(QIODevice::ReadOnly | QIODevice::Text) )
69
    {
70
        MainWindow::showMessage("Cannot open Leg Data file");
71
        return;
72
    }
159 - 73
    ui->status->setText("Loading Data");
157 david 74
    // Insert column headers
75
    ui->tableWidget->clearContents();
76
    ui->tableWidget->setRowCount(0);
77
 
78
 
79
    // Process Each line of the file
80
    //  Format is TeamNumber Time
81
    QTextStream in(&file);
82
    while (!in.atEnd())
83
    {
84
        QString line = in.readLine();
85
        line = line.trimmed();             // Remove leading and training White Space
86
        QStringList parts = line.split(" ");
87
        QString first = parts.value(0);
189 - 88
        if ( parts.count() != 2)
89
        {
90
            qDebug("Funny Line: %s", qPrintable(line));
91
            continue;
92
        }
157 david 93
 
94
        bool ok;
95
        int team = first.toInt(&ok);
96
        if ( ! ok || team <= 0 )
97
            continue;
98
        if (team > ui->tableWidget->rowCount())
99
        {
100
            ui->tableWidget->setRowCount(team);
101
        }
102
 
103
        QTableWidgetItem *item = ui->tableWidget->item(team-1,0);
104
        if (!item)
105
        {
106
            item = new QTableWidgetItem(QString::number(team));
107
            item->setFlags(item->flags() & ~(Qt::ItemIsEditable|Qt::ItemIsDragEnabled|Qt::ItemIsDropEnabled));
108
            ui->tableWidget->setItem(team-1,0,item);
158 david 109
            item->setData(Qt::ToolTipRole,"Team Number");
110
 
111
            item = new QTableWidgetItem("");
112
            item->setFlags(item->flags() & ~(Qt::ItemIsEditable|Qt::ItemIsDragEnabled|Qt::ItemIsDropEnabled));
113
            ui->tableWidget->setItem(team-1,1,item);
114
            item->setData(Qt::ToolTipRole,"Max delta");
191 - 115
 
116
            item = new QTableWidgetItem("");
117
            item->setFlags(item->flags() & ~(Qt::ItemIsDragEnabled|Qt::ItemIsDropEnabled));
118
            ui->tableWidget->setItem(team-1,2,item);
119
            item->setData(Qt::ToolTipRole,"Use this data");
157 david 120
        }
121
 
158 david 122
        //  Insert the time at the first available slot
123
        //  Scan for max an min as we go
157 david 124
        int ii;
125
        QTableWidgetItem *titem = NULL;
158 david 126
        QTime ltime = QTime::fromString(parts.value(1),"hh:mm:ss");
127
        unsigned int lsecs = QTime(0,0,0).secsTo(ltime);
190 - 128
        if ( lsecs <= 0)
129
        {
130
            qDebug("Funny Line: %s", qPrintable(line));
131
            continue;
132
        }
133
        //qDebug("Tead: %d, Secs: %d", team, lsecs );
158 david 134
        unsigned int min_time = lsecs;
135
        unsigned int max_time = lsecs;
136
 
191 - 137
        for (ii=3 ; ii < ui->tableWidget->columnCount(); ii++)
157 david 138
        {
139
            titem = ui->tableWidget->item(team-1,ii);
140
            if (! titem)
141
            {
142
                break;
143
            }
158 david 144
 
145
            QTime entry = titem->data(Qt::EditRole).toTime();
146
            unsigned int secs = QTime(0,0,0).secsTo(entry);
147
            if ( secs < min_time )
148
                min_time = secs;
149
            if (secs > max_time)
150
                max_time = secs;
157 david 151
        }
158 david 152
        titem = new QTableWidgetItem();
153
        titem->setData(Qt::EditRole, ltime);
191 - 154
        titem->setFlags(titem->flags() & ~(Qt::ItemIsEditable|Qt::ItemIsDragEnabled|Qt::ItemIsDropEnabled));
157 david 155
        ui->tableWidget->setItem(team-1,ii,titem);
156
 
191 - 157
        if (ii == 3)
158
        {
159
            titem = new QTableWidgetItem();
160
            titem->setData(Qt::EditRole, ltime);
161
            ui->tableWidget->setItem(team-1,2,titem);
162
            titem->setBackgroundColor(QColor(0,255,0,30));
163
        }
164
 
158 david 165
        int delta = max_time - min_time;
166
        if ( delta )
167
        {
168
            ui->tableWidget->item(team-1,1)->setData(Qt::EditRole, QTime().addSecs(delta));
169
        }
157 david 170
    }
171
 
159 - 172
    // Update Error information
189 - 173
    updateDeltaDisplay();
159 - 174
 
157 david 175
}
159 - 176
 
189 - 177
void QmDialogUploadLegTimes::updateDeltaDisplay( void )
159 - 178
{
179
    bool isFlagged = false;
189 - 180
    QTime maxDelta(0,0,0,0);
181
    QTime delta = QTime().addSecs(ui->deltaTime->value());
159 - 182
    for ( int ii = 0; ii < ui->tableWidget->rowCount(); ii++)
183
    {
189 - 184
        bool show = true;
159 - 185
        QTableWidgetItem *item;
186
        item = ui->tableWidget->item(ii, 1);
187
        if (item)
188
        {
189
            QTime time = item->data(Qt::EditRole).toTime();
189 - 190
            if ( time > maxDelta)
191
            {
192
                maxDelta = time;
193
            }
159 - 194
            if ( time > delta )
195
            {
196
                item->setBackgroundColor(QColor(255,0,0,50));
197
                isFlagged = true;
198
            }
199
            else
200
            {
201
                item->setBackgroundColor(QColor(255,255,255));
189 - 202
                if ( ui->hideOk->isChecked())
203
                {
204
                    show = false;
205
                }
159 - 206
            }
207
        }
189 - 208
 
209
        // Hide if not a valid time and we have no time ebtry for it
210
        if ( !valid_field(ii+1) && item == NULL )
211
        {
212
            show = false;
213
        }
214
        ui->tableWidget->setRowHidden(ii,!show);
215
 
159 - 216
    }
189 - 217
    //ui->maxDeltaTime->setText(QString::number(QTime(0,0,0).secsTo(maxDelta)));
218
    ui->maxDeltaTime->setText(maxDelta.toString("hh:mm:ss"));
159 - 219
    if (isFlagged)
220
    {
221
        ui->status->setText("Large Delta Times");
222
    }
223
    else
224
    {
191 - 225
 
159 - 226
    }
227
}
228
 
229
void QmDialogUploadLegTimes::update(void)
230
{
174 - 231
    team_type   team_buf;
159 - 232
    int leg = ui->legNumber->value() ;
233
    if (leg <= 0 || leg > config.num_legs)
234
    {
235
        ui->status->setText("Must select leg number");
236
        return;
237
    }
238
 
239
    // Insert the first time into the desired leg
240
    for ( int ii = 0; ii < ui->tableWidget->rowCount(); ii++)
241
    {
242
        QTableWidgetItem *item;
243
        item = ui->tableWidget->item(ii, 0);
244
        if (item)
245
        {
246
            int team = item->data(Qt::EditRole).toInt();
247
            if( valid_field( team ) && g_record( team, &team_buf ) )
248
            {
249
                item = ui->tableWidget->item(ii, 2);
250
                if (item)
251
                {
252
                    QTime time = item->data(Qt::EditRole).toTime();
253
                    int secs = QTime(0,0,0).secsTo(time);
254
 
255
                    if ( ui->legStart->isChecked())
256
                    {
257
                        team_buf.leg[leg].start = secs;
258
                        team_buf.leg[leg].manual = TRUE;
259
                    }
260
                    else
261
                    {
262
                        team_buf.leg[leg].end = secs;
263
                    }
264
                    set_times( &team_buf );                 /* Calc start of next leg */
265
                    test_times( &team_buf, 0 );             /* Calc elapsed times etc */
266
                    put_team_record( team, &team_buf );
267
                    ui->tableWidget->hideRow(ii);
268
                }
269
            }
270
        }
271
     }
272
}
191 - 273
 
274
void QmDialogUploadLegTimes::itemActivated ( QTableWidgetItem * uitem )
275
{
276
    // Use this item for the time
277
    QTableWidgetItem *titem = new QTableWidgetItem(*uitem);
278
    titem->setFlags(titem->flags()| Qt::ItemIsEditable);
279
    ui->tableWidget->setItem(uitem->row(),2,titem);
280
    titem->setBackgroundColor(QColor(0,0,255,30));
281
 
282
}