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