Subversion Repositories svn1-original

Rev

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

#include "qmdialogchangeteamnumber.h"
#include "ui_qmdialogchangeteamnumber.h"
#include "mainwindow.h"
#include <QPushButton>


QmDialogChangeTeamNumber::QmDialogChangeTeamNumber(const QString &title, QWidget *parent) :
    QDialog(parent),
    ui(new Ui::QmDialogChangeTeamNumber)
{
    ui->setupUi(this);
    this->setWindowTitle(title);

    ui->sourceTeam->setMinimum(config.min_team);
    ui->sourceTeam->setMaximum(config.max_team);
    ui->sourceTeam->setValue(0);
    sourceTeam = 0;

    ui->targetTeam->setMinimum(config.min_team);
    ui->targetTeam->setMaximum(config.max_team);
    ui->targetTeam->setValue(0);
    targetTeam = 0;

    checkValidOpr(0);

    // Connect up the signals
    connect(ui->sourceTeam, SIGNAL(valueChanged(int)), this, SLOT(updateSourceName(int)) );
    connect(ui->targetTeam, SIGNAL(valueChanged(int)), this, SLOT(updateTargetName(int)) );
    connect(ui->onlyNames, SIGNAL(stateChanged(int)), this, SLOT(checkValidOpr(int)) );
    connect(ui->onlyTimes, SIGNAL(stateChanged(int)), this, SLOT(checkValidOpr(int)) );
}

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

/*----------------------------------------------------------------------------
** FUNCTION           : checkValidOpr
**
** DESCRIPTION        : Check that the operation looks valid. Make
**                      sure that the user has entered some data
**
----------------------------------------------------------------------------*/

bool QmDialogChangeTeamNumber::checkValidOpr(int ignore)
{
    bool valid = true;
    //qDebug("QmDialogChangeTeamNumber::checkValidOpr");

    //  Ensure that the user has entered something
    //
    if ( sourceTeam == 0 || targetTeam == 0 )
    {
        valid = false;
    }

    //  Can't move or copy to myself
    //
    if ( ui->sourceTeam->value() == ui->targetTeam->value() )
    {
        valid = false;
    }

    // Can't have both OnlyNames and onlyTimes set
    if (ui->onlyNames->isChecked() && ui->onlyTimes->isChecked())
    {
        valid = false;
    }

    ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(valid);
    return (valid);
}

/*----------------------------------------------------------------------------
** FUNCTION           : updateSourceName 
**
** DESCRIPTION        : This method is wired to the team number control
**                      It will read in the team data and display it
**
----------------------------------------------------------------------------*/

void QmDialogChangeTeamNumber::updateSourceName(int team)
{
    sourceTeam = team;
    g_record( team, &team_buf_source );
    ui->sourceName->setText( team_buf_source.name );
    checkValidOpr(0);
}

void QmDialogChangeTeamNumber::updateTargetName(int team)
{
    targetTeam = team;
    g_record( team, &team_buf_target );
    ui->targetName->setText( team_buf_target.name );
    checkValidOpr(0);
}

/*----------------------------------------------------------------------------
** FUNCTION           : accept 
**
** DESCRIPTION        : Overide the QDialogs own function and do the
**                      actual processing.
** 
**                      Assumes that team records have been read in
**
**
----------------------------------------------------------------------------*/

void QmDialogChangeTeamNumber::accept ()
{
    //  Working store
    team_type team_buf_work;

    //qDebug("QmDialogChangeTeamNumber::accept");

    //
    //  Should  not get here, but just in case
    //
    if (!checkValidOpr(0))
    {
        return;
    }

    //
    //  Determine the mode of operation
    //      Write out the target team data
    //      We always write a target
    //
    if (ui->onlyNames->isChecked() )
    {
        memcpy(&team_buf_work, &team_buf_source, sizeof(team_buf_work));
        memcpy(&team_buf_work.leg, &team_buf_target.leg, sizeof(team_buf_work.leg));
        //qDebug("QmDialogChangeTeamNumber:: Copy data: source, target.leg");
    }
    else if( ui->onlyTimes->isChecked() )
    {
        memcpy(&team_buf_work, &team_buf_target, sizeof(team_buf_work));
        memcpy(&team_buf_work.leg, &team_buf_source.leg, sizeof(team_buf_work.leg));
        //qDebug("QmDialogChangeTeamNumber:: Copy data: target, source.leg");
    }
    else
    {
        memcpy(&team_buf_work, &team_buf_source, sizeof(team_buf_work));
        //qDebug("QmDialogChangeTeamNumber:: Copy data: source, source.leg");
    }
    put_team_record(ui->targetTeam->value(), &team_buf_work );

    //
    //  Write out the source team - if swapping
    //
    if (ui->swapMode->isChecked())
    {
        MainWindow::showMessage(QString("Swap teams %1 <-> %2").arg(ui->sourceTeam->value()).arg(ui->targetTeam->value()));
        if (ui->onlyNames->isChecked() )
        {
            memcpy(&team_buf_work, &team_buf_target, sizeof(team_buf_work));
            memcpy(&team_buf_work.leg, &team_buf_source.leg, sizeof(team_buf_work.leg));
            //qDebug("QmDialogChangeTeamNumber:: Swap data: target, source.leg");
        }
        else if( ui->onlyTimes->isChecked() )
        {
            memcpy(&team_buf_work, &team_buf_source, sizeof(team_buf_work));
            memcpy(&team_buf_work.leg, &team_buf_target.leg, sizeof(team_buf_work.leg));
            //qDebug("QmDialogChangeTeamNumber:: Swap data: source, target.leg");
        }
        else
        {
            memcpy(&team_buf_work, &team_buf_target, sizeof(team_buf_work));
            //qDebug("QmDialogChangeTeamNumber:: Swap data: target");
        }
        put_team_record(ui->sourceTeam->value(), &team_buf_work );
    }

    //  Move Mode
    //      Have already written the target
    //      Need to delete parts of the source
    //
    if (ui->moveMode->isChecked())
    {
        MainWindow::showMessage(QString("Move team %1 -> %2").arg(ui->sourceTeam->value()).arg(ui->targetTeam->value()));
        if (ui->onlyNames->isChecked() )
        {
            clr_team( ui->sourceTeam->value(), &team_buf_work );
            memcpy(&team_buf_work.leg, &team_buf_source.leg, sizeof(team_buf_work.leg));
            memcpy(&team_buf_source, &team_buf_work, sizeof(team_buf_work));
            //qDebug("QmDialogChangeTeamNumber:: Erase data: source, copy target.leg");
        }
        else if( ui->onlyTimes->isChecked() )
        {
            memset(&team_buf_source.leg,0,sizeof(team_buf_source.leg));
            //qDebug("QmDialogChangeTeamNumber:: Erase data: source.leg");
        }
        else
        {
            clr_team( ui->sourceTeam->value(), &team_buf_source );
            //qDebug("QmDialogChangeTeamNumber:: Erase data: source");
        }

        put_team_record(ui->sourceTeam->value(), &team_buf_source );
        MainWindow::showMessage(QString("Move team %1 -> %2").arg(ui->sourceTeam->value()).arg(ui->targetTeam->value()));
    }

    if (ui->copyMode->isChecked())
    {
        MainWindow::showMessage(QString("Copy team %1 -> %2").arg(ui->sourceTeam->value()).arg(ui->targetTeam->value()));
    }


    //  All the work has been done
    //  Back to the user - calling the parents function will close the dialog
    //
    QDialog::accept();
}