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