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 buttonsconnect(ui->load, SIGNAL(clicked()), this, SLOT(load()));connect(ui->cancel,SIGNAL(clicked()), this, SLOT(close()));// Set up the tableui->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 fileQFile file(fileName);if ( ! file.open(QIODevice::ReadOnly | QIODevice::Text) ){MainWindow::showMessage("Cannot open Leg Data file");return;}MainWindow::showMessage("Loading Leg Data");// Insert column headersui->tableWidget->clearContents();ui->tableWidget->setRowCount(0);// Process Each line of the file// Format is TeamNumber TimeQTextStream in(&file);while (!in.atEnd()){QString line = in.readLine();line = line.trimmed(); // Remove leading and training White SpaceQStringList 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 goint 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));}}}