Subversion Repositories svn1-original

Rev

Rev 344 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*============================================================================
**
**  Project/Product :
**  Filename        : qmlegtimes.cpp
**  Author(s)       : DDP
**
**  Description     : Display and edit leg time information
**
**
**  Information     :
**   Compiler       : ANSI C++
**   Target         : 
**
***==========================================================================*/

#include "qmlegtimes.h"
#include "ui_qmlegtimes.h"

/*----------------------------------------------------------------------------
** FUNCTION           : QmLegTimes
**
** DESCRIPTION        : Constructor
**
**
** INPUTS             : legnum
**                      name
**                      parent
**
** RETURNS            :
**
----------------------------------------------------------------------------*/

QmLegTimes::QmLegTimes(const int legnum, const QString &name, QWidget *parent) :
    QWidget(parent),
    ui(new Ui::QmLegTimes)
{
    ui->setupUi(this);
    leg = legnum;
    inSetData = FALSE;
    ui->legName->setText(name);

    /*
    **  Wire up the edit signals
    **  Leg-0 is special as its all calculated data and not editable
    */
    if ( leg )
    {
        connect( ui->checkBox,  SIGNAL(stateChanged(int)),  this, SLOT(enableStartTime(int)) );
        connect( ui->startTime, SIGNAL(timeChanged(QTime)), this, SLOT(updateData(void)) );
        connect( ui->endTime,   SIGNAL(timeChanged(QTime)), this, SLOT(updateData(void)) );
    }
    else
    {
        ui->checkBox->setEnabled(FALSE);
        ui->startTime->setEnabled(FALSE);
        ui->endTime->setEnabled(FALSE);
    }
}

/*----------------------------------------------------------------------------
** FUNCTION           : ~QmLegTimes
**
** DESCRIPTION        : Descructor
**
**
** INPUTS             :
**
** RETURNS            :
**
----------------------------------------------------------------------------*/

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

/*----------------------------------------------------------------------------
** FUNCTION           : cleanPlace
**
** DESCRIPTION        : Convert place data to nice text
**
**
** INPUTS             : data        - Number to process
**
** RETURNS            :
**
----------------------------------------------------------------------------*/

QString cleanPlace(int data) {
    if (data <= 0)
        return "-";
    else
        return QString::number(data);
}

/*----------------------------------------------------------------------------
** FUNCTION           : setData
**
** DESCRIPTION        : Populate the widget with data from a team entry
**
**
** INPUTS             : data        - Leg entry to source data from
**
** RETURNS            :
**
----------------------------------------------------------------------------*/

void QmLegTimes::setData(leg_type *data)
{
    inSetData = TRUE;
    if (data->start < 0 )
    {
        ui->startTime->setTime(QTime(0,0,0,0));
    }
    else
    {
        ui->startTime->setTime(QTime().addSecs(data->start));
    }
    
    ui->startTime->setEnabled(data->manual);
    if ( data->end < 0 )
    {
        ui->endTime->setTime(QTime(0,0,0,0));
    }
    else
    {
        ui->endTime->setTime(QTime().addSecs(data->end));
    }

    if ( data->elapsed < 0 )
    {
        ui->elapsedTime->setText(QTime().toString("HH:mm:ss"));
    }
    else
    {
        ui->elapsedTime->setText(QTime().addSecs(data->elapsed).toString("HH:mm:ss"));
    }
    ui->checkBox->setChecked(data->manual);
    ui->lc_place->setText(cleanPlace(data->lc_place));
    ui->le_place->setText(cleanPlace(data->le_place));
    ui->l_place->setText(cleanPlace(data->l_place));
    ui->lec_place->setText(cleanPlace(data->lec_place));
    inSetData = FALSE;
}

/*----------------------------------------------------------------------------
** FUNCTION           : getData
**
** DESCRIPTION        : Return widget data directly into the leg data structure
**
**
** INPUTS             : data        - ref to target data
**
** RETURNS            :
**
----------------------------------------------------------------------------*/


void QmLegTimes::getData(leg_type *data)
{
    data->manual = ui->checkBox->checkState();
    data->start = QTime(0,0,0).secsTo(ui->startTime->time());
    data->end = QTime(0,0,0).secsTo(ui->endTime->time());
}

/*----------------------------------------------------------------------------
** FUNCTION           : enableStartTime
**
** DESCRIPTION        : Maintain the state of the starttime widget
**
**
** INPUTS             : state       - New state
**
** RETURNS            :
**
----------------------------------------------------------------------------*/


void QmLegTimes::enableStartTime( int state )
{
    ui->startTime->setEnabled(state);
    updateData();
}

/*----------------------------------------------------------------------------
** FUNCTION           : updateData
**
** DESCRIPTION        : Indicate that data has changed
**                      This will result in all data in all legs being updated
**
**
** INPUTS             :
**
** RETURNS            :
**
----------------------------------------------------------------------------*/

void QmLegTimes::updateData(void)
{
    if ( ! inSetData )
    {
        //qDebug("TimeChanged");
        emit dataChanged();
    }
}

/*----------------------------------------------------------------------------
** FUNCTION           : changeEvent 
**
** DESCRIPTION        :
**
**
** INPUTS             :
**
** RETURNS            :
**
----------------------------------------------------------------------------*/


void QmLegTimes::changeEvent(QEvent *e)
{
    QWidget::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}