Projet e-stock  0.2
BTS SNIR LaSalle Avignon 2020
Ihm.cpp
Aller à la documentation de ce fichier.
1 #include "Ihm.h"
2 #include "ui_Ihm.h"
3 #include "Supervision.h"
4 #include "Armoire.h"
5 #include "Casier.h"
6 #include <QMessageBox>
7 #include <QDebug>
8 #include <QString>
9 
29 Ihm::Ihm(QWidget *parent) : QMainWindow(parent), ui(new Ui::Ihm), supervision(new Supervision(this))
30 {
31  ui->setupUi(this);
32  // Suppression des parties inutile du QMainWindow
33  delete ui->menuBar;
34  delete ui->mainToolBar;
35  delete ui->statusBar;
36 
37  // Affiche la fenêtre par défaut en plein écran
39 
40  // Met la fenêtre en plein écran fenêtrer
41  setWindowFlags(Qt::WindowStaysOnTopHint);
42  setWindowFlags(Qt::FramelessWindowHint);
43  // Pour la Raspberry Pi
44  //showMaximized();
45 
46  // Les deux types d'authentifiaction
47  connect(ui->lineBadge, SIGNAL(editingFinished()), this, SLOT(authentifierParBadge()));
48  connect(ui->pushSeConnecter, SIGNAL(clicked()), this, SLOT(authentifierParIdentifiant()));
49  connect(ui->pushSeDeconnecter, SIGNAL(clicked()), this, SLOT(deconnecterUtilisateur()));
50 
51  // Les deux fenêtres d'authentifiaction
52  connect(ui->pushParIdentifiant, SIGNAL(clicked()), this, SLOT(allerFenetreIdentifiant()));
53  connect(ui->pushParBadge, SIGNAL(clicked()), this, SLOT(allerFenetreBadge()));
54 
55  // Article
56  connect(ui->lineRecherche, SIGNAL(textChanged(QString)), this, SLOT(activerRecherche()));
57  connect(ui->pushRecherche, SIGNAL(clicked(bool)), this, SLOT(rechercherArticle()));
58 
61 }
62 
68 {
69  delete ui;
70 }
71 
77 void Ihm::changerDeFenetre(int fenetre)
78 {
79  ui->stackedWidget->setCurrentIndex(fenetre);
80 }
81 
88 {
89  // pair/impair -> droite/gauche ?
90  int numero = casier->getNumero() - 1;
91  if((numero+1)%2)
92  {
93  ui->gridLayoutCasiers->addWidget(casier, numero/2, 0, 1, 1);
94  }
95  else
96  {
97  ui->gridLayoutCasiers->addWidget(casier, numero/2, 1, 1, 1);
98  }
99 }
100 
106 void Ihm::afficherInformationsArmoire(QStringList informationsArmoire)
107 {
108  #ifdef DEBUG_IHM
109  qDebug() << Q_FUNC_INFO << "informationsArmoire" << informationsArmoire;
110  #endif
111  ui->labelNomArmoire->setText(informationsArmoire.at(TABLE_ARMOIRE_NOM) + " " + informationsArmoire.at(TABLE_ARMOIRE_DESCRIPTION) + " (" + informationsArmoire.at(TABLE_ARMOIRE_NB_CASIERS+1) + ")");
112  ui->labelNbCasiers->setText(informationsArmoire.at(TABLE_ARMOIRE_NB_CASIERS));
113 }
114 
120 {
122  ui->labelErreurBadge->clear();
123 
124  if(ui->lineBadge->text() != "")
125  {
126  #ifdef DEBUG_IHM
127  qDebug() << Q_FUNC_INFO << "Contenu brut badge" << ui->lineBadge->text();
128  #endif
129 
130  QString trameBadge = ui->lineBadge->text();
131  ui->lineBadge->clear();
132  emit badgeDetecte(trameBadge);
133  }
135 }
136 
142 {
144  if(ui->lineIdentifiant->text() != "")
145  {
146  #ifdef DEBUG_IHM
147  qDebug() << Q_FUNC_INFO << "Identifiant" << ui->lineIdentifiant->text() << "MotDePasse" << ui->lineMotDePasse->text();
148  #endif
149 
150  QString identifiant = ui->lineIdentifiant->text();
151  QString motDePasse = ui->lineMotDePasse->text();
152  ui->lineIdentifiant->clear();
153  ui->lineMotDePasse->clear();
154  emit identifiantDetecte(identifiant, motDePasse);
155  }
157 }
158 
164 {
167 }
168 
174 {
176  ui->lineBadge->setFocus();
177 }
178 
185 {
187  ui->lineIdentifiant->setFocus();
188 }
189 
195 {
197  // Initialisation widgets
198  ui->comboBoxArticle->clear();
199  ui->comboBoxArticle->addItem("Sélectionner un article");
200  ui->pushRecherche->setEnabled(false);
201  ui->lineRecherche->setFocus();
202  // Lance une recherche de tous les articles
203  emit rechercheArticle("");
204 }
205 
206 
212 void Ihm::afficherErreurBadge(QString message)
213 {
214  ui->labelErreurBadge->setText(message);
215 }
216 
222 {
223  QMessageBox::critical(nullptr, APPLICATION, QString::fromUtf8(MESSAGE_ERREUR_DEPASSEMENT_QUANTITE));
224 }
225 
232 void Ihm::traiterDemandeDeConnexion(bool reponse, QString message)
233 {
234  if(reponse)
235  {
237  }
238  else
239  {
240  QMessageBox::critical(nullptr, APPLICATION, message);
241  }
242 }
243 
249 {
250  if(!ui->lineRecherche->text().isEmpty())
251  ui->pushRecherche->setEnabled(true);
252  else
253  ui->pushRecherche->setEnabled(false);
254 }
255 
262 {
263  if(!ui->lineRecherche->text().isEmpty())
264  supervision->rechercherArticle(ui->lineRecherche->text());
265 }
267 
273 {
274  ui->lineRecherche->setText("");
275 }
276 
282 void Ihm::mettreAJourListeArticles(QVector<QStringList> articlesTrouves)
283 {
285  #ifdef DEBUG_IHM
286  qDebug() << Q_FUNC_INFO << "articlesTrouves" << articlesTrouves.size() << articlesTrouves;
287  #endif
288  creerListeArticles(articlesTrouves);
289 
292 }
293 
300 {
302  #ifdef DEBUG_IHM
303  qDebug() << Q_FUNC_INFO << "index" << index << ui->comboBoxArticle->currentText();
304  #endif
305 
306  supervision->selectionnerArticle(ui->comboBoxArticle->currentText());
308 }
309 
315 void Ihm::afficherDonneesArticleSelectionne(QStringList donneesArticle)
316 {
318  ui->labelCasier->setText("Casier :");
319  ui->labelQuantiteNombre->setText(donneesArticle.at(ARTICLE_QUANTITE));
320  ui->labelDisponibleNombre->setText(donneesArticle.at(ARTICLE_DISPONIBLE));
321  ui->labelCasierNombre->setText(donneesArticle.at(NUMERO_CASIERS));
323 }
324 
330 void Ihm::afficherDonneesArticleSelectionne(QVector<QStringList> donneesArticle)
331 {
333  if(donneesArticle.size() <= 0)
334  return;
335  unsigned int articleQuantite = 0;
336  unsigned int articleDisponible = 0;
337  QString casiersQuantite;
338  QString casiersDisponible;
339  QString casiers;
340  int nombreCasiers = donneesArticle.size();
341 
342  for(int i = 0; i < nombreCasiers; i++)
343  {
344  #ifdef DEBUG_IHM
345  qDebug() << Q_FUNC_INFO << "disponible" << (donneesArticle[i].at(ARTICLE_DISPONIBLE)).toUInt();
346  qDebug() << Q_FUNC_INFO << "articleDisponible" << articleDisponible;
347  qDebug() << Q_FUNC_INFO << "quantite" << (donneesArticle[i].at(ARTICLE_QUANTITE)).toUInt();
348  qDebug() << Q_FUNC_INFO << "articleQuantite" << articleQuantite;
349  #endif
350  articleDisponible += (donneesArticle[i].at(ARTICLE_DISPONIBLE)).toUInt();
351  articleQuantite += (donneesArticle[i].at(ARTICLE_QUANTITE)).toUInt();
352 
353  if(i == 0)
354  {
355  casiers = donneesArticle[i].at(NUMERO_CASIERS);
356  casiersDisponible = QString(" (") + donneesArticle[i].at(ARTICLE_DISPONIBLE);
357  casiersQuantite = QString(" (") + donneesArticle[i].at(ARTICLE_QUANTITE);
358  }
359  else
360  {
361  casiers += " et " + donneesArticle[i].at(NUMERO_CASIERS);
362  casiersDisponible += QString(" et ") + donneesArticle[i].at(ARTICLE_DISPONIBLE);
363  casiersQuantite += QString(" et ") + donneesArticle[i].at(ARTICLE_QUANTITE);
364  }
365  }
366  casiersDisponible += QString(")");
367  casiersQuantite += QString(")");
368 
369  ui->labelCasier->setText("Casiers :");
370  ui->labelQuantiteNombre->setText(QString::number(articleQuantite) + casiersQuantite);
371  ui->labelDisponibleNombre->setText(QString::number(articleDisponible) + casiersDisponible);
372  ui->labelCasierNombre->setText(casiers);
374 }
375 
381 void Ihm::creerListeArticles(const QVector<QStringList> &articlesTrouves)
382 {
383  disconnect(ui->comboBoxArticle, SIGNAL(currentIndexChanged(int)), this, SLOT(selectionnerArticle(int)));
384  ui->comboBoxArticle->clear();
385 
386  ui->comboBoxArticle->addItem("Sélectionner un article");
387  for(int i = 0 ; i < articlesTrouves.size() ; i++)
388  {
389  if(ui->comboBoxArticle->findText(articlesTrouves[i].at(2)) == -1)
390  {
391  ui->comboBoxArticle->addItem(articlesTrouves[i].at(2));
392  }
393  }
394  connect(ui->comboBoxArticle, SIGNAL(currentIndexChanged(int)), this, SLOT(selectionnerArticle(int)));
395 }
Déclaration de la classe Casier.
void afficherErreurDepassementQuantite()
Définition de la méthode afficherErreurDepassementQuantite.
Definition: Ihm.cpp:221
void creerCasiers()
Définition de la méthode creerCasiers.
Definition: Supervision.cpp:90
#define ARTICLE_QUANTITE
Definition: Ihm.h:39
void rechercheArticle(QString)
void badgeDetecte(QString)
Definition: Ihm.h:48
Fenêtre d&#39;authentifiaction par badge.
Definition: Ihm.h:29
Supervision * supervision
association vers supervision
Definition: Ihm.h:103
Déclaration de la classe Ihm.
La classe Supervision permet de superviser l&#39;ensemble de l&#39;application.
Definition: Supervision.h:52
void afficherErreurBadge(QString message)
Définition de la méthode afficherErreurBadge.
Definition: Ihm.cpp:212
#define MESSAGE_ERREUR_DEPASSEMENT_QUANTITE
Definition: Ihm.h:37
Ui::Ihm * ui
contenu de l&#39;interface utilisateur
Definition: Ihm.h:102
void mettreAJourListeArticles(QVector< QStringList > articlesTrouves)
Définition de la méthode mettreAJourListeArticles.
Definition: Ihm.cpp:282
void traiterDemandeDeConnexion(bool reponse, QString message)
Définition de la méthode traiterDemandeDeConnexion.
Definition: Ihm.cpp:232
int getNumero() const
Définition de la méthode getNumero.
Definition: Casier.cpp:60
La classe Casier gère le casier contenant des articles.
Definition: Casier.h:32
void rechercherArticle()
Définition de la méthode rechercherArticle.
Definition: Ihm.cpp:261
void activerRecherche()
Définition de la méthode traiterDemandeDeConnexion.
Definition: Ihm.cpp:248
~Ihm()
Destructeur de la classe Ihm.
Definition: Ihm.cpp:67
void placerCasier(Casier *casier)
Définition de la méthode placerCasier.
Definition: Ihm.cpp:87
void selectionnerArticle(int index)
Définition de la méthode selectionnerArticle.
Definition: Ihm.cpp:299
void effacerRechercheArticle()
[Ihm_rechercherArticle]
Definition: Ihm.cpp:272
#define APPLICATION
Definition: Ihm.h:34
void afficherInformationsArmoire(QStringList informationsArmoire)
Définition de la méthode afficherInformationsArmoire.
Definition: Ihm.cpp:106
#define NUMERO_CASIERS
Definition: Ihm.h:41
Fenêtre ???
Definition: Ihm.h:31
void authentifierParBadge()
Définition de la méthode authentifierParBadge.
Definition: Ihm.cpp:119
La classe QMainWindow fournit une fenêtre d&#39;application principale.
void allerFenetreBadge()
Définition de la méthode allerFenetreBadge.
Definition: Ihm.cpp:173
void changerDeFenetre(int fenetre)
Définition de la méthode changerDeFenetre.
Definition: Ihm.cpp:77
void identifiantDetecte(QString identifiant, QString motDePasse)
#define ARTICLE_DISPONIBLE
Definition: Ihm.h:40
void authentifierParIdentifiant()
Définition de la méthode authentifierParIdentifiant.
Definition: Ihm.cpp:141
Déclaration de la classe Armoire.
Fenêtre d&#39;authentifiaction par identifiant.
Definition: Ihm.h:30
void rechercherArticle(QString recherche)
Définition de la méthode rechercherArticle.
void deconnecterUtilisateur()
Méthode qui permet la déconnexion de l&#39;utilisateur.
Definition: Supervision.cpp:76
QStringList getInformationsArmoire()
Définition de la méthode getInformationsArmoire.
Déclaration de la classe Ihm.
Definition: Ihm.h:65
Déclaration de la classe Supervision.
void selectionnerArticle(QString nomArticle)
[Supervision_rechercherArticle]
void afficherDonneesArticleSelectionne(QStringList donneesArticle)
Définition de la méthode afficherDonneesArticleSelectionne.
Definition: Ihm.cpp:315
void allerFenetreMenu()
Définition de la méthode allerFenetreMenu.
Definition: Ihm.cpp:194
void allerFenetreIdentifiant()
Définition de la méthode allerFenetreIdentifiant.
Definition: Ihm.cpp:184
void creerListeArticles(const QVector< QStringList > &articlesTrouves)
Définition de la méthode creerListeArticles.
Definition: Ihm.cpp:381
La classe QWidget est la classe de base de tous les objets graphiques d&#39;interface utilisateur...
Ihm(QWidget *parent=nullptr)
Constructeur de la classe Ihm.
Definition: Ihm.cpp:29
void deconnecterUtilisateur()
Définition de la méthode deconnecterUtilisateur.
Definition: Ihm.cpp:163