Code_TYMPAN  4.4.0
Industrial site acoustic simulation
TYMaillageWidget.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 
28 
29 #include "TYLookupTableWidget.h"
30 
31 #include <qradiobutton.h>
32 #include <qbuttongroup.h>
33 #include <qcombobox.h>
34 // Added by qt3to4:
35 #include <QGridLayout>
36 #include <QFrame>
37 #include <QLabel>
38 
39 #include "TYMaillageWidget.h"
40 
41 #define TR(id) OLocalizator::getString("TYMaillageWidget", (id))
42 
43 TYMaillageWidget::TYMaillageWidget(TYMaillage* pElement, QWidget* _pParent /*=NULL*/)
44  : TYWidget(pElement, _pParent)
45 {
46  _dataFreq = 16.0;
47 
48  _elmW = new TYElementWidget(pElement, this);
49 
50  resize(300, 200);
51  setWindowTitle(TR("id_caption"));
52  _maillageLayout = new QGridLayout();
53  setLayout(_maillageLayout);
54 
55  _maillageLayout->addWidget(_elmW, 0, 0);
56 
57  // Affichage du min et du max des valeurs
58  QGroupBox* pGroupBoxVal = new QGroupBox(this);
59  pGroupBoxVal->setTitle(TR("id_valeurs"));
60  QGridLayout* pGroupBoxValLayout = new QGridLayout();
61  pGroupBoxVal->setLayout(pGroupBoxValLayout);
62 
63  QLabel* pDataValMinLabel = new QLabel(TR("id_datavalmin"), pGroupBoxVal);
64  pGroupBoxValLayout->addWidget(pDataValMinLabel, 0, 0);
65  _lineEditDataValMin = new TYLineEdit(pGroupBoxVal);
66  _lineEditDataValMin->setReadOnly(true);
67  pGroupBoxValLayout->addWidget(_lineEditDataValMin, 0, 1);
68 
69  QLabel* pDataValMaxLabel = new QLabel(TR("id_datavalmax"), pGroupBoxVal);
70  pGroupBoxValLayout->addWidget(pDataValMaxLabel, 0, 2);
71  _lineEditDataValMax = new TYLineEdit(pGroupBoxVal);
72  _lineEditDataValMax->setReadOnly(true);
73  pGroupBoxValLayout->addWidget(_lineEditDataValMax, 0, 3);
74 
75  _maillageLayout->addWidget(pGroupBoxVal, 1, 0);
76 
77  // Disambiguate the overloaded signals
78  void (QComboBox::*_qComboBox_activated)(int) = &QComboBox::activated;
79  void (QButtonGroup::*_qButtonGroup_clicked)(int) = &QButtonGroup::idClicked;
80 
81  // Choix des valeurs (dBLin, dBA, freq)
82  QGroupBox* pGroupBoxData = new QGroupBox(this);
83  pGroupBoxData->setTitle(TR("id_datatype"));
84  QGridLayout* pGroupBoxDataLayout = new QGridLayout();
85  pGroupBoxData->setLayout(pGroupBoxDataLayout);
86 
87  pGroupBoxDataLayout->setColumnStretch(0, 1);
88  pGroupBoxDataLayout->setColumnStretch(1, 0);
89 
90  _buttonGroupDataType = new QButtonGroup();
91  QObject::connect(_buttonGroupDataType, _qButtonGroup_clicked, this, &TYMaillageWidget::updateValMinMax);
92  _buttonGroupDataType->setExclusive(true);
93  _pRadioButtondBA = new QRadioButton(TR("id_dba"));
95  _pRadioButtondBLin = new QRadioButton(TR("id_dblin"));
97  _pRadioButtonDataFreq = new QRadioButton(TR("id_datafreq"));
99 
100  QGridLayout* groupBoxDataTypeLayout = new QGridLayout();
101  groupBoxDataTypeLayout->addWidget(_pRadioButtondBA, 0, 0);
102  groupBoxDataTypeLayout->addWidget(_pRadioButtondBLin, 0, 1);
103  groupBoxDataTypeLayout->addWidget(_pRadioButtonDataFreq, 0, 2);
104 
105  QGroupBox* groupBoxDataType = new QGroupBox();
106  groupBoxDataType->setTitle(TR(""));
107  groupBoxDataType->setLayout(groupBoxDataTypeLayout);
108 
109  pGroupBoxDataLayout->addWidget(groupBoxDataType, 0, 0);
110 
111  // Choix de la frequence
112  _comboBoxFreq = new QComboBox(pGroupBoxData);
113  pGroupBoxDataLayout->addWidget(_comboBoxFreq, 0, 1);
114  updateFreqList();
115 
116  connect(_comboBoxFreq, _qComboBox_activated, this, &TYMaillageWidget::setFrequency);
117 
118  _maillageLayout->addWidget(pGroupBoxData, 2, 0);
119 
120  // Definition de la palette de couleur
121  QGroupBox* pGroupBoxColor = new QGroupBox(this);
122  pGroupBoxColor->setTitle(TR("id_palette"));
123 
124  QGridLayout* pGroupBoxColorLayout = new QGridLayout();
125  pGroupBoxColor->setLayout(pGroupBoxColorLayout);
126 
127  // Nom de la palette
128  _lineEditPaletteName = new QLineEdit(pGroupBoxColor);
129  _lineEditPaletteName->setEnabled(false);
130  pGroupBoxColorLayout->addWidget(_lineEditPaletteName, 0, 0);
131 
132  // Bouton d'edition de la palette
133  _pushButtonEditPalette = new QPushButton(pGroupBoxColor);
134  _pushButtonEditPalette->setText(TR("id_edit_palette"));
135  pGroupBoxColorLayout->addWidget(_pushButtonEditPalette, 0, 1);
136  connect(_pushButtonEditPalette, &QPushButton::clicked, this, &TYMaillageWidget::editPalette);
137 
138  QWidget* dummy = new QWidget();
139  _lookupTableWidget = new TYLabeledLookupTableWidget(getElement()->getPalette(), dummy);
140  pGroupBoxColorLayout->addWidget(dummy, 1, 0, 1, 2);
141 
142  _maillageLayout->addWidget(pGroupBoxColor, 3, 0);
143 
144  // Indication du nombre de points
145  _groupBox = new QGroupBox(this);
146  _groupBox->setTitle("");
147  _groupBoxLayout = new QGridLayout();
148  _groupBox->setLayout(_groupBoxLayout);
149 
150  QLabel* pNbPointsLabel = new QLabel(TR("id_nbpoint"), _groupBox);
151  _groupBoxLayout->addWidget(pNbPointsLabel, 0, 0);
152  _lineEditNbPoints = new QLineEdit(_groupBox);
153  _lineEditNbPoints->setReadOnly(true);
154  _groupBoxLayout->addWidget(_lineEditNbPoints, 0, 1);
155 
156  _maillageLayout->addWidget(_groupBox, 4, 0);
157 
158  // Hauteur du maillage
159  QGroupBox* pGroupBoxHaut = new QGroupBox(this);
160  pGroupBoxHaut->setTitle("");
161  QGridLayout* pGroupBoxHautLayout = new QGridLayout();
162  pGroupBoxHaut->setLayout(pGroupBoxHautLayout);
163 
164  QLabel* pHautLabel = new QLabel(TR("id_hauteur"), pGroupBoxHaut);
165  pGroupBoxHautLayout->addWidget(pHautLabel, 0, 0);
166  _lineEditHauteur = new TYLineEdit(pGroupBoxHaut);
167  pGroupBoxHautLayout->addWidget(_lineEditHauteur, 0, 1);
168  QLabel* pHautUnitLabel = new QLabel(TR("id_unite_hauteur"), pGroupBoxHaut);
169  pGroupBoxHautLayout->addWidget(pHautUnitLabel, 0, 2);
170 
171  _maillageLayout->addWidget(pGroupBoxHaut, 5, 0);
172 
173  updateContent();
174 
175  connect(_buttonGroupDataType, _qButtonGroup_clicked, this, &TYMaillageWidget::dataTypeChanged);
176 }
177 
179 
181 {
182  _elmW->updateContent();
183 
184  // Positionne la valeur du comboBox;
185  _dataFreq = getElement()->getDataFreq();
186  int indFreq = TYSpectre::getIndice(_dataFreq);
187  _comboBoxFreq->setCurrentIndex(indFreq);
188 
189  _buttonGroupDataType->button(getElement()->getDataType())->setChecked(true);
190  dataTypeChanged(getElement()->getDataType());
191 
192  _lineEditHauteur->setText(QString().setNum(getElement()->getHauteur()));
193 
194  updateNbPoints(static_cast<uint32>(getElement()->getPtsCalcul().size()));
195  updateValMinMax();
196  updatePalette();
197 }
198 
199 void TYMaillageWidget::updateNbPoints(unsigned int nbPoints)
200 {
201  _lineEditNbPoints->setText(QString().setNum(nbPoints));
202 }
203 
205 {
206  double val = 0.0;
207  double valMin = +10000.0;
208  double valMax = -10000.0;
209  TYPointCalcul* pPoint = NULL;
210 
211  int dataType = _buttonGroupDataType->checkedId();
212 
213  for (unsigned int i = 0; i < getElement()->getPtsCalcul().size(); i++)
214  {
215  pPoint = getElement()->getPtsCalcul()[i];
216  if (pPoint->etat() == false)
217  {
218  continue;
219  } // On ne prend pas en compte les points inactifs
220 
221  switch (dataType)
222  {
224  val = pPoint->getValA();
225  break;
227  val = pPoint->getValLin();
228  break;
230  val = pPoint->getSpectre()->getValueReal(_dataFreq);
231  break;
232  }
233 
234  valMin = val < valMin ? val : valMin;
235  valMax = val > valMax ? val : valMax;
236  }
237 
238  _lineEditDataValMin->setText(QString().setNum(valMin, 'f', 2));
239  _lineEditDataValMax->setText(QString().setNum(valMax, 'f', 2));
240 }
241 
243 {
244  _lineEditPaletteName->setText(getElement()->getPalette()->getName());
245  _lookupTableWidget->update(getElement()->getPalette());
246 }
247 
249 {
250  _elmW->apply();
251 
252  // Si la hauteur est differente
253  if (getElement()->getHauteur() != _lineEditHauteur->text().toDouble())
254  {
255  getElement()->setHauteur(_lineEditHauteur->text().toDouble());
256  TYProjet* pProj = dynamic_cast<TYProjet*>(getElement()->getParent());
257  if (pProj && pProj->getSite()->getAltimetry()->containsData())
258  {
259  pProj->updateAltiRecepteurs();
260  }
261  }
262 
263  getElement()->setDataFreq(_dataFreq);
264  getElement()->setDataType(_buttonGroupDataType->checkedId());
265 
266  emit modified();
267 }
268 
270 {
271  if (selected == 2)
272  {
273  _comboBoxFreq->setEnabled(true);
274  }
275  else
276  {
277  _comboBoxFreq->setEnabled(false);
278  }
279 }
280 
282 {
283  _dataFreq = _comboBoxFreq->currentText().toFloat();
284  updateValMinMax();
285 }
286 
288 {
289  LPTYPalette palette = getElement()->getPalette();
290  if (palette->edit(this))
291  {
292  updatePalette();
293  }
294 }
295 
297 {
299  for (unsigned int i = 0; i < tabFreq.size(); i++)
300  {
301  QString str;
302  str.setNum(tabFreq[i], 'f', 1);
303  _comboBoxFreq->insertItem(i, str);
304  }
305 }
outil IHM pour une entrée utilisateur (fichier header)
Outil IHM utile a l'affichage de la palette de couleur (fichier header)
#define TR(id)
Outil IHM pour un maillage (fichier header)
const std::vector< double > tabFreq
OTabFreq TYTabFreq
Collection des frequences.
Definition: TYSpectre.h:27
double getValueReal(double freq)
Definition: spectre.cpp:959
static int getIndice(const double &freq)
Return the index associated to a frequency.
Definition: spectre.h:397
bool containsData()
Definition: TYAltimetrie.h:237
classe de l'objet IHM pour un element
virtual void apply()
virtual void updateContent()
void update(const TYPalette *palette)
virtual void updateContent()
QRadioButton * _pRadioButtonDataFreq
void dataTypeChanged(int selected)
QRadioButton * _pRadioButtondBA
void setFrequency(int freq)
QGridLayout * _groupBoxLayout
void updateNbPoints(unsigned int nbPts)
TYMaillageWidget(TYMaillage *pElement, QWidget *_pParent=NULL)
QRadioButton * _pRadioButtondBLin
TYLineEdit * _lineEditDataValMin
TYLineEdit * _lineEditHauteur
QGroupBox * _groupBox
TYLabeledLookupTableWidget * _lookupTableWidget
QLineEdit * _lineEditPaletteName
TYElementWidget * _elmW
QComboBox * _comboBoxFreq
QGridLayout * _maillageLayout
QButtonGroup * _buttonGroupDataType
QPushButton * _pushButtonEditPalette
QLineEdit * _lineEditNbPoints
virtual void apply()
TYLineEdit * _lineEditDataValMax
Classe de definition d'un maillage.
Definition: TYMaillage.h:51
@ ValGlobalDBLin
Definition: TYMaillage.h:299
Classe de definition d'un point de calcul.C'est une classe derivee a TYPoint avec en plus un spectrep...
Definition: TYPointCalcul.h:33
double getValLin()
Get de la valeur globale Lin au point.
virtual LPTYSpectre getSpectre()
Get du spectre resultat d'un calcul donne.
virtual bool etat()
double getValA()
Get de la valeur globale A au point.
classe de definition d'un projet.
Definition: TYProjet.h:45
bool updateAltiRecepteurs()
Definition: TYProjet.cpp:599
LPTYSiteNode getSite()
Get du site.
Definition: TYProjet.h:169
LPTYAltimetrie getAltimetry() const
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()
unsigned int uint32
Definition: defines.h:60