Przeglądaj źródła

Merge branch 'gui' into 'master'

Gui

See merge request Sangfroid/ChronoCheckMate!3
François D 6 lat temu
rodzic
commit
34b7b5cf0b
6 zmienionych plików z 115 dodań i 45 usunięć
  1. 3 0
      ChronoCheckMate.pro
  2. 45 9
      Chronometre.cpp
  3. 16 3
      Chronometre.h
  4. 47 31
      MaFenetre.cpp
  5. 4 2
      MaFenetre.h
  6. BIN
      ressources/chess.ico

+ 3 - 0
ChronoCheckMate.pro

@@ -7,6 +7,7 @@ TARGET = ChronoCheckMate
 INCLUDEPATH += .
 QT += widgets
 QT += multimedia
+QT += gui
 
 # The following define makes your compiler warn you if you use any
 # feature of Qt which has been marked as deprecated (the exact warnings
@@ -29,3 +30,5 @@ SOURCES += Chronometre.cpp MaFenetre.cpp main.cpp \
 
 RESOURCES += \
     ressources.qrc
+
+FORMS +=

+ 45 - 9
Chronometre.cpp

@@ -29,25 +29,43 @@
 #include <QDebug>
 #include <QFont>
 #include <QTime>
+#include <QGroupBox>
+#include <QDebug>
 
-Chronometre::Chronometre (const QString & nom , QTime const& tempsDepart, QWidget * parent = nullptr) :
-    QGroupBox (nom , parent),
+Chronometre::Chronometre (const QString & nom, Couleur unecouleur, QTime const& tempsDepart, QWidget * parent = nullptr) :
+    QWidget (parent),
+    couleur(unecouleur),
     temps(tempsDepart),
     msTempsDepart(tempsDepart)
 {
-    setFlat(false);
+    QHBoxLayout *layoutPrincipal = new QHBoxLayout;
+    labelPion = new QLabel;
+    pion = new QPixmap();
+    setCouleur(couleur);
+    labelPion->setPixmap(*pion);
+
+    groupBox = new QGroupBox(nom);
+    groupBox->setFlat(false);
+    groupBox->setFont(QFont(groupBox->font().family(), 15));
 
-    QFont font("Arial" , 22 , 5);
+    QFont font("Arial" , 25, 75);
 
     ecranTemps = new QLabel(temps.toString("hh:mm:ss:zzz"));
+    ecranTemps->setMinimumWidth(200);
     ecranTemps->setFont(font);
 
     ecranLayout = new QHBoxLayout;
     ecranLayout->addSpacing(40);
-    ecranLayout->addWidget(ecranTemps);
+    ecranLayout->addStretch(1);
+    ecranLayout->addWidget(ecranTemps, 0);
+    ecranLayout->addStretch(1);
     ecranLayout->addSpacing(40);
 
-    setLayout (ecranLayout);
+    layoutPrincipal->addWidget(labelPion,0);
+    layoutPrincipal->addWidget(groupBox,1);
+
+    groupBox->setLayout (ecranLayout);
+    setLayout(layoutPrincipal);
 	
     timer = new QTimer  (this);
     timer->setInterval (INTERVAL);
@@ -55,13 +73,30 @@ Chronometre::Chronometre (const QString & nom , QTime const& tempsDepart, QWidge
 }
 
 void Chronometre::modifierNomJoueur(QString joueur) {
-    setTitle(joueur);
+    groupBox->setTitle(joueur);
 }
 
 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 ();
@@ -82,6 +117,7 @@ void Chronometre::stop () {
 void Chronometre::affichage () {
     QString chaineTemps = temps.toString("hh:mm:ss:zzz");
     ecranTemps->setText(chaineTemps);
+    //qDebug() << "Taille : " << ecranTemps->width();
 }
 
 void Chronometre::reinit () {
@@ -103,9 +139,9 @@ void Chronometre::basculer () {
 
 QString Chronometre::operator+=(Chronometre const& joueur) const {
     if (temps <= QTime (0,0,0,0)) {
-        return joueur.title();
+        return joueur.groupBox->title();
     } else if (joueur.temps <= QTime(0,0,0,0)) {
-        return title();
+        return groupBox->title();
     }
     return "Nope";
 }

+ 16 - 3
Chronometre.h

@@ -24,26 +24,35 @@
 #define DEF_CHRONOMETRE
  
 
-#include <QGroupBox>
+#include <QWidget>
 #include <QTime>
+class QGroupBox;
 class QLabel;
 class QHBoxLayout;
 class QTimer;
 class QString;
+class QPixmap;
 
 #define INTERVAL 1 // vitesse de défilement (1000ème de secondes)
 
-class Chronometre : public QGroupBox {
+enum Couleur {
+    Blanc,
+    Noir,
+};
+
+class Chronometre : public QWidget {
 	
 	Q_OBJECT
 	
 	public:
-    Chronometre (const QString & nom , 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;
@@ -56,6 +65,10 @@ class Chronometre : public QGroupBox {
     void refresh ();
 	
 	private:
+    QLabel *labelPion;
+    Couleur couleur;
+    QGroupBox *groupBox;
+    QPixmap *pion;
     QTime temps;
     QTime msTempsDepart;
 	QTimer *timer;

+ 47 - 31
MaFenetre.cpp

@@ -44,17 +44,25 @@ MaFenetre::MaFenetre(Options* mesOptions) :
 {
     QWidget *centralWidget = new QWidget;
 
-    chronoBlanc = new Chronometre(option->nomJoueur1() , option->tempsDepart(), this);
-    chronoNoir = new Chronometre(option->nomJoueur2() , 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, Qt::AlignVCenter);
-    layoutChrono->addWidget(chronoNoir);
+    layoutChrono->addWidget(chrono1);
+    layoutChrono->addLayout(layoutBoutonsInverser);
+    layoutChrono->addWidget(chrono2);
 
     ///////////////////////////// Menus ////////////////////////////
     QMenu *menuFichier = menuBar()->addMenu("&Fichier");
@@ -72,10 +80,12 @@ MaFenetre::MaFenetre(Options* mesOptions) :
 	
 	boutonArreter->setFocusPolicy (Qt::NoFocus);
     boutonInverser->setFocusPolicy(Qt::NoFocus);
+    boutonChangerCouleur->setFocusPolicy(Qt::NoFocus);
 	
 	layoutBoutonSwitch = new QHBoxLayout;
-	layoutBoutonSwitch->addWidget (boutonDemarrer);
-    layoutBoutonSwitch->addWidget (boutonArreter);
+    layoutBoutonSwitch->addWidget (boutonDemarrer,0, Qt::AlignLeft);
+    layoutBoutonSwitch->addWidget (boutonArreter, 0, Qt::AlignLeft);
+    layoutBoutonSwitch->addStretch(1);
 
     ///////////////////////////// Aide /////////////////////////////////////
     QLabel *labelAide = new QLabel ("<b>Aide</b><br />Espace : Lancer le chrono/Donner le chrono<br />Entrée : Stopper les deux chronos");
@@ -96,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()));
 
 }
 
@@ -110,25 +121,30 @@ void MaFenetre::etatBoutons (bool etatBoutonStart, bool etatBoutonStop, bool eta
     boutonDemarrer->setEnabled (etatBoutonStart);
     boutonArreter->setEnabled (etatBoutonStop);
     boutonInverser->setEnabled(etatBoutonInverser);
-    //boutonInverser->setVisible(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);
 	}
@@ -136,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);
 }
@@ -154,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);
 }
@@ -170,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;
 };
 

BIN
ressources/chess.ico