![]() |
Chrono-Cross
1.1
BTS SN-IR La Salle Avignon 2018
|
#include <chronocrossclassement.h>
Signaux | |
void | courseTerminee (QString numero) |
void | courseDemarree (QString numero) |
void | tempsArrivee (QString ordre, QString temps) |
Fonctions membres publiques | |
ChronoCrossClassement (QWidget *parent=0) | |
Constructeur. | |
~ChronoCrossClassement () | |
Destructeur. | |
Connecteurs privés | |
void | quitter () |
Ferme l'application principale. | |
void | chargerInscritsCourse () |
Charge la liste des inscrits pour la course sélectionnée. | |
void | demarrerCourse () |
Démarre une course. | |
void | topDepart () |
Démarre une course logiciellement. | |
void | finaliserDepartCourse (QString numero) |
Affiche le nombre d'arrivées et de classés. | |
void | finaliserFinCourse (QString numero) |
Termine la course. | |
void | terminerCourse () |
Termine une course. | |
void | enregistrerResultat () |
Enregistre les resultats dans la base de donnees. | |
void | enregistrerArriveeCoureur (QString ordre, QString temps) |
Enregistre l'arrivée d'un coureur. | |
void | onReadyRead () |
Décode les trames reçus. | |
void | actualiserMessage (QString message) |
void | numeroterDossard (int l, int c) |
Classe les coureurs. | |
void | selectionnerCourse () |
Sélectionne une course à éditer. | |
Fonctions membres privées | |
void | chargerListeManifestation () |
Charge la liste des manifestations. | |
void | chargerListeCourses () |
Charge la liste des courses. | |
void | initialiserBD () |
Initialise la base de donnees. | |
void | initialiserPort () |
Initialise le port. | |
char | verifierAcquittement (QString trame) |
Vérifie l'acquittement de la trame. | |
unsigned short | calculerChecksum (QString data) |
Calcule le cheksum. | |
void | envoyer (QString &trame) |
Envoie une trame. | |
void | effacerTableTemps () |
Efface les temps dans le tableau. | |
void | afficherTableTemps () |
Affiche les temps dans le tableau. | |
QString | getIdInscrit (QString dossard) |
Obtiens l'idInscrit. | |
bool | estInscrit (QString dossard) |
Vérifie que le dossard est inscrit à la course. | |
Attributs privés | |
Ui::ChronoCrossClassement * | ui |
relation vers la classe IHM | |
BaseDeDonnees * | bd |
association vers la classe BaseDeDonnees | |
QextSerialPort * | port |
connexion au port | |
QByteArray | donnees |
les données correspondant au trame | |
bool | displayEvent |
QStringList | manifestation |
la manifestation à la date actuelle | |
QVector< QStringList > | courses |
la liste des courses pour une manifestation | |
QVector< QStringList > | inscrits |
la liste des inscrits pour la course | |
QVector< QString > | arrivees |
récupere le temps et affiche le nombre d'arrivée | |
QVector< QString > | dossards |
récupere les dossards | |
QString | numeroCourse |
récupere le numero de la course |
ChronoCrossClassement::ChronoCrossClassement | ( | QWidget * | parent = 0 | ) | [explicit] |
parent |
Références chargerListeCourses(), chargerListeManifestation(), demarrerCourse(), enregistrerResultat(), initialiserBD(), initialiserPort(), numeroCourse, port, selectionnerCourse(), terminerCourse(), topDepart(), et ui.
: QMainWindow(parent), ui(new Ui::ChronoCrossClassement) { ui->setupUi(this); ui->comboBoxCourses->setEnabled(false); ui->pushButtonDemarrageCourse->setEnabled(false); ui->pushButtonTopDepart->setEnabled(false); ui->pushButtonFinCourse->setEnabled(false); ui->pushButtonEnregistrementResultats->setEnabled(false); QStringList header; // nom des colonnes header << "Classement" << "Dossard" << "Temps"; // On fixe le nombre de colonnes ui->tableTemps->setColumnCount(header.size()); // On applique les noms des colonnes ui->tableTemps->setHorizontalHeaderLabels(header); // on cache les numéros de ligne ui->tableTemps->verticalHeader()->setHidden(true); QHeaderView * headerView = ui->tableTemps->horizontalHeader(); // on redimensionne automatiquement la colonne pour occuper l'espace disponible #if QT_VERSION >= 0x050000 headerView->setSectionResizeMode(QHeaderView::Stretch); #else headerView->setResizeMode(QHeaderView::Stretch); #endif connect(ui->comboBoxCourses, SIGNAL(currentIndexChanged(int)), this, SLOT(selectionnerCourse())); connect(ui->pushButtonDemarrageCourse,SIGNAL(clicked()),this,SLOT(demarrerCourse())); connect(ui->pushButtonTopDepart,SIGNAL(clicked()),this,SLOT(topDepart())); connect(ui->pushButtonEnregistrementResultats,SIGNAL(clicked()),this,SLOT(enregistrerResultat())); connect(ui->pushButtonFinCourse,SIGNAL(clicked()),this,SLOT(terminerCourse())); // Initialisation initialiserBD(); port = NULL; initialiserPort(); chargerListeManifestation(); chargerListeCourses(); numeroCourse = ""; }
Références BaseDeDonnees::detruireInstance(), et ui.
{ BaseDeDonnees::detruireInstance(); delete ui; }
void ChronoCrossClassement::actualiserMessage | ( | QString | message | ) | [private, slot] |
Référencé par envoyer(), et onReadyRead().
{ qDebug() << message; }
ChronoCrossClassement::afficherTableTemps | ( | ) | [private] |
Affiche les résultats dans le tableau.
Références arrivees, dossards, effacerTableTemps(), numeroterDossard(), et ui.
Référencé par enregistrerArriveeCoureur().
{ effacerTableTemps(); QString temps; QString dossard; QTime tempsCoureur; QString nomprenom; disconnect(ui->tableTemps, SIGNAL(cellChanged(int,int)), this,SLOT(numeroterDossard(int,int))); for(int l = 0; l < arrivees.count(); l++) { temps = arrivees.at(l); temps.chop(2); // enleve les 2 zéros inutilisés if(temps.count(":") == 2) tempsCoureur = QTime::fromString(temps, "h:m:s.zzz"); else if(temps.count(":") == 1) tempsCoureur = QTime::fromString(temps, "m:s.zzz"); else tempsCoureur = QTime::fromString(temps, "s.zzz"); temps = tempsCoureur.toString("hh:mm:ss"); dossard = dossards.at(l); //qDebug() << Q_FUNC_INFO << l << dossard << temps; QTableWidgetItem *elementClassement = new QTableWidgetItem(QString::number(l+1)); QTableWidgetItem *elementDossard = new QTableWidgetItem(dossard); QTableWidgetItem *elementTemps = new QTableWidgetItem(temps); QTableWidgetItem *elementNomPrenom = new QTableWidgetItem(nomprenom); ui->tableTemps->insertRow(l); // propriétés elementClassement->setFlags(Qt::ItemIsEnabled); elementClassement->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter); elementTemps->setFlags(Qt::ItemIsEnabled); elementTemps->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter); elementDossard->setFlags(Qt::ItemIsEnabled | Qt::ItemIsEditable); elementDossard->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter); elementNomPrenom->setFlags(Qt::ItemIsEnabled); elementNomPrenom->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter); ui->tableTemps->setItem(l, 0, elementClassement); // l : ligne (row) et c : colonne ui->tableTemps->setItem(l, 1, elementDossard); ui->tableTemps->setItem(l, 2, elementTemps); ui->tableTemps->setItem(l, 3, elementNomPrenom); } connect(ui->tableTemps, SIGNAL(cellChanged(int,int)), this,SLOT(numeroterDossard(int,int))); }
ChronoCrossClassement::calculerChecksum | ( | QString | data | ) | [private] |
Calcule le checksum.
Référencé par envoyer().
{ unsigned short checksum = 0; int i = 0; if(data.startsWith("#")) i = 1; for(;i<data.length();i++) checksum += data[i].toLatin1(); return checksum; }
ChronoCrossClassement::chargerInscritsCourse | ( | ) | [private, slot] |
Charge les inscrits à la course.
Références bd, COURSE_ID, courses, inscrits, BaseDeDonnees::recuperer(), et ui.
Référencé par chargerListeCourses().
{ if(ui->comboBoxCourses->currentIndex() > 0) { qDebug() << Q_FUNC_INFO << QString::fromUtf8("Course sélectionnée : ") << courses.at((ui->comboBoxCourses->currentIndex()-1)); QString requete; QStringList course; course = courses.at((ui->comboBoxCourses->currentIndex()-1)); QString idCourseActuelle = course.at(COURSE_ID); bool retour; inscrits.clear(); requete = "SELECT idInscrit, NumeroDossard FROM Inscrit WHERE idCourse = " + idCourseActuelle ; retour = bd->recuperer(requete, inscrits); if(retour != false) { //qDebug() << Q_FUNC_INFO << inscrits; //qDebug() << Q_FUNC_INFO << inscrits.count(); ui->labelNbCoureurs->setText("Nb coureurs : " + QString::number(inscrits.count())); } else { qDebug() << Q_FUNC_INFO << QString::fromUtf8("Requête incorrecte") << requete; ui->labelNbCoureurs->setText("Nb coureurs : --"); } } else { qDebug() << Q_FUNC_INFO << QString::fromUtf8("Aucune course sélectionnée"); ui->labelNbCoureurs->setText("Nb coureurs : --"); } }
ChronoCrossClassement::chargerListeCourses | ( | ) | [private] |
Références bd, chargerInscritsCourse(), COURSE_DISTANCE, COURSE_HEUREDEPART, COURSE_NOM, courses, manifestation, BaseDeDonnees::recuperer(), et ui.
Référencé par ChronoCrossClassement().
{ QString requete; QStringList course; bool retour; if(manifestation.isEmpty()) return; requete = "SELECT * FROM Course WHERE idManifestation = " + manifestation.at(0) ; qDebug() << Q_FUNC_INFO << requete; retour = bd->recuperer(requete, courses); if(retour != false) { ui->comboBoxCourses->addItem(""); for(int i=0; i < courses.size(); i++) { course = courses.at(i); qDebug() << Q_FUNC_INFO << QString::fromUtf8("Course : ") << course; ui->comboBoxCourses->addItem(course.at(COURSE_NOM) + " - " + course.at(COURSE_DISTANCE) + " m - " + course.at(COURSE_HEUREDEPART)); } } else { QMessageBox::critical(0, QString::fromUtf8("Chrono-Cross"), QString::fromUtf8("Aucune course !")); } connect(ui->comboBoxCourses, SIGNAL(currentIndexChanged(int)), this, SLOT(chargerInscritsCourse())); }
ChronoCrossClassement::chargerListeManifestation | ( | ) | [private] |
Charge la manifestation du jour.
Références bd, manifestation, BaseDeDonnees::recuperer(), et ui.
Référencé par ChronoCrossClassement().
{ QString requete; bool retour; // Récupère la manifestation de la journée dans un QStringList requete = "SELECT * FROM Manifestation WHERE Manifestation.Date = date(now()) LIMIT 1;"; // Test //requete = "SELECT * FROM Manifestation "; qDebug() << Q_FUNC_INFO << requete; retour = bd->recuperer(requete, manifestation); if(retour != false) { qDebug() << Q_FUNC_INFO << QString::fromUtf8("Manifestation : ") << manifestation; ui->labelManifestationInformations->setText(manifestation.at(1)); ui->comboBoxCourses->setEnabled(true); } else { ui->comboBoxCourses->setEnabled(false); QMessageBox::critical(0, QString::fromUtf8("Chrono-Cross"), QString::fromUtf8("Aucune manifestation !")); } }
void ChronoCrossClassement::courseDemarree | ( | QString | numero | ) | [signal] |
Référencé par demarrerCourse(), onReadyRead(), et topDepart().
void ChronoCrossClassement::courseTerminee | ( | QString | numero | ) | [signal] |
Référencé par finaliserDepartCourse(), et onReadyRead().
ChronoCrossClassement::demarrerCourse | ( | ) | [private, slot] |
Demarre la course.
Références courseDemarree(), envoyer(), finaliserDepartCourse(), numeroterDossard(), et ui.
Référencé par ChronoCrossClassement().
{ // 0 -> Mode PTB // 5 -> Mode CLOCK QString * chaine = new QString("#WP 120 5"); envoyer(*chaine); usleep(100000); chaine = new QString("#WC 007 02 00:00 00/00/01"); envoyer(*chaine); chaine = new QString("#RP 003"); envoyer(*chaine); connect(this, SIGNAL(courseDemarree(QString)), this, SLOT(finaliserDepartCourse(QString))); connect(ui->tableTemps, SIGNAL(cellChanged(int,int)), this,SLOT(numeroterDossard(int,int))); }
ChronoCrossClassement::effacerTableTemps | ( | ) | [private] |
Efface les résultats du tableau.
Références numeroterDossard(), et ui.
Référencé par afficherTableTemps(), et finaliserDepartCourse().
{ disconnect(ui->tableTemps, SIGNAL(cellChanged(int,int)), this,SLOT(numeroterDossard(int,int))); int nb = ui->tableTemps->rowCount(); // on efface les lignes du tableau une par une for(int i = 0; i < nb; i++) { ui->tableTemps->removeRow(0); } connect(ui->tableTemps, SIGNAL(cellChanged(int,int)), this,SLOT(numeroterDossard(int,int))); }
ChronoCrossClassement::enregistrerArriveeCoureur | ( | QString | ordre, |
QString | temps | ||
) | [private, slot] |
Enregistre l'arrivée des coureurs.
Références afficherTableTemps(), arrivees, dossards, numeroCourse, et ui.
Référencé par finaliserDepartCourse().
{ Q_UNUSED(ordre) if(!numeroCourse.isEmpty()) { qDebug() << Q_FUNC_INFO << temps; arrivees.push_back(temps); dossards.push_back(""); ui->labelNbArrivees->setText(QString::fromUtf8("Nb Arrivées : ") + QString::number(arrivees.count())); ui->labelClasses->setText(QString::fromUtf8("Nb Classés : ") + QString::number(dossards.count()-dossards.count(""))); afficherTableTemps(); } }
ChronoCrossClassement::enregistrerResultat | ( | ) | [private, slot] |
Références arrivees, bd, dossards, BaseDeDonnees::executer(), getIdInscrit(), et numeroCourse.
Référencé par ChronoCrossClassement().
{ if(!numeroCourse.isEmpty()) { QString temps; QString dossard; QString idInscrit; for(int l = 0; l < arrivees.count(); l++) { temps = arrivees.at(l); dossard = dossards.at(l); idInscrit = getIdInscrit(dossard); if(!idInscrit.isEmpty() && !dossard.isEmpty()) { QString requete = "INSERT INTO Arrivee(idInscrit,Temps) VALUES('" + idInscrit + "','" + temps + "')"; qDebug() << Q_FUNC_INFO << requete; bool retour = bd->executer(requete); } } } }
ChronoCrossClassement::envoyer | ( | QString & | trame | ) | [private] |
Envoie la trame.
Références actualiserMessage(), calculerChecksum(), et port.
Référencé par demarrerCourse(), terminerCourse(), et topDepart().
{ unsigned short checksum = 0; checksum = calculerChecksum(trame); trame += QString("\t%1").arg(checksum, 4, 16, QChar('0')).toUpper(); qDebug() << Q_FUNC_INFO << trame; actualiserMessage(QString::fromUtf8("Trame envoyée : %1").arg(trame)); trame += "\r\n"; if (port != NULL && port->isOpen()) { port->write(trame.toLatin1()); } }
ChronoCrossClassement::estInscrit | ( | QString | dossard | ) | [private] |
ChronoCrossClassement::finaliserDepartCourse | ( | QString | numero | ) | [private, slot] |
Références arrivees, courseTerminee(), dossards, effacerTableTemps(), enregistrerArriveeCoureur(), finaliserFinCourse(), numeroCourse, tempsArrivee(), et ui.
Référencé par demarrerCourse(), et topDepart().
{ if(numeroCourse.isEmpty()) { qDebug() << Q_FUNC_INFO << "numéro course : " << numero; numeroCourse = numero; arrivees.clear(); dossards.clear(); effacerTableTemps(); ui->labelNbArrivees->setText(QString::fromUtf8("Nb Arrivées : ") + QString::number(arrivees.count())); ui->labelClasses->setText(QString::fromUtf8("Nb Classés : ")+ QString::number(dossards.count()-dossards.count(""))); ui->comboBoxCourses->setEnabled(false); ui->pushButtonDemarrageCourse->setEnabled(false); ui->pushButtonTopDepart->setEnabled(false); ui->pushButtonFinCourse->setEnabled(true); ui->pushButtonEnregistrementResultats->setEnabled(true); connect(this, SIGNAL(tempsArrivee(QString,QString)), this, SLOT(enregistrerArriveeCoureur(QString,QString))); connect(this, SIGNAL(courseTerminee(QString)), this, SLOT(finaliserFinCourse(QString))); } }
ChronoCrossClassement::finaliserFinCourse | ( | QString | numero | ) | [private, slot] |
Enregistre les données dans la base de donnees.
Références arrivees, dossards, numeroCourse, numeroterDossard(), et ui.
Référencé par finaliserDepartCourse().
{ qDebug() << Q_FUNC_INFO << "numéro course : " << numero; // réinitialisation pour prochaine course numeroCourse = ""; arrivees.clear(); dossards.clear(); ui->comboBoxCourses->setEnabled(true); ui->pushButtonDemarrageCourse->setEnabled(true); ui->pushButtonTopDepart->setEnabled(true); ui->pushButtonFinCourse->setEnabled(false); ui->pushButtonEnregistrementResultats->setEnabled(false); disconnect(ui->tableTemps, SIGNAL(cellChanged(int,int)), this,SLOT(numeroterDossard(int,int))); }
ChronoCrossClassement::getIdInscrit | ( | QString | dossard | ) | [private] |
ChronoCrossClassement::initialiserBD | ( | ) | [private] |
Références bd, BaseDeDonnees::connecter(), et BaseDeDonnees::getInstance().
Référencé par ChronoCrossClassement().
{ // Connexion à la base de données bd = BaseDeDonnees::getInstance(); bool connexion = bd->connecter(); if(!connexion) { QMessageBox::critical(0, QString::fromUtf8("Chrono-Cross"), QString::fromUtf8("Impossible de se connecter à la base de données !")); } }
ChronoCrossClassement::initialiserPort | ( | ) | [private] |
Références displayEvent, NOM_PORT, onReadyRead(), et port.
Référencé par ChronoCrossClassement().
{ if(port != NULL && port->isOpen()) { port->close(); disconnect(port, SIGNAL(readyRead()), this, SLOT(onReadyRead())); } port = new QextSerialPort(NOM_PORT, QextSerialPort::EventDriven); port->setBaudRate(BAUD9600); port->setFlowControl(FLOW_OFF); port->setParity(PAR_NONE); port->setDataBits(DATA_8); port->setStopBits(STOP_1); //port->setTimeout(500); displayEvent = false; if(port->open(QIODevice::ReadWrite) == true) { connect(port, SIGNAL(readyRead()), this, SLOT(onReadyRead())); } if(!port->isOpen()) { QMessageBox::critical(0, QString::fromUtf8("Chrono-Cross"), QString::fromUtf8("Impossible d'ouvrir le port !")); } }
ChronoCrossClassement::numeroterDossard | ( | int | l, |
int | c | ||
) | [private, slot] |
Référencé par afficherTableTemps(), demarrerCourse(), effacerTableTemps(), finaliserFinCourse(), et topDepart().
{ QTableWidgetItem *elementDossard; // récupère l'élément Dossard dans le TableWidget elementDossard = ui->tableTemps->item(l, c); // remplace le numéro de dossard saisi dans le QVector dossards.replace(l, elementDossard->data(0).toString()); qDebug() << Q_FUNC_INFO << elementDossard->data(0).toString() << dossards; ui->labelClasses->setText(QString::fromUtf8("Nb Classés : ") + QString::number(dossards.count()-dossards.count(""))); }
ChronoCrossClassement::onReadyRead | ( | ) | [private, slot] |
Références actualiserMessage(), courseDemarree(), courseTerminee(), donnees, numeroCourse, port, tempsArrivee(), et verifierAcquittement().
Référencé par initialiserPort().
{ while(port->bytesAvailable()) { donnees += port->readAll(); usleep(100000); // cf. timeout } if(donnees.contains("\r\n")) { QString trameRecue = QString(donnees.data()); QStringList trames = trameRecue.split("\r\n"); QStringList champs; char etatAcquittement; qDebug() << Q_FUNC_INFO << "trame(s) recue(s) =" << trames; /* Liste des trames reçues : - "AK X" acquittement avec : X = 'C' accepted, 'F' rejected, 'R' not supported - "TS 00:00:00 00/00/01" synchro - "&P 003 XX 90 00:00:00 0" paramètre 003 (demande du numéro de course) XX = le numéro de course - "TN 1 2 3.71300 365" temps - "CL XX" close course XX = le numéro de course terminée */ //qDebug() << Q_FUNC_INFO << trameRecue.split("\r\n"); for(int i =0;i<trames.size();i++) { if(!trames.at(i).isEmpty()) { if(trames.at(i).startsWith("AK")) // trame acquittement ? { etatAcquittement = verifierAcquittement(trames.at(i)); if(etatAcquittement == 'C') { //actualiserMessage(QString::fromUtf8("Mini-Display HL 975 : <font color=\"green\">ok</font>")); continue; } if(etatAcquittement == 'R') { actualiserMessage(QString::fromUtf8("Mini-Display HL 975 : erreur !")); continue; } } else if(trames.at(i).startsWith("TS")) // trame synchro ? { } else if(trames.at(i).startsWith("&P")) // trame paramètre ? { // "&P 003 XX YY 00:00:00 0" paramètre 003 (demande du numéro de course) XX = le numéro de course /* X = Run number (00-99). 00 = no run open -> index 2 Y = Number of the next Run(00-99) -> index 3 */ champs = trames.at(i).split(" ", QString::SkipEmptyParts); //qDebug() << Q_FUNC_INFO << "numéro course demarree : " << champs.at(3); emit courseDemarree(champs.at(3)); } else if(trames.at(i).startsWith("TN")) // trame temps ? { /* Time (TN) : TN SSSS CC HH:MM:SS.FFFFF DDDDD S = Sequential number (0 - 9999) -> ordre arrivée C = Channel number (1 - 99) in case of manual entry (M1 - M4) -> numéro cellule détection (1 = départ et 2 = arrivée) H = Hours (0 - 23) M = Minutes (0 - 59) S = Seconds (0 - 59) F = decimal part (0 - 99999) D = Days (0 - 32767) counting from 01.01.2000 -> non utilisé */ // "TN 1 1 4.30700 365" // -> "TN", "1", "1", "4.30700", "365 05FE" champs = trames.at(i).split(" ", QString::SkipEmptyParts); //qDebug() << Q_FUNC_INFO << champs; // temps à l'arrivée ? if(champs.at(2) == "2") { //qDebug() << Q_FUNC_INFO << champs.at(3); emit tempsArrivee(champs.at(1), champs.at(3)); } } else if(trames.at(i).startsWith("CL")) // trame course terminée ? { /* Closing of a Run (CL) : CL RR R = Run number (1 - 99) "CL 06 0115" */ champs = trames.at(i).split("\t"); champs = champs.at(0).split(" ", QString::SkipEmptyParts); //qDebug() << Q_FUNC_INFO << "numéro course terminee : " << champs.at(1) << numeroCourse; if(!numeroCourse.isEmpty()) { qDebug() << Q_FUNC_INFO << "signaler course terminee : " << champs.at(1) << numeroCourse; emit courseTerminee(champs.at(1)); } } else // autre trame { actualiserMessage(QString::fromUtf8("Mini-Display HL 975 : %1 (non géré)").arg(trames.at(i))); } } } donnees.clear(); } }
ChronoCrossClassement::quitter | ( | ) | [private, slot] |
Quitte l'application.
{
// on ferme la fenêtre
close();
}
ChronoCrossClassement::selectionnerCourse | ( | ) | [private, slot] |
Références ui.
Référencé par ChronoCrossClassement().
{ QStringList course; int index = ui->comboBoxCourses->currentIndex(); switch(index) { case 0: //disconnect(ui->comboBoxCourses, SIGNAL(currentIndexChanged(int)), this, SLOT(selectionnerCourse())); ui->pushButtonDemarrageCourse->setEnabled(false); ui->pushButtonTopDepart->setEnabled(false); ui->pushButtonFinCourse->setEnabled(false); ui->pushButtonEnregistrementResultats->setEnabled(false); //connect(ui->comboBoxCourses, SIGNAL(currentIndexChanged(int)), this, SLOT(selectionnerCourse())); break; default: if(index > 0) { ui->pushButtonDemarrageCourse->setEnabled(true); ui->pushButtonTopDepart->setEnabled(true); ui->pushButtonFinCourse->setEnabled(false); ui->pushButtonEnregistrementResultats->setEnabled(false); //course = courses.at(index-1); } break; } }
void ChronoCrossClassement::tempsArrivee | ( | QString | ordre, |
QString | temps | ||
) | [signal] |
Référencé par finaliserDepartCourse(), et onReadyRead().
ChronoCrossClassement::terminerCourse | ( | ) | [private, slot] |
Termine la course.
Références envoyer().
Référencé par ChronoCrossClassement().
{ QString * chaine = new QString("#WC 001"); envoyer(*chaine); usleep(100000); QString heure = QDateTime::currentDateTime().toString("hh:mm"); QString date = QDateTime::currentDateTime().toString("dd/MM/yy"); // En mode CLOCK, on affiche l'heure actuelle chaine = new QString("#WC 007 02 "+heure+" "+date); envoyer(*chaine); // synchro chaine = new QString("#WC 008 01"); envoyer(*chaine); }
ChronoCrossClassement::topDepart | ( | ) | [private, slot] |
Demarre la course logiciellement.
Références courseDemarree(), envoyer(), finaliserDepartCourse(), numeroterDossard(), et ui.
Référencé par ChronoCrossClassement().
{ // 0 -> Mode PTB // 5 -> Mode CLOCK QString * chaine = new QString("#WP 120 5"); envoyer(*chaine); usleep(100000); chaine = new QString("#WC 007 02 00:00 00/00/01"); envoyer(*chaine); chaine = new QString("#RP 003"); envoyer(*chaine); chaine = new QString("#WC 008 01"); envoyer(*chaine); connect(this, SIGNAL(courseDemarree(QString)), this, SLOT(finaliserDepartCourse(QString))); connect(ui->tableTemps, SIGNAL(cellChanged(int,int)), this,SLOT(numeroterDossard(int,int))); }
ChronoCrossClassement::verifierAcquittement | ( | QString | trame | ) | [private] |
Verifie l'acquittement.
Référencé par onReadyRead().
{ /* Type de trame d'acquittement : cf. http://www.reliableracing.com/downloads/THCOM08.pdf page 15 AK X Avec : X = 'C' accepted, 'F' rejected, 'R' not supported */ if(trame.startsWith("AK C")) return 'C'; else if(trame.startsWith("AK F")) return 'F'; else if(trame.startsWith("AK R")) return 'R'; else return 'N'; // ce n'est pas une trame d'acquittement }
QVector<QString> ChronoCrossClassement::arrivees [private] |
BaseDeDonnees* ChronoCrossClassement::bd [private] |
QVector<QStringList> ChronoCrossClassement::courses [private] |
Référencé par chargerInscritsCourse(), et chargerListeCourses().
bool ChronoCrossClassement::displayEvent [private] |
Référencé par initialiserPort().
QByteArray ChronoCrossClassement::donnees [private] |
Référencé par onReadyRead().
QVector<QString> ChronoCrossClassement::dossards [private] |
QVector<QStringList> ChronoCrossClassement::inscrits [private] |
Référencé par chargerInscritsCourse(), estInscrit(), et getIdInscrit().
QStringList ChronoCrossClassement::manifestation [private] |
Référencé par chargerListeCourses(), et chargerListeManifestation().
QString ChronoCrossClassement::numeroCourse [private] |
QextSerialPort* ChronoCrossClassement::port [private] |
Référencé par ChronoCrossClassement(), envoyer(), initialiserPort(), et onReadyRead().
Ui::ChronoCrossClassement* ChronoCrossClassement::ui [private] |
Référencé par afficherTableTemps(), chargerInscritsCourse(), chargerListeCourses(), chargerListeManifestation(), ChronoCrossClassement(), demarrerCourse(), effacerTableTemps(), enregistrerArriveeCoureur(), finaliserDepartCourse(), finaliserFinCourse(), numeroterDossard(), selectionnerCourse(), topDepart(), et ~ChronoCrossClassement().