Code_TYMPAN  4.4.0
Industrial site acoustic simulation
TYEtatsWidget.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 
23 #include <qtablewidget.h>
24 #include <qtabwidget.h>
25 #include <qradiobutton.h>
26 #include <qbuttongroup.h>
27 #include <qmenu.h>
28 #include <qstringlist.h>
29 // Added by qt3to4:
30 #include <QHBoxLayout>
31 #include <QBoxLayout>
32 #include <QGridLayout>
33 #include <QVBoxLayout>
34 #include <QHeaderView>
35 
39 
40 #include "TYEtatsWidget.h"
41 
42 #define TR(id) OLocalizator::getString("TYCalculWidget", (id))
43 
44 TYEtatsWidget::TYEtatsWidget(TYCalcul* pElement, QWidget* _pParent /*=NULL*/)
45  : QDialog(_pParent), _pElement(pElement)
46 {
47 
48  this->setWindowTitle(TR("id_etat_title"));
49 
50  resize(400, 400);
51 
52  _elmW = new TYElementWidget(pElement, this);
53 
54  // Creation du widget de gestion des etats
55  QBoxLayout* pLayoutEtats = new QVBoxLayout(this);
56  setLayout(pLayoutEtats);
57 
58  pLayoutEtats->addWidget(_elmW);
59 
60  QGroupBox* groupBox5 = new QGroupBox(this);
61  groupBox5->setTitle(TR("id_map_box"));
62  QGridLayout* groupBox5Layout = new QGridLayout();
63  groupBox5->setLayout(groupBox5Layout);
64 
65  _tabWidget = new QTabWidget(groupBox5);
66 
67  // Table des sources
68  _tableSource = new QTableWidget();
69  _tableSource->setColumnCount(3);
70  _tableSource->setHorizontalHeaderItem(0, new QTableWidgetItem(TR("id_nom")));
71  _tableSource->setHorizontalHeaderItem(1, new QTableWidgetItem(TR("id_emission")));
72  _tableSource->setHorizontalHeaderItem(2, new QTableWidgetItem(TR("id_regime")));
73 
74  _tabWidget->insertTab(0, _tableSource, TR("id_etat_source"));
75 
76  // Table des machines
77  _tableMachine = new QTableWidget();
78  _tableMachine->setColumnCount(3);
79  _tableMachine->setHorizontalHeaderItem(0, new QTableWidgetItem(TR("id_nom")));
80  _tableMachine->setHorizontalHeaderItem(1, new QTableWidgetItem(TR("id_emission")));
81  _tableMachine->setHorizontalHeaderItem(2, new QTableWidgetItem(TR("id_regime")));
82 
83  _tabWidget->insertTab(1, _tableMachine, TR("id_etat_machine"));
84 
85  // Table des batiments
86  _tableBatiment = new QTableWidget();
87  _tableBatiment->setColumnCount(3);
88  _tableBatiment->setHorizontalHeaderItem(0, new QTableWidgetItem(TR("id_nom")));
89  _tableBatiment->setHorizontalHeaderItem(1, new QTableWidgetItem(TR("id_emission")));
90  _tableBatiment->setHorizontalHeaderItem(2, new QTableWidgetItem(TR("id_regime")));
91 
92  _tabWidget->insertTab(2, _tableBatiment, TR("id_etat_batiment"));
93 
94  // Table des sources lineique
95  _tableSourceLin = new QTableWidget();
96  _tableSourceLin->setColumnCount(3);
97  _tableSourceLin->setHorizontalHeaderItem(0, new QTableWidgetItem(TR("id_nom")));
98  _tableSourceLin->setHorizontalHeaderItem(1, new QTableWidgetItem(TR("id_emission")));
99  _tableSourceLin->setHorizontalHeaderItem(2, new QTableWidgetItem(TR("id_regime")));
100 
101  _tabWidget->insertTab(3, _tableSourceLin, TR("id_etat_source_lin"));
102 
103  groupBox5Layout->addWidget(_tabWidget, 0, 0);
104 
105  pLayoutEtats->addWidget(groupBox5);
106 
107  pLayoutEtats->addSpacing(5);
108  QBoxLayout* pBtnLayoutEtats = new QHBoxLayout();
109  pBtnLayoutEtats->setContentsMargins(10, 10, 10, 10);
110  pLayoutEtats->addLayout(pBtnLayoutEtats);
111  pBtnLayoutEtats->addStretch();
112 
113  QPushButton* pButtonOKEtats = new QPushButton(TR("id_ok_btn"), this);
114  pButtonOKEtats->setDefault(true);
115  pBtnLayoutEtats->addWidget(pButtonOKEtats);
116  pBtnLayoutEtats->insertSpacing(2, 4);
117  QPushButton* pButtonCancelEtats = new QPushButton(TR("id_cancel_btn"), this);
118  pButtonCancelEtats->setDefault(false);
119  pBtnLayoutEtats->addWidget(pButtonCancelEtats);
120 
121  connect(pButtonOKEtats, &QPushButton::clicked, this, &TYEtatsWidget::apply);
122  connect(pButtonCancelEtats, &QPushButton::clicked, this, &TYEtatsWidget::reject);
123 
124  updateContent();
125 }
126 
128 
130 {
131  int row = 0;
132 
133  // if (_pElement && (_pElement->getState()==TYCalcul::Locked)) // DTn : Desactive 20110915
134  //{
135  // _tableSource->setEnabled(false);
136  // _tableMachine->setEnabled(false);
137  // _tableBatiment->setEnabled(false);
138  // _tableSourceLin->setEnabled(false);
139  //}
140  _elmW->setEnabled(false);
141  _elmW->updateContent(); // Affichage du nom du calcul
142 
145  TYMapPtrElementBool::iterator iterEmit;
146 
147  // Update des bâtiments
148  for (iterEmit = mapEtat.begin(); iterEmit != mapEtat.end(); iterEmit++)
149  {
150  TYElement* pEmetteur = (*iterEmit).first;
151  if (strcmp(pEmetteur->getClassName(), "TYBatiment") == 0)
152  {
153  _tabPtrBatiment.push_back(pEmetteur);
154 
155  _tableBatiment->setRowCount(_tableBatiment->rowCount() + 1);
156  QTableWidgetItem* pItemEmit = new QTableWidgetItem((*iterEmit).first->getName());
157  _tableBatiment->setItem(row, 0, pItemEmit);
158  QTableWidgetItem* pCheckItemEmit = new QTableWidgetItem("");
159  pCheckItemEmit->setCheckState((*iterEmit).second ? Qt::Checked : Qt::Unchecked);
160  _tableBatiment->setItem(row, 1, pCheckItemEmit);
161 
162  // Ajout des comboBox
163  QStringList listRegimes; // Liste des regimes pour "peupler" le combo
165  QString nom;
166  bool status = true;
167  for (short i = 0; i < pVolNode->getNbRegimes(); i++)
168  {
169  nom = pVolNode->getRegimeNb(i, status).getName();
170  listRegimes.append(nom);
171  }
172 
173  QComboBox* pComboRegime = new QComboBox();
174  pComboRegime->addItems(listRegimes);
175  pComboRegime->setCurrentIndex(mapRegime[pEmetteur]);
176  _tableBatiment->setCellWidget(row, 2, pComboRegime);
177 
178  row++;
179  }
180  }
181 
182  // Update des Machines
183  row = 0;
184  for (iterEmit = mapEtat.begin(); iterEmit != mapEtat.end(); iterEmit++)
185  {
186  TYElement* pEmetteur = (*iterEmit).first;
187  if (strcmp(pEmetteur->getClassName(), "TYMachine") == 0)
188  {
189  _tabPtrMachine.push_back(pEmetteur);
190 
191  _tableMachine->setRowCount(_tableMachine->rowCount() + 1);
192  QTableWidgetItem* pItemEmit = new QTableWidgetItem((*iterEmit).first->getName());
193  _tableMachine->setItem(row, 0, pItemEmit);
194  QTableWidgetItem* pCheckItemEmit = new QTableWidgetItem("");
195  pCheckItemEmit->setCheckState((*iterEmit).second ? Qt::Checked : Qt::Unchecked);
196  _tableMachine->setItem(row, 1, pCheckItemEmit);
197 
198  // Ajout des comboBox
199  QStringList listRegimes; // Liste des regimes pour "peupler" le combo
201  QString nom;
202  bool status = true;
203  for (short i = 0; i < pVolNode->getNbRegimes(); i++)
204  {
205  nom = pVolNode->getRegimeNb(i, status).getName();
206  listRegimes.append(nom);
207  }
208 
209  QComboBox* pComboRegime = new QComboBox();
210  pComboRegime->addItems(listRegimes);
211  pComboRegime->setCurrentIndex(mapRegime[pEmetteur]);
212  _tableMachine->setCellWidget(row, 2, pComboRegime);
213 
214  row++;
215  }
216  }
217 
218  // Update des Sources ponctuelles
219  row = 0;
220  for (iterEmit = mapEtat.begin(); iterEmit != mapEtat.end(); iterEmit++)
221  {
222  TYElement* pEmetteur = (*iterEmit).first;
223  if (strcmp(pEmetteur->getClassName(), "TYUserSourcePonctuelle") == 0)
224  {
225  _tabPtrSourcePonctuelle.push_back(pEmetteur);
226 
227  _tableSource->setRowCount(_tableSource->rowCount() + 1);
228  QTableWidgetItem* pItemEmit = new QTableWidgetItem((*iterEmit).first->getName());
229  _tableSource->setItem(row, 0, pItemEmit);
230  QTableWidgetItem* pCheckItemEmit = new QTableWidgetItem("");
231  pCheckItemEmit->setCheckState((*iterEmit).second ? Qt::Checked : Qt::Unchecked);
232  _tableSource->setItem(row, 1, pCheckItemEmit);
233 
234  // Ajout des comboBox
235  QStringList listRegimes; // Liste des regimes pour "peupler" le combo
237  QString nom;
238  for (short i = 0; i < pSource->getNbRegimes(); i++)
239  {
240  nom = pSource->getRegimeNb(i).getName();
241  listRegimes.append(nom);
242  }
243 
244  QComboBox* pComboRegime = new QComboBox();
245  pComboRegime->addItems(listRegimes);
246  pComboRegime->setCurrentIndex(mapRegime[pEmetteur]);
247  _tableSource->setCellWidget(row, 2, pComboRegime);
248 
249  row++;
250  }
251  }
252 
253  // Update des Sources Lineiques
254  row = 0;
255  for (iterEmit = mapEtat.begin(); iterEmit != mapEtat.end(); iterEmit++)
256  {
257  TYElement* pEmetteur = (*iterEmit).first;
258  TYAcousticLine* pSource = dynamic_cast<TYAcousticLine*>(pEmetteur);
259  if (pSource != nullptr)
260  {
261  _tabPtrSourceLin.push_back(pEmetteur);
262 
263  _tableSourceLin->setRowCount(_tableSourceLin->rowCount() + 1);
264  QTableWidgetItem* pItemEmit = new QTableWidgetItem((*iterEmit).first->getName());
265  _tableSourceLin->setItem(row, 0, pItemEmit);
266  QTableWidgetItem* pCheckItemEmit = new QTableWidgetItem("");
267  pCheckItemEmit->setCheckState((*iterEmit).second ? Qt::Checked : Qt::Unchecked);
268  _tableSourceLin->setItem(row, 1, pCheckItemEmit);
269 
270  // Ajout des comboBox
271  QStringList listRegimes; // Liste des regimes pour "peupler" le combo
272  QString nom;
273  for (short i = 0; i < pSource->getNbRegimes(); i++)
274  {
275  nom = pSource->getRegimeNb(i).getName();
276  listRegimes.append(nom);
277  }
278 
279  QComboBox* pComboRegime = new QComboBox();
280  pComboRegime->addItems(listRegimes);
281  pComboRegime->setCurrentIndex(mapRegime[pEmetteur]);
282  _tableSourceLin->setCellWidget(row, 2, pComboRegime);
283 
284  row++;
285  }
286  }
287 }
288 
290 {
293  TYMapPtrElementBool::iterator iterEmit;
294  TYMapPtrElementInt::iterator iterRegime;
295  int row;
296 
297  // Mis a jour des bâtiments
298  for (row = 0; row < _tableBatiment->rowCount(); row++)
299  {
300  iterRegime = mapRegime.begin();
301  for (iterEmit = mapEtat.begin(); iterEmit != mapEtat.end(); iterEmit++)
302  {
303  if (_tabPtrBatiment[row] == (*iterEmit).first)
304  {
305  // Etat de fonctionnment
306  QTableWidgetItem* pCheck = (QTableWidgetItem*)_tableBatiment->item(row, 1);
307  bool isChecked = (pCheck->checkState() == Qt::Checked);
308  (*iterEmit).second = isChecked;
309 
310  // Recup choix regime
311  QComboBox* pComboBox = (QComboBox*)_tableBatiment->cellWidget(row, 2);
312  int currentRegime = pComboBox->currentIndex();
313  (*iterRegime).second = currentRegime;
314 
315  // Information de l'objet reel
316  TYBatiment* pBat = dynamic_cast<TYBatiment*>((*iterEmit).first);
317  if (pBat)
318  {
319  pBat->setIsRayonnant(isChecked);
320  pBat->setCurRegime(currentRegime);
321  }
322  }
323 
324  iterRegime++;
325  }
326  }
327 
328  // Mis a jour des machines
329  for (row = 0; row < _tableMachine->rowCount(); row++)
330  {
331  iterRegime = mapRegime.begin();
332  for (iterEmit = mapEtat.begin(); iterEmit != mapEtat.end(); iterEmit++)
333  {
334  if (_tabPtrMachine[row] == (*iterEmit).first)
335  {
336  QTableWidgetItem* pCheck = (QTableWidgetItem*)_tableMachine->item(row, 1);
337  bool isChecked = (pCheck->checkState() == Qt::Checked);
338  (*iterEmit).second = isChecked;
339 
340  // Recup choix regime
341  QComboBox* pComboBox = (QComboBox*)_tableMachine->cellWidget(row, 2);
342  int currentRegime = pComboBox->currentIndex();
343  (*iterRegime).second = currentRegime;
344 
345  TYMachine* pMachine = dynamic_cast<TYMachine*>((*iterEmit).first);
346  if (pMachine)
347  {
348  pMachine->setIsRayonnant(isChecked);
349  pMachine->setCurRegime(currentRegime);
350  }
351  }
352 
353  iterRegime++;
354  }
355  }
356 
357  // Mis a jour des sources ponctuelles
358  for (row = 0; row < _tableSource->rowCount(); row++)
359  {
360  iterRegime = mapRegime.begin();
361  for (iterEmit = mapEtat.begin(); iterEmit != mapEtat.end(); iterEmit++)
362  {
363  if (_tabPtrSourcePonctuelle[row] == (*iterEmit).first)
364  {
365  QTableWidgetItem* pCheck = (QTableWidgetItem*)_tableSource->item(row, 1);
366  bool isChecked = (pCheck->checkState() == Qt::Checked);
367  (*iterEmit).second = isChecked;
368 
369  // Recup choix regime
370  QComboBox* pComboBox = (QComboBox*)_tableSource->cellWidget(row, 2);
371  int currentRegime = pComboBox->currentIndex();
372  (*iterRegime).second = currentRegime;
373 
374  TYUserSourcePonctuelle* pSP = dynamic_cast<TYUserSourcePonctuelle*>((*iterEmit).first);
375  if (pSP)
376  {
377  pSP->setIsRayonnant(isChecked);
378  pSP->setCurrentRegime(currentRegime);
379  }
380  }
381 
382  iterRegime++;
383  }
384  }
385 
386  // Mis a jour des sources lineique
387  for (row = 0; row < _tableSourceLin->rowCount(); row++)
388  {
389  iterRegime = mapRegime.begin();
390  for (iterEmit = mapEtat.begin(); iterEmit != mapEtat.end(); iterEmit++)
391  {
392  if (_tabPtrSourceLin[row] == (*iterEmit).first)
393  {
394  QTableWidgetItem* pCheck = (QTableWidgetItem*)_tableSourceLin->item(row, 1);
395  bool isChecked = (pCheck->checkState() == Qt::Checked);
396  (*iterEmit).second = isChecked;
397 
398  // Recup choix regime
399  QComboBox* pComboBox = (QComboBox*)_tableSourceLin->cellWidget(row, 2);
400  int currentRegime = pComboBox->currentIndex();
401  (*iterRegime).second = currentRegime;
402 
403  TYAcousticLine* pAL = dynamic_cast<TYAcousticLine*>((*iterEmit).first);
404  if (pAL)
405  {
406  pAL->setIsRayonnant(isChecked);
407  pAL->setCurRegime(currentRegime);
408  }
409  }
410 
411  iterRegime++;
412  }
413  }
414 
416  emit modified();
417  accept();
418 }
419 
420 void TYEtatsWidget::contextMenuEvent(QContextMenuEvent* e)
421 {
422  QTableWidget* _pCurrentTable = (QTableWidget*)_tabWidget->currentWidget();
423  QPoint point = _pCurrentTable->mapFrom(this, e->pos());
424 
425  if ((point.x() >= 0) && (point.y() >= 0) && (point.x() <= _pCurrentTable->width()) &&
426  (point.y() <= _pCurrentTable->height()))
427  {
428  QPoint resPoint = QPoint(point.x(), point.y() - _pCurrentTable->horizontalHeader()->height());
429  QTableWidgetItem* item = _pCurrentTable->itemAt(resPoint);
430  if (item)
431  {
432  QMenu* pMenu = new QMenu(this);
433 
434  QAction* selectAll = pMenu->addAction(TR("id_popup_select_all"));
435  QAction* unselectAll = pMenu->addAction(TR("id_popup_unselect_all"));
436  QAction* ret = pMenu->exec(_pCurrentTable->mapToGlobal(point));
437 
438  if (ret)
439  {
440  Qt::CheckState checkedState;
441  if (ret == selectAll)
442  {
443  checkedState = Qt::Checked;
444  }
445  if (ret == unselectAll)
446  {
447  checkedState = Qt::Unchecked;
448  }
449 
450  // Update de la table active
451  for (int row = 0; row < _pCurrentTable->rowCount(); row++)
452  {
453  _pCurrentTable->item(row, 1)->setCheckState(checkedState);
454  }
455  }
456  }
457  }
458 }
std::map< TYElement *, bool > TYMapPtrElementBool
Etat d'utilisation des elements (utilise par les calculs)
Definition: TYDefines.h:376
std::map< TYElement *, int > TYMapPtrElementInt
Tableau associatif des elements et d'un entier (utilise pour gerer les regimes)
Definition: TYDefines.h:379
#define TR(id)
objet IHM pour les etats (fichier header)
virtual const char * getClassName() const
Definition: TYElement.h:249
static OPrototype * safeDownCast(OPrototype *pObject)
Definition: TYElement.cpp:71
TYRegime & getRegimeNb(const int &nb, bool &status)
size_t getNbRegimes() const
void setIsRayonnant(const bool &rayonnant)
TYRegime & getRegimeNb(const int &nb)
virtual void setCurRegime(int regimeNumber)
size_t getNbRegimes() const
virtual void setIsRayonnant(bool rayonnant=true, bool recursif=true)
virtual void setCurRegime(int regime)
Calculation program.
Definition: TYCalcul.h:50
TYMapPtrElementInt & getMapElementRegime()
Get from the regime.
Definition: TYCalcul.h:323
TYMapPtrElementBool & getEmitAcVolNode()
Get array containing the state of each volumeNode in transmission.
Definition: TYCalcul.h:304
classe de l'objet IHM pour un element
virtual void updateContent()
static void setIsSavedOk(const bool &toSave)
Definition: TYElement.h:915
virtual QString getName() const
Definition: TYElement.h:684
tabPtrElement _tabPtrMachine
virtual ~TYEtatsWidget()
tabPtrElement _tabPtrSourcePonctuelle
Definition: TYEtatsWidget.h:97
virtual void contextMenuEvent(QContextMenuEvent *e)
tabPtrElement _tabPtrSourceLin
tabPtrElement _tabPtrBatiment
TYCalcul * _pElement
Definition: TYEtatsWidget.h:91
TYEtatsWidget(TYCalcul *pElement, QWidget *_pParent)
virtual void apply()
QTableWidget * _tableSourceLin
QTableWidget * _tableBatiment
virtual void updateContent()
QTableWidget * _tableSource
Definition: TYEtatsWidget.h:96
QTabWidget * _tabWidget
Definition: TYEtatsWidget.h:94
TYElementWidget * _elmW
Definition: TYEtatsWidget.h:92
QTableWidget * _tableMachine
Definition: TYEtatsWidget.h:99
TYUserSrcRegime & getRegimeNb(const int &nb)
void setCurrentRegime(const int &regimeNumber)
void setIsRayonnant(const bool &rayonnant)