Browse Source

Bouton de changement de couleur

François Drouhard 6 years ago
parent
commit
1f00f1316d
4 changed files with 78 additions and 35 deletions
  1. 21 3
      Chronometre.cpp
  2. 10 2
      Chronometre.h
  3. 43 28
      MaFenetre.cpp
  4. 4 2
      MaFenetre.h

+ 21 - 3
Chronometre.cpp

@@ -32,15 +32,16 @@
 #include <QGroupBox>
 #include <QDebug>
 
-Chronometre::Chronometre (const QString & nom, QString unecouleur, QTime const& tempsDepart, QWidget * parent = nullptr) :
+Chronometre::Chronometre (const QString & nom, Couleur unecouleur, QTime const& tempsDepart, QWidget * parent = nullptr) :
     QWidget (parent),
     couleur(unecouleur),
     temps(tempsDepart),
     msTempsDepart(tempsDepart)
 {
     QHBoxLayout *layoutPrincipal = new QHBoxLayout;
-    QLabel *labelPion = new QLabel;
-    pion = new QPixmap(QString (":/ressources/pawn_%1.svg").arg(couleur));
+    labelPion = new QLabel;
+    pion = new QPixmap();
+    setCouleur(couleur);
     labelPion->setPixmap(*pion);
 
     groupBox = new QGroupBox(nom);
@@ -79,6 +80,23 @@ void Chronometre::definirTemps(QTime const& tempsDepart) {
     msTempsDepart = tempsDepart;
 }
 
+void Chronometre::echangerCouleur(Chronometre & chrono) {
+    Couleur temp = couleur;
+    setCouleur(chrono.couleur);
+    chrono.setCouleur(temp);
+}
+
+void Chronometre::setCouleur (Couleur color) {
+    couleur = color;
+    QString stringCouleur;
+    if (couleur == Blanc)
+        stringCouleur = "white";
+    else
+        stringCouleur = "black";
+    pion->load(QString (":/ressources/pawn_%1.svg").arg(stringCouleur));
+    labelPion->setPixmap(*pion);
+}
+
 void Chronometre::refresh () {
     temps = temps.addMSecs(-INTERVAL);
     affichage ();

+ 10 - 2
Chronometre.h

@@ -35,17 +35,24 @@ class QPixmap;
 
 #define INTERVAL 1 // vitesse de défilement (1000ème de secondes)
 
+enum Couleur {
+    Blanc,
+    Noir,
+};
+
 class Chronometre : public QWidget {
 	
 	Q_OBJECT
 	
 	public:
-    Chronometre (const QString & nom , QString unecouleur, QTime const& tempsDepart, QWidget * parent);
+    Chronometre (const QString & nom , Couleur unecouleur, QTime const& tempsDepart, QWidget * parent);
 	void start ();
 	void stop ();
 	void affichage ();
 	void reinit ();
 	void basculer ();
+    void echangerCouleur (Chronometre & chrono);
+    void setCouleur (Couleur color);
     void modifierNomJoueur (QString joueur);
     void definirTemps (QTime const& tempsDepart);
     QString operator+=(Chronometre const& joueur) const;
@@ -58,7 +65,8 @@ class Chronometre : public QWidget {
     void refresh ();
 	
 	private:
-    QString  couleur;
+    QLabel *labelPion;
+    Couleur couleur;
     QGroupBox *groupBox;
     QPixmap *pion;
     QTime temps;

+ 43 - 28
MaFenetre.cpp

@@ -44,17 +44,25 @@ MaFenetre::MaFenetre(Options* mesOptions) :
 {
     QWidget *centralWidget = new QWidget;
 
-    chronoBlanc = new Chronometre(option->nomJoueur1(), "white", option->tempsDepart(), this);
-    chronoNoir = new Chronometre(option->nomJoueur2(), "black", option->tempsDepart(), this);
+    chrono1 = new Chronometre(option->nomJoueur1(), Blanc, option->tempsDepart(), this);
+    chrono2 = new Chronometre(option->nomJoueur2(), Noir, option->tempsDepart(), this);
     boutonInverser = new QPushButton ("<->");
+    boutonChangerCouleur = new QPushButton("Changer de couleur");
     boutonInverser->setMinimumWidth(50);
     boutonInverser->setMaximumWidth(50);
 
+    ////////////////// Layout Boutons inversion /////////////////////////////////
+    QVBoxLayout *layoutBoutonsInverser = new QVBoxLayout;
+    layoutBoutonsInverser->addStretch(1);
+    layoutBoutonsInverser->addWidget(boutonInverser, 0, Qt::AlignCenter);
+    layoutBoutonsInverser->addWidget(boutonChangerCouleur, 0, Qt::AlignCenter);
+    layoutBoutonsInverser->addSpacing(10);
+
 	////////////////// Groupe Définition de la classe ///////////////////////////
     layoutChrono = new QHBoxLayout;
-    layoutChrono->addWidget(chronoBlanc);
-    layoutChrono->addWidget(boutonInverser  , 0, Qt::AlignVCenter);
-    layoutChrono->addWidget(chronoNoir);
+    layoutChrono->addWidget(chrono1);
+    layoutChrono->addLayout(layoutBoutonsInverser);
+    layoutChrono->addWidget(chrono2);
 
     ///////////////////////////// Menus ////////////////////////////
     QMenu *menuFichier = menuBar()->addMenu("&Fichier");
@@ -72,6 +80,7 @@ MaFenetre::MaFenetre(Options* mesOptions) :
 	
 	boutonArreter->setFocusPolicy (Qt::NoFocus);
     boutonInverser->setFocusPolicy(Qt::NoFocus);
+    boutonChangerCouleur->setFocusPolicy(Qt::NoFocus);
 	
 	layoutBoutonSwitch = new QHBoxLayout;
     layoutBoutonSwitch->addWidget (boutonDemarrer,0, Qt::AlignLeft);
@@ -97,12 +106,13 @@ MaFenetre::MaFenetre(Options* mesOptions) :
 	///////////////////////////// connections ///////////////////////////
     QObject::connect (boutonDemarrer , SIGNAL(clicked () ) , this , SLOT(demarrer () ));
     QObject::connect (boutonInverser , SIGNAL(clicked()) , this , SLOT(inverser()));
+    QObject::connect (boutonChangerCouleur, SIGNAL(clicked() ), this, SLOT(changerCouleur()));
     QObject::connect (boutonArreter , SIGNAL(clicked()), this, SLOT (arreter()));
     QObject::connect (actionNouveau, SIGNAL(triggered()) , this , SLOT(init()));
     QObject::connect (actionOptions , SIGNAL(triggered()), this, SLOT(lancerDialogueOptions()));
     QObject::connect (actionQuitter , SIGNAL(triggered()) , qApp , SLOT(quit()));
-    QObject::connect (chronoBlanc, SIGNAL(fin()), this, SLOT(afficheGagnant()));
-    QObject::connect (chronoNoir, SIGNAL(fin()), this, SLOT(afficheGagnant()));
+    QObject::connect (chrono1, SIGNAL(fin()), this, SLOT(afficheGagnant()));
+    QObject::connect (chrono2, SIGNAL(fin()), this, SLOT(afficheGagnant()));
 
 }
 
@@ -111,25 +121,30 @@ void MaFenetre::etatBoutons (bool etatBoutonStart, bool etatBoutonStop, bool eta
     boutonDemarrer->setEnabled (etatBoutonStart);
     boutonArreter->setEnabled (etatBoutonStop);
     boutonInverser->setEnabled(etatBoutonInverser);
+    boutonChangerCouleur->setEnabled(etatBoutonInverser);
 }
 
 ////////////////// SLOTS ////////////////////////
 void MaFenetre::inverser() {
-    layoutChrono->removeWidget(chronoBlanc);
-    layoutChrono->removeWidget(chronoNoir);
-    Chronometre *chronoTemp = chronoBlanc;
-    chronoBlanc = chronoNoir;
-    chronoNoir = chronoTemp;
-    layoutChrono->insertWidget(0 , chronoBlanc);
-    layoutChrono->addWidget(chronoNoir);
+    init();
+    QString temp;
+    temp = option->nomJoueur1();
+    option->setNomJoueur1(option->nomJoueur2());
+    option->setNomJoueur2(temp);
+    chrono1->modifierNomJoueur(option->nomJoueur1());
+    chrono2->modifierNomJoueur(option->nomJoueur2());
+}
 
+void MaFenetre::changerCouleur() {
+    init();
+    chrono1->echangerCouleur(*chrono2);
 }
 
 void MaFenetre::demarrer () {
 	if (marche == false ) {
-        chronoBlanc->reinit ();
-        chronoNoir->reinit ();
-        chronoBlanc->start ();
+        chrono1->reinit ();
+        chrono2->reinit ();
+        chrono1->start ();
 		marche = true;
         etatBoutons (false , true, false);
 	}
@@ -137,14 +152,14 @@ void MaFenetre::demarrer () {
 
 void MaFenetre::switcher () {
 	if (marche == true) {
-        chronoBlanc->basculer ();
-        chronoNoir->basculer ();
+        chrono1->basculer ();
+        chrono2->basculer ();
 	}
 }
 
 void MaFenetre::arreter () {
-    chronoBlanc->stop();
-    chronoNoir->stop();
+    chrono1->stop();
+    chrono2->stop();
 	marche = false;
     etatBoutons (false , false, true);
 }
@@ -155,15 +170,15 @@ void MaFenetre::afficheGagnant() {
         QSound::play(":/ressources/sonnette.wav");
     QMessageBox message;
     QString texte;
-    texte = "Le joueur " + (*chronoBlanc+=*chronoNoir) + " a gagné au temps.";
+    texte = "Le joueur " + (*chrono1+=*chrono2) + " a gagné au temps.";
     message.setText(texte);
     message.setStandardButtons(QMessageBox::Ok);
     message.exec();
 }
 
 void MaFenetre::init () {
-    chronoBlanc->reinit();
-    chronoNoir->reinit();
+    chrono1->reinit();
+    chrono2->reinit();
     marche = false;
     etatBoutons (true , false, true);
 }
@@ -171,11 +186,11 @@ void MaFenetre::init () {
 void MaFenetre::lancerDialogueOptions() {
     Dialog dialog (option);
     if (dialog.exec()) {
-        chronoBlanc->modifierNomJoueur(option->nomJoueur1());
-        chronoBlanc->definirTemps(option->tempsDepart());
+        chrono1->modifierNomJoueur(option->nomJoueur1());
+        chrono1->definirTemps(option->tempsDepart());
 
-        chronoNoir->modifierNomJoueur(option->nomJoueur2());
-        chronoNoir->definirTemps(option->tempsDepart());
+        chrono2->modifierNomJoueur(option->nomJoueur2());
+        chrono2->definirTemps(option->tempsDepart());
 
         if (marche==false) {
             init();

+ 4 - 2
MaFenetre.h

@@ -46,6 +46,7 @@ class MaFenetre : public QMainWindow { // On hérite de QMainWindow (IMPORTANT)
 	void arreter ();
     void lancerDialogueOptions();
     void inverser ();
+    void changerCouleur ();
     void afficheGagnant();
 
 	
@@ -54,8 +55,8 @@ class MaFenetre : public QMainWindow { // On hérite de QMainWindow (IMPORTANT)
 
 	bool marche;
     Options     *option;
-    Chronometre *chronoBlanc;
-    Chronometre *chronoNoir;
+    Chronometre *chrono1;
+    Chronometre *chrono2;
     QLineEdit   *joueur1LineEdit;
     QLineEdit   *joueur2LineEdit;
     QHBoxLayout *layoutChrono;
@@ -64,6 +65,7 @@ class MaFenetre : public QMainWindow { // On hérite de QMainWindow (IMPORTANT)
 	QPushButton *boutonDemarrer;
     QPushButton *boutonArreter;
     QPushButton *boutonInverser;
+    QPushButton *boutonChangerCouleur;
     QHBoxLayout *layoutBoutonSwitch;
 };