Subversion Repositories svn1-original

Rev

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

#include "qmconfwinners.h"
#include "qmconfig.h"
#include "ui_qmconfwinners.h"
#include "mainwindow.h"

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

#include "QTableWidgetItem"

QmConfWinners::QmConfWinners(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::QmConfWinners)
{
    ui->setupUi(this);

    ui->tableWidget->setRowCount(MAX_FAME);
    dirty = true;
    populating = false;

    connect(ui->pushButtonSave, SIGNAL(clicked()), this, SLOT(save()) );
    connect(ui->pushButtonRestore, SIGNAL(clicked()), this, SLOT(cancel()) );
    connect(ui->tableWidget, SIGNAL(cellChanged(int,int)), this, SLOT(changed()));

    populate();
}

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

void QmConfWinners::populate(void)
{
    populating = true;
    for ( int ii = 0; ii < MAX_FAME; ii++)
    {
        ui->tableWidget->setItem(ii, 0, new QTableWidgetItem(config.hall_fame[ii] ));
    }
    populating = false;
    updateChanged(false);
}

void QmConfWinners::save(void)
{
    /*
    **    Copy original data
    */
     QmConfig newcfg(config);

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

    newcfg.num_fame = 0;
    for( int i = 0; i < MAX_FAME; i++ )
        if( newcfg.hall_fame[i][0] )
            newcfg.num_fame++;

    // Sanity Check
    try
    {
        MainWindow::showMessage( "Saving Config");
        for( int i = newcfg.num_fame; i < MAX_FAME; i++ )
            if( newcfg.hall_fame[i][0] )
            {
                throw ( "Configuration error: Missing Fame name. Gaps not allowed" );
            }

        config = newcfg;
        config.write_config();
        updateChanged(false);
    }
    catch ( const char * str)
    {
        MainWindow::showMessage(str);
    }

}

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

void QmConfWinners::changed(void)
{
    if ( populating )
        return;
    updateChanged(true);
}

void QmConfWinners::updateChanged(bool newDirty)
{
    if (newDirty != dirty)
    {
        dirty = newDirty;
        if (dirty)
        {
            ui->Changed->setVisible(true);
            ui->pushButtonSave->setEnabled(true);
            ui->pushButtonSave->setStyleSheet("background-color: rgb(255, 0, 0);");
        }
        else
        {
            ui->Changed->setVisible(false);
            ui->pushButtonSave->setEnabled(false);
            ui->pushButtonSave->setStyleSheet("");
        }
    }
}

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