Code_TYMPAN  4.4.0
Industrial site acoustic simulation
TYSpectreWidget.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) <2012> <EDF-R&D> <FRANCE>
3  * This program is free software; you can redistribute it and/or modify
4  * it under the terms of the GNU General Public License as published by
5  * the Free Software Foundation; either version 2 of the License, or
6  * (at your option) any later version.
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10  * See the GNU General Public License for more details.
11  * You should have received a copy of the GNU General Public License along
12  * with this program; if not, write to the Free Software Foundation, Inc.,
13  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
14  */
15 
23 #include <qtablewidget.h>
24 #include <qtabwidget.h>
25 #include <qpainter.h>
26 #include <QtPrintSupport/QPrinter>
27 #include <QtPrintSupport/QPrintDialog>
28 #include <qfile.h>
29 #include <qtextstream.h>
30 #include <qfiledialog.h>
31 #include <qradiobutton.h>
32 #include <qpixmap.h>
33 #include <qbuttongroup.h>
34 #include <qmessagebox.h>
35 #include <qheaderview.h>
36 
37 #include "TYSpectreWidget.h"
38 
42 #include "TYHistoWidget.h"
43 #include "TYCourbeWidget.h"
44 
45 // Added by qt3to4:
46 #include <QHBoxLayout>
47 #include <QLabel>
48 #include <QGridLayout>
49 #include <QFrame>
50 #include <QBoxLayout>
51 
52 using namespace Qt;
53 
54 #define TR(id) OLocalizator::getString("TYSpectreWidget", (id))
55 
56 TYSpectreWidget::TYSpectreWidget(TYSpectre* pElement, QWidget* _pParent /*=NULL*/)
57  : TYWidget(pElement, _pParent)
58 {
59  // Par defaut precision prend la valeur affectee a la classe TYSpectre pour le stockage en XML
61 
62  // On utilise une copie du spectre associe a ce widget
63 
64  // Et on conserve ce spectre par ailleurs
65  _pTmpSpectre = pElement;
66 
68 
69  _etatSpectre = "tiersOctave";
70 
71  resize(450, 700);
72  setWindowTitle(TR("id_caption"));
73 
74  _elmW = new TYElementWidget(getElement(), this);
75 
76  _spectreLayout = new QGridLayout();
77 
78  _spectreLayout->addWidget(_elmW, 0, 0);
79 
80  _groupBox = new QGroupBox(this);
81  _groupBox->setTitle(TR(""));
82  _groupBoxLayout = new QGridLayout();
83  _groupBoxLayout->setAlignment(Qt::AlignTop);
84  _groupBox->setLayout(_groupBoxLayout);
85 
86  _buttonGroup = new QButtonGroup();
87  _buttonGroup->setExclusive(true);
88 
89  _radioButtonTiers = new QRadioButton();
90  _radioButtonTiers->setText(TR("id_radiobutton_tiers"));
91 
92  _radioButtonOctave = new QRadioButton();
93  _radioButtonOctave->setText(TR("id_radiobutton_octave"));
94  _radioButtonOctave->setChecked(false);
95 
96  QGridLayout* groupBoxRadioLayout = new QGridLayout();
97  groupBoxRadioLayout->addWidget(_radioButtonTiers, 0, 0);
98  groupBoxRadioLayout->addWidget(_radioButtonOctave, 0, 1);
99 
100  QGroupBox* groupBoxRadio = new QGroupBox();
101  groupBoxRadio->setTitle("");
102  groupBoxRadio->setLayout(groupBoxRadioLayout);
103 
104  _radioButtonTiers->setChecked(true);
105 
106  _groupBoxLayout->addWidget(groupBoxRadio, 0, 0, 1, 2);
107 
108  _lineEditRq = new QLineEdit(_groupBox);
109  _lineEditRq->setText(getElement()->getRemarque());
110  _groupBoxLayout->addWidget(_lineEditRq, 2, 1);
111 
112  _labeRq = new QLabel(_groupBox);
113  _labeRq->setText(TR("id_rq_label"));
114  _groupBoxLayout->addWidget(_labeRq, 2, 0);
115 
116  _comboBoxType = new QComboBox(_groupBox);
117  _comboBoxType->insertItem(0, TR("id_spectre_type_att"));
118  _comboBoxType->insertItem(1, TR("id_spectre_type_abso"));
119  _comboBoxType->insertItem(2, TR("id_spectre_type_lw"));
120  _comboBoxType->insertItem(3, TR("id_spectre_type_lp"));
121  _comboBoxType->insertItem(4, TR("id_spectre_type_autre"));
122  _comboBoxType->setCurrentIndex(getElement()->getType());
123  _groupBoxLayout->addWidget(_comboBoxType, 1, 1);
124 
125  _labelType = new QLabel(_groupBox);
126  _labelType->setText(TR("id_type_label"));
127  _groupBoxLayout->addWidget(_labelType, 1, 0);
128 
129  _spectreLayout->addWidget(_groupBox, 1, 0);
130 
131  // Tableau
132  _tableau = new QTableWidget();
133  QStringList stringList;
134  stringList.append(TR("id_freq"));
135  stringList.append("");
136  _tableau->setHorizontalHeaderLabels(stringList);
137  _tableau->setColumnCount(2);
138  _nbFreq = pElement->getNbValues();
139 
140  // histo
141  _histoWidget = new TYHistoWidget(this, false);
142  // courbe
143  _courbeWidget = new TYCourbeWidget(this, false);
144 
145  _tabWidget = new QTabWidget(this);
146  _tabWidget->insertTab(0, _tableau, TR("id_tableau"));
147  _tabWidget->insertTab(1, _histoWidget, TR("id_histogramme"));
148  _tabWidget->insertTab(2, _courbeWidget, TR("id_courbe"));
149 
150  _spectreLayout->addWidget(_tabWidget, 2, 0);
151 
152  QGroupBox* buttonGroupBox = new QGroupBox(this);
153  buttonGroupBox->setTitle(TR(""));
154  QGridLayout* buttonGroupBoxLayout = new QGridLayout();
155  buttonGroupBox->setLayout(buttonGroupBoxLayout);
156  buttonGroupBoxLayout->setAlignment(Qt::AlignTop);
157 
158  _pushButtonImport = new QPushButton(buttonGroupBox);
159  _pushButtonImport->setText(TR("id_import_csv"));
160  buttonGroupBoxLayout->addWidget(_pushButtonImport, 0, 0);
161 
162  _pushButtonExport = new QPushButton(buttonGroupBox);
163  _pushButtonExport->setText(TR("id_export_csv"));
164  buttonGroupBoxLayout->addWidget(_pushButtonExport, 0, 1);
165 
166  _pushButtonPrint = new QPushButton(buttonGroupBox);
167  _pushButtonPrint->setText(TR("id_print"));
168  buttonGroupBoxLayout->addWidget(_pushButtonPrint, 0, 2);
169 
170  _pushButtonFit = new QPushButton(buttonGroupBox);
171  _pushButtonFit->setText(TR("id_fit"));
172  _pushButtonFit->setCheckable(true);
173  _pushButtonFit->setEnabled(false);
174  buttonGroupBoxLayout->addWidget(_pushButtonFit, 0, 5);
175 
176  _spectreLayout->addWidget(buttonGroupBox, 3, 0);
177 
178  update();
179 
180  _printer = new QPrinter();
181 
182  connect(_radioButtonTiers, &QRadioButton::clicked, this, &TYSpectreWidget::changeOctave);
183  connect(_radioButtonOctave, &QRadioButton::clicked, this, &TYSpectreWidget::changeOctave);
184  connect(_pushButtonExport, &QPushButton::clicked, this, &TYSpectreWidget::exportCsv);
185  connect(_pushButtonImport, &QPushButton::clicked, this, &TYSpectreWidget::importCsv);
186  connect(_pushButtonPrint, &QPushButton::clicked, this, &TYSpectreWidget::print);
187  connect(_tableau, &QTableWidget::cellChanged, this, &TYSpectreWidget::tabValueChanged);
188  connect(_tabWidget, &QTabWidget::currentChanged, this, &TYSpectreWidget::tabChanged);
189 
190  setLayout(_spectreLayout);
191  updateContent();
192  // changeOctave();
193 }
194 
196 {
197  delete _printer;
198 }
199 
201 {
202  _elmW->updateContent();
203 
204  _lineEditRq->setText(_pTmpSpectre->getRemarque());
205  _comboBoxType->setCurrentIndex(_pTmpSpectre->getType());
206 
207  _comboBoxType->setEnabled(false);
208 
209  // Affichage de l'unite
210  QString unite = "dB";
212  {
213  unite = "";
214  }
215 
217 
218  QStringList stringList;
219  stringList.append(TR("id_freq"));
220  stringList.append(unite);
221  _tableau->setHorizontalHeaderLabels(stringList);
222 
223  // Mise a jour du tableau
225 
226  // Inactivation de la colonne des frequences (toujours !)
227  for (int i = 0; i < _tableau->rowCount(); i++)
228  {
229  _tableau->item(i, 0)->setFlags(QFlag(0));
230  }
231 
232  // Spectre en read only si le mode de calcul est "Calcule"
234  {
235  setContentEnabled(false);
236  }
237 }
238 
240 {
241  _elmW->apply();
242 
243  getElement()->setRemarque(_lineEditRq->text());
244  getElement()->setType((TYSpectreType)_comboBoxType->currentIndex());
245 
246  // On repasse le spectre en Tiers d'octave si necessaire
247  if (!_radioButtonTiers->isChecked())
248  {
249  _radioButtonTiers->setChecked(true);
250  changeOctave();
251  }
252 
253  // Mis a jour du spectre a partir du tableau
255 
256  emit modified();
257 }
258 
259 void TYSpectreWidget::tabValueChanged(int row, int col)
260 {
261  if (col == 1 && _tableau->item(row, col) != nullptr)
262  {
263  // Translate input value to double to see if it's a correct number
264  bool ok = false;
265  _tableau->item(row, col)->text().toDouble(&ok);
266 
267  // If value is not a valid number, get the original value in the spectrum and return
268  if (!ok)
269  {
270  _tableau->item(row, 1)->setText(
271  QString().setNum(_pTmpSpectre->getTabValReel()[row], 'f', _precision));
272  return;
273  }
274 
275  // Else, we copy value to all the selected cells
276  for (int i = 0; i < _nbFreq; i++)
277  {
278  if ((_tableau->item(i, col)) && ((_tableau->item(i, col))->isSelected()))
279  {
280  _tableau->item(i, col)->setText(_tableau->item(row, col)->text());
281  }
282  }
283 
284  _isModified = true;
285  }
286 }
287 
289 {
290  if (_tabWidget->currentWidget() == _courbeWidget)
291  {
292  _pushButtonFit->setEnabled(false);
293  }
294  else if (_tabWidget->currentWidget() == _histoWidget)
295  {
296  _pushButtonFit->setEnabled(false);
297  }
298  else
299  {
300  _pushButtonFit->setEnabled(false);
301  }
302 }
303 
305 {
306  for (int i = 0; i < _nbFreq; i++)
307  {
308  if (state)
309  {
310  _tableau->item(i, 1)->setFlags(Qt::ItemIsEditable);
311  }
312  else
313  {
314  _tableau->item(i, 1)->setFlags(QFlag(0));
315  }
316  }
317 
318  _pushButtonImport->setEnabled(state);
319 }
320 
322 {
323  std::vector<QString> tmp;
324 
325  QString qFileName = QFileDialog::getOpenFileName(this, "Choose a file", "", "CSV (*.csv)");
326 
327  if (!qFileName.isEmpty())
328  {
329  // Initialisation du tableau
330  resetTab();
331 
332  // On charge les donnees
333  if (!qFileName.endsWith("csv"))
334  {
335  qFileName += ".csv";
336  }
337 
338  QFile f(qFileName);
339  if (f.open(QIODevice::ReadOnly))
340  {
341  QTextStream s(&f);
342  QString txt;
343  int i = 0;
344  _tableau->setRowCount(0);
345 
346  while (!s.atEnd())
347  {
348  s >> txt;
349 
350  switch (i)
351  {
352  case 0:
353  break;
354  case 1: // On saute la ligne des labels
355  break;
356  default:
357  tmp.push_back(txt);
358  break;
359  }
360 
361  i++;
362  }
363 
364  f.close();
365  }
366 
367  // Cas d'un spectre en octave
368  bool ok = true;
369  int indice1 = -10000;
370  int indice0 = TYSpectre::getIndice(tmp[0].section(";", 0, 0).toDouble(&ok));
371  if (ok)
372  {
373  indice1 = TYSpectre::getIndice(tmp[1].section(";", 0, 0).toDouble(&ok));
374  }
375 
376  bool bOctave = false;
377  if (ok && ((indice1 - indice0) > 1)) // si spectre en octave l'ecart d'indice de la frequence est de 3
378  {
379  // On modifie le checkBox indiquant l'etat octave-1/3 d'octave ce qui convertit le spectre en
380  // octave
381  _radioButtonOctave->setChecked(true);
382  bOctave = true;
383  _etatSpectre = "octave";
384  }
385  else // Spectre en (1/3)
386  {
387  // On modifie le checkBox indiquant l'etat octave-1/3 d'octave ce qui convertit le spectre en
388  // octave
389  _radioButtonTiers->setChecked(true);
390  _etatSpectre = "tiersOctave";
391  }
392 
393  if ((bOctave && (tmp.size() < 9)) ||
394  (!bOctave && (tmp.size() < 31))) // nb valeurs incorrect (9 en 1/1, 31 en 1/3)
395  {
396  int ret = QMessageBox::warning(this, "Tympan", TR("id_warning_file_not_ok"), QMessageBox::Yes,
397  QMessageBox::No);
398  if (ret == QMessageBox::No)
399  {
400  return;
401  }
402  }
403 
404  // On remplit le tableau avec les valeurs (fait seulement maintenant a cause de
405  // "_radioButtonOctave->setChecked(true)" qui ecrase les valeurs
406  _tableau->setRowCount(static_cast<int>(tmp.size()) - 1);
407  for (unsigned j = 0; j < tmp.size(); j++)
408  {
409  _tableau->setItem(j, 0, new QTableWidgetItem(tmp[j].section(";", 0, 0)));
410  _tableau->setItem(j, 1, new QTableWidgetItem(tmp[j].section(";", 1, 1)));
411  }
412  }
413 }
414 
416 {
417  QString qFileName = QFileDialog::getSaveFileName(this, "Choose a file", "", "CSV (*.csv)");
418 
419  if (!qFileName.isEmpty())
420  {
421  if (!qFileName.endsWith(".csv"))
422  {
423  qFileName += ".csv";
424  }
425 
426  QFile f(qFileName);
427 
428  if (f.open(QIODevice::WriteOnly))
429  {
430  QTextStream s(&f);
431 
432  // Ajout du type de spectre 1/1 ou 1/3
433  int type = _radioButtonOctave->isChecked() ? 1 : 3;
434  s << type << '\n';
435 
436  // Ajout entete de colonne
437  s << TR("id_freq") << ";"
438  << "dB\n";
439 
440  // Ecriture contenu du spectre
441  int nbFreq = _tableau->rowCount();
442  for (int i = 0; i < nbFreq; i++)
443  {
444  s << _tableau->item(i, 0)->text() << ";" << _tableau->item(i, 1)->text() << "\n";
445  }
446 
447  f.close();
448  }
449  }
450 }
451 
453 {
454  if (_tabWidget->currentWidget() == _courbeWidget)
455  {
456  _courbeWidget->print();
457  }
458  else if (_tabWidget->currentWidget() == _histoWidget)
459  {
460  _histoWidget->print();
461  }
462  else
463  {
464  TYPrintDialog* pDialog = new TYPrintDialog(this);
465  pDialog->_groupBoxProjet->setEnabled(false);
466  pDialog->_groupBoxCalcul->setEnabled(false);
467  if (pDialog->exec() == QDialog::Accepted)
468  {
469  QPrintDialog dialog(_printer, this);
470  if (dialog.exec())
471  {
472  QPainter paint(_printer);
473  QPixmap tmpPix;
474 
475  int mid = int(_printer->width() / 2) -
476  int(paint.fontMetrics().horizontalAdvance(pDialog->_lineEditTete->text()) / 2);
477  paint.drawText(mid, 20, pDialog->_lineEditTete->text());
478  mid = int(_printer->width() / 2) -
479  int(paint.fontMetrics().horizontalAdvance(pDialog->_lineEditPied->text()) / 2);
480  paint.drawText(mid, _printer->height() - 20, pDialog->_lineEditPied->text());
481  paint.setFont(QFont("Helvetica", 15, QFont::Bold));
482  mid = int(_printer->width() / 2) -
483  int(paint.fontMetrics().horizontalAdvance(pDialog->_lineEditTitre->text()) / 2);
484  paint.drawText(mid, _printer->height() * 14 / 15, pDialog->_lineEditTitre->text());
485  paint.setFont(QFont());
486 
487  int sizeX = 80, sizeY = 25;
488  int ymax = int(double(_printer->height()) * 4 / 5 / (_tableau->rowCount() + 1));
489  if (ymax < sizeY)
490  {
491  sizeY = ymax;
492  }
493  int x = int(double(_printer->width() - sizeX * 2) / 2);
494  int y = int((double(_printer->height()) - sizeY * (_tableau->rowCount() + 1)) / 2);
495  paint.drawText(x, y, TR("id_freq"));
496  paint.drawText(x + sizeX + 20, y, "dB");
497  // paint.translate(x, y + sizeY);
498  paint.translate(-sizeX, sizeY);
499  for (int i = 0; i < _tableau->rowCount(); i++)
500  {
501  for (int j = 0; j < _tableau->columnCount(); j++)
502  {
503  paint.drawText(x + sizeX + 20, y, _tableau->item(i, j)->text());
504  paint.translate(sizeX, 0);
505  }
506  paint.translate(0, sizeY);
507  paint.translate(-_tableau->columnCount() * sizeX, 0);
508  }
509  }
510  }
511  }
512 }
513 
514 static void processEvents();
515 
516 void processEvents()
517 {
518  qApp->processEvents();
519 }
520 
522 {
523  LPTYSpectre pSpectre = new TYSpectre();
524  pSpectre->setType(_pTmpSpectre->getType()); // Recopie du type du spectre edite
525  bool isChanged = false;
526 
527  // Effectue la conversion
528  if (_radioButtonTiers->isChecked() && _etatSpectre != "tiersOctave") // Passage de 1/1 en 1/3
529  {
530  pSpectre->setForm(SPECTRE_FORM_OCT);
531 
532  // Creation des valeurs du spectre depuis le tableau
533  tableauToSpectre(pSpectre.getRealPointer());
534 
535  // Passage du spectre en 1/3
536  *pSpectre = pSpectre->toTOct();
537 
538  _etatSpectre = "tiersOctave";
539  isChanged = true;
540  }
541  else if (_radioButtonOctave->isChecked() && _etatSpectre != "octave") // Passage de 1/3 en 1/1
542  {
543  pSpectre->setForm(SPECTRE_FORM_TIERS);
544 
545  // Creation des valeurs du spectre depuis le tableau
546  tableauToSpectre(pSpectre.getRealPointer());
547 
548  // Passage du spectre en 1/1
549  *pSpectre = pSpectre->toOct();
550 
551  _etatSpectre = "octave";
552  isChanged = true;
553  }
554 
555  // Remplissage du tableau
556  if (isChanged)
557  {
558  spectreToTableau(pSpectre);
559  _histoWidget->update();
560  _courbeWidget->update();
561  }
562 }
563 
565 {
566  if (_comboBoxType->currentIndex() == 1)
567  {
568  _histoWidget->setDbType(true);
569  _courbeWidget->setDbType(true);
570  }
571  else
572  {
573  _histoWidget->setDbType(false);
574  _courbeWidget->setDbType(false);
575  }
576 }
577 
579 {
580  // Reset tab
581  for (int i = 0; i < _tableau->rowCount(); i++)
582  {
583  _tableau->takeItem(i, 0);
584  _tableau->takeItem(i, 1);
585  }
586 
587  _tableau->setRowCount(0);
588 }
589 
591 {
592  assert(pSpectre);
593 
594  // Initialisation du tableau
595  resetTab();
596 
597  // Recuperation du tableau des frequences (octave ou 1/3 d'octaves)
599 
600  int nbFreq = pSpectre->getNbValues();
601 
602  _tableau->setColumnCount(2);
603  _tableau->setRowCount(nbFreq);
604  for (int i = 0; i < nbFreq; i++)
605  {
606  _tableau->setItem(i, 0, new QTableWidgetItem((QString().setNum(tabFreq[i], 'f', 2))));
607  _tableau->setItem(
608  i, 1, new QTableWidgetItem((QString().setNum(pSpectre->getTabValReel()[i], 'f', _precision))));
609  }
610 }
611 
613 {
614  assert(pSpectre);
615 
616  bool ok = false;
617  double val = -200.0;
618  int indexDepart = 0;
619 
620  int nbFreq = _tableau->rowCount();
621 
622  // Pour toutes les frequences
623  for (int i = indexDepart; i < nbFreq; i++)
624  {
625  val = _tableau->item(i, 1)->text().toDouble(
626  &ok); // Suppose que la valeur a freq donnee stockee en colonne 1
627  if (ok)
628  {
629  pSpectre->getTabValReel()[i] = val;
630  }
631  }
632 }
633 
635 {
636  assert(pSpectre);
637 
638  if (_radioButtonOctave->isChecked())
639  {
640  *pSpectre = pSpectre->toOct();
641  }
642 
643  tableauToSpectre(pSpectre);
644 }
NxReal s
Definition: NxVec3.cpp:317
outil IHM pour une courbe (fichier header)
outil IHM pour un histogramme (fichier header)
Boite de dialogue des parametres d'impression (fichier header)
const std::vector< double > tabFreq
#define TR(id)
outil IHM pour un spectre (fichier header)
OTabFreq TYTabFreq
Collection des frequences.
Definition: TYSpectre.h:27
unsigned int getNbValues() const
Number of values in the spectrum.
Definition: spectre.cpp:182
void setType(TYSpectreType type)
Set the spectrum type.
Definition: spectre.h:152
TYSpectreType getType() const
Get the spectrum type.
Definition: spectre.h:147
OSpectreAbstract & toTOct() const
Converts to one-third Octave.
Definition: spectre.cpp:701
OSpectreAbstract & toOct() const
Converts to Octave.
Definition: spectre.cpp:768
double * getTabValReel() override
Definition: spectre.h:356
static int getIndice(const double &freq)
Return the index associated to a frequency.
Definition: spectre.h:397
T * getRealPointer()
Definition: smartptr.h:291
classe de l'objet IHM pour une courbe
void setDbType(bool dbType)
classe de l'objet IHM pour un element
virtual void apply()
virtual void updateContent()
TYElement * getParent() const
Definition: TYElement.h:699
classe de l'outil IHM pour un histogramme
Definition: TYHistoWidget.h:40
void setDbType(bool dbType)
Definition: TYHistoWidget.h:58
classe pour une boite de dialogue des parametres d'impression.
Definition: TYPrintDialog.h:52
QGroupBox * _groupBoxCalcul
Definition: TYPrintDialog.h:67
QLineEdit * _lineEditPied
Definition: TYPrintDialog.h:84
QLineEdit * _lineEditTete
Definition: TYPrintDialog.h:85
QGroupBox * _groupBoxProjet
Definition: TYPrintDialog.h:62
QLineEdit * _lineEditTitre
Definition: TYPrintDialog.h:87
virtual void apply()
QLineEdit * _lineEditRq
QGridLayout * _groupBoxLayout
virtual ~TYSpectreWidget()
QPushButton * _pushButtonFit
QPrinter * _printer
void spectre(TYSpectre *pSpectre)
Construit un spectre a partir du contenu du widget.
int _precision
Precision d'affichage des spectres.
void resetTab()
Initialisation du tableau.
void tabValueChanged(int row, int col)
TYCourbeWidget * _courbeWidget
QRadioButton * _radioButtonOctave
QGroupBox * _groupBox
void tableauToSpectre(TYSpectre *pSpectre)
Mise a jour d'un spectre depuis le tableau.
TYElementWidget * _elmW
void setContentEnabled(bool state)
QGridLayout * _spectreLayout
TYHistoWidget * _histoWidget
QButtonGroup * _buttonGroup
void spectreToTableau(TYSpectre *pSpectre)
Mise a jour du tableau depuis un spectre.
QPushButton * _pushButtonPrint
QPushButton * _pushButtonImport
virtual void updateContent()
QPushButton * _pushButtonExport
TYSpectreWidget(TYSpectre *pElement, QWidget *_pParent=NULL)
QComboBox * _comboBoxType
TYSpectre * _pTmpSpectre
QRadioButton * _radioButtonTiers
QTabWidget * _tabWidget
QTableWidget * _tableau
virtual void setForm(const TYSpectreForm &form)
Definition: TYSpectre.h:111
static int getXMLPrecision()
Get/Set de la precision de stockage des resultats (XML)
Definition: TYSpectre.h:180
virtual TYSpectreForm getForm()
Set/Get de la forme du spectre.
Definition: TYSpectre.h:107
virtual bool getIsReadOnly()
Set/Get du flag de conservation en BDD.
Definition: TYSpectre.h:135
virtual QString getRemarque() const
Set/Get des remarques.
Definition: TYSpectre.h:117
static const TYTabFreq getTabFreqNorm(TYSpectreForm form=SPECTRE_FORM_TIERS)
Definition: TYSpectre.cpp:419
classe de l'objet IHM pour un objet metier de type TYElement
Definition: TYWidget.h:43
void modified()
@ SPECTRE_FORM_TIERS
Definition: spectre.h:37
@ SPECTRE_FORM_OCT
Definition: spectre.h:38
TYSpectreType
Spectrum type.
Definition: spectre.h:27
@ SPECTRE_TYPE_AUTRE
Definition: spectre.h:32
@ SPECTRE_TYPE_ABSO
Definition: spectre.h:29