Rev 127 | Rev 142 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
#include "qmteamdisplay.h"#include "ui_qmteamdisplay.h"#include "spinboxdelegate.h"#include "timedelegate.h"#include "textdelegate.h"qmTeamDisplay::qmTeamDisplay(QWidget *parent) :QWidget(parent),ui(new Ui::QmTeamDisplay){ui->setupUi(this);team = 0;/*** Populate the Combo Box** Should do more often*/for ( int ii = 0; ii < config.num_class ; ii++){ui->category->addItem(config.team_class[ii].full_name, ii);}ui->category->setCurrentIndex(-1);ui->members->setItemDelegateForColumn(0, new textDelegate(MAX_PERSON_NAME));//ui->members->setItemDelegateForColumn(1, new timeDelegate());ui->members->setItemDelegateForColumn(2, new SpinBoxDelegate(0,120));/*** Insert widgets for the Team Times*/int ii;for ( ii = 1 ; ii <= config.num_legs; ii++){lt[ii] = new QmLegTimes(ii, config.leg_name[ii-1]);ui->legTime_layout->addWidget(lt[ii]);connect (lt[ii], SIGNAL(dataChanged()), this, SLOT(recalculateTimes()) );}lt[0] = new QmLegTimes(0, "Overall Event");ui->legTime_layout->addWidget(lt[0]);connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(save()) );connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(cancel()) );connect(ui->teamNumber, SIGNAL(valueChanged(int)), this, SLOT(populate(int)) );}qmTeamDisplay::~qmTeamDisplay(){delete ui;}void qmTeamDisplay::populate(int team_number){team = team_number;g_record( team, &team_buf );/*** Basic Data*/ui->name->setText( team_buf.name );ui->category_abr->setText( config.team_class[team_buf.teamclass - 1].abr );ui->category->setCurrentIndex(team_buf.teamclass - 1);//TODO: Link update of combo box to the abreviation display/*** Team Member data*/for ( int ii = 0; ii < config.num_legs; ii ++){QTableWidgetItem *item;ui->members->setItem(ii, 0, new QTableWidgetItem(team_buf.members[ii].name) );item = new QTableWidgetItem();enum Qt::CheckState sex;switch ( team_buf.members[ii].sex ){case male: sex = Qt::Unchecked; break;case female: sex = Qt::Checked; break;default: sex = Qt::PartiallyChecked; break;}item->setCheckState(sex );ui->members->setItem(ii, 1, item );item = new QTableWidgetItem();item->setData(Qt::EditRole,team_buf.members[ii].age);ui->members->setItem(ii, 2, item );}ui->members->resizeColumnsToContents();/*** Leg Times*/for ( int ii = 0 ; ii <= config.num_legs; ii++){lt[ii]->setData(&team_buf.leg[ii]);}}void qmTeamDisplay::recalculateTimes( void ){for ( int ii = 0 ; ii <= config.num_legs; ii++){lt[ii]->getData(&team_buf.leg[ii]);}set_times( &team_buf );test_times( &team_buf, 0 );for ( int ii = 0 ; ii <= config.num_legs; ii++){lt[ii]->setData(&team_buf.leg[ii]);}}void qmTeamDisplay::save(void){/*** Extract data from the widgets** The time stuff is done on the fly as it changes*/strncpy(team_buf.name , qPrintable(ui->name->text()), sizeof(team_buf.name));team_buf.teamclass = ui->category->currentIndex() + 1;/*** Extract Team Member Data*/for ( int ii = 0; ii < config.num_legs; ii ++){QTableWidgetItem *item;item = ui->members->item ( ii, 0 );strncpy(team_buf.members[ii].name , qPrintable(item->text()), sizeof(team_buf.members[ii].name));//TODO: Make Sex edit workitem = ui->members->item ( ii, 1 );switch (item->data(Qt::EditRole).toInt()){case Qt::Unchecked: team_buf.members[ii].sex = male; break;case Qt::Checked: team_buf.members[ii].sex = female; break;default: team_buf.members[ii].sex = unknown; break;}item = ui->members->item ( ii, 2 );team_buf.members[ii].age = item->data(Qt::EditRole).toInt();}//TODO : Mainatin age summary/*** Save the record back to disk*/put_team_record( team, &team_buf );}void qmTeamDisplay::cancel(void){populate(team);}void qmTeamDisplay::changeEvent(QEvent *e){//qDebug("ChangeEvent: %d",e->type());QWidget::changeEvent(e);switch (e->type()) {case QEvent::LanguageChange:ui->retranslateUi(this);break;default:break;}}