Rev 142 | Rev 148 | 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){ui->teamNumber->setMaximum(config.max_team);ui->teamNumber->setValue(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 displayui->disqualified->setCheckState(team_buf.flags.disqualified ? Qt::Checked : Qt::Unchecked);ui->nonEquestrian->setCheckState(team_buf.flags.non_equestrian ? Qt::Checked : Qt::Unchecked);ui->disabled->setCheckState( !team_buf.flags.valid ? Qt::Checked : Qt::Unchecked);/*** Team Member data*/int age_sum = 0;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();item->setFlags(Qt::ItemIsTristate | item->flags());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;}//qDebug("RSex:%d, %d, %d, %d", team, ii, sex, team_buf.members[ii].sex);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 );/*** Sum ages** -1 indicates invalid age*/if ( age_sum >= 0 ){ushort age = team_buf.members[ii].age;if ( age > 0 && age < 255 ){age_sum += age;}else{age_sum = -1;}}}if ( age_sum <= 0 ){ui->totalAge->setText("--");}else{ui->totalAge->setText(QString::number(age_sum));}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;team_buf.flags.disqualified = ( ui->disqualified->checkState () == Qt::Checked);team_buf.flags.non_equestrian = ( ui->nonEquestrian->checkState () == Qt::Checked);team_buf.flags.valid = ( ui->disabled->checkState () != Qt::Checked);/*** 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 );enum Qt::CheckState sex = item->checkState();switch (sex){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;}//qDebug("WSex:%d, %d, %d, %d", team, ii, sex, team_buf.members[ii].sex);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 );populate(team);}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;}}