Browse Source

Mode compte à rebours

François Drouhard 6 years ago
parent
commit
2c8b979557
6 changed files with 62 additions and 11 deletions
  1. 12 4
      Chronometre.cpp
  2. 7 1
      Chronometre.h
  3. 20 1
      Dialog.cpp
  4. 6 1
      Dialog.h
  5. 15 4
      MaFenetre.cpp
  6. 2 0
      MaFenetre.h

+ 12 - 4
Chronometre.cpp

@@ -30,9 +30,10 @@
 #include <QFont>
 #include <QTime>
 
-Chronometre::Chronometre (const QString & nom , QWidget * parent = 0) :
+Chronometre::Chronometre (const QString & nom , int tempsDepart, QWidget * parent = nullptr) :
     QGroupBox (nom , parent),
-    ms(0)
+    ms(1000*60*tempsDepart),
+    msTempsDepart(1000*60*tempsDepart)
 {
     setFlat(false);
 
@@ -60,8 +61,15 @@ void Chronometre::modifierNomJoueur(QString joueur) {
     setTitle(joueur);
 }
 
+void Chronometre::definirTemps(int tempsDepart) {
+    msTempsDepart = tempsDepart*60*1000;
+}
+
 void Chronometre::refresh () {
-    ms += 10;
+    ms -= 10;
+    if (ms <= 0) {
+        emit fin();
+    }
 	affichage ();
 }
 
@@ -83,7 +91,7 @@ void Chronometre::reinit () {
 	if (timer->isActive()) {
 		timer->stop();
 	}
-    ms  = 0;
+    ms  = msTempsDepart;
 	affichage();
 }
 

+ 7 - 1
Chronometre.h

@@ -36,19 +36,25 @@ class Chronometre : public QGroupBox {
 	Q_OBJECT
 	
 	public:
-	Chronometre (const QString & nom , QWidget * parent);
+    Chronometre (const QString & nom , int tempsDepart, QWidget * parent);
 	void start ();
 	void stop ();
 	void affichage ();
 	void reinit ();
 	void basculer ();
     void modifierNomJoueur (QString joueur);
+    void definirTemps (int tempsDepart);
+
+    signals:
+    void fin();
+
 
     private slots:
     void refresh ();
 	
 	private:
     int ms;
+    int msTempsDepart;
 	QTimer *timer;
     QTime  *temps;
     QHBoxLayout *ecranLayout;

+ 20 - 1
Dialog.cpp

@@ -1,20 +1,31 @@
 #include "Dialog.h"
 #include <QBoxLayout>
 #include <QLineEdit>
+#include <QSpinBox>
 #include <QDialogButtonBox>
+#include <QLabel>
 
-Dialog::Dialog(QString nom1, QString nom2, QWidget *parent) :
+Dialog::Dialog(QString nom1, QString nom2, int tempsDepart, QWidget *parent) :
     QDialog(parent)
 {
     QHBoxLayout *layoutLineEdit = new QHBoxLayout;
+    QHBoxLayout *layoutTemps    = new QHBoxLayout;
     QVBoxLayout *layoutDialog = new QVBoxLayout;
     QDialogButtonBox *boutonJouer = new QDialogButtonBox (QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
+    QLabel *labelTempsDepart= new QLabel("Temps départ (minutes)");
+    spinTempsDepart     = new QSpinBox;
+    spinTempsDepart->setMinimum(0);
+    spinTempsDepart->setMaximum(300);
+    spinTempsDepart->setValue(tempsDepart);
     joueur1LineEdit = new QLineEdit(nom1 , this);
     joueur2LineEdit = new QLineEdit(nom2 , this);
     joueur1LineEdit->selectAll();
 
     layoutLineEdit->addWidget(joueur1LineEdit);
     layoutLineEdit->addWidget(joueur2LineEdit);
+    layoutTemps->addWidget(labelTempsDepart);
+    layoutTemps->addWidget(spinTempsDepart);
+    layoutDialog->addLayout(layoutTemps);
     layoutDialog->addLayout(layoutLineEdit);
     layoutDialog->addWidget(boutonJouer);
     setLayout(layoutDialog);
@@ -23,6 +34,10 @@ Dialog::Dialog(QString nom1, QString nom2, QWidget *parent) :
     QObject::connect(boutonJouer , SIGNAL(rejected()) , this, SLOT(close()));
 }
 
+Dialog::~Dialog() {
+
+}
+
 QString Dialog::joueur1 () const {
     return joueur1LineEdit->text();
 }
@@ -30,3 +45,7 @@ QString Dialog::joueur1 () const {
 QString Dialog::joueur2 () const {
     return joueur2LineEdit->text();
 }
+
+int Dialog::tempsDepart () const {
+    return spinTempsDepart->value();
+}

+ 6 - 1
Dialog.h

@@ -3,15 +3,18 @@
 
 #include <QDialog>
 class QLineEdit;
+class QSpinBox;
 class QString;
 
 class Dialog : public QDialog
 {
     Q_OBJECT
 public:
-    explicit Dialog(QString nom1, QString nom2, QWidget *parent = nullptr);
+    explicit Dialog(QString nom1, QString nom2, int tempsDepart, QWidget *parent = nullptr);
+    ~Dialog();
     QString joueur1 () const;
     QString joueur2 () const;
+    int tempsDepart () const;
 
 signals:
 
@@ -20,6 +23,8 @@ public slots:
 private:
     QLineEdit* joueur1LineEdit;
     QLineEdit* joueur2LineEdit;
+    QSpinBox*  spinTempsDepart;
+
 };
 
 #endif // DIALOG_H

+ 15 - 4
MaFenetre.cpp

@@ -33,17 +33,19 @@
 #include <QDialog>
 #include <QLineEdit>
 #include <QDialogButtonBox>
+#include <QMessageBox>
 
 MaFenetre::MaFenetre() :
     QMainWindow (),
     marche(false),
     nomJoueur1 ("Joueur 1"),
-    nomJoueur2 ("Joueur 2")
+    nomJoueur2 ("Joueur 2"),
+    tempsDepart(5)
 {
     QWidget *centralWidget = new QWidget;
 
-    chrono1 = new Chronometre(nomJoueur1 , this);
-    chrono2 = new Chronometre(nomJoueur2 , this);
+    chrono1 = new Chronometre(nomJoueur1 , tempsDepart, this);
+    chrono2 = new Chronometre(nomJoueur2 , tempsDepart, this);
     boutonInverser = new QPushButton ("<->");
     boutonInverser->setMinimumWidth(50);
     boutonInverser->setMaximumWidth(50);
@@ -99,6 +101,9 @@ MaFenetre::MaFenetre() :
     QObject::connect (actionNouveau, SIGNAL(triggered()) , this , SLOT(init()));
     QObject::connect (actionChangerNom , SIGNAL(triggered()), this, SLOT(definirNomJoueurs()));
     QObject::connect (actionQuitter , SIGNAL(triggered()) , qApp , SLOT(quit()));
+    QObject::connect (chrono1, SIGNAL(fin()), this, SLOT(arreter()));
+    QObject::connect (chrono2, SIGNAL(fin()), this, SLOT(arreter()));
+
 }
 
 ///////////////// Méthodes ////////////////////
@@ -131,7 +136,11 @@ void MaFenetre::demarrer () {
 void MaFenetre::modifierNomJoueurs() {
     chrono1->modifierNomJoueur(nomJoueur1);
     chrono2->modifierNomJoueur(nomJoueur2);
+}
 
+void MaFenetre::modifierTemps() {
+    chrono1->definirTemps(tempsDepart);
+    chrono2->definirTemps(tempsDepart);
 }
 
 void MaFenetre::switcher () {
@@ -156,10 +165,12 @@ void MaFenetre::init () {
 }
 
 void MaFenetre::definirNomJoueurs() {
-    Dialog dialog(nomJoueur1, nomJoueur2, this);
+    Dialog dialog(nomJoueur1, nomJoueur2, tempsDepart, this);
     if (dialog.exec()) {
         nomJoueur1 = dialog.joueur1();
         nomJoueur2 = dialog.joueur2();
+        tempsDepart = dialog.tempsDepart();
+        modifierTemps();
         modifierNomJoueurs();
     }
 }

+ 2 - 0
MaFenetre.h

@@ -38,6 +38,7 @@ class MaFenetre : public QMainWindow { // On hérite de QMainWindow (IMPORTANT)
 	MaFenetre();
     void etatBoutons (bool etatBoutonStart , bool etatBoutonStop);
     void modifierNomJoueurs ();
+    void modifierTemps();
 
 	private slots:
 	void demarrer ();
@@ -53,6 +54,7 @@ class MaFenetre : public QMainWindow { // On hérite de QMainWindow (IMPORTANT)
 	bool marche;
     QString nomJoueur1;
     QString nomJoueur2;
+    int     tempsDepart;
 	Chronometre *chrono1;
 	Chronometre *chrono2;
     QLineEdit   *joueur1LineEdit;