Subversion Repositories svn1

Rev

Rev 153 | Rev 155 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

#include "qmdialoguploadlegtimes.h"
#include "ui_qmdialoguploadlegtimes.h"
#include "QTableWidgetItem"
#include "QFile"
#include "QString"
#include "QFileDialog"
#include "mainwindow.h"
#include "QTextStream"
#include "timedelegate.h"

#include    "consts.h"
#include    "structs.h"
#include    "proto.h"

QmDialogUploadLegTimes::QmDialogUploadLegTimes(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::QmDialogUploadLegTimes)
{
    ui->setupUi(this);
    ui->legNumber->setMaximum(config.num_legs);

    // Connect up buttons
    connect(ui->load, SIGNAL(clicked()), this, SLOT(load()));
    connect(ui->cancel,SIGNAL(clicked()), this, SLOT(close()));


    // Set up the table
     ui->tableWidget->setColumnCount(5);

     QStringList labels;
     labels << "Team" << "Delta" << "Time" << "Time" << "Time";
     ui->tableWidget->setHorizontalHeaderLabels(labels);

     //ui->tableWidget->setItemDelegateForColumn(1, new timeDelegate());
     ui->tableWidget->setItemDelegateForColumn(2, new timeDelegate());
     ui->tableWidget->setItemDelegateForColumn(3, new timeDelegate());
     ui->tableWidget->setItemDelegateForColumn(4, new timeDelegate());
}

QmDialogUploadLegTimes::~QmDialogUploadLegTimes()
{
    delete ui;
}

void QmDialogUploadLegTimes::load(void)
{
    QString fileName = QFileDialog::getOpenFileName(this, tr("Load File"),
                                                 QDir::currentPath(),
                                                 tr("Data (*.leg);;All (*.*)"),
                                                 0,
                                                 QFileDialog::ReadOnly);
    if ( fileName.isEmpty() )
    {
        MainWindow::showMessage("No File Specified");
        return;
    }

    // Open the file

    QFile file(fileName);
    if ( ! file.open(QIODevice::ReadOnly | QIODevice::Text) )
    {
        MainWindow::showMessage("Cannot open Leg Data file");
        return;
    }
    MainWindow::showMessage("Loading Leg Data");
    // Insert column headers
    ui->tableWidget->clearContents();
    ui->tableWidget->setRowCount(0);


    // Process Each line of the file
    //  Format is TeamNumber Time
    QTextStream in(&file);
    while (!in.atEnd())
    {
        QString line = in.readLine();
        line = line.trimmed();             // Remove leading and training White Space
        QStringList parts = line.split(" ");
        QString first = parts.value(0);

        bool ok;
        int team = first.toInt(&ok);
        if ( ! ok || team <= 0 )
            continue;
        if (team > ui->tableWidget->rowCount())
        {
            ui->tableWidget->setRowCount(team);
        }

        QTableWidgetItem *item = ui->tableWidget->item(team-1,0);
        if (!item)
        {
            item = new QTableWidgetItem(QString::number(team));
            item->setFlags(item->flags() & ~(Qt::ItemIsEditable|Qt::ItemIsDragEnabled|Qt::ItemIsDropEnabled));
            ui->tableWidget->setItem(team-1,0,item);
            item->setData(Qt::ToolTipRole,"Team Number");

            item = new QTableWidgetItem("");
            item->setFlags(item->flags() & ~(Qt::ItemIsEditable|Qt::ItemIsDragEnabled|Qt::ItemIsDropEnabled));
            ui->tableWidget->setItem(team-1,1,item);
            item->setData(Qt::ToolTipRole,"Max delta");
        }

        //  Insert the time at the first available slot
        //  Scan for max an min as we go
        int ii;
        QTableWidgetItem *titem = NULL;
        QTime ltime = QTime::fromString(parts.value(1),"hh:mm:ss");
        unsigned int lsecs = QTime(0,0,0).secsTo(ltime);
        unsigned int min_time = lsecs;
        unsigned int max_time = lsecs;

        for (ii=2 ; ii < ui->tableWidget->columnCount(); ii++)
        {
            titem = ui->tableWidget->item(team-1,ii);
            if (! titem)
            {
                break;
            }

            QTime entry = titem->data(Qt::EditRole).toTime();
            unsigned int secs = QTime(0,0,0).secsTo(entry);
            if ( secs < min_time )
                min_time = secs;
            if (secs > max_time)
                max_time = secs;
        }
        titem = new QTableWidgetItem();
        titem->setData(Qt::EditRole, ltime);
        ui->tableWidget->setItem(team-1,ii,titem);

        int delta = max_time - min_time;
        if ( delta )
        {
            ui->tableWidget->item(team-1,1)->setData(Qt::EditRole, QTime().addSecs(delta));
        }
    }

}