Code_TYMPAN  4.4.0
Industrial site acoustic simulation
TYResultatWidget.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) <2012-2024> <EDF-DTG> <FRANCE>
3  * This file is part of Code_TYMPAN (R).
4  * Code_TYMPAN (R) is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  * Code_TYMPAN (R) is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11  * See the GNU General Public License for more details.
12  * You should have received a copy of the GNU General Public License along
13  * with Code_TYMPAN (R). If not, see <https://www.gnu.org/licenses/>.
14  */
15 
22 #ifndef __TY_RESULTAT_WIDGET__
23 #define __TY_RESULTAT_WIDGET__
24 
25 #include <qwidget.h>
26 // Added by qt3to4:
27 #include <QGridLayout>
28 #include <QLabel>
29 #include "TYWidget.h"
30 
31 class TYResultat;
32 class TYLineEdit;
33 class QGridLayout;
34 class QPushButton;
35 class QTableWidget;
36 class QTableWidgetItem;
37 class QComboBox;
38 class QRadioButton;
39 class QButtonGroup;
40 class QPrinter;
41 class TYSpectre;
42 class OSpectre;
43 class TYCalcul;
44 
45 #include <string>
46 
47 // Include QXlsx headers
48 #include "xlsxdocument.h"
49 #include "xlsxworkbook.h"
50 
51 typedef struct
52 {
53  int indice;
54  double resultat;
55  std::string name;
56 } TYStructIndiceResultat; // Utilise pour trier les resultats
57 
63 class TYResultatWidget : public TYWidget
64 {
65  Q_OBJECT
66 
68 
69  enum color
70  {
74  RED
75  };
76 
77  // Methodes
78 public:
82  TYResultatWidget(TYResultat* pElement, QWidget* _pParent = nullptr);
86  virtual ~TYResultatWidget();
87 
91  void sortRes(int col);
92 
96  void sortName();
97 
101  void initTabSort(int col = 1);
102 
106  void showContribTreeDialog(int col);
107 
113  void exportContributionsTableToSheet(QXlsx::Document& documentQXlsx);
114 
122  void writeContributionsTableRow(int columnCount, int row, QXlsx::Document& documentQXlsx);
123 
129  int getXlsxRow(int row);
130 
136  void exportCumulatedContributionsTableToSheet(QXlsx::Document& xlsx);
137 
143  void adjustXlsxDocumentColumnWidths(int columnCount, QXlsx::Document& documentQXlsx);
144 
152  void writeCumulatedContributionsTableRow(int columnCount, int row, QXlsx::Document& documentQXlsx);
153 
159  void writeRowHeadersToSheet(int row, QXlsx::Document& xlsx);
160 
166  void writeColHeadersToSheet(QXlsx::Document& xlsx, int columnCount);
167 
173  void getFormatFromContributionsTable(QTableWidgetItem* item, QXlsx::Format& format);
174 
175 private:
178  void updateHeaderLabel();
179 
180 public slots:
181  virtual void updateContent();
182  virtual void apply();
183 
187  void changeSubstCalcul(int calcul);
188 
192  void updateTable();
193 
197  void exportExcelXlsx();
198 
202  void exportSpectre();
203 
207  void exportExcel();
208 
212  void print();
213 
217  void changeAffichage(int select);
218 
220  void changeOperation(int select);
221 
226 
227 protected slots:
231  virtual void contextMenuEvent(QContextMenuEvent* e);
232 
234  virtual void setFrequency(int freq);
235 
236  void sortCol(int col);
237 
238 private:
240  void decorsSynthese(QTableWidgetItem* pItem, const int& row, const int& col, const bool& isColored,
241  OSpectre& spectre1, OSpectre& spectre2);
242 
252  void decorsContributions(QTableWidgetItem* pItem, const int& row, const int& col, bool& isColored,
253  std::vector<int> couleurs);
254 
262  void displayColumn(TYCalcul* pCalcul, TYCalcul* pCalcOp, const int& col);
263 
264  TYSpectre getPuissanceElem(const unsigned int& i);
266 
276  std::vector<int> calcCumulatedContribution(const int& col, TYCalcul* pCalcul, TYCalcul* pCalcOp);
277 
279  void setCellAttributs(const int& row, const int& col, const OSpectre& spectre);
280 
281  // methode a remplir par Denis Thomasson
282  bool isPresenceTonaliteMarquee(const OSpectre& spectre);
283 
286  {
289  DBFREQ
290  };
291 
294  {
298  };
299 
301  void updateFreqList();
302 
304  double resuAffichage(OSpectre& spectre1, OSpectre& spectre2, bool& valid, const int& typeCase);
305 
307  OSpectre resuSpectre(OSpectre& spectre1, OSpectre& spectre2, const int& typeCase);
308 
310  OSpectre getSpectre(const int& row, const int& col, TYCalcul* pCalcul);
311 
319  double calcPct(double val);
320 
328  void sortColumnsByHeaderText(Qt::SortOrder order = Qt::AscendingOrder,
329  Qt::CaseSensitivity cs = Qt::CaseInsensitive, bool localeAware = true);
330 
331  // Membres
332 protected:
333  QGridLayout* _resultatLayout;
334  QTableWidget* _pTable;
335 
336  // Choix de l'affichage dBA, dBLin ou par frequence
337  QRadioButton* _radioButtonDBA;
338  QRadioButton* _radioButtonDBLIN;
339  QRadioButton* _radioButtonDBFRQ;
340 
342  QComboBox* _comboBoxFreq;
343 
350  QLabel* _pLabelPctBas;
351  QLabel* _pLabelPctMoy;
352  QLabel* _pLabelPctHaut;
353  QLabel* _pLabelPct100;
354  QLabel* _pLabelPres;
355  QLabel* _pLabelLeqBas;
356  QLabel* _pLabelLeqMoy;
357  QLabel* _pLabelLeqHaut;
358  QLabel* _pLabelLeq100;
359  QLabel* _pLabelEner;
361 
363  QButtonGroup* _buttonGroupOperation;
364  QRadioButton* _radioButtonNoOp; // Pas d'operation
365  QRadioButton* _radioButtonDelta; // Difference entre les deux resultats
366  QRadioButton* _radioButtonEmergence; // Emergence par rapport a bruit de fond
367  QRadioButton* _radioButtonAmbiant; // Bruit ambiant
368 
369  // Choix du calcul associe au resultat
371 
372  // Capacite d'impression
373  QPrinter* _printer;
374 
375  // Export EXCEL
376  QPushButton* _pButtonExportXlsx;
377  QPushButton* _pButtonExport;
378  QPushButton* _pButtonExportSpectre;
379 
382 
385 
387  double _freq;
388 
390  unsigned int _nbSources;
391  unsigned int _nbRecepteurs;
392 
394  unsigned int _nbLignes;
395  unsigned int _nbColonnes;
396 
401 
405  std::vector<std::vector<double>> _cumulatedContribs;
406 };
407 
408 #endif // __TY_RESULTAT_WIDGET__
outil IHM pour un objet metier de type TYElement (fichier header)
#define TY_DECL_METIER_WIDGET(classname)
Definition: TYWidget.h:31
Calculation program.
Definition: TYCalcul.h:50
classe de l'objet IHM pour un resultat
void slotContributionLineEditChanged()
double calcPct(double val)
OSpectre resuSpectre(OSpectre &spectre1, OSpectre &spectre2, const int &typeCase)
Calcul du spectre en fonction du contexte (option de calcul)
QRadioButton * _radioButtonDelta
unsigned int _nbLignes
Nombre de ligne, de colonnes.
virtual void updateContent()
QRadioButton * _radioButtonDBLIN
QGridLayout * _resultatLayout
void adjustXlsxDocumentColumnWidths(int columnCount, QXlsx::Document &documentQXlsx)
Ajuste automatique les largeurs des colonnes du fichier Excel.
void writeCumulatedContributionsTableRow(int columnCount, int row, QXlsx::Document &documentQXlsx)
Ecrit une ligne du cumul des contributions des sources aux récepteurs dans un fichier Excel au forma...
int _choixOperation
Type d'operation choisie.
virtual void setFrequency(int freq)
CHangement de la frequence de travail.
double _freq
Frequence de travail.
TYLineEdit * _pContributionLineEditHaut
QPushButton * _pButtonExportXlsx
void writeColHeadersToSheet(QXlsx::Document &xlsx, int columnCount)
Ecrit les en-têtes des colonnes dans la feuille Excel sélectionnée.
unsigned int _nbColonnes
void exportCumulatedContributionsTableToSheet(QXlsx::Document &xlsx)
Enregistre le cumul des contributions des sources aux récepteurs dans un fichier Excel au format xls...
double resuAffichage(OSpectre &spectre1, OSpectre &spectre2, bool &valid, const int &typeCase)
Calcul du contenu de la cellule en fonction du contexte (option de calcul)
QRadioButton * _radioButtonAmbiant
void updateFreqList()
Remplissage du combo des frequences.
QWidget * _pHorizontalLineWidget
void changeAffichage(int select)
QTableWidget * _pTable
QRadioButton * _radioButtonNoOp
TYCalcul * getSelectedSubstCalcul()
void changeSubstCalcul(int calcul)
QPushButton * _pButtonExportSpectre
TYResultatWidget(TYResultat *pElement, QWidget *_pParent=nullptr)
QRadioButton * _radioButtonEmergence
QPushButton * _pButtonExport
void decorsContributions(QTableWidgetItem *pItem, const int &row, const int &col, bool &isColored, std::vector< int > couleurs)
void sortColumnsByHeaderText(Qt::SortOrder order=Qt::AscendingOrder, Qt::CaseSensitivity cs=Qt::CaseInsensitive, bool localeAware=true)
Classe les récepteurs par ordre alphabétique dans la vue. Le modèle n'est pas modifié
void initTabSort(int col=1)
TYLineEdit * _pContributionLineEditBas
void writeRowHeadersToSheet(int row, QXlsx::Document &xlsx)
Ecrit les en-têtes des lignes dans la feuille Excel sélectionnée.
void decorsSynthese(QTableWidgetItem *pItem, const int &row, const int &col, const bool &isColored, OSpectre &spectre1, OSpectre &spectre2)
Coloration de la cellule en fonction du contexte pour la synthese, pour le reste du tableau.
TYSpectre getPuissanceElem(const unsigned int &i)
int _choixAffichage
Mode d'affichage (dBA, dBLin, dB(f))
OSpectre getSpectre(const int &row, const int &col, TYCalcul *pCalcul)
Recherche du spectre associe a une ligne et une colonne pour un calcul.
virtual void contextMenuEvent(QContextMenuEvent *e)
void showContribTreeDialog(int col)
TYStructIndiceResultat * _tabSortedRes
void writeContributionsTableRow(int columnCount, int row, QXlsx::Document &documentQXlsx)
Ecrit une ligne des contributions partielles des sources au récepteur dans un fichier Excel au forma...
unsigned int _nbRecepteurs
void displayColumn(TYCalcul *pCalcul, TYCalcul *pCalcOp, const int &col)
bool isPresenceTonaliteMarquee(const OSpectre &spectre)
int getXlsxRow(int row)
Renvoie l'index de ligne dans Excel en fonction de l'index de ligne dans la table des résultats.
typeCellule
Different type de cellule.
QRadioButton * _radioButtonDBFRQ
std::vector< int > calcCumulatedContribution(const int &col, TYCalcul *pCalcul, TYCalcul *pCalcOp)
void exportContributionsTableToSheet(QXlsx::Document &documentQXlsx)
Enregistre les contributions partielles des sources aux récepteurs dans un fichier Excel au format x...
unsigned int _nbSources
Nombre de sources, de recepteurs.
QComboBox * _comboBoxFreq
Combo pour le choix de la frequence de travail.
void getFormatFromContributionsTable(QTableWidgetItem *item, QXlsx::Format &format)
Récupère le format de la cellule Ã&#160; partir de la table de résultats.
QComboBox * _comboBoxSubstCalcul
TYLineEdit * _pContributionLineEditMoy
std::vector< std::vector< double > > _cumulatedContribs
QRadioButton * _radioButtonDBA
virtual void apply()
QButtonGroup * _buttonGroupOperation
Choix du type de calcul.
void changeOperation(int select)
Changement du type d'operation.
void setCellAttributs(const int &row, const int &col, const OSpectre &spectre)
Definition des attributs d'une cellule (couleur de fond, police)
optionsAffichage
Differents etats possibles de l'affichage (pourra etre complete ulterieurement)
Classe qui Permet de centraliser les resultats d'un calcul acoustique.
Definition: TYResultat.h:48
classe de l'objet IHM pour un objet metier de type TYElement
Definition: TYWidget.h:43