Code_TYMPAN  4.4.0
Industrial site acoustic simulation
TYAcousticLineWidget.cpp
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 
21 #include <qcombobox.h>
22 #include <qradiobutton.h>
23 #include <qbuttongroup.h>
24 #include <QGridLayout>
25 #include <QLabel>
26 #include <QtWidgets>
27 
32 #include "TabPointsWidget.h"
33 #include "TYAcousticLineWidget.h"
34 
35 #define TR(id) OLocalizator::getString("TYAcousticLineWidget", (id))
36 
37 TYAcousticLineWidget::TYAcousticLineWidget(TYAcousticLine* pElement, QWidget* _pParent /*=NULL*/)
38  : TYWidget(pElement, _pParent)
39 {
40 
41  _elmW = new TYSourceWidget(pElement, this);
42 
43  resize(300, 480);
44  setWindowTitle(TR("id_caption"));
45  _acousticLineLayout = new QGridLayout();
46  setLayout(_acousticLineLayout);
47 
48  _acousticLineLayout->addWidget(_elmW, 0, 0);
49 
50  // Saisie de la densite de sources
51  _groupBoxDensite = new QGroupBox(this);
52  _groupBoxDensite->setTitle(TR("id_densitessrcs_label"));
53  _groupBoxDensiteLayout = new QGridLayout();
55 
58  QLabel* pUnitDensite = new QLabel(_groupBoxDensite);
59  pUnitDensite->setText(TR("id_unite_densite_srcs"));
60  _groupBoxDensiteLayout->addWidget(pUnitDensite, 0, 1);
61 
62  _acousticLineLayout->addWidget(_groupBoxDensite, 1, 0);
63 
64  // Gestion de la distribution des sources
65  _buttonGroupTypeDistrib = new QButtonGroup();
66  _buttonGroupTypeDistrib->setExclusive(true);
67  _pRadioButtonCalculee = new QRadioButton(TR("id_puissance_calculee"));
69  _pRadioButtonImposee = new QRadioButton(TR("id_puissance_imposee"));
71 
72  QGridLayout* groupBoxTypeDistribLayout = new QGridLayout();
73  groupBoxTypeDistribLayout->addWidget(_pRadioButtonCalculee, 0, 0);
74  groupBoxTypeDistribLayout->addWidget(_pRadioButtonImposee, 0, 1);
75 
76  QGroupBox* groupBoxTypeDistrib = new QGroupBox();
77  groupBoxTypeDistrib->setTitle(TR("id_type_distribution"));
78  groupBoxTypeDistrib->setLayout(groupBoxTypeDistribLayout);
79 
80  _acousticLineLayout->addWidget(groupBoxTypeDistrib, 2, 0, 1, 1);
81 
82  // Definition des proprietes acoustiques
83  QGroupBox* pgroupBoxPropriete = new QGroupBox(this);
84  QGridLayout* pgroupBoxProprieteLayout = new QGridLayout();
85  pgroupBoxPropriete->setLayout(pgroupBoxProprieteLayout);
86 
87  _labeUseAtt = new QLabel(pgroupBoxPropriete);
88  _labeUseAtt->setText(TR("id_useatt_label"));
89  _checkBoxUseAtt = new QCheckBox(pgroupBoxPropriete);
90  _checkBoxUseAtt->setText(TR(""));
91 
92  _labelIsRayonnant = new QLabel(pgroupBoxPropriete);
93  _labelIsRayonnant->setText(TR("id_israyonnant_label"));
94  _checkBoxIsRayonnant = new QCheckBox(pgroupBoxPropriete);
95  _checkBoxIsRayonnant->setText(TR(""));
96 
97  _checkBoxIsRayonnant->setEnabled(false); // L'etat du calcul pilote le rayonnement ou non d'une source
98 
99  pgroupBoxProprieteLayout->addWidget(_labeUseAtt, 0, 0);
100  pgroupBoxProprieteLayout->addWidget(_checkBoxUseAtt, 0, 1);
101  pgroupBoxProprieteLayout->addWidget(_labelIsRayonnant, 0, 2);
102  pgroupBoxProprieteLayout->addWidget(_checkBoxIsRayonnant, 0, 4);
103 
104  _acousticLineLayout->addWidget(pgroupBoxPropriete, 3, 0);
105 
106  // Gestion de l'attenuateur
107  _groupBoxAtt = new QGroupBox(this);
108  _groupBoxAtt->setTitle(TR("id_att"));
109  _groupBoxAttLayout = new QGridLayout();
110  _groupBoxAtt->setLayout(_groupBoxAttLayout);
111 
112  _lineEditNomAtt = new QLineEdit(_groupBoxAtt);
113  _lineEditNomAtt->setEnabled(false);
114  _groupBoxAttLayout->addWidget(_lineEditNomAtt, 0, 0);
115 
116  _pushButtonSpectreAtt = new QPushButton(_groupBoxAtt);
117  _pushButtonSpectreAtt->setText(TR("id_proprietes_button"));
118  _groupBoxAttLayout->addWidget(_pushButtonSpectreAtt, 0, 1);
119 
120  _acousticLineLayout->addWidget(_groupBoxAtt, 4, 0);
121 
122  // Gestion du choix du regime
123  QGroupBox* buttonGroupBox = new QGroupBox(this);
124  buttonGroupBox->setTitle(TR("id_select_regime"));
125  QGridLayout* buttonGroupBoxLayout = new QGridLayout();
126  buttonGroupBox->setLayout(buttonGroupBoxLayout);
127 
128  _pushButtonRemRegime = new QPushButton(buttonGroupBox);
129  _pushButtonRemRegime->setText(TR("id_supprimer"));
130  buttonGroupBoxLayout->addWidget(_pushButtonRemRegime, 0, 0);
131 
132  _comboBoxSelectRegime = new QComboBox(buttonGroupBox);
133  _comboBoxSelectRegime->setEditable(true);
134  buttonGroupBoxLayout->addWidget(_comboBoxSelectRegime, 0, 1);
135 
136  _pushButtonNewRegime = new QPushButton(buttonGroupBox);
137  _pushButtonNewRegime->setText(TR("id_nouveau"));
138  buttonGroupBoxLayout->addWidget(_pushButtonNewRegime, 0, 2);
139 
140  _acousticLineLayout->addWidget(buttonGroupBox, 5, 0);
141 
142  // Largeur de la rivière
143  _groupBoxLine = new QGroupBox(this);
144  _groupBoxLine->setTitle(TR(""));
145  _groupBoxLineLayout = new QGridLayout();
147 
148  _labelLargeur = new QLabel(_groupBoxLine);
149  _labelLargeur->setText(TR("id_largeur_label"));
150  _groupBoxLineLayout->addWidget(_labelLargeur, 0, 0);
151 
153  _groupBoxLineLayout->addWidget(_lineEditLargeur, 0, 1);
154  QLabel* pUnitLargeur = new QLabel(_groupBoxLine);
155  pUnitLargeur->setText(TR("id_unite_largeur"));
156  _groupBoxLineLayout->addWidget(pUnitLargeur, 0, 2);
157 
158  _acousticLineLayout->addWidget(_groupBoxLine, 6, 0);
159 
160  // Editeur de points
161  QGroupBox* groupBoxTableau = new QGroupBox(this);
162  groupBoxTableau->setTitle(TR(""));
163  QGridLayout* groupBoxTableauLayout = new QGridLayout();
164  groupBoxTableau->setLayout(groupBoxTableauLayout);
165 
166  _pTabPtsW = new TabPointsWidget(pElement->getTabPoint(), groupBoxTableau);
167  groupBoxTableauLayout->addWidget(_pTabPtsW, 0, 0);
168 
169  _acousticLineLayout->addWidget(groupBoxTableau, 7, 0);
170 
171  updateContent();
172 
173  // Disambiguate the overloaded signal QComboBox::activated
174  void (QComboBox::*_qComboBox_activated)(int) = &QComboBox::activated;
175 
176  connect(_pushButtonNewRegime, &QPushButton::clicked, this, &TYAcousticLineWidget::createNewRegime);
177  connect(_pushButtonRemRegime, &QPushButton::clicked, this, &TYAcousticLineWidget::deleteRegime);
178  connect(_comboBoxSelectRegime, _qComboBox_activated, this, &TYAcousticLineWidget::changeRegime);
179  connect(_checkBoxUseAtt, &QPushButton::clicked, this, &TYAcousticLineWidget::useAttenuateur);
180  connect(_pushButtonSpectreAtt, &QPushButton::clicked, this, &TYAcousticLineWidget::editAtt);
181  connect(_pRadioButtonImposee, &QPushButton::clicked, this, &TYAcousticLineWidget::showSpectre);
182  connect(_pRadioButtonCalculee, &QPushButton::clicked, this, &TYAcousticLineWidget::setSpectreToReadOnly);
183 }
184 
186 
188 {
189  _elmW->updateContent();
190 
192 
194 
195  _lineEditLargeur->setText(QString().setNum(getElement()->getLargeur(), 'f', 2));
196  _lineEditDensiteSrcs->setText(QString().setNum(getElement()->getSrcLineic()->getDensiteSrcs(), 'f', 2));
197 
198  // Inactivation de la possibilite de changer de regime
199  _pushButtonRemRegime->setEnabled(getElement()->getIsRegimeChangeAble());
200  _comboBoxSelectRegime->setEnabled(true);
201  _pushButtonNewRegime->setEnabled(getElement()->getIsRegimeChangeAble());
202 
203  // Edition du tabbleau de points
204  _pTabPtsW->update();
205 }
206 
208 {
209  _elmW->apply();
210  getElement()->setLargeur(_lineEditLargeur->text().toDouble());
211  getElement()->getSrcLineic()->setDensiteSrcs(_lineEditDensiteSrcs->text().toDouble());
212  getElement()->setUseAtt(_checkBoxUseAtt->isChecked());
213 
214  if (_pRadioButtonCalculee->isChecked())
215  {
216  getElement()->setTypeDistribution(TYAcousticInterface::TY_PUISSANCE_CALCULEE);
217  }
218  else
219  {
220  getElement()->setTypeDistribution(TYAcousticInterface::TY_PUISSANCE_IMPOSEE);
221  }
222 
223  getElement()->updateCurrentRegime();
224 
225  _pTabPtsW->apply();
226 
229 
230  emit modified();
231 }
232 
234 {
235  int ret = getElement()->getSrcLineic()->edit(this);
236 
237  if (ret == QDialog::Accepted)
238  {
239  _lineEditNomSrcLin->setText(getElement()->getSrcLineic()->getName());
240  }
241 }
242 
244 {
245  // Creation du nouveau regime
246  getElement()->addRegime(getElement()->buildRegime());
247 
248  getElement()->setCurRegime(-1); // On bascule sur le regime nouvellement cree
249 
250  // Mise a jour du combo des regimes
252 }
253 
255 {
256  getElement()->remRegime(_comboBoxSelectRegime->currentIndex());
257 
258  // Mise a jour du combo box
260 }
261 
263 {
264  saveCurrentRegime(); // Save current before changing
265 
266  // Quand on change le nom d'un regime, le systeme considere qu'il s'agit
267  // d'un nouveau regime et le numero retourne est egal au nombre d'entree
268  // dans la comboBox + 1. Identifier le bon regime pour qu'il n'ay ai pas
269  // de probleme.
270  size_t nbRegime = getElement()->getNbRegimes();
271  if (regime >= nbRegime)
272  {
273  regime = getElement()->getCurRegime();
274  }
275 
276  QLineEdit* LE = _comboBoxSelectRegime->lineEdit();
277  QString nomRegime = LE->text();
278 
279  getElement()->setCurRegime(regime);
280  getElement()->setRegimeName(nomRegime);
281 
283 }
284 
286 {
287  TYRegime& regime = getElement()->getRegimeNb(getElement()->getCurRegime());
288 
289  regime._isRayonnant = _checkBoxIsRayonnant->isChecked();
290  regime._useAtt = _checkBoxUseAtt->isChecked();
291 
292  if (_pRadioButtonCalculee->isChecked())
293  {
294  getElement()->setTypeDistribution(TYAcousticInterface::TY_PUISSANCE_CALCULEE);
295  }
296  else
297  {
298  getElement()->setTypeDistribution(TYAcousticInterface::TY_PUISSANCE_IMPOSEE);
299  }
300 
301  regime._spectre = *(getElement()->getCurrentSpectre());
302 
303  if (regime._useAtt)
304  {
305  regime._pAtt = getElement()->getAtt();
306  }
307 }
308 
309 void TYAcousticLineWidget::renameRegime(const QString& nom)
310 {
311  _comboBoxSelectRegime->setEditText(nom);
312  getElement()->getRegimeNb(_comboBoxSelectRegime->currentIndex()).setName(nom);
313 }
314 
316 {
317  _comboBoxSelectRegime->clear();
318 
319  // Remplissage du comboBox des regimes
320  QString nom;
321  for (short i = 0; i < getElement()->getNbRegimes(); i++)
322  {
323  nom = getElement()->getRegimeNb(i).getName();
324  _comboBoxSelectRegime->insertItem(i, nom);
325  }
326 
327  // On affiche le regime courant
328  _comboBoxSelectRegime->setCurrentIndex(getElement()->getCurRegime());
329 }
330 
332 {
333  _checkBoxUseAtt->setChecked(getElement()->getUseAtt()); // Attenuateur ou pas
334  _checkBoxIsRayonnant->setChecked(getElement()->getIsRayonnant());
335  _groupBoxAtt->setEnabled(getElement()->getUseAtt());
336  if (getElement()->getUseAtt() && getElement()->getAtt())
337  {
338  _lineEditNomAtt->setText(getElement()->getAtt()->getName());
339  }
340  else
341  {
342  _lineEditNomAtt->setText("");
343  }
344 
345  getElement()->getSpectre()->setIsReadOnly(false);
346  if (getElement()->getTypeDistribution() == TYAcousticInterface::TY_PUISSANCE_CALCULEE)
347  {
348  _pRadioButtonCalculee->setChecked(true);
349  getElement()->getSpectre()->setIsReadOnly(true);
350  }
351  else
352  {
353  _pRadioButtonImposee->setChecked(true);
354  getElement()->getSpectre()->setIsReadOnly(false);
355  }
356 }
357 
359 {
360  LPTYSpectre spectre = getElement()->getSpectre();
361 
362  if (_pRadioButtonCalculee->isChecked())
363  {
364  spectre->setIsReadOnly(true);
365  }
366 
367  spectre->setIsReadOnly(false);
368 
369  spectre->edit(this);
370 }
371 
373 {
374  if (_pRadioButtonCalculee->isChecked())
375  {
376  getElement()->getSpectre()->setIsReadOnly(true);
377  }
378 }
379 
381 {
382  if (getElement()->getAtt() == NULL) // Si l'attenuateur n'existe pas, on le cree
383  {
384  LPTYAttenuateur pAtt = new TYAttenuateur();
385  getElement()->setAtt(pAtt);
386  }
387 
388  int ret = getElement()->getAtt()->edit(this);
389 
390  if (ret == QDialog::Accepted)
391  {
392  _lineEditNomAtt->setText(getElement()->getAtt()->getName());
393  }
394 }
395 
397 {
398  _groupBoxAtt->setEnabled(_checkBoxUseAtt->isChecked());
399 }
#define TR(id)
Outil IHM pour une ligne acoustique (fichier header)
outil IHM pour une entrée utilisateur (fichier header)
outil IHM pour une source (fichier header)
TabPointsWidget * _pTabPtsW
QButtonGroup * _buttonGroupTypeDistrib
QPushButton * _pushButtonSpectreAtt
QRadioButton * _pRadioButtonImposee
QGridLayout * _groupBoxDensiteLayout
QGridLayout * _acousticLineLayout
void renameRegime(const QString &nom)
void setSpectreToReadOnly()
Set Spectre to read only when in calculated mode.
void saveCurrentRegime()
save current regime if changed
QPushButton * _pushButtonNewRegime
QRadioButton * _pRadioButtonCalculee
TYAcousticLineWidget(TYAcousticLine *pElement, QWidget *_pParent=NULL)
QPushButton * _pushButtonRemRegime
QGridLayout * _groupBoxLineLayout
QGridLayout * _groupBoxAttLayout
TYTabPoint & getTabPoint()
virtual void setIsAcousticModified(bool isModified)
Definition: TYElement.cpp:248
virtual void setIsGeometryModified(bool isModified)
Definition: TYElement.cpp:253
bool _useAtt
Definition: TYRegime.h:197
bool _isRayonnant
Definition: TYRegime.h:196
TYSpectre _spectre
Definition: TYRegime.h:199
LPTYAttenuateur _pAtt
Definition: TYRegime.h:200
classe de l'objet IHM pour une source
virtual void updateContent()
virtual void apply()
virtual void setIsReadOnly(bool flag)
Set/Get du flag _isReadOnly.
Definition: TYSpectre.h:141
classe de l'objet IHM pour un objet metier de type TYElement
Definition: TYWidget.h:43
TYElement * _pElement
Definition: TYWidget.h:114
void modified()
virtual void apply()
virtual void update()