Subversion Repositories svn1-original

Rev

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

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

#include "QTableWidgetItem"
#include "spinboxdelegate.h"
#include "timedelegate.h"

QmConfClass::QmConfClass(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::QmConfClass)
{
    ui->setupUi(this);
    connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(save()) );
    connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(cancel()) );

    ui->tableWidget->setRowCount(MAX_CLASS);

    /*
    **  Setup delegated for specialised editing
    */
    ui->tableWidget->setItemDelegateForColumn(2, new timeDelegate());

    populate();
}

void QmConfClass::populate(void)
{
    for ( int ii = 0; ii < MAX_CLASS; ii++)
    {
        QTableWidgetItem *item;
        item = new QTableWidgetItem(config.team_class[ii].abr);
        ui->tableWidget->setItem(ii, 0, item );

        item = new QTableWidgetItem(config.team_class[ii].full_name );
        ui->tableWidget->setItem(ii, 1, item);

        item = new QTableWidgetItem();
        item->setData(Qt::EditRole,QTime().addSecs(config.team_class[ii].start) );
        ui->tableWidget->setItem(ii, 2, item);
    }
}

void QmConfClass::save(void)
{
    int error = 0;

    /*
    **    Copy original data
    */
    MARA_CFG    newcfg = config;

    /*
    **  Extract the data from the Widgets
    */
    for ( int ii = 0; ii < MAX_CLASS; ii++)
    {
        QTableWidgetItem *item = ui->tableWidget->item ( ii, 0 );
        strncpy(newcfg.team_class[ii].abr, qPrintable(item->text()), sizeof(newcfg.team_class[ii].abr)-1);

        item = ui->tableWidget->item ( ii, 1 );
        strncpy(newcfg.team_class[ii].full_name, qPrintable(item->text()), sizeof(newcfg.team_class[ii].full_name)-1);
    }
    

    /*
     **  Now do the Class definitions
     */
    for( int i = 0; i < MAX_CLASS; i++ )
    {
        compact( newcfg.team_class[i].abr );
        compact( newcfg.team_class[i].full_name );
    }

    for( int i = 0; i < MAX_CLASS; i++ )
    {
        if( ( newcfg.team_class[i].abr[0] == '\0' ) != ( newcfg.team_class[i].full_name[0] == '\0' ) )
        {
            printf( "Configuration error. Class without description\n" );
            error++;
        }
        if( newcfg.team_class[i].abr[0] != '\0' && newcfg.team_class[i].start < 0L )
        {
            printf( "Configuration error. Bad start time on class\n" );
            error++;
        }
    }

    newcfg.num_class = 0;
    for( int i = 0; i < MAX_CLASS; i++ )
        if( newcfg.team_class[i].full_name[0] )
            newcfg.num_class++;

    for( int i = newcfg.num_class; i < MAX_CLASS; i++ )
        if( newcfg.team_class[i].full_name[0] )
        {
            printf( "Configuration error: Missing Class name. Gaps not allowed\n" );
            error++;
        }

    if( newcfg.num_class == 0 )
    {
        printf( "Error: No categories defined\n" );
        error++;
    }

    newcfg.nonequestrian_class = lookup_class( newcfg.nonequestrian_class_abr, &newcfg );
    if( newcfg.equestrian_leg && newcfg.nonequestrian_class == 0 )
        printf( "WARNING: Non-equestrian class not found\n" );

    if ( error == 0 )
    {
        config = newcfg;
        wt_config();
    }

}

void QmConfClass::cancel(void)
{
    populate();
}

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

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