Переглянути джерело

Ajout de quelques secondes après chaque coup

François Drouhard 3 роки тому
батько
коміт
cd69709576
8 змінених файлів з 98 додано та 3 видалено
  1. 10 0
      Chronometre.cpp
  2. 2 0
      Chronometre.h
  3. 23 1
      Dialog.cpp
  4. 4 0
      Dialog.h
  5. 28 1
      MaFenetre.cpp
  6. 4 0
      MaFenetre.h
  7. 21 1
      options.cpp
  8. 6 0
      options.h

+ 10 - 0
Chronometre.cpp

@@ -141,6 +141,7 @@ void Chronometre::reinit () {
 void Chronometre::basculer () {
 	if (timer->isActive()) {
         stop();
+        emit is_paused(this);
 	}
 	else {
         start ();
@@ -152,6 +153,7 @@ void Chronometre::basculer(Chronometre & Chrono) {
     Chrono.basculer();
 }
 
+// TODO pas clair cet opérateur
 QString Chronometre::operator+=(Chronometre const& joueur) const {
     if (temps <= QTime (0,0,0,0)) {
         return joueur.groupBox->title();
@@ -160,3 +162,11 @@ QString Chronometre::operator+=(Chronometre const& joueur) const {
     }
     return "Nope";
 }
+
+/**
+ * @brief Ajouter du temps, prévu pour plus que des secondes
+ */
+void Chronometre::addTime(QTime const& temps_ajout)
+{
+    temps = temps.addSecs(temps_ajout.second() + temps_ajout.minute()*60 + temps_ajout.hour()*3600 );
+}

+ 2 - 0
Chronometre.h

@@ -63,9 +63,11 @@ class Chronometre : public QWidget {
     void modifierNomJoueur (QString const& joueur);
     void definirTemps (QTime const& tempsDepart);
     QString operator+=(Chronometre const& joueur) const;
+    void addTime (QTime const& temps_ajout);
 
     signals:
     void fin();
+    void is_paused(Chronometre *chrono);
 
 
     private slots:

+ 23 - 1
Dialog.cpp

@@ -16,13 +16,22 @@ Dialog::Dialog(Options const& option, QWidget *parent) :
     QVBoxLayout *layoutDialog     = new QVBoxLayout;
     QFormLayout *layoutForm       = new QFormLayout;
     QDialogButtonBox *boutonJouer = new QDialogButtonBox (QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
-    checkBoxSon                   = new QCheckBox();
+    checkBoxSon                   = new QCheckBox;
     checkBoxSon->setChecked(option.son());
     spinTempsDepart               = new QTimeEdit;
     spinTempsDepart->setTimeRange(QTime(0,0,5,0), QTime(3,0,0,0));
     spinTempsDepart->setTime(option.tempsDepart());
     spinTempsDepart->setDisplayFormat("HH:mm:ss");
 
+    spinTempsSupplementaire        = new QTimeEdit;
+    spinTempsSupplementaire->setTimeRange(QTime(0,0,1), QTime (0,0,59));
+    spinTempsSupplementaire->setTime(option.tempsSupplementaire());
+    spinTempsSupplementaire->setDisplayFormat("ss");
+    spinTempsSupplementaire->setEnabled(option.isTempsSupplementaire());
+
+    checkBoxTempsSupp             = new QCheckBox; 
+    checkBoxTempsSupp->setChecked(option.isTempsSupplementaire());
+
     joueur1LineEdit = new QLineEdit(option.nomJoueur1() , this);
     joueur2LineEdit = new QLineEdit(option.nomJoueur2() , this);
     joueur1LineEdit->selectAll();
@@ -32,6 +41,8 @@ Dialog::Dialog(Options const& option, QWidget *parent) :
 
     layoutForm->addRow("Son", checkBoxSon);
     layoutForm->addRow("Temps de départ", spinTempsDepart);
+    layoutForm->addRow("Temps supplémentaire", checkBoxTempsSupp);
+    layoutForm->addRow("Secondes supplémentaires", spinTempsSupplementaire);
 
     layoutDialog->addLayout(layoutLineEdit);
     layoutDialog->addLayout(layoutForm);
@@ -40,6 +51,7 @@ Dialog::Dialog(Options const& option, QWidget *parent) :
 
     QObject::connect(boutonJouer , &QDialogButtonBox::accepted , this, &Dialog::accept);
     QObject::connect(boutonJouer , &QDialogButtonBox::rejected , this, &Dialog::close);
+    QObject::connect(checkBoxTempsSupp, &QCheckBox::stateChanged, spinTempsSupplementaire, &QTimeEdit::setEnabled);
 }
 
 Dialog::~Dialog() {
@@ -65,3 +77,13 @@ QTime Dialog::champs_temps() const
 {
     return spinTempsDepart->time();
 }
+
+QTime Dialog::champs_temps_Supplementaire() const
+{
+    return spinTempsSupplementaire->time();
+}
+
+bool Dialog::champs_is_temps_supplementaire() const
+{
+    return checkBoxTempsSupp->isChecked();
+}

+ 4 - 0
Dialog.h

@@ -19,6 +19,8 @@ public:
     QString champs_joueur2 () const;
     bool    champs_son () const;
     QTime   champs_temps () const;
+    QTime   champs_temps_Supplementaire() const;
+    bool    champs_is_temps_supplementaire() const;
 
 signals:
 
@@ -29,6 +31,8 @@ private:
     QLineEdit* joueur1LineEdit;
     QLineEdit* joueur2LineEdit;
     QTimeEdit *spinTempsDepart;
+    QTimeEdit *spinTempsSupplementaire;
+    QCheckBox *checkBoxTempsSupp;
     QCheckBox* checkBoxSon;
 
 };

+ 28 - 1
MaFenetre.cpp

@@ -90,12 +90,18 @@ MaFenetre::MaFenetre() :
 
     ///////////////////////////// Aide /////////////////////////////////////
     QLabel *labelAide = new QLabel ("<b>Aide</b><br />Espace : Lancer le chrono/Donner le chrono<br />Entrée : Stopper les deux chronos");
+    labelOptions = new QLabel;
+    refreshLabel();
 	
+    QHBoxLayout *layoutAide = new QHBoxLayout;
+    layoutAide->addWidget(labelAide);
+    layoutAide->addWidget(labelOptions);
+
 	/////////////////////////////Mise en page finale ///////////////////////////
 	layoutComplet = new QVBoxLayout;
 	layoutComplet->addLayout (layoutChrono);
 	layoutComplet->addLayout (layoutBoutonSwitch);
-    layoutComplet->addWidget (labelAide);
+    layoutComplet->addLayout (layoutAide);
     centralWidget->setLayout (layoutComplet);
     setCentralWidget(centralWidget);
 	setWindowTitle ("ChronoCheckMate");
@@ -114,6 +120,8 @@ MaFenetre::MaFenetre() :
     QObject::connect (actionQuitter , &QAction::triggered , qApp , &QApplication::quit);
     QObject::connect (chrono1, &Chronometre::fin, this, &MaFenetre::afficheGagnant);
     QObject::connect (chrono2, &Chronometre::fin, this, &MaFenetre::afficheGagnant);
+    QObject::connect (chrono1, &Chronometre::is_paused, this, &MaFenetre::ajouterTempsJoueur);
+    QObject::connect (chrono2, &Chronometre::is_paused, this, &MaFenetre::ajouterTempsJoueur);
 
 }
 
@@ -125,6 +133,13 @@ void MaFenetre::etatBoutons (bool etatBoutonStart, bool etatBoutonStop, bool eta
     boutonChangerCouleur->setEnabled(etatBoutonInverser);
 }
 
+void MaFenetre::refreshLabel()
+{
+    labelOptions->setText("<b>Options</b><br />Temps : "
+                            + option->tempsDepart().toString("HH:mm:ss") + "<br />"
+                            + (option->isTempsSupplementaire() ? " + " + option->tempsSupplementaire().toString("ss") + " secondes" : ""));
+}
+
 ////////////////// EVENT ////////////////////////
 void MaFenetre::closeEvent(QCloseEvent *event)
 {
@@ -201,7 +216,10 @@ void MaFenetre::lancerDialogueOptions() {
         option->setNomJoueur2(dialog.champs_joueur2());
         option->setTempsDepart(dialog.champs_temps());
         option->setSon(dialog.champs_son());
+        option->setTempsSupplementaire(dialog.champs_temps_Supplementaire());
+        option->setTempsSupplementaire(dialog.champs_is_temps_supplementaire());
         option->sauverConf();
+        refreshLabel();
 
         chrono1->modifierNomJoueur(option->nomJoueur1());
         chrono1->definirTemps(option->tempsDepart());
@@ -230,3 +248,12 @@ void MaFenetre::keyReleaseEvent (QKeyEvent * evenement) {
         arreter();
     }
 }
+
+void MaFenetre::ajouterTempsJoueur(Chronometre * chrono)
+{
+    if (option->isTempsSupplementaire())
+    {
+        chrono->addTime(option->tempsSupplementaire());
+        chrono->affichage();
+    }
+}

+ 4 - 0
MaFenetre.h

@@ -31,6 +31,7 @@ class QHBoxLayout;
 class QPushButton;
 class QLineEdit;
 class Options;
+class QLabel;
 
 class MaFenetre : public QMainWindow { // On hérite de QMainWindow (IMPORTANT)
 	Q_OBJECT
@@ -48,12 +49,14 @@ class MaFenetre : public QMainWindow { // On hérite de QMainWindow (IMPORTANT)
     void inverser ();
     void changerCouleur ();
     void afficheGagnant();
+    void ajouterTempsJoueur(Chronometre *chrono);
 
     void closeEvent(QCloseEvent *event);
 
 	
 	private:
 	void keyReleaseEvent (QKeyEvent * evenement);
+    void refreshLabel();
 
 	bool marche;
     Options     *option;
@@ -61,6 +64,7 @@ class MaFenetre : public QMainWindow { // On hérite de QMainWindow (IMPORTANT)
     Chronometre *chrono2;
     QLineEdit   *joueur1LineEdit;
     QLineEdit   *joueur2LineEdit;
+    QLabel      *labelOptions;
     QHBoxLayout *layoutChrono;
 	QHBoxLayout *layoutBoutons;
     QVBoxLayout *layoutComplet;

+ 21 - 1
options.cpp

@@ -18,10 +18,12 @@ Options::~Options ()
 
 void Options::chargerConf()
 {
-    m_tempsDepart = QTime(value("CONFIG/TEMPS_DEPART", QTime(0, 5, 0, 0)).toTime());
+    m_tempsDepart = value("CONFIG/TEMPS_DEPART", QTime(0, 5, 0, 0)).toTime();
     m_nomJoueur1  = value("JOUEURS/NOM_JOUEUR_1", "Joueur 1").toString();
     m_nomJoueur2  = value("JOUEURS/NOM_JOUEUR_2", "Joueur 2").toString();
     m_son         = value("CONFIG/SON", true).toBool();
+    m_isTempsSupplementaire = value("CONFIG/IS_TEMPS_SUPP", false).toBool();
+    m_tempsSupplementaire   = value("CONFIG/TEMPS_SUPP", QTime(0,0,1,0)).toTime();
 }
 
 void Options::sauverConf()
@@ -30,6 +32,8 @@ void Options::sauverConf()
     setValue("CONFIG/SON", son());
     setValue("JOUEURS/NOM_JOUEUR_1", nomJoueur1());
     setValue("JOUEURS/NOM_JOUEUR_2", nomJoueur2());
+    setValue("CONFIG/IS_TEMPS_SUPP", isTempsSupplementaire());
+    setValue("CONFIG/TEMPS_SUPP", tempsSupplementaire());
     sync();
 }
 
@@ -46,6 +50,14 @@ void Options::setTempsDepart(QTime const& temps) {
     m_tempsDepart = temps;
 }
 
+void Options::setTempsSupplementaire(QTime const& temps) {
+    m_tempsSupplementaire = temps;
+}
+
+void Options::setTempsSupplementaire(bool isTempsSupp) {
+    m_isTempsSupplementaire = isTempsSupp;
+}
+
 void Options::setSon (bool son) {
     m_son = son;
 }
@@ -62,6 +74,14 @@ QTime Options::tempsDepart() const {
     return m_tempsDepart;
 }
 
+QTime Options::tempsSupplementaire() const {
+    return m_tempsSupplementaire;
+}
+
+bool Options::isTempsSupplementaire() const {
+    return m_isTempsSupplementaire;
+}
+
 bool Options::son() const {
     return m_son;
 }

+ 6 - 0
options.h

@@ -17,9 +17,13 @@ public:
     void setNomJoueur1 (QString const& joueur);
     void setNomJoueur2 (QString const& joueur);
     void setSon (bool son);
+    void setTempsSupplementaire(bool isTempsSupp);
+    void setTempsSupplementaire(QTime const& temps);
     QString nomJoueur1 () const;
     QString nomJoueur2 () const;
     QTime tempsDepart () const;
+    QTime tempsSupplementaire() const;
+    bool isTempsSupplementaire() const;
     bool son () const;
 
 public slots:
@@ -33,6 +37,8 @@ private:
     QString m_nomJoueur1;
     QString m_nomJoueur2;
     bool    m_son;
+    bool    m_isTempsSupplementaire;
+    QTime   m_tempsSupplementaire;
 
 };