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