22 #include <qradiobutton.h>
23 #include <qbuttongroup.h>
24 #include <qtablewidget.h>
25 #include <qcombobox.h>
27 #include <qfiledialog.h>
31 #include <QHBoxLayout>
33 #include <QGridLayout>
36 #include <QHeaderView>
38 #include <QtPrintSupport/QPrinter>
39 #include <QtPrintSupport/QPrintDialog>
54 #define TR(id) OLocalizator::getString("TYResultatWidget", (id))
57 static int compareRes(
const void* elem1,
const void* elem2);
60 static int compareName(
const void* elem1,
const void* elem2);
74 setWindowTitle(
TR(
"id_caption"));
81 QGroupBox* groupBoxFlag =
new QGroupBox(
this);
82 groupBoxFlag->setTitle(
TR(
""));
83 QGridLayout* groupBoxFlagLayout =
new QGridLayout();
84 groupBoxFlag->setLayout(groupBoxFlagLayout);
87 QButtonGroup* buttonGroupALIN =
new QButtonGroup();
106 QLabel* pLabelContribution =
new QLabel(
this);
107 pLabelContribution->setText(
TR(
"id_label_contribution"));
114 QGridLayout* groupBoALINLayout =
new QGridLayout();
115 groupBoALINLayout->addWidget(pLabelContribution, 0, 0, Qt::AlignRight);
124 QGroupBox* groupBoxALIN =
new QGroupBox();
125 groupBoxALIN->setTitle(
TR(
""));
126 groupBoxALIN->setLayout(groupBoALINLayout);
128 groupBoxFlagLayout->addWidget(groupBoxALIN, 0, 0);
131 void (QComboBox::*_qComboBox_activated)(int) = &QComboBox::activated;
132 void (QButtonGroup::*_qButtonGroup_clicked)(int) = &QButtonGroup::idClicked;
151 QLabel* labelSubstCalcul =
new QLabel(
this);
152 labelSubstCalcul->setText(
TR(
"id_subst_calcul"));
156 QGridLayout* groupBoxCalculLayout =
new QGridLayout();
161 groupBoxCalculLayout->addWidget(labelSubstCalcul, 0, 1, Qt::AlignRight);
164 QGroupBox* groupBoxCalcul =
new QGroupBox();
165 groupBoxCalcul->setTitle(
TR(
""));
166 groupBoxCalcul->setLayout(groupBoxCalculLayout);
168 groupBoxFlagLayout->addWidget(groupBoxCalcul, 0, 1);
174 _pTable->setSelectionMode(QAbstractItemView::NoSelection);
175 _pTable->setEditTriggers(QAbstractItemView::NoEditTriggers);
178 QGroupBox* pGroupBox =
new QGroupBox(
this);
179 QHBoxLayout* pGroupBoxLayout =
new QHBoxLayout();
180 pGroupBox->setLayout(pGroupBoxLayout);
190 QPushButton* pButtonPrint =
new QPushButton(
TR(
"id_print"));
191 pGroupBoxLayout->addWidget(pButtonPrint);
196 QHeaderView* entetesRecepteurs =
198 entetesRecepteurs->resizeSections(QHeaderView::ResizeToContents);
251 _nbSources =
static_cast<int>(getElement()->getNbOfSources());
252 _nbRecepteurs =
static_cast<int>(getElement()->getNbOfRecepteurs());
263 for (
unsigned int row = 0; row <
_nbLignes; row++)
265 _pTable->setVerticalHeaderItem(row,
new QTableWidgetItem(QString().setNum(row)));
271 _pTable->setHorizontalHeaderItem(1,
new QTableWidgetItem(QString(
"LW")));
276 if (getElement()->getRecepteur(col) == NULL)
281 QString titre = getElement()->getRecepteur(col)->getName();
282 _pTable->setHorizontalHeaderItem(col + 2,
new QTableWidgetItem(titre));
288 _pTable->setColumnHidden(1, getElement()->isLWHidden());
298 _pTable->setHorizontalHeaderItem(0,
new QTableWidgetItem(QString(
"dBZ")));
301 strVal = QString(
"dB(") + QString(
"%1").arg(
_freq) + QString(
" Hz)");
302 _pTable->setHorizontalHeaderItem(0,
new QTableWidgetItem(strVal));
306 _pTable->setHorizontalHeaderItem(0,
new QTableWidgetItem(QString(
"dBA")));
327 for (
int i = 0; i < listCalcul.size(); i++)
369 QString qFileName = QFileDialog::getSaveFileName(
this,
"Choose a file",
"",
"CSVFile (*.csv)");
371 if (!qFileName.isNull())
373 if (qFileName.right(3) !=
"csv")
391 QString qFileName = QFileDialog::getSaveFileName(
this,
"Choose a file",
"",
"CSVFile (*.csv)");
393 if (!qFileName.isNull())
395 if (qFileName.right(3) !=
"csv")
409 QPoint point =
_pTable->mapFrom(
this, e->pos());
410 if ((point.x() >= 0) && (point.y() >= 0) && (point.x() <=
_pTable->width()) &&
411 (point.y() <=
_pTable->height()))
413 QPoint resPoint = QPoint(point.x(), point.y() -
_pTable->horizontalHeader()->height());
414 QTableWidgetItem* item =
_pTable->itemAt(resPoint);
417 int row =
_pTable->indexAt(resPoint).row();
418 row = row >= 0 ? row : 0;
419 int col =
_pTable->indexAt(resPoint).column();
420 col = col >= 0 ? col : 0;
429 spectre = spectre.
toDB();
431 QAction *editSource = NULL, *editRecepteur = NULL, *editSpectre = NULL, *editContrib = NULL;
433 QMenu* pPopup =
new QMenu(
this);
434 if ((row == 0) && (col > 1))
438 editRecepteur = pPopup->addAction(
TR(
"id_popup_see_recepteur"));
439 pPopup->addSeparator();
443 editSpectre = pPopup->addAction(
TR(
"id_popup_see_spectre"));
447 if (getElement()->getPartialState())
449 editContrib = pPopup->addAction(
TR(
"id_popup_see_contrib"));
452 else if ((row > 0) && (col > 1))
454 editSpectre = pPopup->addAction(
TR(
"id_popup_see_spectre"));
455 pPopup->addSeparator();
456 editSource = pPopup->addAction(
TR(
"id_popup_see_source"));
457 pPopup->addSeparator();
458 editRecepteur = pPopup->addAction(
TR(
"id_popup_see_recepteur"));
460 else if ((row > 0) && (col == 0))
462 editSource = pPopup->addAction(
TR(
"id_popup_see_source"));
464 else if ((row > 0) && (col == 1))
466 editSource = pPopup->addAction(
TR(
"id_popup_see_source"));
469 QAction* ret = pPopup->exec(
_pTable->mapToGlobal(point));
473 if (ret == editSource)
475 getElement()->getSource(ligne)->edit(
this);
477 else if (ret == editRecepteur)
487 if (pSpectre ==
nullptr)
502 pSpectre->edit(
this);
510 else if (ret == editSpectre)
516 else if (ret == editContrib)
530 if (pDialog->exec() == QDialog::Accepted)
532 QPrintDialog dialog(
_printer,
this);
539 int mid = int(
_printer->width() / 2) -
540 int(paint.fontMetrics().horizontalAdvance(pDialog->
_lineEditTete->text()) / 2);
543 int(paint.fontMetrics().horizontalAdvance(pDialog->
_lineEditPied->text()) / 2);
545 paint.setFont(QFont(
"Helvetica", 15, QFont::Bold));
547 int(paint.fontMetrics().horizontalAdvance(pDialog->
_lineEditTitre->text()) / 2);
549 paint.setFont(QFont());
551 int sizeX = 120, sizeY = 25;
552 int ymax = int(
double(
_printer->height()) * 4 / 5 / (
_pTable->rowCount() + 1));
557 int x = int(
double(
_printer->width() - sizeX * (
_pTable->columnCount())) / 2);
558 int y = int((
double(
_printer->height()) - sizeY * (
_pTable->rowCount() + 3)));
561 for (i = 0; i <
_pTable->horizontalHeader()->count(); i++)
563 paint.drawText(x, y,
_pTable->horizontalHeaderItem(i)->text());
564 paint.translate(sizeX, 0);
567 paint.translate(-
_pTable->columnCount() * sizeX, 0);
568 paint.translate(0, sizeY);
570 for (i = 0; i <
_pTable->rowCount(); i++)
572 for (
int j = 0; j <
_pTable->columnCount(); j++)
576 paint.drawText(x, y,
_pTable->item(i, j)->text());
579 paint.translate(sizeX, 0);
581 paint.translate(0, sizeY);
582 paint.translate(-
_pTable->columnCount() * sizeX, 0);
636 QString titre =
TR(
"id_entete_synthese");
637 _pTable->setItem(0, 0,
new QTableWidgetItem(titre));
639 _pTable->setColumnWidth(0, 140);
641 for (
unsigned int row = 1; row <
_nbLignes; row++)
649 QString titre = pSource->
getName();
650 _pTable->setItem(row, 0,
new QTableWidgetItem(titre));
651 _pTable->setRowHeight(row, 30);
659 for (
unsigned int row = 0; row <
_nbLignes; row++)
661 for (
unsigned int col = 1; col <
_nbColonnes; col++)
673 if ((!pCalcul) || (col == 0))
709 spectre = pResultat->
getSpectre(pRecepteur, pSource);
710 spectre = spectre.
toDB();
729 for (
unsigned int i = 0; i < getElement()->getNbOfSources(); i++)
734 if (getElement() && getElement()->getSource(i))
740 spectre2 =
getSpectre(row, col, pSubstCalcul);
787 TYElement* pElement = getElement()->getSource(i);
797 std::map<TYElement*, LPTYSpectre>& mapElementSpectre = getElement()->getMapElementSpectre();
798 TYSpectre* puissance = mapElementSpectre[pElement];
802 spectre = *puissance;
814 pDlg->
set(getElement(), pPoint);
836 QTableWidgetItem* pItem = NULL;
847 msg = QString(
"%1").arg(valeur, 7,
'f', 1);
848 pItem =
new QTableWidgetItem(msg);
850 _pTable->setItem(row, col, pItem);
851 _pTable->setRowHeight(row, 30);
857 msg = QString(
"%1").arg(valeur, 7,
'f', 1);
858 pItem =
new QTableWidgetItem(msg);
860 _pTable->setItem(row, col, pItem);
861 _pTable->setRowHeight(row, 30);
868 msg = QString(
"%1").arg(valeur, 7,
'f', 1);
869 pItem =
new QTableWidgetItem(msg);
871 _pTable->setItem(row, col, pItem);
872 _pTable->setRowHeight(row, 30);
879 double val1 = 0.0, val2 = 0.0;
946 return spectre1.
subst(spectre2);
965 pItem->setBackground(QBrush(QColor(127, 127, 127)));
971 pItem->setBackground(QBrush(QColor(255, 255, 255)));
980 spectre = getElement()->getAmbiant(spectre1, spectre2);
989 pItem->setBackground(QBrush(QColor(255, 255, 0)));
999 pItem->setBackground(QBrush(QColor(127, 127, 127)));
1005 pItem->setBackground(QBrush(QColor(255, 255, 255)));
1009 double valeur = pItem->text().toDouble();
1010 double global =
_pTable->item(0, col)->text().toDouble();
1015 pItem->setBackground(QBrush(QColor(255, 204, 0)));
1019 int imaxi =
static_cast<int>(
_max[col - 2] * 10);
1020 int ivaleur =
static_cast<int>(valeur * 10);
1021 if (ivaleur >= (imaxi - 1))
1023 pItem->setBackground(QBrush(QColor(255, 0, 0)));
1031 for (
unsigned int i = 0; i <
tabFreq.size(); i++)
1034 str.setNum(
tabFreq[i],
'f', 1);
1060 double tmpMax = -10000, valeur = 0.0;
1063 for (
unsigned int col = 2; col <
_nbColonnes; col++)
1067 for (
unsigned int row = 1; row <
_nbLignes; row++)
1072 tmpMax = valeur > tmpMax ? valeur : tmpMax;
1075 _max[col - 2] = tmpMax;
1079 int compareRes(
const void* elem1,
const void* elem2)
1085 int sgn = int(res / fabs(res));
1089 int compareName(
const void* elem1,
const void* elem2)
std::vector< LPTYCalcul > TYTabLPCalcul
Collection de pointeurs de TYCalcul.
outil IHM pour une entrée utilisateur (fichier header)
Boite de dialogue des parametres d'impression (fichier header)
Boite de dialogue pour la representation par une arborescence des elements contribuant au resultat d'...
const std::vector< double > tabFreq
OTabFreq TYTabFreq
Collection des frequences.
static OPrototype * safeDownCast(OPrototype *pObject)
bool isA(const char *className) const
OSpectreAbstract & subst(const OSpectreAbstract &spectre) const
Arithmetic subtraction of two spectrums in one-third Octave.
double valGlobDBA() const
Compute the global value dB[A] of a one-third Octave spectrum.
double valGlobDBLin() const
Compute the global value dB[Lin] of a one-third Octave spectrum.
void setType(TYSpectreType type)
Set the spectrum type.
void setValid(const bool &valid=true)
OSpectreAbstract & toDB() const
Converts to dB.
bool isValid() const
Check the spectrum validity. Invalidity is caused by: corrupted data, impossible calculation.
bool isTonalite() const
Existence d'une tonalite marquee.
double getValueReal(double freq)
static int getIndice(const double &freq)
Return the index associated to a frequency.
int getState()
Get calculation state.
LPTYSpectre getSpectre(const TYUUID &id_pt)
const LPTYResultat getResultat() const
Get result.
TYElement * getParent() const
const TYUUID & getID() const
virtual QString getName() const
Classe de definition d'un point de calcul.C'est une classe derivee a TYPoint avec en plus un spectrep...
classe pour une boite de dialogue des parametres d'impression.
QGroupBox * _groupBoxCalcul
QLineEdit * _lineEditPied
QLineEdit * _lineEditTete
QGroupBox * _groupBoxProjet
QLineEdit * _lineEditTitre
classe de definition d'un projet.
TYTabLPCalcul & getListCalcul()
Set/Get de la liste des Calcul.
Boite de dialogue pour la representation par une arborescence des elements contribuant au resultat d'...
void set(LPTYResultat pResultat, LPTYPointCalcul pPtCalcul)
Classe qui Permet de centraliser les resultats d'un calcul acoustique.
LPTYPointCalcul getRecepteur(const int &indexRecepteur)
Retourne le recepteur corresponadnt a l'indice passe.
void saveValue(const QString &filename, const int &affichage, double freq=100)
Sauvegarde des valeurs dans un fichier affichage : false -> dBA et true -> dBLin.
LPTYElement getSource(const int &indexSource)
Retourne la source correspondant a l'indice passe.
void saveSpectre(const QString &filename, TYCalcul *pSubstCalcul=NULL)
Sauvegarde des spectres dans un fichier.
OSpectre getSpectre(TYElement *pRecepteur, TYElement *pSource)
Retourne un spectre pour un couple S-R.
virtual void setIsReadOnly(bool flag)
Set/Get du flag _isReadOnly.
static const TYTabFreq getTabFreqNorm(TYSpectreForm form=SPECTRE_FORM_TIERS)