#include "qmdialogchangeteamnumber.h" #include "ui_qmdialogchangeteamnumber.h" #include "mainwindow.h" #include 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(); }