Code_TYMPAN  4.4.0
Industrial site acoustic simulation
TYProjetWidget.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 
26 #include <qmenu.h>
27 // Added by qt3to4:
28 #include <QGridLayout>
29 #include <QDateEdit>
30 #include <QTextEdit>
31 #include <QLabel>
32 #include <QTreeWidget>
33 #include <QTreeWidgetItem>
34 #include <QContextMenuEvent>
35 #include <QHeaderView>
36 
37 #include "TYProjetWidget.h"
38 
39 #define TR(id) OLocalizator::getString("TYProjetWidget", (id))
40 
41 TYProjetWidget::TYProjetWidget(TYProjet* pElement, QWidget* _pParent /*=NULL*/) : TYWidget(pElement, _pParent)
42 {
43 
44  _elmW = new TYElementWidget(pElement, this);
45 
46  resize(300, 460);
47  setWindowTitle(TR("id_caption"));
48  _projetLayout = new QGridLayout();
49  setLayout(_projetLayout);
50  _projetLayout->addWidget(_elmW, 0, 0);
51 
52  // Tab organization
53  _tabWidget = new QTabWidget(this);
54 
55  // Groupe identification (Auteur, Date creation/modification, commentaire)
56  _groupBox = new QGroupBox(this);
57  _groupBox->setTitle(TR(""));
58  QGridLayout* _groupBoxLayout = new QGridLayout();
59  _groupBox->setLayout(_groupBoxLayout);
60 
61  _lineEditAuteur = new QLineEdit(_groupBox);
62  _groupBoxLayout->addWidget(_lineEditAuteur, 0, 1);
63 
64  _labelAuteur = new QLabel(_groupBox);
65  _labelAuteur->setText(TR("id_auteur_label"));
66  _groupBoxLayout->addWidget(_labelAuteur, 0, 0);
67 
68  QDate date;
69 
70  _editDateCreation = new QDateEdit(_groupBox);
71  if (getElement()->getDateCreation() == "2001-10-01")
72  {
73  getElement()->setDateCreation(date.currentDate().toString(Qt::ISODate));
74  }
75  _editDateCreation->setDate(date.fromString(getElement()->getDateCreation(), Qt::ISODate));
76  _groupBoxLayout->addWidget(_editDateCreation, 2, 1);
77 
78  _labelDateCreation = new QLabel(_groupBox);
79  _labelDateCreation->setText(TR("id_datecreation_label"));
80  _groupBoxLayout->addWidget(_labelDateCreation, 2, 0);
81 
82  _labelDateModif = new QLabel(_groupBox);
83  _labelDateModif->setText(TR("id_datemodif_label"));
84  _groupBoxLayout->addWidget(_labelDateModif, 3, 0);
85 
86  _editDateModif = new QDateEdit(_groupBox);
87  if (getElement()->getDateModif() == "2001-10-01")
88  {
89  getElement()->setDateModif(date.currentDate().toString(Qt::ISODate));
90  }
91  _editDateModif->setDate(date.fromString(getElement()->getDateModif(), Qt::ISODate));
92  _groupBoxLayout->addWidget(_editDateModif, 3, 1);
93 
94  _lineEditComment = new QTextEdit(_groupBox);
95  _groupBoxLayout->addWidget(_lineEditComment, 5, 0, 1, 2);
96 
97  _labelComment = new QLabel(_groupBox);
98  _labelComment->setText(TR("id_comment_label"));
99  _groupBoxLayout->addWidget(_labelComment, 4, 0);
100 
101  _tabWidget->addTab(_groupBox, TR("id_tab_info"));
102 
103  // Onglet Site
104  _groupBoxSite = new QGroupBox(this);
105  QGridLayout* groupBoxSiteLayout = new QGridLayout();
106  _groupBoxSite->setLayout(groupBoxSiteLayout);
107 
108  QPushButton* _pushButtonSite = new QPushButton(_groupBoxSite);
109  _pushButtonSite->setText(TR("id_proprietes_button"));
110  groupBoxSiteLayout->addWidget(_pushButtonSite, 0, 1);
111 
112  _lineEditNomSite = new QLineEdit(_groupBoxSite);
113  _lineEditNomSite->setEnabled(false);
114  groupBoxSiteLayout->addWidget(_lineEditNomSite, 0, 0);
115 
116  _labelDistMax = new QLabel(_groupBoxSite);
117  _labelDistMax->setText(TR("id_distMax_label"));
118  groupBoxSiteLayout->addWidget(_labelDistMax, 1, 0);
119 
121  groupBoxSiteLayout->addWidget(_lineEditDistMax, 1, 1);
122 
124  _labelDelaunayTolerence->setText(TR("id_delaunay_label"));
125  groupBoxSiteLayout->addWidget(_labelDelaunayTolerence, 2, 0);
126 
128  groupBoxSiteLayout->addWidget(_lineEditDelaunayTolerence, 2, 1);
129 
130  _labelUseDefault = new QLabel(_groupBoxSite);
131  _labelUseDefault->setText(TR("id_useDefault_label"));
132  groupBoxSiteLayout->addWidget(_labelUseDefault, 3, 0);
133 
134  QPushButton* _pushButtonUseDefault = new QPushButton(_groupBoxSite);
135  _pushButtonUseDefault->setText(TR("id_default_button"));
136  groupBoxSiteLayout->addWidget(_pushButtonUseDefault, 3, 1);
137 
138  _tabWidget->addTab(_groupBoxSite, TR("id_site"));
139 
140  // Onglet calcul
141  QGroupBox* groupBoxCalculs = new QGroupBox(this);
142  QGridLayout* groupBoxCalculsLayout = new QGridLayout();
143  groupBoxCalculs->setLayout(groupBoxCalculsLayout);
144 
145  _groupBoxCurCalcul = new QGroupBox(groupBoxCalculs);
146  _groupBoxCurCalcul->setTitle(TR("id_curcalcul"));
147  QGridLayout* groupBoxCurCalculLayout = new QGridLayout();
148  _groupBoxCurCalcul->setLayout(groupBoxCurCalculLayout);
149 
150  QPushButton* _pushButtonCurCalcul = new QPushButton(_groupBoxCurCalcul);
151  _pushButtonCurCalcul->setText(TR("id_proprietes_button"));
152  groupBoxCurCalculLayout->addWidget(_pushButtonCurCalcul, 0, 1);
153 
154  _lineEditNomCurCalcul = new QLineEdit(_groupBoxCurCalcul);
155  _lineEditNomCurCalcul->setEnabled(false);
156 
157  groupBoxCurCalculLayout->addWidget(_lineEditNomCurCalcul, 0, 0);
158 
159  groupBoxCalculsLayout->addWidget(_groupBoxCurCalcul, 0, 0);
160 
161  // Groupe tableau des calculs
162  _groupBoxTab = new QGroupBox(groupBoxCalculs);
163  _groupBoxTab->setTitle(TR("id_tabCalcul_box"));
164  QGridLayout* groupBoxTabLayout = new QGridLayout();
165  _groupBoxTab->setLayout(groupBoxTabLayout);
166 
167  _listViewTabCalcul = new QTreeWidget(_groupBoxTab);
168  _listViewTabCalcul->setColumnCount(2);
169  QStringList stringList;
170  stringList.append(TR(""));
171  stringList.append(TR("id_calcul"));
172  _listViewTabCalcul->setHeaderLabels(stringList);
173  _listViewTabCalcul->setRootIsDecorated(true);
174  //_listViewTabCalcul->setHeaderHidden(true);
175 
176  groupBoxTabLayout->addWidget(_listViewTabCalcul, 0, 0);
177 
178  groupBoxCalculsLayout->addWidget(_groupBoxTab, 1, 0);
179 
180  _tabWidget->addTab(groupBoxCalculs, TR("id_calcul"));
181 
182  // Onglet des points de controle
183  _tableauPointsControle = new QTableWidget();
184  _tableauPointsControle->setColumnCount(5);
185  _tableauPointsControle->setHorizontalHeaderItem(0, new QTableWidgetItem(TR("id_nom_pc")));
186  _tableauPointsControle->setHorizontalHeaderItem(1, new QTableWidgetItem(TR("id_pos_x")));
187  _tableauPointsControle->setHorizontalHeaderItem(2, new QTableWidgetItem(TR("id_pos_y")));
188  _tableauPointsControle->setHorizontalHeaderItem(3, new QTableWidgetItem(TR("id_pos_h")));
189  _tableauPointsControle->setHorizontalHeaderItem(4, new QTableWidgetItem(TR("id_actif")));
190 
191  _tabWidget->addTab(_tableauPointsControle, TR("id_opt_pc"));
192 
193  // DEFINITION DE L'ONGLET MAILLAGES
194  _tableauMaillages = new QTableWidget();
195  _tableauMaillages->setColumnCount(2);
196  _tableauMaillages->setHorizontalHeaderItem(0, new QTableWidgetItem(TR("id_nom_pc")));
197  _tableauMaillages->setHorizontalHeaderItem(1, new QTableWidgetItem(TR("id_actif")));
198 
199  _tabWidget->addTab(_tableauMaillages, TR("id_opt_maillage"));
200 
201  _projetLayout->addWidget(_tabWidget, 1, 0);
202 
203  updateContent();
204 
205  connect(_pushButtonCurCalcul, &QPushButton::clicked, this, &TYProjetWidget::editCurCalcul);
206  connect(_pushButtonSite, &QPushButton::clicked, this, &TYProjetWidget::editSite);
207  connect(_pushButtonUseDefault, &QPushButton::clicked, this, &TYProjetWidget::updateDefault);
208 }
209 
211 
213 {
214  QDate date;
215 
216  _elmW->updateContent();
217 
218  _lineEditAuteur->setText(getElement()->getAuteur());
219  _lineEditNomSite->setText(QString(getElement()->getSite()->getName()));
220  if (getElement()->getCurrentCalcul() != NULL)
221  {
222  _groupBoxCurCalcul->setEnabled(true);
223  _lineEditNomCurCalcul->setText(QString(getElement()->getCurrentCalcul()->getName()));
224  }
225  else
226  {
227  _groupBoxCurCalcul->setEnabled(false);
228  }
229 
230  _lineEditComment->setPlainText(getElement()->getComment());
231  _editDateModif->setDate(date.currentDate());
232  _editDateCreation->setDate(date.fromString(getElement()->getDateCreation(), Qt::ISODate));
233 
234  _lineEditDistMax->setText(QString().setNum(getElement()->getDMax()));
235  _lineEditDelaunayTolerence->setText(QString().setNum(getElement()->getDelaunayTolerence()));
236 
237  _listViewTabCalcul->clear();
238  for (unsigned int i = 0; i < getElement()->getListCalcul().size(); i++)
239  {
240  QTreeWidgetItem* item = new QTreeWidgetItem(_listViewTabCalcul, 0);
241  item->setText(0, QString().setNum(i));
242  item->setText(1, getElement()->getListCalcul().at(i)->getName());
243  }
244 
245  // Remplissage du tableau des points de controle
246  TYProjet* pProjet = getElement();
247  if (pProjet)
248  {
251  }
252 }
253 
255 {
256  TYTabLPPointControl& tabPoints = getElement()->getPointsControl();
257  unsigned int nbPoints = static_cast<uint32>(tabPoints.size());
258  _tableauPointsControle->setRowCount(nbPoints);
259 
260  QString msg;
261  unsigned int row = 0;
262  for (row = 0; row < nbPoints; row++)
263  {
264  _tableauPointsControle->setItem(row, 0, new QTableWidgetItem(tabPoints[row]->getName()));
265 
266  msg = QString(TR("id_cell_posx")).arg(tabPoints[row]->_x, 7, 'f', 1);
267  _tableauPointsControle->setItem(row, 1, new QTableWidgetItem(msg));
268 
269  msg = QString(TR("id_cell_posy")).arg(tabPoints[row]->_y, 7, 'f', 1);
270  _tableauPointsControle->setItem(row, 2, new QTableWidgetItem(msg));
271 
272  msg = QString(TR("id_cell_posh")).arg(tabPoints[row]->getHauteur(), 7, 'f', 1);
273  _tableauPointsControle->setItem(row, 3, new QTableWidgetItem(msg));
274 
275  QTableWidgetItem* pCheckItemActif = new QTableWidgetItem("");
276 
277  if (tabPoints[row]->etat())
278  {
279  pCheckItemActif->setCheckState(Qt::Checked);
280  }
281  else
282  {
283  pCheckItemActif->setCheckState(Qt::Unchecked);
284  }
285 
286  _tableauPointsControle->setItem(row, 4, pCheckItemActif);
287 
288  _tableauPointsControle->setRowHeight(row, 30);
289  }
290 }
291 
293 {
294  int nbPoints = static_cast<uint32>(getElement()->getMaillages().size());
295  _tableauMaillages->setRowCount(nbPoints);
296 
297  LPTYMaillage pMaillage = nullptr;
298 
299  for (int row = 0; row < nbPoints; row++)
300  {
301  pMaillage = getElement()->getMaillage(row);
302  _tableauMaillages->setItem(row, 0, new QTableWidgetItem(pMaillage->getName()));
303 
304  QTableWidgetItem* pCheckItemActif = new QTableWidgetItem("");
305  if (pMaillage->etat(getElement()->getCurrentCalcul()) == true)
306  {
307  pCheckItemActif->setCheckState(Qt::Checked);
308  }
309  else
310  {
311  pCheckItemActif->setCheckState(Qt::Unchecked);
312  }
313  _tableauMaillages->setItem(row, 1, pCheckItemActif);
314 
315  _tableauMaillages->setRowHeight(row, 30);
316  }
317 }
318 
320 {
321  _elmW->apply();
322 
323  getElement()->setComment(_lineEditComment->toPlainText());
324  getElement()->setAuteur(_lineEditAuteur->text());
325  getElement()->setDateModif(_editDateModif->date().currentDate().toString(Qt::ISODate));
326  getElement()->setDateCreation(_editDateCreation->date().toString(Qt::ISODate));
327 
328  getElement()->setDMax(_lineEditDistMax->text().toDouble());
329  getElement()->setDelaunayTolerence(_lineEditDelaunayTolerence->text().toDouble());
330 
331  getElement()->setIsGeometryModified(true);
332  getElement()->getSite()->setIsGeometryModified(true);
333 
334  // Mise a jour des points de controles
335  TYTabLPPointControl& tabPoints = getElement()->getPointsControl();
336  double x = 0., y = 0., h = 0.;
337  bool need_to_rebuild_result(false), ok(false);
338  for (int row = 0; row < _tableauPointsControle->rowCount(); row++)
339  {
340  // Mise a jur du nom du point
341  tabPoints[row]->setName(_tableauPointsControle->item(row, 0)->text());
342 
343  // Relecture des coordonnées du point
344  x = _tableauPointsControle->item(row, 1)->text().toDouble(&ok);
345  y = _tableauPointsControle->item(row, 2)->text().toDouble(&ok);
346  h = _tableauPointsControle->item(row, 3)->text().toDouble(&ok);
347  tabPoints[row]->setCoords(x, y, 0.);
348  tabPoints[row]->setHauteur(h);
349 
350  // Activation / desactivation du point
351  QTableWidgetItem* pCheck = (QTableWidgetItem*)_tableauPointsControle->item(row, 4);
352  if (pCheck->checkState() == Qt::Checked)
353  {
354  tabPoints[row]->setEtat(getElement()->getCurrentCalcul()->getID(), true);
355  need_to_rebuild_result |= getElement()->getCurrentCalcul()->addPtCtrlToResult(tabPoints[row]);
356  }
357  else
358  {
359  tabPoints[row]->setEtat(getElement()->getCurrentCalcul()->getID(), false);
360  need_to_rebuild_result |= getElement()->getCurrentCalcul()->remPtCtrlFromResult(tabPoints[row]);
361  }
362  }
363 
364  if (need_to_rebuild_result)
365  {
366  getElement()->getCurrentCalcul()->getResultat()->buildMatrix();
367  }
368 
369  // Mise à jour des noise maps
370  for (int row = 0; row < _tableauMaillages->rowCount(); row++)
371  {
372  // Select or deselect
373  QTableWidgetItem* pCheck = (QTableWidgetItem*)_tableauMaillages->item(row, 1);
374  if (pCheck->checkState() == Qt::Checked)
375  {
376  getElement()->getCurrentCalcul()->addMaillage(getElement()->getMaillage(row));
377  }
378  else
379  {
380  getElement()->getCurrentCalcul()->remMaillage(getElement()->getMaillage(row));
381  }
382 
383  // Rename
384  getElement()->getMaillage(row)->setName(_tableauMaillages->item(row, 0)->text());
385  }
386 
387  emit modified();
388 }
389 
391 {
392  int ret = getElement()->getCurrentCalcul()->edit(this);
393 
394  if (ret == QDialog::Accepted)
395  {
396  _lineEditNomCurCalcul->setText(getElement()->getCurrentCalcul()->getName());
397  }
398 }
399 
401 {
402  int ret = getElement()->getSite()->edit(this);
403 
404  if (ret == QDialog::Accepted)
405  {
406  _lineEditNomSite->setText(getElement()->getSite()->getName());
407  }
408 }
409 
410 void TYProjetWidget::editCalcul(QTreeWidgetItem* item)
411 {
412  int ret = getElement()->getListCalcul()[item->text(0).toInt()]->edit(this);
413 
414  if (ret == QDialog::Accepted)
415  {
416  _listViewTabCalcul->clear();
417  for (unsigned int i = 0; i < getElement()->getListCalcul().size(); i++)
418  {
419  QTreeWidgetItem* item = new QTreeWidgetItem(_listViewTabCalcul, 0);
420  item->setText(0, QString().setNum(i));
421  item->setText(1, getElement()->getListCalcul().at(i)->getName());
422  }
423  }
424 }
425 
427 {
428  _lineEditDistMax->setText(QString().setNum(getElement()->getDefaultDMax()));
429  _lineEditDelaunayTolerence->setText(QString().setNum(getElement()->getDefaultDelaunayTolerence()));
430 }
431 
432 void TYProjetWidget::contextMenuEvent(QContextMenuEvent* e)
433 {
434  // si on trouve un item associe
435  QPoint point = _listViewTabCalcul->mapFrom(this, e->pos());
436  QTreeWidgetItem* item =
437  _listViewTabCalcul->itemAt(point.x(), point.y() - _listViewTabCalcul->header()->height());
438 
439  if (item != NULL)
440  {
441  QMenu* pMenu = new QMenu(this);
442 
443  QAction* prop = pMenu->addAction(TR("id_property"));
444  QAction* ret = pMenu->exec(_listViewTabCalcul->mapToGlobal(point));
445 
446  if (ret == prop)
447  {
448  editCalcul(item);
449  }
450  }
451 }
outil IHM pour une entrée utilisateur (fichier header)
std::vector< LPTYPointControl > TYTabLPPointControl
Collection de Smart Pointer sur TYPointControl.
#define TR(id)
outil IHM pour un projet (fichier header)
classe de l'objet IHM pour un element
virtual void apply()
virtual void updateContent()
TYLineEdit * _lineEditDelaunayTolerence
QLabel * _labelDelaunayTolerence
QGroupBox * _groupBoxCurCalcul
virtual void contextMenuEvent(QContextMenuEvent *e)
QLineEdit * _lineEditAuteur
virtual void apply()
QTreeWidget * _listViewTabCalcul
QGroupBox * _groupBox
QLineEdit * _lineEditNomSite
QLabel * _labelAuteur
QLabel * _labelDistMax
QTabWidget * _tabWidget
QTableWidget * _tableauPointsControle
TYElementWidget * _elmW
QLabel * _labelUseDefault
QLabel * _labelDateModif
QDateEdit * _editDateCreation
QTextEdit * _lineEditComment
QGroupBox * _groupBoxSite
QLabel * _labelComment
QDateEdit * _editDateModif
QPushButton * _pushButtonSite
QGroupBox * _groupBoxTab
QGridLayout * _projetLayout
QTableWidget * _tableauMaillages
Onglet des points de controle.
QPushButton * _pushButtonUseDefault
void editCalcul(QTreeWidgetItem *item)
QPushButton * _pushButtonCurCalcul
QLineEdit * _lineEditNomCurCalcul
void updateControlPointsTab()
virtual ~TYProjetWidget()
virtual void updateContent()
TYProjetWidget(TYProjet *pElement, QWidget *_pParent=NULL)
QLabel * _labelDateCreation
TYLineEdit * _lineEditDistMax
classe de definition d'un projet.
Definition: TYProjet.h:45
classe de l'objet IHM pour un objet metier de type TYElement
Definition: TYWidget.h:43
void modified()
unsigned int uint32
Definition: defines.h:60