Code_TYMPAN  4.4.0
Industrial site acoustic simulation
TYSiteNodeWidget.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 
27 #include <qmenu.h>
28 #include <qcombobox.h>
29 // Added by qt3to4:
30 #include <QGridLayout>
31 #include <QLabel>
32 #include <QTreeWidget>
33 #include <QTreeWidgetItem>
34 #include <QHeaderView>
35 #include <qfiledialog.h>
36 
37 #include "TYSiteNodeWidget.h"
38 
39 #define TR(id) OLocalizator::getString("TYSiteNodeWidget", (id))
40 
41 TYSiteNodeWidget::TYSiteNodeWidget(TYSiteNode* pElement, QWidget* _pParent /*=NULL*/)
42  : TYWidget(pElement, _pParent)
43 {
44  unsigned short wPos = 0; // Position du widget
45 
46  resize(300, 600);
47  setWindowTitle(TR("id_caption"));
48 
49  _sitenodeLayout = new QGridLayout();
50  setLayout(_sitenodeLayout);
51 
52  _elmW = new TYElementWidget(pElement, this);
53 
54  _sitenodeLayout->addWidget(_elmW, wPos, 0);
55 
56  // Code de TYSiteWidget
57  _groupBox_0 = new QGroupBox(this);
58  _groupBox_0->setTitle(TR(""));
59  _groupBox_0Layout = new QGridLayout();
60  _groupBox_0->setLayout(_groupBox_0Layout);
61 
62  _labelEchelle = new QLabel(_groupBox_0);
63  _labelEchelle->setText(TR("id_echelle_label"));
64  _groupBox_0Layout->addWidget(_labelEchelle, 0, 0);
65 
67  _groupBox_0Layout->addWidget(_lineEditEchelle, 0, 1);
68  QLabel* pUnitEchelle = new QLabel(_groupBox_0);
69  pUnitEchelle->setText(TR("id_unite_echelle"));
70  _groupBox_0Layout->addWidget(pUnitEchelle, 0, 2);
71 
72  _checkBoxUseTopoFile = new QCheckBox(_groupBox_0);
73  _checkBoxUseTopoFile->setText(TR("id_use_topo_file"));
74  _groupBox_0Layout->addWidget(_checkBoxUseTopoFile, 1, 0);
75 
76  _lineEditTopoFile = new QLineEdit(_groupBox_0);
77  _lineEditTopoFile->setEnabled(true);
78  _groupBox_0Layout->addWidget(_lineEditTopoFile, 1, 1);
79 
80  _pushButtonTopoFile = new QPushButton(TR("id_select_topo_file"), _groupBox_0);
81  _groupBox_0Layout->addWidget(_pushButtonTopoFile, 1, 2);
82 
83  _sitenodeLayout->addWidget(_groupBox_0, ++wPos, 0);
84 
85  _groupBoxInfra = new QGroupBox(this);
86  _groupBoxInfra->setTitle(TR("id_infra"));
87  _groupBoxInfraLayout = new QGridLayout();
89 
90  _pushButtonInfra = new QPushButton(_groupBoxInfra);
91  _pushButtonInfra->setText(TR("id_proprietes_button"));
92  _groupBoxInfraLayout->addWidget(_pushButtonInfra, 0, 1);
93 
94  _lineEditNomInfra = new QLineEdit(_groupBoxInfra);
95  _lineEditNomInfra->setText(getElement()->getInfrastructure()->getName());
96  _lineEditNomInfra->setEnabled(false);
97  _groupBoxInfraLayout->addWidget(_lineEditNomInfra, 0, 0);
98 
99  _sitenodeLayout->addWidget(_groupBoxInfra, ++wPos, 0);
100 
101  _groupBoxTopo = new QGroupBox(this);
102  _groupBoxTopo->setTitle(TR("id_topo"));
103  _groupBoxTopoLayout = new QGridLayout();
105 
106  _lineEditNomTopo = new QLineEdit(_groupBoxTopo);
107  _lineEditNomTopo->setText(getElement()->getTopographie()->getName());
108  _lineEditNomTopo->setEnabled(false);
109  _groupBoxTopoLayout->addWidget(_lineEditNomTopo, 0, 0);
110 
111  _pushButtonTopo = new QPushButton(_groupBoxTopo);
112  _pushButtonTopo->setText(TR("id_proprietes_button"));
113  _groupBoxTopoLayout->addWidget(_pushButtonTopo, 0, 1);
114 
115  _sitenodeLayout->addWidget(_groupBoxTopo, ++wPos, 0);
116 
117  // Code de TYSiteNodeWidget
118 
119  // =============================================================================================
120 
121  // Choix du systeme de SIG
122  QGroupBox* pGroupBoxData = new QGroupBox(this);
123  pGroupBoxData->setTitle(TR("id_SIG"));
124  QGridLayout* pGroupBoxDataLayout = new QGridLayout();
125  pGroupBoxData->setLayout(pGroupBoxDataLayout);
126 
127  pGroupBoxDataLayout->setColumnStretch(0, 1);
128  pGroupBoxDataLayout->setColumnStretch(1, 0);
129 
130  // Choix du systeme de coordonnees
131  _labelModeCoord = new QLabel(pGroupBoxData);
132  _labelModeCoord->setText(TR("id_system_coord"));
133  pGroupBoxDataLayout->addWidget(_labelModeCoord, 0, 0);
134  _comboSIG = new QComboBox(pGroupBoxData);
135  pGroupBoxDataLayout->addWidget(_comboSIG, 0, 1);
136  updateSIGList();
137 
138  // Saisie des coordonnees
139  _labelSIG_X = new QLabel(pGroupBoxData);
140  _labelSIG_X->setText(TR("id_SIG_X"));
141  pGroupBoxDataLayout->addWidget(_labelSIG_X, 0, 2);
142  _lineEditSIG_X = new QLineEdit(pGroupBoxData);
143  pGroupBoxDataLayout->addWidget(_lineEditSIG_X, 0, 3);
144 
145  _labelSIG_Y = new QLabel(pGroupBoxData);
146  _labelSIG_Y->setText(TR("id_SIG_Y"));
147  pGroupBoxDataLayout->addWidget(_labelSIG_Y, 0, 4);
148  _lineEditSIG_Y = new QLineEdit(pGroupBoxData);
149  pGroupBoxDataLayout->addWidget(_lineEditSIG_Y, 0, 5);
150 
151  _labelSIG_OFFSET = new QLabel(pGroupBoxData);
152  _labelSIG_OFFSET->setText(TR("id_SIG_OFFSET"));
153  pGroupBoxDataLayout->addWidget(_labelSIG_OFFSET, 0, 6);
154  _lineEditSIG_OFFSET = new QLineEdit(pGroupBoxData);
155  pGroupBoxDataLayout->addWidget(_lineEditSIG_OFFSET, 0, 7);
156 
157  // Disambiguate the overloaded signal QComboBox:activated
158  void (QComboBox::*_qComboBox_activated)(int) = &QComboBox::activated;
159 
160  connect(_comboSIG, _qComboBox_activated, this, &TYSiteNodeWidget::setSIGCoord);
161 
162  _sitenodeLayout->addWidget(pGroupBoxData, ++wPos, 0);
163 
164  // ==============================================================================================
165 
166  _groupBox_3 = new QGroupBox(this);
167  _groupBox_3->setTitle(TR(""));
168  _groupBox_3Layout = new QGridLayout();
169  _groupBox_3->setLayout(_groupBox_3Layout);
170 
171  _labelRoot = new QLabel(_groupBox_3);
172  _labelRoot->setText(TR("id_root_label"));
173  _groupBox_3Layout->addWidget(_labelRoot, 0, 0);
174 
175  _checkBoxRoot = new QCheckBox(_groupBox_3);
176  _checkBoxRoot->setText(TR(""));
177  _checkBoxRoot->setEnabled(false);
178  _groupBox_3Layout->addWidget(_checkBoxRoot, 0, 1);
179 
180  _labelUseEmprise = new QLabel(_groupBox_3);
181  _labelUseEmprise->setText(TR("id_emprise_label"));
182  _groupBox_3Layout->addWidget(_labelUseEmprise, 1, 0);
183 
184  _checkBoxUseEmprise = new QCheckBox(_groupBox_3);
185  _checkBoxUseEmprise->setText(TR(""));
186  _checkBoxUseEmprise->setEnabled(true);
187  _groupBox_3Layout->addWidget(_checkBoxUseEmprise, 1, 1);
188 
189  _labelAltiEmprise = new QLabel(_groupBox_3);
190  _labelAltiEmprise->setText(TR("id_alti_emprise"));
191  _groupBox_3Layout->addWidget(_labelAltiEmprise, 1, 2);
192 
193  _lineEditAltiEmprise = new QLineEdit(_groupBox_3);
194  _lineEditAltiEmprise->setText(TR(""));
195  _lineEditAltiEmprise->setEnabled(false);
196  _groupBox_3Layout->addWidget(_lineEditAltiEmprise, 1, 3);
197 
198  _sitenodeLayout->addWidget(_groupBox_3, ++wPos, 0);
199 
200  _groupBox = new QGroupBox(this);
201  _groupBox->setTitle(TR("id_tabsiterepere_box"));
202  _groupBoxLayout = new QGridLayout();
203  _groupBox->setLayout(_groupBoxLayout);
204 
205  _listViewListSite = new QTreeWidget(_groupBox);
206  _listViewListSite->setColumnCount(2);
207  QStringList stringList;
208  stringList.append(TR(""));
209  stringList.append(TR("id_site"));
210  _listViewListSite->setHeaderLabels(stringList);
211  _listViewListSite->setRootIsDecorated(true);
212 
213  _groupBoxLayout->addWidget(_listViewListSite, 0, 0);
214 
215  _sitenodeLayout->addWidget(_groupBox, ++wPos, 0);
216 
217  connect(_pushButtonInfra, &QPushButton::clicked, this, &TYSiteNodeWidget::editInfra);
218  connect(_pushButtonTopoFile, &QPushButton::clicked, this, &TYSiteNodeWidget::chooseTopoFile);
219  connect(_pushButtonTopo, &QPushButton::clicked, this, &TYSiteNodeWidget::editTopo);
220  connect(_checkBoxUseTopoFile, &QPushButton::clicked, this, &TYSiteNodeWidget::changeStateTopoFile);
221  connect(_checkBoxUseEmprise, &QPushButton::clicked, this, &TYSiteNodeWidget::updateEditAlti);
222 
223  updateContent();
224 }
225 
227 
229 {
230  // Code de TYSiteWidget
231  QString num;
232 
233  _elmW->updateContent();
234 
235  _checkBoxUseTopoFile->setChecked(getElement()->getUseTopoFile());
236  _lineEditTopoFile->setText(getElement()->getTopoFileName().c_str());
237  if (!_checkBoxUseTopoFile->isChecked())
238  {
239  _pushButtonTopoFile->setEnabled(false);
240  }
241 
242  _lineEditEchelle->setText(num.setNum(getElement()->getEchelle(), 'f', 2));
243  _lineEditNomTopo->setText(getElement()->getTopographie()->getName());
244  _lineEditNomInfra->setText(getElement()->getInfrastructure()->getName());
245 
246  // Code de TYSiteNodeWidget
247  _checkBoxRoot->setChecked(getElement()->getRoot());
248  _checkBoxUseEmprise->setChecked(getElement()->getUseEmpriseAsCrbNiv());
249 
250  _lineEditAltiEmprise->setText(QString().setNum(getElement()->getAltiEmprise()));
251  if (_checkBoxUseEmprise->isChecked())
252  {
253  _lineEditAltiEmprise->setEnabled(true);
254  }
255 
256  _listViewListSite->clear();
257  for (unsigned int i = 0; i < getElement()->getListSiteNode().size(); i++)
258  {
259  QTreeWidgetItem* item = new QTreeWidgetItem(_listViewListSite);
260  item->setText(0, QString().setNum(i));
261  item->setText(1, getElement()->getListSiteNode()[i]->getElement()->getName());
262  }
263 
264  updateSIGData();
265 }
266 
268 {
269  // Code de TYSiteWidget
270  _elmW->apply();
271 
272  getElement()->setEchelle(_lineEditEchelle->text().toDouble());
273  getElement()->updateGraphic();
274  getElement()->setUseTopoFile(_checkBoxUseTopoFile->isChecked());
275 
276  if ((_checkBoxUseTopoFile->isChecked()) && (!_lineEditTopoFile->text().isEmpty()))
277  {
278  getElement()->setTopoFileName(_lineEditTopoFile->text().toStdString());
279  getElement()->loadTopoFile(_lineEditTopoFile->text().toStdString());
280  }
281 
282  // Code de TYSiteNodeWidget
283  getElement()->setRoot(_checkBoxRoot->isChecked());
284  getElement()->setUseEmpriseAsCrbNiv(_checkBoxUseEmprise->isChecked());
285  if (_checkBoxUseEmprise->isChecked())
286  {
287  getElement()->setAltiEmprise(_lineEditAltiEmprise->text().toDouble());
288  }
289  else
290  {
291  getElement()->setAltiEmprise(0.0);
292  }
293 
294  getElement()->setSIGType(_comboSIG->currentIndex());
295  getElement()->setSIG_X(_lineEditSIG_X->text().toFloat());
296  getElement()->setSIG_Y(_lineEditSIG_Y->text().toFloat());
297  getElement()->setSIG_OFFSET(_lineEditSIG_OFFSET->text().toFloat());
298 
299  getElement()->setIsGeometryModified(true);
300 
301  emit modified();
302 }
303 
304 void TYSiteNodeWidget::editSite(QTreeWidgetItem* item)
305 {
306  int ret = getElement()->getListSiteNode()[item->text(0).toInt()]->getElement()->edit(this);
307 
308  if (ret == QDialog::Accepted)
309  {
310  _listViewListSite->clear();
311  for (unsigned int i = 0; i < getElement()->getListSiteNode().size(); i++)
312  {
313  QTreeWidgetItem* item = new QTreeWidgetItem(_listViewListSite);
314  item->setText(0, QString().setNum(i));
315  item->setText(1, getElement()->getListSiteNode()[i]->getElement()->getName());
316  }
317  }
318 }
319 
320 void TYSiteNodeWidget::contextMenuEvent(QContextMenuEvent* e)
321 {
322  // si on trouve un item associe
323  QPoint point = _listViewListSite->mapFrom(this, e->pos());
324  QTreeWidgetItem* item =
325  _listViewListSite->itemAt(point.x(), point.y() - _listViewListSite->header()->height());
326 
327  if (item != NULL)
328  {
329  QMenu* pMenu = new QMenu(this);
330 
331  QAction* prop = pMenu->addAction(TR("id_property"));
332  QAction* ret = pMenu->exec(_listViewListSite->mapToGlobal(point));
333 
334  if ((ret) && (ret == prop))
335  {
336  editSite(item);
337  }
338  }
339 }
340 
342 {
343  if (_checkBoxUseEmprise->isChecked())
344  {
345  _lineEditAltiEmprise->setEnabled(true);
346  }
347  else
348  {
349  _lineEditAltiEmprise->setEnabled(false);
350  }
351 
353 }
354 
356 {
357  QString str = "TYMPAN";
358  _comboSIG->insertItem(0, str);
359 
360  str = "LAMBERT IIe";
361  _comboSIG->insertItem(1, str);
362 
363  str = "GPS (UTM)";
364  _comboSIG->insertItem(2, str);
365 }
366 
368 {
369  // SIG - Actif si le site est root
370  if (getElement()->getRoot() && (getElement()->getSIGType() != 0))
371  {
372  _comboSIG->setEnabled(true);
373  _lineEditSIG_X->setEnabled(true);
374  _lineEditSIG_Y->setEnabled(true);
375  _lineEditSIG_OFFSET->setEnabled(true);
376  _comboSIG->setCurrentIndex(getElement()->getSIGType());
377  _lineEditSIG_X->setText(QString().setNum(getElement()->getSIG_X()));
378  _lineEditSIG_Y->setText(QString().setNum(getElement()->getSIG_Y()));
379  _lineEditSIG_OFFSET->setText(QString().setNum(getElement()->getSIG_OFFSET()));
380  }
381  else if (!getElement()->getRoot())
382  {
383  _comboSIG->setEnabled(false);
384  _lineEditSIG_X->setText(QString().setNum(0.000));
385  _lineEditSIG_X->setEnabled(false);
386  _lineEditSIG_Y->setText(QString().setNum(0.000));
387  _lineEditSIG_Y->setEnabled(false);
388  _lineEditSIG_OFFSET->setText(QString().setNum(0.000));
389  _lineEditSIG_OFFSET->setEnabled(false);
390  }
391  else
392  {
393  _comboSIG->setEnabled(true);
394  _lineEditSIG_X->setText(QString().setNum(0.000));
395  _lineEditSIG_X->setEnabled(false);
396  _lineEditSIG_Y->setText(QString().setNum(0.000));
397  _lineEditSIG_Y->setEnabled(false);
398  _lineEditSIG_OFFSET->setText(QString().setNum(0.000));
399  _lineEditSIG_OFFSET->setEnabled(false);
400  }
401 }
402 
403 void TYSiteNodeWidget::setSIGCoord(int typeCoord)
404 {
405  getElement()->setSIGType(typeCoord);
406 
407  updateSIGData();
408 }
409 
411 {
412  if (!_checkBoxUseTopoFile->isChecked())
413  {
414  _pushButtonTopoFile->setEnabled(false);
415  getElement()->setUseTopoFile(false);
416  }
417  else
418  {
419  _pushButtonTopoFile->setEnabled(true);
420  getElement()->setUseTopoFile(true);
421  }
422 }
423 
425 {
426  QString file = QFileDialog::getOpenFileName(this, "Choose a file", "Fichier image",
427  "Images (*.bmp *.jpg *.png *.tif)");
428 
429  if (!file.isNull())
430  {
431  _lineEditTopoFile->setText(file);
432  }
433 }
434 
436 {
437  int ret = getElement()->getInfrastructure()->edit(this);
438 
439  if (ret == QDialog::Accepted)
440  {
441  _lineEditNomInfra->setText(getElement()->getInfrastructure()->getName());
442  }
443 }
444 
446 {
447  int ret = getElement()->getTopographie()->edit(this);
448 
449  if (ret == QDialog::Accepted)
450  {
451  _lineEditNomTopo->setText(getElement()->getTopographie()->getName());
452  }
453 }
outil IHM pour une entrée utilisateur (fichier header)
#define TR(id)
outil IHM pour un ensemble de sites (fichier header)
classe de l'objet IHM pour un element
virtual void apply()
virtual void updateContent()
virtual void setIsGeometryModified(bool isModified)
Definition: TYElement.cpp:253
QComboBox * _comboSIG
QGroupBox * _groupBox
virtual void updateContent()
void updateEditAlti()
Active/desactive la boite de saisie de l'altitude de la courbe de niveau.
void updateSIGList()
Mise a jour de la liste des systemes de coordonnees SIG.
QGridLayout * _groupBox_3Layout
virtual void contextMenuEvent(QContextMenuEvent *e)
QCheckBox * _checkBoxUseTopoFile
QLineEdit * _lineEditAltiEmprise
QGroupBox * _groupBox_0
TYElementWidget * _elmW
QGridLayout * _groupBoxInfraLayout
QLineEdit * _lineEditSIG_X
QPushButton * _pushButtonTopoFile
QLineEdit * _lineEditSIG_Y
void setSIGCoord(int typeCoord)
Changement du systeme de coordonnees.
QLineEdit * _lineEditNomInfra
QCheckBox * _checkBoxUseEmprise
QPushButton * _pushButtonTopo
virtual void apply()
QGroupBox * _groupBoxTopo
QGridLayout * _groupBoxLayout
QTreeWidget * _listViewListSite
QGridLayout * _groupBox_0Layout
void editSite(QTreeWidgetItem *item)
QLineEdit * _lineEditTopoFile
QLineEdit * _lineEditNomTopo
QGroupBox * _groupBox_3
QGridLayout * _groupBoxTopoLayout
QCheckBox * _checkBoxRoot
QGroupBox * _groupBoxInfra
TYSiteNodeWidget(TYSiteNode *pElement, QWidget *_pParent=NULL)
void updateSIGData()
Mise a jour des widgets lies au SIG.
QGridLayout * _sitenodeLayout
QLabel * _labelAltiEmprise
QPushButton * _pushButtonInfra
TYLineEdit * _lineEditEchelle
QLineEdit * _lineEditSIG_OFFSET
classe de l'objet IHM pour un objet metier de type TYElement
Definition: TYWidget.h:43
TYElement * _pElement
Definition: TYWidget.h:114
void modified()