#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; } }