Code_TYMPAN  4.4.0
Industrial site acoustic simulation
TYUserSourcePonctuelleWidget.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 // Added by qt3to4:
23 #include <QGridLayout>
24 #include <QLabel>
25 #include <QtWidgets>
26 
31 
32 #define TR(id) OLocalizator::getString("TYSourcePonctuelleWidget", (id))
33 
35  QWidget* _pParent /*=NULL*/)
36  : TYWidget(pElement, _pParent)
37 {
38 
39  _elmW = new TYSourcePonctuelleWidget(pElement, this);
40 
41  resize(300, 550);
42  setWindowTitle(TR("id_caption"));
43  _sourcePonctuelleLayout = new QGridLayout();
44  setLayout(_sourcePonctuelleLayout);
45  _sourcePonctuelleLayout->addWidget(_elmW, 0, 0);
46 
47  // Proprietes acoustiques
48  QGroupBox* pgroupBoxPropriete = new QGroupBox(this);
49 
50  QGridLayout* pgroupBoxProprieteLayout = new QGridLayout();
51  pgroupBoxPropriete->setLayout(pgroupBoxProprieteLayout);
52 
53  _labelIsRayonnant = new QLabel(pgroupBoxPropriete);
54  _labelIsRayonnant->setText(TR("id_israyonnant_label"));
55  _checkBoxIsRayonnant = new QCheckBox(pgroupBoxPropriete);
56  _checkBoxIsRayonnant->setText(TR(""));
57 
58  _labeUseAtt = new QLabel(pgroupBoxPropriete);
59  _labeUseAtt->setText(TR("id_useatt_label"));
60  _checkBoxUseAtt = new QCheckBox(pgroupBoxPropriete);
61  _checkBoxUseAtt->setText(TR(""));
62 
63  pgroupBoxProprieteLayout->addWidget(_labelIsRayonnant, 0, 1);
64  pgroupBoxProprieteLayout->addWidget(_checkBoxIsRayonnant, 0, 2);
65  pgroupBoxProprieteLayout->addWidget(_labeUseAtt, 0, 3);
66  pgroupBoxProprieteLayout->addWidget(_checkBoxUseAtt, 0, 4);
67 
68  _sourcePonctuelleLayout->addWidget(pgroupBoxPropriete, 1, 0);
69 
70  // Attenuateur et directivite
71  _groupBoxAtt = new QGroupBox(this);
72  _groupBoxAtt->setTitle(TR("id_att"));
73  _groupBoxAttLayout = new QGridLayout();
74  _groupBoxAtt->setLayout(_groupBoxAttLayout);
75 
76  _pushButtonAtt = new QPushButton(_groupBoxAtt);
77  _pushButtonAtt->setText(TR("id_proprietes_button"));
78  _groupBoxAttLayout->addWidget(_pushButtonAtt, 0, 1);
79 
80  _lineEditNomAtt = new QLineEdit(_groupBoxAtt);
81  _lineEditNomAtt->setEnabled(false);
82  _groupBoxAttLayout->addWidget(_lineEditNomAtt, 0, 0);
83 
84  _sourcePonctuelleLayout->addWidget(_groupBoxAtt, 2, 0);
85 
86  // Gestion de la directivite
87  //_groupBoxDir = new QGroupBox(this);
88  //_groupBoxDir->setTitle(TR("id_tabdir_box"));
89  //_groupBoxDirLayout = new QGridLayout();
90  //_groupBoxDir->setLayout(_groupBoxDirLayout);
91 
92  //_pushButtonDir = new QPushButton(_groupBoxDir);
93  //_pushButtonDir->setText(TR("id_proprietes_button"));
94  //_groupBoxDirLayout->addWidget(_pushButtonDir, 0, 1);
95 
96  //_lineEditNomDir = new QLineEdit(_groupBoxDir);
97  //_lineEditNomDir->setEnabled(false);
98  //_groupBoxDirLayout->addWidget(_lineEditNomDir, 0, 0);
99 
100  //_sourcePonctuelleLayout->addWidget(_groupBoxDir, 3, 0);
101 
102  // Gestion du choix du regime
103  QGroupBox* buttonGroupBox = new QGroupBox(this);
104  buttonGroupBox->setTitle(TR("id_select_regime"));
105  QGridLayout* buttonGroupBoxLayout = new QGridLayout();
106  buttonGroupBox->setLayout(buttonGroupBoxLayout);
107 
108  _pushButtonRemRegime = new QPushButton(buttonGroupBox);
109  _pushButtonRemRegime->setText(TR("id_supprimer"));
110  buttonGroupBoxLayout->addWidget(_pushButtonRemRegime, 0, 0);
111 
112  _comboBoxSelectRegime = new QComboBox(buttonGroupBox);
113  _comboBoxSelectRegime->setEditable(true);
114  buttonGroupBoxLayout->addWidget(_comboBoxSelectRegime, 0, 1);
115 
116  _pushButtonNewRegime = new QPushButton(buttonGroupBox);
117  _pushButtonNewRegime->setText(TR("id_nouveau"));
118  buttonGroupBoxLayout->addWidget(_pushButtonNewRegime, 0, 2);
119 
120  _sourcePonctuelleLayout->addWidget(buttonGroupBox, 3, 0);
121 
122  updateContent();
123 
124  // Disambiguate the overloaded signal QComboBox::activated
125  void (QComboBox::*_qComboBox_activated)(int) = &QComboBox::activated;
126 
127  connect(_pushButtonNewRegime, &QPushButton::clicked, this,
129  connect(_pushButtonRemRegime, &QPushButton::clicked, this, &TYUserSourcePonctuelleWidget::deleteRegime);
130  connect(_comboBoxSelectRegime, _qComboBox_activated, this, &TYUserSourcePonctuelleWidget::changeRegime);
131  connect(_pushButtonAtt, &QPushButton::clicked, this, &TYUserSourcePonctuelleWidget::editAttenuateur);
132  // connect(_elmW, &TYSourcePonctuelleWidget::typeRayntChanged, this,
133  // &TYUserSourcePonctuelleWidget::changeTypeRaynt);
134  connect(_checkBoxUseAtt, &QPushButton::clicked, this, &TYUserSourcePonctuelleWidget::useAttenuateur);
135 
136  _comboBoxSelectRegime->installEventFilter(this);
137 }
138 
140 
142 {
143  _elmW->updateContent();
144 
145  // Mise a jour a partir du regime courant
147 
148  // Mise a jour du combo des regimes
150 }
151 
153 {
154  _checkBoxUseAtt->setChecked(getElement()->getUseAtt()); // Attenuateur ou pas
155  _checkBoxIsRayonnant->setChecked(getElement()->getIsRayonnant());
156 
157  // On ne peut desactiver une source dans son widget
158  // Cette propriete est pilotee par le calcul
159  _checkBoxIsRayonnant->setEnabled(false);
160 
161  _groupBoxAtt->setEnabled(getElement()->getUseAtt());
162 
163  if (getElement()->getUseAtt() && getElement()->getAttenuateur())
164  {
165  _lineEditNomAtt->setText(getElement()->getAttenuateur()->getName());
166  }
167  else
168  {
169  _lineEditNomAtt->setText("");
170  }
171 
172  //_groupBoxDir->setEnabled(false);
173  // Si la source est a directivite "solid" ou "utilisateur"
174  // if ((getElement()->getTypeRaynt() == SOLID) ||
175  // (getElement()->getTypeRaynt() == FORCED))
176  //{
177  // _groupBoxDir->setEnabled(true);
178  //}
179 }
180 
182 {
183  _elmW->apply();
184 
185  if (getElement()->getAttenuateur() != NULL)
186  {
187  getElement()->setUseAtt(_checkBoxUseAtt->isChecked());
188  }
189  else
190  {
191  getElement()->setUseAtt(false);
192  }
193 
194  // Mise a jour du regime courant
195  getElement()->updateCurrentRegime();
196 
197  emit modified();
198 }
199 
201 {
202  // On commence par sauver le regime courant
204 
205  // Creation du nouveau regime
206  getElement()->addRegime(getElement()->buildRegime());
207 
208  // Basculement sur le regime nouvellement cree
209  getElement()->setCurrentRegime(-1);
210 
211  // Mise a jour du combo des regimes
213 }
214 
216 {
217  TYUserSrcRegime& regime = getElement()->getRegimeNb(getElement()->getCurrentRegime());
218 
219  regime._isRayonnant = _checkBoxIsRayonnant->isChecked();
220  regime._useAtt = _checkBoxUseAtt->isChecked();
221  regime._typeDistribution = 1; // TY_PUISSANCE_IMPOSEE
222  regime._spectre = *getElement()->getCurrentSpectre();
223 
224  if (regime._useAtt)
225  {
226  regime._pAtt = getElement()->getAttenuateur();
227  }
228 }
229 
231 {
232  getElement()->remRegime(_comboBoxSelectRegime->currentIndex());
233 
234  // Mise a jour sur la base du nouveau regime par defaut
236 
237  // Mise a jour du combo box
239 }
240 
242 {
243  // Sauvegarde du regime courant
245 
246  // Changement de regime (au niveau de l'element)
247  getElement()->setCurrentRegime(regime);
248 
249  // Mise a jour de la boite de dialogue
251 }
252 
254 {
255  TYUserSrcRegime& regime = getElement()->getRegimeNb(getElement()->getCurrentRegime());
256  QString actualName = regime.getName();
257 
258  QLineEdit* LE = _comboBoxSelectRegime->lineEdit();
259  QString nomRegime = LE->text();
260 
261  // Si le nom n'a pas change, on ne fait rien.
262  if (actualName == nomRegime)
263  {
264  return;
265  }
266 
267  regime.setName(nomRegime);
269 }
270 
272 {
273  _comboBoxSelectRegime->clear();
274 
275  // Remplissage du comboBox des regimes
276  QString nom;
277  for (short i = 0; i < getElement()->getNbRegimes(); i++)
278  {
279  nom = getElement()->getRegimeNb(i).getName();
280  _comboBoxSelectRegime->insertItem(i, nom);
281  }
282 
283  _comboBoxSelectRegime->setCurrentIndex(getElement()->getCurrentRegime());
284 }
285 
287 {
288  getElement()->setUseAtt(_checkBoxUseAtt->isChecked());
289 
290  _groupBoxAtt->setEnabled(_checkBoxUseAtt->isChecked());
291 
292  // Si on selectionne un attenuateur on ouvre immediatement la boite de dialogue de saisie
293  if (_checkBoxUseAtt->isChecked())
294  {
295  editAttenuateur();
296  }
297 }
298 
300 {
301  // Si l'element n'a pas d'attenuateur, on le cree
302  if (getElement()->getAttenuateur() == NULL)
303  {
304  getElement()->setAttenuateur(new TYAttenuateur());
305  }
306  int ret = getElement()->getAttenuateur()->edit(this);
307 
308  if (ret == QDialog::Accepted)
309  {
310  _lineEditNomAtt->setText(getElement()->getAttenuateur()->getName());
311  }
312 }
313 
314 // void TYUserSourcePonctuelleWidget::changeTypeRaynt(int typeRaynt)
315 //{
316 // if ((typeRaynt == SOLID) || (typeRaynt == FORCED))
317 // {
318 // _groupBoxDir->setEnabled(true);
319 // }
320 // else
321 // {
322 // _groupBoxDir->setEnabled(false);
323 // }
324 //}
325 
326 bool TYUserSourcePonctuelleWidget::eventFilter(QObject* obj, QEvent* event)
327 {
328  if (obj == _comboBoxSelectRegime)
329  {
330  if (event->type() == QEvent::FocusOut)
331  {
332  renameRegime();
333  }
334  else
335  {
336  return false;
337  }
338  }
339  else
340  {
341  // pass the event on to the parent class
342  return QWidget::eventFilter(obj, event);
343  }
344 
345  return true;
346 }
outil IHM pour une source ponctuelle (fichier header)
#define TR(id)
outil IHM pour une source ponctuelle (fichier header)
void setName(QString name)
Definition: TYElement.h:678
virtual QString getName() const
Definition: TYElement.h:691
bool _useAtt
Definition: TYRegime.h:197
bool _isRayonnant
Definition: TYRegime.h:196
TYSpectre _spectre
Definition: TYRegime.h:199
int _typeDistribution
Definition: TYRegime.h:198
LPTYAttenuateur _pAtt
Definition: TYRegime.h:200
classe de l'objet IHM pour une source ponctuelle
QGroupBox * _groupBoxAtt
Gestion de l'attenuateur.
TYUserSourcePonctuelleWidget(TYUserSourcePonctuelle *pElement, QWidget *_pParent=NULL)
bool eventFilter(QObject *obj, QEvent *ev)
QComboBox * _comboBoxSelectRegime
Gestion de la directivite.
classe de l'objet IHM pour un objet metier de type TYElement
Definition: TYWidget.h:43
void modified()