Code_TYMPAN  4.4.0
Industrial site acoustic simulation
TYMainWindow.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 // Added by qt3to4:
22 #include <QPixmap>
23 #include <QCloseEvent>
24 #include <qaction.h>
25 #include <qdir.h>
26 #include <qslider.h>
27 #include <qstatusbar.h>
28 #include <qmenubar.h>
29 #include <qtoolbar.h>
30 #include <qdialog.h>
31 #include <qlabel.h>
32 #include <qfile.h>
33 #include <qfiledialog.h>
34 #include <qfileinfo.h>
35 #include <qtoolbutton.h>
36 #include <qbuttongroup.h>
37 #include <qmessagebox.h>
38 #include <qcursor.h>
39 #include <qmainwindow.h>
40 #include <qprocess.h>
41 #include <qtextbrowser.h>
42 #include <qtextstream.h>
43 #include <QDockWidget>
44 #include <QMdiArea>
45 #include <QMdiSubWindow>
46 #include <qeventloop.h>
47 
48 #include "Tympan/core/config.h"
66 
78 #include "TYMainWindow.h"
79 
80 #define TR(id) OLocalizator::getString("TYMainWindow", (id))
81 #define IMG(id) OLocalizator::getPicture("TYMainWindow", (id))
82 
83 using namespace Qt;
84 
85 // to avoid X11 macro conflit
86 #ifdef Always
87  #undef Always
88 #endif
89 
90 TYMainWindow::TYMainWindow() : QMainWindow(0)
91 {
92  // QApplication::setStyle(new QGtkStyle());
93 
94  TYPickingTable _pPickingTable;
95 
96  setWindowTitle(TR("id_caption") + "-" + TY_CURRENT_RELEASE_ + " (" + TY_PRODUCT_PLATFORM_ + ")");
97 
98  _closeAndQuit = true;
99 
100  // Gestion du workspace
101  _pWorkspace = new QMdiArea();
102  _pWorkspace->setActivationOrder(QMdiArea::ActivationHistoryOrder);
103  setCentralWidget(_pWorkspace);
104 
105  // CLM-NT35 : Empecher de deplacer/tourner en vue perspective/mobile
106  _pCurrentModeler = NULL;
107 
108  // Settings du docking
109  // setDockWindowsMovable(true);
110 
111  // Navigateur d'aide
112  _pHelpBrowser = new QTextBrowser(NULL);
113  _pHelpBrowser->resize(800, 600);
114  QString help_index_file = TYApplication::tympanAppDir() + "/" + TR("id_help_index_path");
115  if (QFile::exists(help_index_file))
116  {
117  _pHelpBrowser->setSource(help_index_file);
118  }
119  _pHelpBrowser->hide();
120 
121  // Modes des Modelers
126 
127  // Disambiguate the overloaded TYMainWindow signals
128  void (TYMainWindow::*tyMainWindow_open)() = &TYMainWindow::open;
129  bool (TYMainWindow::*tyMainWindow_save)() = &TYMainWindow::save;
130  bool (TYMainWindow::*tyMainWindow_saveAs)() = &TYMainWindow::saveAs;
131 
132  // Actions
133  _pCreateNewAction = new QAction(QPixmap(IMG("id_icon_createnew")), TR("id_menuitem_createnew"), this);
134  _pCreateNewAction->setShortcut(CTRL + Key_N);
135  _pCreateNewAction->setStatusTip(TR("id_status_createnew"));
136  QObject::connect(_pCreateNewAction, &QAction::triggered, this, &TYMainWindow::createNew);
137 
138  _pOpenAction = new QAction(QPixmap(IMG("id_icon_open")), TR("id_menuitem_open"), this);
139  _pOpenAction->setShortcut(CTRL + Key_O);
140  _pOpenAction->setStatusTip(TR("id_status_open"));
141  QObject::connect(_pOpenAction, &QAction::triggered, this, tyMainWindow_open);
142 
143  _pCloseAction = new QAction(QPixmap(IMG("id_icon_close")), TR("id_menuitem_close"), this);
144  _pCloseAction->setStatusTip(TR("id_status_close"));
145  QObject::connect(_pCloseAction, &QAction::triggered, this, &TYMainWindow::close);
146  _pCloseAction->setEnabled(false);
147 
148  _pSaveAction = new QAction(QPixmap(IMG("id_icon_save")), TR("id_menuitem_save"), this);
149  _pSaveAction->setShortcut(CTRL + Key_S);
150  _pSaveAction->setStatusTip(TR("id_status_save"));
151  QObject::connect(_pSaveAction, &QAction::triggered, this, tyMainWindow_save);
152 
153  _pSaveAsAction = new QAction(QPixmap(IMG("id_icon_save")), TR("id_menuitem_saveas"), this);
154  _pSaveAsAction->setStatusTip(TR("id_status_saveas"));
155  QObject::connect(_pSaveAsAction, &QAction::triggered, this, tyMainWindow_saveAs);
156 
158  new QAction(QPixmap(IMG("id_icon_save")), TR("id_menuitem_saveas_noresult"), this);
159  _pSaveAsNoResultAction->setStatusTip(TR("id_status_saveas_noresult"));
160  QObject::connect(_pSaveAsNoResultAction, &QAction::triggered, this, &TYMainWindow::saveAsNoResult);
161 
162  _pShowPluginManagerAction = new QAction(QPixmap(IMG("id_icon_plugin")), TR("id_menuitem_plugin"), this);
163  _pShowPluginManagerAction->setStatusTip(TR("id_status_plugin"));
164  QObject::connect(_pShowPluginManagerAction, &QAction::triggered, this, &TYMainWindow::showPluginManager);
165 
166  // az++:
167  _pPrintAction = new QAction(QPixmap(IMG("id_icon_print")), TR("id_menuitem_print"), this);
168  _pPrintAction->setShortcut(CTRL + Key_P);
169  _pPrintAction->setStatusTip(TR("id_status_print"));
170  QObject::connect(_pPrintAction, &QAction::triggered, this, &TYMainWindow::print);
171  _pPrintAction->setEnabled(false);
172 
173  _pUndoAction = new QAction(QPixmap(IMG("id_icon_undo")), TR("id_menuitem_undo_na"), this);
174  _pUndoAction->setShortcut(CTRL + Key_Z);
175  _pUndoAction->setStatusTip(TR("id_status_undo"));
176  QObject::connect(_pUndoAction, &QAction::triggered, this, &TYMainWindow::undo);
177  _pUndoAction->setEnabled(false);
178 
179  _pRedoAction = new QAction(QPixmap(IMG("id_icon_redo")), TR("id_menuitem_redo_na"), this);
180  _pRedoAction->setShortcut(CTRL + Key_Y);
181  _pRedoAction->setStatusTip(TR("id_status_redo"));
182  QObject::connect(_pRedoAction, &QAction::triggered, this, &TYMainWindow::redo);
183  _pRedoAction->setEnabled(false);
184 
185  _pCutAction = new QAction(QPixmap(IMG("id_icon_cut")), TR("id_menuitem_cut"), this);
186  _pCutAction->setShortcut(CTRL + Key_X);
187  _pCutAction->setStatusTip(TR("id_status_cut"));
188  QObject::connect(_pCutAction, &QAction::triggered, this, &TYMainWindow::cut);
189  _pCutAction->setEnabled(false);
190 
191  _pCopyAction = new QAction(QPixmap(IMG("id_icon_copy")), TR("id_menuitem_copy"), this);
192  _pCopyAction->setShortcut(CTRL + Key_C);
193  _pCopyAction->setStatusTip(TR("id_status_cut"));
194  QObject::connect(_pCopyAction, &QAction::triggered, this, &TYMainWindow::copy);
195  _pCopyAction->setEnabled(false);
196 
197  _pPasteAction = new QAction(QPixmap(IMG("id_icon_paste")), TR("id_menuitem_paste"), this);
198  _pPasteAction->setShortcut(CTRL + Key_V);
199  _pPasteAction->setStatusTip(TR("id_status_paste"));
200  QObject::connect(_pPasteAction, &QAction::triggered, this, &TYMainWindow::paste);
201  _pPasteAction->setEnabled(false);
202 
204  new QAction(QPixmap(IMG("id_icon_show_spectremngr")), TR("id_menuitem_show_spectremngr"), this);
205  _pHideOrShowSpectreMngrAction->setCheckable(false); // DT 18-05-04 (true change en false)
206  _pHideOrShowSpectreMngrAction->setStatusTip(TR("id_status_show_spectremngr"));
207  _pHideOrShowSpectreMngrAction->setEnabled(false); // Inactive au depart
208  QObject::connect(_pHideOrShowSpectreMngrAction, &QAction::toggled, this,
210 
212  new QAction(QPixmap(IMG("id_icon_show_maillagemngr")), TR("id_menuitem_show_maillagemngr"), this);
213  _pHideOrShowMaillageMngrAction->setCheckable(false); // DT 18-05-04 (true change en false)
214  _pHideOrShowMaillageMngrAction->setStatusTip(TR("id_status_show_maillagemngr"));
215  _pHideOrShowMaillageMngrAction->setEnabled(false); // Inactive au depart
216  QObject::connect(_pHideOrShowMaillageMngrAction, &QAction::toggled, this,
218 
220  new QAction(QPixmap(IMG("id_icon_show_biblio")), TR("id_menuitem_show_biblio"), this);
221  _pHideOrShowBiblioAction->setCheckable(true);
222  _pHideOrShowBiblioAction->setStatusTip(TR("id_status_show_biblio"));
223  QObject::connect(_pHideOrShowBiblioAction, &QAction::toggled, this, &TYMainWindow::showBiblio);
224  _pHideOrShowBiblioAction->setEnabled(false);
225 
227  new QAction(QPixmap(IMG("id_icon_show_output")), TR("id_menuitem_show_output"), this);
228  _pHideOrShowOutputAction->setCheckable(true);
229  _pHideOrShowOutputAction->setStatusTip(TR("id_status_show_output"));
230  QObject::connect(_pHideOrShowOutputAction, &QAction::toggled, this, &TYMainWindow::showOutput);
231 
233  new QAction(QPixmap(IMG("id_icon_edit_curcalcul")), TR("id_menuitem_edit_curcalcul"), this);
234  _pEditCurCalculAction->setStatusTip(TR("id_status_edit_curcalcul"));
235  QObject::connect(_pEditCurCalculAction, &QAction::triggered, this, &TYMainWindow::editCurCalcul);
236  _pEditCurCalculAction->setEnabled(false);
237 
239  new QAction(QPixmap(IMG("id_icon_go_curcalcul")), TR("id_menuitem_go_curcalcul"), this);
240  _pGoCurCalculAction->setStatusTip(TR("id_status_go_curcalcul"));
241  QObject::connect(_pGoCurCalculAction, &QAction::triggered, this, &TYMainWindow::goCurCalcul);
242  _pGoCurCalculAction->setEnabled(false);
243 
244  QAction* pPrefDialogAction =
245  new QAction(QPixmap(IMG("id_icon_prefdlg")), TR("id_menuitem_prefdlg"), this);
246  QObject::connect(pPrefDialogAction, &QAction::triggered, this, &TYMainWindow::showPreferenceDialog);
247 
248  // Barre de menu
249  QMenu* pFileMenu = new QMenu(TR("id_menu_file"), this);
250  menuBar()->addMenu(pFileMenu);
251 
252  QMenu* pNewMenu = new QMenu(TR("id_menuitem_new"), this);
253  pNewMenu->setTearOffEnabled(true);
254  pNewMenu->addAction(TR("id_menuitem_newprojet"), this, &TYMainWindow::createNewProjet);
255  pNewMenu->addAction(TR("id_menuitem_newsite"), this, &TYMainWindow::createNewSite);
256  pNewMenu->addAction(TR("id_menuitem_newbatiment"), this, &TYMainWindow::createNewBatiment);
257  pNewMenu->addAction(TR("id_menuitem_newmachine"), this, &TYMainWindow::createNewMachine);
258  pNewMenu->addAction(_pCreateNewAction);
259 
260  pFileMenu->addMenu(pNewMenu);
261  pFileMenu->addAction(_pOpenAction);
262  pFileMenu->addAction(_pCloseAction);
263  pFileMenu->addSeparator();
264  pFileMenu->addAction(_pSaveAction);
265  pFileMenu->addAction(_pSaveAsAction);
266  pFileMenu->addAction(_pSaveAsNoResultAction);
267  pFileMenu->addSeparator();
268  pFileMenu->addAction(_pShowPluginManagerAction);
269  pFileMenu->addSeparator();
270  pFileMenu->addAction(_pPrintAction);
271  pFileMenu->addSeparator();
272  pFileMenu->addAction(TR("id_menuitem_quit"), this, &TYMainWindow::quitte, QKeySequence("Ctrl+Q"));
273 
274  QMenu* pEditMenu = new QMenu(TR("id_menu_edit"), this);
275  menuBar()->addMenu(pEditMenu);
276  pEditMenu->addAction(_pUndoAction);
277  pEditMenu->addAction(_pRedoAction);
278  pEditMenu->addSeparator();
279  pEditMenu->addAction(_pCutAction);
280  pEditMenu->addAction(_pCopyAction);
281  pEditMenu->addAction(_pPasteAction);
282  pEditMenu->addSeparator();
283  pEditMenu->addAction(QPixmap(IMG("id_icon_prefdlg")), TR("id_menuitem_prefdlg"), this,
285 
286  _pWindowsMenu = new QMenu(TR("id_menu_windows"), this);
287  connect(_pWindowsMenu, &QMenu::aboutToShow, this, &TYMainWindow::windowsMenuAboutToShow);
288  menuBar()->addMenu(_pWindowsMenu);
289 
290  menuBar()->addSeparator();
291 
292  QMenu* pHelpMenu = new QMenu(TR("id_menu_help"), this);
293  menuBar()->addMenu(pHelpMenu);
294  pHelpMenu->addAction(TR("id_menuitem_help"), this, &TYMainWindow::showHelp, QKeySequence("F1"));
295  pHelpMenu->addSeparator();
296  pHelpMenu->addAction(TR("id_menuitem_about"), this, &TYMainWindow::about);
297 
298  // Barre d'outils fichier
299  _pMainToolbar = new QToolBar(TR("id_toolbar_file"), this);
300  addToolBar(_pMainToolbar);
301  QToolButton* pToolNewFile = new QToolButton(this);
302  pToolNewFile->setIcon(QPixmap(IMG("id_icon_new")));
303  pToolNewFile->setToolTip(TR("id_menuitem_new"));
304  pToolNewFile->setMenu(pNewMenu);
305  pToolNewFile->setPopupMode(QToolButton::InstantPopup);
306  _pMainToolbar->addWidget(pToolNewFile);
307  _pMainToolbar->addSeparator();
308  _pMainToolbar->addAction(_pOpenAction);
309  _pMainToolbar->addAction(_pSaveAction);
310  _pMainToolbar->addSeparator();
311  _pMainToolbar->addAction(_pPrintAction);
312  _pMainToolbar->addSeparator();
313  _pMainToolbar->addAction(_pCutAction);
314  _pMainToolbar->addAction(_pCopyAction);
315  _pMainToolbar->addAction(_pPasteAction);
316  _pMainToolbar->addSeparator();
317  _pMainToolbar->addAction(_pUndoAction);
318  _pMainToolbar->addAction(_pRedoAction);
319  _pMainToolbar->setObjectName("MainToolbar");
320 
321  // Barre d'outils des fenetres
322  _pWindowToolbar = new QToolBar(TR("id_toolbar_window"), this);
323  addToolBar(_pWindowToolbar);
327  _pWindowToolbar->addSeparator();
329  _pWindowToolbar->addSeparator();
330  _pWindowToolbar->addAction(pPrefDialogAction);
331  _pWindowToolbar->setObjectName("WindowToolbar");
332 
333  // Barre d'outils de calcul acoustique
334  _pCalculAcousticToolbar = new QToolBar(TR("id_toolbar_calculacoustic"), this);
335  addToolBar(_pCalculAcousticToolbar);
338  _pCalculAcousticToolbar->setObjectName("CalculAcousticToolbar");
339 
340  // Barre d'outils pour les modelers
341  _pToolbarModeler = new TYModelerToolbar(0, this, TR("id_toolbar_modeler"));
342  addToolBar(_pToolbarModeler);
343  _pToolbarModeler->setObjectName("ToolbarModeler");
344 
345  // Btn group pour Site
346  _pSiteBtnGroup = new QButtonGroup(this);
347  // _pSiteBtnGroup->hide();
348  _pSiteBtnGroup->setExclusive(true);
349 
350  // Barre d'outils Topographie
351  _pToolbarTopo = new TYTopoToolbar(_pSiteBtnGroup, this, TR("id_toolbar_topo"));
352  addToolBar(_pToolbarTopo);
353  _pToolbarTopo->setObjectName("ToolbarTopo");
354 
355  // Barre d'outils Calcul
356  _pToolbarCalcul = new TYCalculToolbar(_pSiteBtnGroup, this, TR("id_toolbar_calcul"));
357  addToolBar(_pToolbarCalcul);
358  _pToolbarCalcul->setObjectName("ToolbarCalcul");
359 
360  // Barre d'outils Infrastructure
361  _pToolbarInfra = new TYInfraToolbar(_pSiteBtnGroup, this, TR("id_toolbar_infra"));
362  addToolBar(_pToolbarInfra);
363  _pToolbarInfra->setObjectName("ToolbarInfra");
364 
365  // Btn group pour Machine
366  _pMachineBtnGroup = new QButtonGroup(this);
367  // _pMachineBtnGroup->hide();
368  _pMachineBtnGroup->setExclusive(true);
369 
370  // Barre d'outils Machine
371  _pToolbarMachine = new TYMachineToolbar(_pMachineBtnGroup, this, TR("id_toolbar_machine"));
372  addToolBar(_pToolbarMachine);
373  _pToolbarMachine->setObjectName("ToolbarMachine");
374 
375  // Btn group pour Face
376  _pFaceBtnGroup = new QButtonGroup(this);
377  // _pFaceBtnGroup->hide();
378  _pFaceBtnGroup->setExclusive(true);
379 
380  // Barre d'outils Face
381  _pToolbarFace = new TYFaceToolbar(_pFaceBtnGroup, this, TR("id_toolbar_Face"));
382  addToolBar(_pToolbarFace);
383  _pToolbarFace->setObjectName("ToolbarFace");
384 
385  // Btn group pour Batiment
386  _pBatimentBtnGroup = new QButtonGroup(this);
387  // _pBatimentBtnGroup->hide();
388  _pBatimentBtnGroup->setExclusive(true);
389 
390  // Barre d'outils Batiment
391  _pToolbarBatiment = new TYBatimentToolbar(_pBatimentBtnGroup, this, TR("id_toolbar_batiment"));
392  addToolBar(_pToolbarBatiment);
393  _pToolbarBatiment->setObjectName("ToolbarBatiment");
394 
395  // Fenetre Projet
396  _pProjetDockWnd = new QDockWidget(TR("id_toolbar_projet"), this);
397  _pProjetDockWnd->setFloating(false);
399  _pProjetDockWnd->setWidget(_pProjetFrame);
400  _pProjetDockWnd->setObjectName("ProjetDockWnd");
401  _pProjetDockWnd->setContentsMargins(0, 0, 0, 0);
402  addDockWidget(Qt::LeftDockWidgetArea, _pProjetDockWnd);
403 
404  // Fenetre Site
405  _pSiteDockWnd = new QDockWidget(TR("id_toolbar_site"), this);
406  _pSiteDockWnd->setFloating(false);
408  _pSiteDockWnd->setWidget(_pSiteFrame);
409  _pSiteDockWnd->setObjectName("SiteDockWnd");
410  addDockWidget(Qt::LeftDockWidgetArea, _pSiteDockWnd);
411 
412  // Fenetre Output
413  _pOutputDockWnd = new QDockWidget(TR("id_toolbar_output"), this);
414  _pOutputDockWnd->setFloating(false);
416  _pOutputDockWnd->setWidget(_pOutputFrame);
417  _pOutputDockWnd->setObjectName("OutputDockWnd");
418  addDockWidget(Qt::LeftDockWidgetArea, _pOutputDockWnd);
419 
420  // Connexion des signaux
421  QObject::connect(_pOutputDockWnd, &QDockWidget::visibilityChanged, this,
428  QObject::connect(_pProjetFrame, &TYProjetFrame::changeCurrentCalcul, this,
430  QObject::connect(_pWorkspace, &QMdiArea::subWindowActivated, this, &TYMainWindow::subWindowActivated);
431 
432  // Connecte l'Action Manager de l'Application
434 
435  // Desactive tous les boutons
437 
438  // On active la sauvegarde des instances de type TYElement et derivees
440 
441  // Ready to work !!
442  statusBar()->showMessage(TR("id_status_ready"));
443 
444  // Indique que les TYElement sont ok (rien a sauvegarder)
446 }
447 
449 {
450  delete _pHelpBrowser;
451  _pHelpBrowser = NULL;
452 }
453 
455 {
456  QMenu* returnedMenu = QMainWindow::createPopupMenu();
457  TYCustomPopupMenu* myMenu = new TYCustomPopupMenu();
458  myMenu->addActions(returnedMenu->actions());
459  delete returnedMenu;
460  return myMenu;
461 }
462 
464 
465 bool TYMainWindow::loadSettings(const QString& fileName)
466 {
467  bool res = false;
468 
469  statusBar()->showMessage(TR("id_status_load_settings"), 3000);
470 
471  QFile* inFile = new QFile(QString(fileName) + QString("MainWindowIHM.bin"));
472  if (inFile->open(QIODevice::ReadOnly))
473  {
474  QByteArray byteArray = inFile->readAll();
475  if (byteArray.isEmpty())
476  {
477  inFile->close();
478  delete inFile;
479  return false;
480  }
481 
482  res = restoreState(byteArray);
483  inFile->close();
484  delete inFile;
485  }
486  else
487  {
488  return false;
489  }
490 
491  QString finalFileName = QString(fileName) + QString(".xml");
492 
493  // Cas d'une premiere utilisation de TYMPAN 3.6
494  // Verification de l'existence du fichier
495  QFileInfo fi(finalFileName);
496  // Si le fichier existe , on demande confirmation a l'utilisateur
497  if (!fi.exists())
498  {
499  finalFileName = QDir::toNativeSeparators(getTYApp()->tympanUserDir() + "/Settings" + ".xml");
500  }
501 
502  TYPreferenceManager::init(finalFileName);
503 
504  // Chargement des settings
505  res = TYPreferenceManager::read();
506 
507  // Apply settings
508  TYPreferenceManager::loadGeometryFromPreferences(metaObject()->className(), this);
509 
510  // Dock windows
511  QObjectList objectsList = children(); // dockWindows();
512  QWidget* pDockWnd = NULL;
513  QObject* pObject = NULL;
514 
515  for (int _i = 0; _i < objectsList.size(); _i++)
516  {
517  pObject = objectsList[_i];
518  if ((pObject->objectName() == "ProjetDockWnd") || (pObject->objectName() == "SiteDockWnd") ||
519  (pObject->objectName() == "OutputDockWnd") ||
520  (strcmp(pObject->metaObject()->className(), "QToolBar") == 0) ||
521  (dynamic_cast<QToolBar*>(pObject) != nullptr))
522  {
523  pDockWnd = (QWidget*)pObject;
524  QString key = pDockWnd->objectName();
525  // Geometry
526  TYPreferenceManager::loadGeometryFromPreferences(key, pDockWnd);
527  }
528  }
529 
530  return res;
531 }
532 
533 bool TYMainWindow::saveSettings(const QString& fileName)
534 {
535  bool res = false;
536 
537  QByteArray byteArray = saveState();
538  QFile* outFile = new QFile(QString(fileName) + QString("MainWindowIHM.bin"));
539  if (outFile->open(QIODevice::WriteOnly))
540  {
541  outFile->write(byteArray);
542  outFile->close();
543  }
544 
545  delete outFile;
546 
547  // Sauvegarde des settings
548  QString finalFileName = QString(fileName) + QString(".xml");
549  TYPreferenceManager::setFileName(finalFileName);
550  res = TYPreferenceManager::write();
551 
552  return res;
553 }
554 
556 {
557  _pHelpBrowser->show();
558 }
559 
561 {
562  // Dlg "A propos de Tympan"
563  QMessageBox* pAboutTympan = new QMessageBox(NULL);
564  pAboutTympan->setWindowTitle(windowTitle());
565  QString msg = TR("id_about_msg");
566  msg = msg.arg(TY_PRODUCT_NAME_);
567  msg = msg.arg(TY_CURRENT_RELEASE_);
568  msg = msg.arg(TY_PRODUCT_PLATFORM_);
569  msg = msg.arg(TY_PRODUCT_COPYRIGHT_);
570  msg = msg.arg(TY_BUILD_DATE_);
571  msg = msg.arg(TY_BUILD_TIME_);
572  msg = msg.arg(TY_CUSTOMER_);
573  msg = msg.arg(TY_LICENCE_NUMBER_);
574  msg = msg.arg(TY_TIME_LIMIT_);
575  pAboutTympan->setText(msg);
576  pAboutTympan->setIconPixmap(IMG("id_logo_about"));
577 
578  // Affichage
579  pAboutTympan->exec();
580 
581  // Nettoyage
582  delete pAboutTympan;
583  pAboutTympan = NULL;
584 }
585 
587 {
588  if (!pElt)
589  {
590  return true;
591  }
592 
593  TYProjet* pProj = dynamic_cast<TYProjet*>(pElt);
594  if (pProj != nullptr)
595  {
596  makeProjetModeler(pProj);
597  return true;
598  }
599  else if (pElt->isA("TYSiteNode"))
600  {
601  makeSiteModeler(static_cast<TYSiteNode*>(pElt));
602  return true;
603  }
604  else if (pElt->isA("TYBatiment"))
605  {
606  return (makeBatimentModeler(static_cast<TYBatiment*>(pElt)));
607  }
608  else if (pElt->isA("TYMachine"))
609  {
610  return (makeMachineModeler(static_cast<TYMachine*>(pElt)));
611  }
612  else
613  {
614  return true;
615  }
616 }
617 
619 {
620  bool ret = false;
621  TYBatimentModelerFrame* pBatimentModeler =
622  new TYBatimentModelerFrame(NULL, _pWorkspace, "TYBatimentModelerFrame");
623  pBatimentModeler->setAttribute(WA_DeleteOnClose);
624  _pWorkspace->addSubWindow(pBatimentModeler)->setObjectName("TYBatimentModelerFrame");
625 
626  QObject::connect(pBatimentModeler, &TYBatimentModelerFrame::editorModeChanged, this,
628  QObject::connect(pBatimentModeler, &TYBatimentModelerFrame::frameResized, this,
630 
631  if (!pBatiment)
632  {
633  pBatiment = new TYBatiment();
634  }
635  pBatimentModeler->setBatiment(pBatiment);
636 
637  pBatimentModeler->showMaximized();
638  pBatimentModeler->fit();
639 
640  // Waiting for the "aboutToClose" signal to be emited before moving to the next step
641  QEventLoop loop;
642  connect(pBatimentModeler, &TYBatimentModelerFrame::aboutToClose, &loop, &QEventLoop::quit);
643  loop.exec();
644  pBatimentModeler->close();
645  delete pBatimentModeler;
646  pBatimentModeler = nullptr;
647  // If there is no volume, the modeler maker returns false
648  if (pBatiment->getNbChild() == 0)
649  {
650  ret = false;
651  }
652  else
653  {
654  ret = true;
655  }
656  return ret;
657 }
658 
660 {
661  bool ret = false;
662  TYMachineModelerFrame* pMachineModeler =
663  new TYMachineModelerFrame(NULL, _pWorkspace, "TYMachineModelerFrame");
664  pMachineModeler->setAttribute(WA_DeleteOnClose);
665 
666  _pWorkspace->addSubWindow(pMachineModeler)->setObjectName("TYMachineModelerFrame");
667 
668  QObject::connect(pMachineModeler, &TYMachineModelerFrame::editorModeChanged, this,
670  QObject::connect(pMachineModeler, &TYMachineModelerFrame::frameResized, this,
672 
673  if (!pMachine)
674  {
675  pMachine = new TYMachine();
676  }
677  pMachineModeler->setMachine(pMachine);
678 
679  pMachineModeler->showMaximized();
680  pMachineModeler->fit();
681 
682  // Waiting for the "aboutTpClose" signal to be emited before moving to the next step
683  QEventLoop loop;
684  connect(pMachineModeler, &TYMachineModelerFrame::aboutToClose, &loop, &QEventLoop::quit);
685  loop.exec();
686  pMachineModeler->close();
687  delete pMachineModeler;
688  pMachineModeler = nullptr;
689  // If there is no volume, the modeler maker returns false
690  if (pMachine->getNbChild() == 0)
691  {
692  ret = false;
693  }
694  else
695  {
696  ret = true;
697  }
698  return ret;
699 }
700 
702 {
703  TYSiteModelerFrame* pSiteModeler = new TYSiteModelerFrame(pSite, _pWorkspace, "TYSiteModelerFrame");
704  pSiteModeler->setAttribute(WA_DeleteOnClose);
705 
706  _pWorkspace->addSubWindow(pSiteModeler)->setObjectName("TYSiteModelerFrame");
707 
708  QObject::connect(pSiteModeler, &TYSiteModelerFrame::editorModeChanged, this,
710  QObject::connect(pSiteModeler, &TYSiteModelerFrame::frameResized, this,
712 
713  pSiteModeler->showMaximized();
714  pSiteModeler->fit();
715 }
716 
718 {
719  TYSiteModelerFrame* pSiteModeler = new TYSiteModelerFrame(pProjet, _pWorkspace, "TYSiteModelerFrame");
720  pSiteModeler->setAttribute(WA_DeleteOnClose);
721 
722  _pWorkspace->addSubWindow(pSiteModeler)->setObjectName("TYSiteModelerFrame");
723 
724  QObject::connect(pSiteModeler, &TYSiteModelerFrame::editorModeChanged, this,
726  QObject::connect(pSiteModeler, &TYSiteModelerFrame::frameResized, this,
728 
729  pSiteModeler->showMaximized();
730  pSiteModeler->fit();
731 }
732 
734 {
735  QObject::disconnect(this, &TYMainWindow::onUndo, 0, 0);
736  QObject::disconnect(this, &TYMainWindow::onRedo, 0, 0);
737 
738  if (pActionManager)
739  {
740  QObject::connect(this, &TYMainWindow::onUndo, pActionManager, &TYActionManager::undo);
741  QObject::connect(this, &TYMainWindow::onRedo, pActionManager, &TYActionManager::redo);
742 
743  QObject::connect(pActionManager, &TYActionManager::undoRedoChanged, this,
745  pActionManager->emitUndoRedo();
746  }
747  else
748  {
750  }
751 }
752 
754 {
755  connectActionManager(getTYApp()->getActionManager());
756 }
757 
758 void TYMainWindow::updateModelers(bool clipping /*=true*/, bool axesAndGrid /*=true*/,
759  bool displayList /*=true*/)
760 {
761  QList<QMdiSubWindow*> windows = _pWorkspace->subWindowList();
762 
763  for (int i = 0; i < int(windows.count()); ++i)
764  {
765  QWidget* internal_window = windows.at(i)->widget();
766 
767  TYModelerFrame* pInW = dynamic_cast<TYModelerFrame*>(internal_window);
768  if (pInW != nullptr)
769  {
770  pInW->updateView(clipping, axesAndGrid);
771  if (displayList)
772  {
773  TYRenderWindowInteractor* pView = ((TYModelerFrame*)internal_window)->getView();
774  TYOpenGLRenderer* pOpenGLRenderer = pView->getRenderer();
775 
776  TYModelerFrame* pModelerFrame = dynamic_cast<TYModelerFrame*>(internal_window);
777  TYElement* pModelerElement(nullptr);
778  if (pModelerFrame != nullptr)
779  {
780  pModelerElement = pModelerFrame->getElement();
781  }
782  pOpenGLRenderer->setModelerElement(pModelerElement);
783  pOpenGLRenderer->updateDisplayList();
784  ((TYModelerFrame*)internal_window)->updateView(clipping, axesAndGrid);
785  pView->updateGL();
786  }
787  }
788  }
789 }
790 
791 void TYMainWindow::updateModelersElementGraphic(bool force /* = false */)
792 {
793  QList<QMdiSubWindow*> windows = _pWorkspace->subWindowList();
794 
795  for (int i = 0; i < int(windows.count()); ++i)
796  {
797  QWidget* internal_window = windows.at(i)->widget();
798 
799  TYModelerFrame* pInW = dynamic_cast<TYModelerFrame*>(internal_window);
800  if (pInW != nullptr)
801  {
802  pInW->updateElementGraphic(force);
803  }
804  }
805 }
806 
808 {
809  QList<QMdiSubWindow*> windows = _pWorkspace->subWindowList();
810 
811  for (int i = 0; i < int(windows.count()); ++i)
812  {
813  QWidget* internal_window = windows.at(i)->widget();
814 
815  TYModelerFrame* pInW = dynamic_cast<TYModelerFrame*>(internal_window);
816 
817 #ifdef _DEBUG
818  // For Debug purpose
819  QString windowTitle = internal_window->windowTitle();
820 #endif
821 
822  if (pInW != nullptr)
823  {
824  TYSiteModelerFrame* psiteframe = dynamic_cast<TYSiteModelerFrame*>(internal_window);
825  if (psiteframe != nullptr)
826  {
827  psiteframe->getView()->getRenderer()->clearTabSelectedElement();
828  psiteframe->setProjet(result);
829  psiteframe->getView()->getRenderer()->updateDisplayList();
830  psiteframe->updateView();
831  psiteframe->setRenderMaillageModeSlot();
832  }
833  else
834  {
835  TYBatimentModelerFrame* pbatimentframe =
836  dynamic_cast<TYBatimentModelerFrame*>(internal_window);
837  if (pbatimentframe != nullptr)
838  {
839  TYUUID uuid = pbatimentframe->getBatiment()->getID();
840  TYElement* newElement = TYElement::getInstance(uuid);
841  // When batiment modeler is empty, newElement is null
842  if (newElement != nullptr)
843  {
844  pbatimentframe->setBatiment((TYBatiment*)newElement);
845  }
846  }
847  TYMachineModelerFrame* pmachineframe = dynamic_cast<TYMachineModelerFrame*>(internal_window);
848  if (pmachineframe != nullptr)
849  {
850  TYUUID uuid = pmachineframe->getMachine()->getID();
851  TYElement* newElement = TYElement::getInstance(uuid);
852  // When machine modeler is empty, newElement is null
853  if (newElement != nullptr)
854  {
855  pmachineframe->setMachine((TYMachine*)newElement);
856  }
857  }
858  }
859  }
860  }
861 }
862 
864 {
865  QList<QMdiSubWindow*> windows = _pWorkspace->subWindowList();
866 
867  for (int i = 0; i < int(windows.count()); ++i)
868  {
869  QWidget* internal_window = windows.at(i)->widget();
870  QWidget* container_window = windows.at(i);
871 
872  if (dynamic_cast<TYModelerFrame*>(internal_window) != nullptr)
873  {
874  if (static_cast<TYModelerFrame*>(internal_window)->getElement() == pElement)
875  {
876  // internal_window->close();
877  container_window->close();
878  }
879  }
880  }
881 }
882 
884 {
886  {
887  _pProjetFrame->getProjet()->getCurrentCalcul()->edit(this);
888  }
889 }
890 
892 {
894 }
895 
897 {
898  _pWindowsMenu->clear();
899 
900  QAction* cascadeId =
901  _pWindowsMenu->addAction(TR("id_menuitem_cascade"), _pWorkspace, &QMdiArea::cascadeSubWindows);
902  QAction* tileId =
903  _pWindowsMenu->addAction(TR("id_menuitem_tile"), _pWorkspace, &QMdiArea::tileSubWindows);
904 
905  QList<QMdiSubWindow*> windows = _pWorkspace->subWindowList();
906 
907  if (windows.isEmpty())
908  {
909  cascadeId->setEnabled(false);
910  tileId->setEnabled(false);
911  }
912 
913  _pWindowsMenu->addSeparator();
914 
915  QMenu* viewMenu = createPopupMenu();
916  viewMenu->setTitle(TR("id_menuitem_views"));
917  _pWindowsMenu->addMenu(viewMenu);
918 
919  _pWindowsMenu->addSeparator();
920 
921  for (int i = 0; i < int(windows.count()); ++i)
922  {
923  QWidget* internal_window = windows.at(i)->widget();
924 
925  if (!internal_window)
926  {
927  break;
928  } // Securite
929 
930  QAction* id = _pWindowsMenu->addAction(internal_window->windowTitle(), this,
932  id->setData(i);
933  id->setChecked(_pWorkspace->activeSubWindow() == windows.at(i));
934  }
935 }
936 
938 {
939  QAction* action = (QAction*)sender();
940  int id = action->data().toInt();
941 
942  QWidget* pWidget = _pWorkspace->subWindowList().at(id)->widget();
943 
944  if (pWidget)
945  {
946  pWidget->showNormal();
947  pWidget->setFocus();
948 
949  if (QString(pWidget->metaObject()->className()).compare("TYSpectreManager") == 0)
950  {
951  _pHideOrShowSpectreMngrAction->setChecked(true);
952  }
953  else if (QString(pWidget->metaObject()->className()).compare("TYDataBaseFrame") == 0)
954  {
955  _pHideOrShowBiblioAction->setChecked(true);
956  }
957  else if (QString(pWidget->metaObject()->className()).compare("TYMaillageManager") == 0)
958  {
959  _pHideOrShowMaillageMngrAction->setChecked(true);
960  }
961  }
962 }
963 
965 {
966  if (_pCurrentModeler != NULL)
967  {
969  }
970 }
971 
973 {
974  QWidget* pW = NULL;
975  QMdiSubWindow* subWindow = _pWorkspace->activeSubWindow();
976  if (_pWorkspace->subWindowList().count() > 0 && subWindow)
977  {
978  pW = subWindow->widget();
979  }
980 
981  _pPrintAction->setEnabled(false);
982 
983  // Toolbars modeler
987  _pSiteBtnGroup->disconnect();
988 
990  _pMachineBtnGroup->disconnect();
991 
993  _pFaceBtnGroup->disconnect();
994 
996  _pBatimentBtnGroup->disconnect();
997 
999  _pBatimentBtnGroup->disconnect();
1000 
1001  // TODO Check this work around : it seems we were emptying the BtnGroups here,
1002  // which is a priori doubtful
1003  /*
1004  _pToolbarModeler->removeFromButtonGroup(_pSiteBtnGroup);
1005  _pToolbarModeler->removeFromButtonGroup(_pMachineBtnGroup);
1006  _pToolbarModeler->removeFromButtonGroup(_pFaceBtnGroup);
1007  _pToolbarModeler->removeFromButtonGroup(_pBatimentBtnGroup);
1008  */
1009 
1010  // Disambiguate the overloaded signals
1011  void (QButtonGroup::*qButtonGroup_clicked)(int) = &QButtonGroup::idClicked;
1012  void (TYFaceModelerFrame::*tyFaceModelerFrame_editorModeChanged)(int) =
1014 
1015  connectDefaultActionManager(); // On commence par desactiver tous les boutons
1016 
1017  if (pW == NULL)
1018  {
1020  return;
1021  }
1022 
1023  if (dynamic_cast<TYModelerFrame*>(pW) != nullptr)
1024  {
1025  TYModelerFrame* pModeler = (TYModelerFrame*)pW;
1026 
1028 
1029  _pPrintAction->setEnabled(true);
1030 
1031  QObject::connect(pModeler, &TYModelerFrame::viewTypeChanged, _pToolbarModeler,
1033 
1034  // On desactive toutes les toolbars...
1036  _pToolbarInfra->activeButtons(false);
1037  _pToolbarTopo->activeButtons(false);
1040  _pToolbarFace->activeButtons(false);
1041  // ...Puis on active celles qui nous sont utiles
1042 
1043  if (QString(pW->metaObject()->className()).compare("TYSiteModelerFrame") == 0)
1044  {
1046 
1047  QObject::connect(_pSiteBtnGroup, qButtonGroup_clicked, this, &TYMainWindow::saveCurSiteMode);
1048  QObject::connect(_pSiteBtnGroup, qButtonGroup_clicked, pS, &TYSiteModelerFrame::setEditorMode);
1049 
1050  // On fait en sorte de n'activer la toolbar de calcul que pour le modeler pointant
1051  // sur le site racine ou le projet
1052  bool bActiveCalculToolBar = false;
1053 
1054  // On recupere le site node represente
1055  if (pS->getElement()->isA("TYProjet"))
1056  {
1057  bActiveCalculToolBar = true;
1058  }
1059  else
1060  {
1061  if (TYSiteNode::safeDownCast(pS->getElement())->getRoot())
1062  {
1063  bActiveCalculToolBar = true;
1064  }
1065  }
1066 
1067  // Si le calcul est bloque, on ne peut modifier le projet // DTn 20110915 : Meme comportement
1068  // dans tous les cas
1071  {
1072  _pToolbarCalcul->activeButtons(bActiveCalculToolBar);
1076  }
1077  else
1078  {
1079  _pToolbarCalcul->activeButtons(bActiveCalculToolBar);
1083  }
1084 
1086 
1088  }
1089  else if (QString(pW->metaObject()->className()).compare("TYMachineModelerFrame") == 0)
1090  {
1092 
1093  QObject::connect(_pMachineBtnGroup, qButtonGroup_clicked, this,
1095  QObject::connect(_pMachineBtnGroup, qButtonGroup_clicked, pM,
1097 
1098  // Si le calcul est bloque, on ne peut modifier le projet
1100  TYCalcul::Locked)) // DTn : Neutralisation : 20110915
1101  {
1104  }
1105  else
1106  {
1109  }
1110 
1112 
1114  }
1115  else if (QString(pW->metaObject()->className()).compare("TYBatimentModelerFrame") == 0)
1116  {
1118 
1119  QObject::connect(_pBatimentBtnGroup, qButtonGroup_clicked, this,
1121  QObject::connect(_pBatimentBtnGroup, qButtonGroup_clicked, pB,
1123 
1125  TYCalcul::Locked)) // DTn : Neutralisation : 20110915
1126  {
1127  _pToolbarModeler->activeModif(false);
1129  }
1130  else
1131  {
1134  }
1135 
1137 
1139  }
1140  else if (QString(pW->metaObject()->className()).compare("TYFaceModelerFrame") == 0)
1141  {
1143 
1144  QObject::disconnect(pF, tyFaceModelerFrame_editorModeChanged, this,
1146  QObject::connect(pF, tyFaceModelerFrame_editorModeChanged, this, &TYMainWindow::saveCurFaceMode);
1147 
1148  QObject::connect(_pFaceBtnGroup, qButtonGroup_clicked, this, &TYMainWindow::saveCurFaceMode);
1149  QObject::connect(_pFaceBtnGroup, qButtonGroup_clicked, pF, &TYFaceModelerFrame::setEditorMode);
1150 
1152  TYCalcul::Locked)) // DTn : Neutralisation : 20110915
1153  {
1154  _pToolbarModeler->activeModif(false);
1155  _pToolbarFace->activeButtons(false);
1156  }
1157  else
1158  {
1161  }
1162 
1164 
1166  }
1167 
1169 
1170  pModeler->getView()->getRenderer()->updateDisplayList();
1171 
1172  _pCurrentModeler = pModeler;
1173  }
1174  else
1175  {
1177  _pCurrentModeler = NULL;
1178  }
1179 }
1180 
1182 {
1183  _curSiteMode = mode;
1184  assert(_pSiteBtnGroup->button(mode)); // XXX This is a bug point : mode does not match a button.
1185  _pSiteBtnGroup->button(mode)->setChecked(true);
1186 }
1187 
1189 {
1190  _curMachineMode = mode;
1191  assert(_pMachineBtnGroup->button(mode));
1192  _pMachineBtnGroup->button(mode)->setChecked(true);
1193 }
1194 
1196 {
1197  _curBatimentMode = mode;
1198  assert(_pBatimentBtnGroup->button(mode)); // XXX This is a bug point : mode does not match a button.
1199  _pBatimentBtnGroup->button(mode)->setChecked(true);
1200 }
1201 
1203 {
1204  _curFaceMode = mode;
1205  assert(_pFaceBtnGroup->button(mode));
1206  _pFaceBtnGroup->button(mode)->setChecked(true);
1207 }
1208 
1209 void TYMainWindow::updateUndoRedo(bool undoAvailable, bool redoAvailable, const QString& undoCmd,
1210  const QString& redoCmd)
1211 {
1212  _pUndoAction->setEnabled(undoAvailable);
1213  _pRedoAction->setEnabled(redoAvailable);
1214 
1215  if (!undoCmd.isEmpty())
1216  {
1217  _pUndoAction->setText(TR("id_menuitem_undo_name").arg(undoCmd));
1218  }
1219  else
1220  {
1221  _pUndoAction->setText(TR("id_menuitem_undo_na"));
1222  }
1223 
1224  if (!redoCmd.isEmpty())
1225  {
1226  _pRedoAction->setText(TR("id_menuitem_redo_name").arg(redoCmd));
1227  }
1228  else
1229  {
1230  _pRedoAction->setText(TR("id_menuitem_redo_na"));
1231  }
1232 
1233  _pUndoAction->setToolTip(_pUndoAction->text());
1234  _pRedoAction->setToolTip(_pRedoAction->text());
1235 }
1236 
1238 {
1239  _pProjetFrame->setProjet(pProjet);
1240 
1241  // if (pProjet) {
1242  // getTYApp()->setCurSiteNode(pProjet->getSite());
1243  //} else {
1244  // getTYApp()->setCurSiteNode(NULL);
1245  //}
1246 
1247  _pCloseAction->setEnabled(pProjet ? true : false);
1248  // updateCurCalcul();
1249 }
1250 
1252 {
1253  _pSiteFrame->setSiteNodeRoot(pSiteNode);
1254  _pCloseAction->setEnabled(pSiteNode ? true : false);
1255 }
1256 
1258 {
1260  {
1261  if (!_pProjetFrame->getProjet()->getStatusSolver()) // Le solveur du calcul n'est pas disponible
1262  {
1263  if (QMessageBox::warning(this, "Tympan", TR("id_msg_solver_out"), QMessageBox::Yes,
1264  QMessageBox::No) == QMessageBox::Yes)
1265  {
1266  // L'utilisateur accepte d'utiliser le solveur par defaut
1268  OGenID(QString(DEFAULT_SOLVER_UUID)));
1270  _pProjetFrame->getProjet()->setStatusSolver(true); // On est ok sur le solveur
1271  }
1272  else
1273  {
1274  // Le calcul est bloque. Si l'utilisateur le debloque, lancer le calcul appelera le solveur
1275  // courant
1277  }
1278  }
1279  }
1280 
1281  _pGoCurCalculAction->setEnabled(true);
1282  _pEditCurCalculAction->setEnabled(true);
1283 }
1284 
1286 {
1287  close(); // Fermeture de l'lement precedemment actif
1288  TYCreateElementDialog* pDlg = new TYCreateElementDialog(this);
1289  pDlg->exec();
1291 }
1292 
1294 {
1295  close(); // Fermeture de l'lement precedemment actif
1296  TYCreateElementDialog* pDlg = new TYCreateElementDialog(this);
1297  pDlg->createElement("TYProjet");
1299 
1300  // CLM-NT33 - Ouverture automatique du modeler projet
1301  // DTn 20111003 Plus la peine : ouverture assuree par le openElementDialog appele par le
1302  // createElementDialog
1303  // makeProjetModeler(_pProjetFrame->getProjet());
1304 }
1305 
1307 {
1308  close(); // Fermeture de l'lement precedemment actif
1309  TYCreateElementDialog* pDlg = new TYCreateElementDialog(this);
1310  pDlg->createElement("TYSiteNode");
1312 }
1313 
1315 {
1316  close(); // Fermeture de l'lement precedemment actif
1317  TYCreateElementDialog* pDlg = new TYCreateElementDialog(this);
1318  pDlg->createElement("TYBatiment");
1320 }
1321 
1323 {
1324  close(); // Fermeture de l'lement precedemment actif
1325  TYCreateElementDialog* pDlg = new TYCreateElementDialog(this);
1326  pDlg->createElement("TYMachine");
1328 }
1329 
1331 {
1332  close(); // Ferme l'element en cours en demandant la sauvegarde si necessaire
1333  if (!_closeAndQuit) // L'utilisateur ne souhaite pas fermer son projet
1334  {
1335  _closeAndQuit = true;
1336  return;
1337  }
1338 
1339  TYOpenElementDialog* pDlg = new TYOpenElementDialog(this);
1340  pDlg->setMultiSelect(false); // Un seul element peut etre selectionne
1341  pDlg->setDirName(getTYApp()->getCurrentDirName());
1342  pDlg->open();
1343 
1344  if (pDlg->result() == QDialog::Accepted) // si le choix du fichier XML est OK
1345  {
1346  // CLM-NT33 - Choix automatique
1347  if (pDlg->getAvailableElements().size() == 1)
1348  {
1349  pDlg->openElement(pDlg->getAvailableElements()[0]);
1350  }
1351  else
1352  {
1353  pDlg->exec();
1354  }
1355 
1356  TYApplication::setOverrideCursor(Qt::WaitCursor);
1357 
1358  QString strExtend = "";
1359  if (pDlg->isFileReadOnly())
1360  {
1361  strExtend = TR("id_status_file_ro");
1362  _pSaveAction->setEnabled(false); // Desactivation de la fnction de sauvegarde
1363  }
1364 
1365  QString fileName = pDlg->getFileName(); // Nom du fichier lu
1366  setWindowTitle(TR("id_caption") + "-" + TY_CURRENT_RELEASE_ + " (" + TY_PRODUCT_PLATFORM_ +
1367  ") : " + fileName + ' ' + strExtend);
1368 
1371 
1372  TYElement::setIsSavedOk(false); // Tous les elements sont up to date apres le chargement
1373 
1374  TYApplication::restoreOverrideCursor();
1375  }
1376 }
1377 
1378 void TYMainWindow::open(vector<LPTYElement>& tabElem, const bool& bRegenerate /*=false*/)
1379 {
1380  TYElement::setRegenerateID(bRegenerate);
1381 
1382  TYOpenElementDialog* pDlg = new TYOpenElementDialog(this);
1383  pDlg->setMultiSelect(true); // Plusieurs elements peuvent etre selectionnes
1384  pDlg->setDirName(getTYApp()->getCurrentDirName());
1385  pDlg->open();
1386 
1387  if (pDlg->result() == QDialog::Accepted)
1388  {
1389  if (pDlg->getAvailableElements().size() == 1)
1390  {
1391  tabElem.push_back(pDlg->getAvailableElements()[0]);
1392  }
1393  else
1394  {
1395  pDlg->exec();
1396  tabElem = pDlg->getTabElem();
1397  }
1398  }
1399 
1401 }
1402 
1404 {
1405  if (TYElement::getIsSavedOk() == true) // Si un element a ete modifie, il faut sauvegarder
1406  {
1407  switch (QMessageBox::warning(this, "Attention", TR("id_file_not_saved"), QMessageBox::Yes,
1408  QMessageBox::No))
1409  {
1410  case QMessageBox::Yes:
1411  if (_pSaveAction->isEnabled())
1412  {
1413  _closeAndQuit = save();
1414  }
1415  else
1416  {
1417  _closeAndQuit = saveAs();
1418  }
1419 
1420  break;
1421  case QMessageBox::No:
1422  _closeAndQuit = true;
1423  break;
1424  // case QMessageBox::Cancel:
1425  // _closeAndQuit = false;
1426  // break;
1427  }
1428  }
1429 
1430  if (_closeAndQuit)
1431  {
1432  // Fermeture de toutes les fenetres
1433  QList<QMdiSubWindow*> windows = _pWorkspace->subWindowList();
1434 
1435  for (int i = 0; i < int(windows.count()); ++i)
1436  {
1437  windows.at(i)->close();
1438  }
1439 
1440  // On reinitialise le projet et le site courant
1441  getTYApp()->setCurProjet(NULL);
1442  getTYApp()->setCurSiteNode(NULL);
1443  // Par securite, on inhibe le calcul courant connu du calculManager (pourrait expliquer des plantages
1444  // ...)
1445  getTYApp()->getCalculManager()->setCurrent(NULL);
1446 
1447  // On efface le nom de fichier en cours
1448  QString fileName = "";
1449  updateCurrentFileName(fileName);
1450 
1451  _pSaveAction->setEnabled(true); // Plus de fichier ouvert, remise en etat de save
1452 
1453  // plus rien en memoire (theoriquement) donc rien a sauvegarder
1454  TYElement::setIsSavedOk(false);
1455  }
1456 }
1457 
1459 {
1460  _closeAndQuit = true; // A priori
1461 
1462  // Ferme le projet courant et demande si necessaire la sauvegarde du fichier.
1463  close();
1464 
1465  // Ferme l'application
1466  if (_closeAndQuit)
1467  {
1468  // Sauvegarde des settings
1469  saveSettings(
1470  QDir::toNativeSeparators(getTYApp()->getSettingsDir() + "/Settings" + TY_PRODUCT_VERSION_));
1471  // Fermeture de toutes les fenetres
1472  getTYApp()->closeAllWindows();
1473  }
1474 }
1475 
1477 {
1478  TYElement* pElement = NULL;
1479 
1480  if (_pProjetFrame->getProjet()) // Si on est dans un projet, on le sauve (avec son site)
1481  {
1482  pElement = (TYElement*)_pProjetFrame->getProjet();
1483  }
1484  else if (_pSiteFrame->getSiteNodeRoot()) // On sauve que le site si pas de projet mais un site
1485  {
1486  pElement = (TYElement*)_pSiteFrame->getSiteNodeRoot();
1487  }
1488  else // Sinon on sauve ce qu'on peut, l'element actif
1489  {
1490  QWidget* pW = this->focusWidget();
1491  if (pW && (dynamic_cast<TYModelerFrame*>(pW) != nullptr))
1492  {
1493  pElement = ((TYModelerFrame*)pW)->getElement();
1494 
1495  if (pElement && (dynamic_cast<TYAcousticVolume*>(pElement) != nullptr))
1496  {
1497  return pElement;
1498  }
1499 
1500  // Recherche d'un parent de type "acousticVolume"
1501  TYElement* pParent = pElement->getParent();
1502  while (pParent && (dynamic_cast<TYAcousticVolumeNode*>(pParent) == nullptr))
1503  {
1504  pParent = pParent->getParent();
1505  };
1506 
1507  if (pParent && (dynamic_cast<TYAcousticVolumeNode*>(pParent) != nullptr))
1508  {
1509  return pParent;
1510  }
1511  }
1512  }
1513 
1514  return pElement;
1515 }
1516 
1518 {
1519  bool bRet = false;
1520 
1521  TYElement* pElement = elementToSave();
1522 
1523  if (!pElement)
1524  {
1525  QMessageBox::warning(this, "Tympan", TR("id_nothingtoexport"));
1526  return false;
1527  }
1528 
1529  QString dirName;
1530  QString fileName = getFileName("XML (*.xml)", dirName); // Recuperation du nom du fichier courant
1531 
1532  bRet = save(dirName, fileName, pElement); // Sauvegarde effective de l'objet
1533 
1534  if (bRet)
1535  {
1536  QMessageBox::information(this, "Tympan", TR("id_export_ok").arg(fileName));
1537  updateCurrentAppFile(dirName, fileName);
1538 
1539  // Indique que les TYElement sont ok (rien a sauvegarder)
1540  TYElement::setIsSavedOk(false);
1541  }
1542  else
1543  {
1544  QMessageBox::warning(this, "Tympan", TR("id_export_failed").arg(fileName));
1545  }
1546 
1547  return bRet;
1548 }
1549 
1550 bool TYMainWindow::save(QString dirName, QString& fileName, TYElement* pElement)
1551 {
1552  // Controle des parametres
1553  if (!pElement || fileName.isEmpty())
1554  {
1555  return false;
1556  }
1557  if (dirName.isEmpty())
1558  {
1559  dirName = getTYApp()->getCurrentDirName();
1560  }
1561 
1562  bool bRet = false;
1563 
1564  formatFileName(fileName); // Ajoute l'extension si necessaire
1565 
1566  // Creation du fichier XML
1567  TYXMLManager xmlManager;
1568 
1569  QString version(TY_CURRENT_RELEASE_);
1570  QString tiret(" - ");
1571  QString licencie(TY_CUSTOMER_);
1572  QString licenceNumber(TY_LICENCE_NUMBER_);
1573 
1574  QString messageVersion = version + tiret + licencie + tiret + licenceNumber;
1576 
1577  xmlManager.createDoc(TY_PRODUCT_XMLTAG_, messageVersion); // TY_PRODUCT_VERSION_);
1578  xmlManager.addElement(pElement);
1579 
1580  if (xmlManager.save(fileName) == 0)
1581  {
1582  return true;
1583  }
1584 
1585  return bRet;
1586 }
1587 
1589 {
1590  bool bRet = false;
1591 
1592  TYElement* pElement = elementToSave();
1593 
1594  if (!pElement)
1595  {
1596  QMessageBox::warning(this, "Tympan", TR("id_nothingtoexport"));
1597  return false;
1598  }
1599 
1600  QString dirName;
1601  QString fileName = getFileName("XML (*.xml)", dirName, true);
1602 
1603  if (testFile(fileName))
1604  {
1605  bRet = save(dirName, fileName, pElement); // On fait la sauvegarde en ecrasant l'ancienne version
1606 
1607  if (bRet)
1608  {
1609  QMessageBox::information(this, "Tympan", TR("id_export_ok").arg(fileName));
1610  updateCurrentAppFile(dirName, fileName);
1611 
1612  // Indique que les TYElement sont ok (rien a sauvegarder)
1613  TYElement::setIsSavedOk(false);
1614  }
1615  else
1616  {
1617  QMessageBox::warning(this, "Tympan", TR("id_export_failed").arg(fileName));
1618  }
1619  }
1620 
1621  return bRet;
1622 }
1623 
1625 {
1626  bool bRet = false;
1627 
1628  TYProjet* pProjet = getTYApp()->getCurProjet();
1629 
1630  if (!pProjet)
1631  {
1632  QMessageBox::warning(this, "Tympan", TR("id_nothingtoexport"));
1633  return false;
1634  }
1635 
1636  QString dirName;
1637  QString fileName = getFileName("XML (*.xml)", dirName, true);
1638 
1639  TYProjet::gSaveValues = false;
1640  if (testFile(fileName))
1641  {
1642  bRet = save(dirName, fileName, pProjet); // On fait la sauvegarde en ecrasant l'ancienne version
1643 
1644  if (bRet)
1645  {
1646  QMessageBox::information(this, "Tympan", TR("id_export_ok").arg(fileName));
1647  }
1648  else
1649  {
1650  QMessageBox::warning(this, "Tympan", TR("id_export_failed").arg(fileName));
1651  }
1652  }
1653 
1654  TYProjet::gSaveValues = true;
1655 
1656  return bRet;
1657 }
1658 
1660 {
1661  bool bRet = false;
1662 
1663  if (pElement == NULL)
1664  {
1665  return bRet;
1666  }
1667 
1668  QString dirName;
1669  QString fileName = getFileName("XML (*.xml)", dirName, true);
1670 
1671  if (testFile(fileName))
1672  {
1673  bRet = save(dirName, fileName, pElement);
1674 
1675  if (bRet)
1676  {
1677  QMessageBox::information(this, "Tympan", TR("id_export_ok").arg(fileName));
1678  }
1679  else
1680  {
1681  QMessageBox::warning(this, "Tympan", TR("id_export_failed").arg(fileName));
1682  }
1683  }
1684 
1685  return bRet;
1686 }
1687 
1688 void TYMainWindow::updateCurrentAppFile(const QString& dirName, const QString& fileName)
1689 {
1690  getTYApp()->setCurrentDirName(dirName);
1691  getTYApp()->setCurrentFileName(fileName);
1692 
1693  setWindowTitle(TR("id_caption") + "-" + TY_CURRENT_RELEASE_ + " (" + TY_PRODUCT_PLATFORM_ +
1694  ") : " + fileName);
1695 }
1696 
1697 bool TYMainWindow::backupFile(const QString& fileName)
1698 {
1699  // Creation du nom du fichier
1700  QFileInfo fi(fileName);
1701 
1702  QString nomFichier = fi.absolutePath() + '/' + fi.baseName() + ".bak";
1703 
1704  // Ouverture du fichier d'origine
1705  QFile fileToSave(fileName);
1706  bool bOpen = fileToSave.open(QIODevice::ReadOnly);
1707 
1708  if (!bOpen)
1709  {
1710  return false;
1711  }
1712 
1713  // Ouverture du fichier backup
1714  QFile backupFile(nomFichier);
1715  bOpen = backupFile.open(QIODevice::WriteOnly);
1716 
1717  if (!bOpen)
1718  {
1719  fileToSave.close();
1720  return false;
1721  }
1722 
1723  // Copie en bloc de l'un dans l'autre
1724  backupFile.write(fileToSave.readAll());
1725 
1726  // Fermeture des fichier
1727  fileToSave.close();
1728  backupFile.close();
1729 
1730  return true;
1731 }
1732 
1734 {
1735  TYPluginDialog* pDlg = new TYPluginDialog(this);
1736  pDlg->exec();
1737 
1738  // Mise a jour du solveur pour le calcul courant si calcul pas bloque
1739  if (_pProjetFrame->getProjet())
1742  {
1744  }
1745 }
1746 
1747 bool TYMainWindow::testFile(const QString& fileName)
1748 {
1749  // Verification de l'etat du fichier
1750  QFileInfo fi(fileName);
1751  // Si le fichier existe , on demande confirmation a l'utilisateur
1752  if (fi.exists())
1753  {
1754  // On ecrase le fichier, puis on sauve
1755  QFile* file = new QFile(fileName);
1756  switch (
1757  QMessageBox::warning(this, "Attention", TR("id_file_exist"), QMessageBox::Yes, QMessageBox::No))
1758  {
1759  case QMessageBox::Yes:
1760  if (!file->remove())
1761  {
1762  QMessageBox::warning(this, "Attention", TR("id_file_cannot_be_clear"));
1763  return false;
1764  }
1765 
1766  break;
1767  case QMessageBox::No:
1768  return false; // On sort sans sauvegarder
1769  break;
1770  }
1771 
1772  delete file;
1773  file = NULL;
1774  }
1775 
1776  return true;
1777 }
1778 
1779 QString TYMainWindow::getFileName(const QString& filter, QString& dirName,
1780  const bool& forceNewName /*=false*/)
1781 {
1782  QString fileName = getTYApp()->getCurrentFileName(); // Recuperation du nom du fichier courant
1783 
1784  if (!forceNewName && !fileName.isEmpty())
1785  {
1786  return fileName;
1787  }
1788 
1789  // Recuperation de la terminaison de fichier a creer
1790  short index = filter.indexOf(".");
1791  QString end = filter.mid(index, 4);
1792 
1793  // NOUVELLE VERSION POUR RECUPERER LE REPERTOIRE
1794  dirName = getTYApp()->getCurrentDirName();
1795 
1796  QFileDialog* pDialog = new QFileDialog(parentWidget(), "Choose a file", dirName, filter);
1797  pDialog->setFileMode(QFileDialog::AnyFile);
1798  pDialog->setAcceptMode(QFileDialog::AcceptSave);
1799  pDialog->exec();
1800 
1801  QStringList list = pDialog->selectedFiles();
1802  if ((pDialog->result() == QDialog::Accepted) && (!list.isEmpty()))
1803  {
1804  fileName = list.first();
1805 
1806  QDir dir = pDialog->directory();
1807  dirName = dir.absolutePath();
1808 
1809  pDialog = NULL;
1810 
1811  if (!fileName.endsWith(end))
1812  {
1813  fileName += end;
1814  }
1815  }
1816  else
1817  {
1818  fileName = "";
1819  }
1820 
1821  return fileName;
1822 }
1823 
1825 {
1826  QWidget* pW = this->focusWidget();
1827 
1828  if (pW && (dynamic_cast<TYModelerFrame*>(pW) != nullptr))
1829  {
1830  ((TYModelerFrame*)pW)->print();
1831  }
1832 }
1833 
1835 {
1836  emit onUndo();
1837 }
1838 
1840 {
1841  emit onRedo();
1842 }
1843 
1845 {
1846  about();
1847 }
1848 
1850 {
1851  about();
1852 }
1853 
1855 {
1856  about();
1857 }
1858 
1860 
1862 
1863 void TYMainWindow::showBiblio(bool show) {}
1864 
1866 {
1867  TYPreferenceDialog* pDlg = new TYPreferenceDialog(this);
1868  pDlg->exec();
1869 }
1870 
1872 {
1873  _pOutputDockWnd->setVisible(show);
1874 }
1875 
1877 {
1878  _pHideOrShowOutputAction->setChecked(_pOutputDockWnd->isVisible());
1879 }
1880 
1882 {
1883  QProcess* pImporterLauncher = new QProcess(this);
1884 
1885  // On travail dans le repertoire utilisateur
1886  pImporterLauncher->setWorkingDirectory(TYApplication::tympanUserDir());
1887 
1888  // Le nom de l'executable
1889  // pImporterLauncher->addArgument("Importer");
1890 
1891  // Lancement
1892  pImporterLauncher->start("Importer", QStringList(""));
1893 
1894  if (pImporterLauncher->state() == QProcess::Running)
1895  {
1896  writeOutputMsg(TR("id_msg_importer_ok"));
1897  }
1898  else
1899  {
1900  writeOutputMsg(TR("id_msg_importer_fail"));
1901  }
1902 }
1903 
1904 void TYMainWindow::closeEvent(QCloseEvent* pEvent)
1905 {
1906  _closeAndQuit = true; // A priori
1907 
1908  // Avant tout, on sauvegarde le fichier (si necessaire)
1909  close();
1910 
1911  if (!_closeAndQuit)
1912  {
1913  return;
1914  } // Annulation de l'action
1915 
1916  // Main window
1917  TYPreferenceManager::saveGeometryToPreferences(metaObject()->className(), this);
1918 
1919  // Dock windows
1920  QObjectList objectsList = children(); // dockWindows();
1921  QWidget* pDockWnd = NULL;
1922  QObject* pObject = NULL;
1923 
1924  for (int _i = 0; _i < objectsList.size(); _i++)
1925  {
1926  pObject = objectsList[_i];
1927  if ((pObject->objectName() == "ProjetDockWnd") || (pObject->objectName() == "SiteDockWnd") ||
1928  (pObject->objectName() == "OutputDockWnd") ||
1929  (strcmp(pObject->metaObject()->className(), "QToolBar") == 0) ||
1930  (dynamic_cast<QToolBar*>(pObject) != nullptr))
1931  {
1932 
1933  pDockWnd = (QWidget*)pObject;
1934  QString key = pDockWnd->objectName();
1935 
1936  // Geometry
1937  TYPreferenceManager::saveGeometryToPreferences(key, pDockWnd);
1938  }
1939  }
1940 
1941  // Sauvegarde des settings
1942  saveSettings(QDir::toNativeSeparators(getTYApp()->getSettingsDir() + "/Settings" + TY_PRODUCT_VERSION_));
1943 
1944  QMainWindow::closeEvent(pEvent);
1945 }
1946 
1947 void TYMainWindow::updateCurrentFileName(const QString& fileName)
1948 {
1949  // Informe l'application du nom du fichier courant
1951 
1952  // Change le titre de la fenetre pour afficher le nom du fichier
1953  setWindowTitle(TR("id_caption") + "-" + TY_CURRENT_RELEASE_ + " (" + TY_PRODUCT_PLATFORM_ +
1954  ") : " + fileName);
1955 }
1956 
1957 // CLM-NT33 : Raffraichissement du nom de fichier en vue modeleur
1959 {
1960  // Change le titre de la fenetre pour afficher le nom du fichier
1961  setWindowTitle(TR("id_caption") + "-" + TY_CURRENT_RELEASE_ + " (" + TY_PRODUCT_PLATFORM_ +
1963 }
1964 // CLM-NT33 : Fin
void writeOutputMsg(QString msg)
Affiche un message dans la fenetre de sortie.
TYApplication * getTYApp()
Retourne le pointeur sur l'application.
pour l'application Tympan (fichier header)
Modeler specialisee pour l'edition des batiments (fichier header)
Barre d'outils Batiment (fichier header)
Barre d'outil calcul (fichier header)
Boite de dialogue pour la creation d'un nouvel element metier. L'element cree peut etre sauvegarde en...
Definit un popup menu, necessaire pour maitriser l'ouverture automtique apres un createPopupMenu (fic...
class OGenID TYUUID
Definition: TYDefines.h:59
Classe Modeler specialisee pour l'edition des faces (fichier header)
Barre d'outils Face (fichier header)
Barre d'outil infastructure (fichier header)
Modeler specialisee pour l'edition des machines (fichier header)
Barre d'outils Machine (fichier header)
#define IMG(id)
#define TR(id)
Fenetre principale de l'application Tympan (fichier header)
Classe generique pour une fenetre de modeleur (fichier header)
Barre d'outils generale pour les modelers (fichier header)
Boite de dialogue pour le chargement d'un element metier (fichier header)
Frame pour les messages de retour (fichier header)
Gestion de la table de correspondance indice/element pour le picking (fichier header)
Boite de dialogue pour la selection du plugin de calcul (fichier header)
#define DEFAULT_SOLVER_UUID
Tables pour le dialogue de la gestion des preferences (fichier header)
Frame pour la gestion de projet (fichier header)
Frame pour la gestion de site (fichier header)
Classe Modeler specialisee pour l'edition des sites (fichier header)
outil IHM pour un spectre (fichier header)
Barre d'outils topographie (fichier header)
Definition: idgen.h:28
static OPrototype * safeDownCast(OPrototype *pObject)
Definition: TYElement.cpp:71
bool isA(const char *className) const
Definition: TYElement.cpp:65
Gere les undos.
void redo()
Effectue a nouveau la derniere action annulee.
void undo()
Annule la derniere action.
void emitUndoRedo()
Envoie un signal informant sur l'etat de ce ActionManager.
void undoRedoChanged(bool undoAvailable, bool redoAvailable, const QString &undoCmd, const QString &redoCmd)
Indique l'etat de ce ActionManager.
void setCurSiteNode(LPTYSiteNode pSiteNode)
Set/Get du site node courant.
static const QString & getCurrentDirName()
LPTYProjet getCurProjet()
Set/Get du projet courant.
static QString tympanAppDir()
Retourne le chemin du dossier de l'application.
TYCalculManager * getCalculManager()
Get du gestionnaire de calculs.
Definition: TYApplication.h:99
static const QString & getCurrentFileName()
Retourne le nom du fichier en cours d'utilisation.
void curSiteNodeChanged(LPTYSiteNode pCurSiteNode)
Signal que le site node courant a change.
void curProjetChanged(LPTYProjet pCurProjet)
Signal que le projet courant a change.
static void setCurrentFileName(const QString &fileName)
Enregistre le nom du ficgier de travail courant.
static QString tympanUserDir()
Retourne le chemin du dossier de sauvegarde de l'utilisateur courant. Celui-ci est donne par la varia...
void setCurProjet(LPTYProjet pProjet)
Set/Get du projet courant.
static void setCurrentDirName(const QString &dirName)
Get/Set du repertoire de travail courant.
Classe Modeler specialisee pour l'edition des batiments.
void setBatiment(LPTYBatiment pBatiment)
Set/Get du bâtiment a editer.
virtual void setEditorMode(int mode)
Barre d'outils Batiment.
void activeButtons(bool active)
Active/Desactive chaque boutons.
bool launchCurrent()
Execute le calcul courant.
void setCurrent(LPTYCalcul pCalcul)
Set du Calcul et Projet courant.
Barre d'outil calcul.
void activeButtons(bool active)
Active/Desactive chaque boutons.
int getState()
Get calculation state.
Definition: TYCalcul.h:416
@ Locked
Definition: TYCalcul.h:62
@ Actif
Definition: TYCalcul.h:63
void setSolverId(const OGenID &iD)
Set solver ID.
Definition: TYCalcul.h:455
void setState(int state)
Set editable attribute.
Definition: TYCalcul.h:406
Boite de dialogue pour la creation d'un nouvel element metier. L'element cree peut etre sauvegarde en...
void createElement(QString eltType)
Gere la creation d'un nouvel element au sein de l'application.
Definit un popup menu, necessaire pour maitriser l'ouverture automtique apres un createPopupMenu.
TYElement * getParent() const
Definition: TYElement.h:699
static void setLogInstances(bool log)
Definition: TYElement.h:832
static void setIsSavedOk(const bool &toSave)
Definition: TYElement.h:915
const TYUUID & getID() const
Definition: TYElement.cpp:176
static void setRegenerateID(const bool &bRegenerate)
Definition: TYElement.h:923
static bool getIsSavedOk()
Definition: TYElement.h:907
static TYElement * getInstance(TYUUID uuid)
Definition: TYElement.cpp:158
Classe Modeler specialisee pour l'edition des faces.
virtual void setEditorMode(int mode)
Barre d'outils Face.
Definition: TYFaceToolbar.h:41
void activeButtons(bool active)
Active/Desactive chaque boutons.
Barre d'outil infastructure.
void activeButtons(bool active)
Classe Modeler specialisee pour l'edition des machines.
void setMachine(LPTYMachine pMachine)
virtual void setEditorMode(int mode)
Barre d'outils Machine.
void activeButtons(bool active)
Fenetre principale de l'application Tympan.
Definition: TYMainWindow.h:53
void updateModelersAfterComputation(LPTYProjet &result)
void updateHideOrShowOutputAction(bool visibilityChanged)
QDockWidget * _pOutputDockWnd
Fenetre dockable pour les messages de retour.
Definition: TYMainWindow.h:565
TYProjetFrame * _pProjetFrame
Frame pour la gestion de projets.
Definition: TYMainWindow.h:553
virtual ~TYMainWindow()
void editCurCalcul()
TYInfraToolbar * _pToolbarInfra
Toolbar infrastructure.
Definition: TYMainWindow.h:527
TYElement * elementToSave()
void updateCurrentAppFile(const QString &dirName, const QString &fileName)
TYFaceToolbar * _pToolbarFace
Toolbar machine.
Definition: TYMainWindow.h:543
QString getFileName(const QString &filter, QString &dirName, const bool &forceNewName=false)
Produit un nom de fichier valide (ou rien !)
QButtonGroup * _pBatimentBtnGroup
Button group pour la toolbar batiment.
Definition: TYMainWindow.h:546
void createNewBatiment()
QAction * _pOpenAction
Action pour ouvrir le gestionnaire de bibliotheques.
Definition: TYMainWindow.h:455
QDockWidget * _pSiteDockWnd
Fenetre dockable pour la gestion de sites.
Definition: TYMainWindow.h:560
void updateCurrentFileName(const QString &fileName)
void createNewSite()
void saveCurBatimentMode(int mode)
TYSiteFrame * _pSiteFrame
Frame pour la gestion de sites.
Definition: TYMainWindow.h:558
void saveCurFaceMode(int mode)
TYTopoToolbar * _pToolbarTopo
Toolbar topographie.
Definition: TYMainWindow.h:525
void setCurSiteNode(LPTYSiteNode pSiteNode)
QAction * _pCreateNewAction
Action pour creer un nouvel element.
Definition: TYMainWindow.h:453
bool loadSettings(const QString &fileName)
void makeSiteModeler(LPTYSiteNode pSite=NULL)
bool _closeAndQuit
Indicateur d'annulation de commande de sortie.
Definition: TYMainWindow.h:582
TYCalculToolbar * _pToolbarCalcul
Toolbar calcul.
Definition: TYMainWindow.h:529
void formatFileName(QString &fileName)
Definition: TYMainWindow.h:178
bool backupFile(const QString &fileName)
QAction * _pSaveAsAction
Action pour sauvegarder un element sous un nom specifique.
Definition: TYMainWindow.h:463
void updateUndoRedo(bool undoAvailable, bool redoAvailable, const QString &undoCmd, const QString &redoCmd)
void createNewProjet()
bool makeBatimentModeler(LPTYBatiment pBatiment=NULL)
QAction * _pUndoAction
Action pour realiser un undo.
Definition: TYMainWindow.h:483
int _curSiteMode
Conserve le mode courant des fenetres SiteModeler.
Definition: TYMainWindow.h:523
QAction * _pPrintAction
Action pour imprimer.
Definition: TYMainWindow.h:480
QAction * _pRedoAction
Action pour realiser un redo.
Definition: TYMainWindow.h:485
void windowsMenuActivated()
QButtonGroup * _pFaceBtnGroup
Button group pour la toolbar face.
Definition: TYMainWindow.h:539
void showPluginManager()
QAction * _pSaveAction
Action pour sauvegarder un element.
Definition: TYMainWindow.h:460
QAction * _pHideOrShowOutputAction
Affiche ou cache la fenetre de sortie des messages.
Definition: TYMainWindow.h:501
QMdiArea * _pWorkspace
Workspace pour la gestion MDI.
Definition: TYMainWindow.h:445
QAction * _pPasteAction
Action pour realiser un coller.
Definition: TYMainWindow.h:492
bool makeModeler(TYElement *pElt)
void reloadSlots()
void saveCurMachineMode(int mode)
QAction * _pCloseAction
Action pour fermer le projet ou site courant.
Definition: TYMainWindow.h:457
QButtonGroup * _pMachineBtnGroup
Button group pour la toolbar machine.
Definition: TYMainWindow.h:532
void updateModelers(bool clipping=true, bool axesAndGrid=true, bool displayList=true)
void connectActionManager(TYActionManager *pActionManager)
TYModelerToolbar * _pToolbarModeler
Toolbar generale pour les modelers.
Definition: TYMainWindow.h:518
void showBiblio(bool show)
QAction * _pHideOrShowSpectreMngrAction
Affiche ou cache le Spectre Manager.
Definition: TYMainWindow.h:495
int _curFaceMode
Conserve le mode courant des fenetres FaceModeler.
Definition: TYMainWindow.h:541
TYMachineToolbar * _pToolbarMachine
Toolbar machine.
Definition: TYMainWindow.h:536
void createNewMachine()
QMenu * _pWindowsMenu
Gestionnaire de spectres.
Definition: TYMainWindow.h:576
void refreshWindowTitle()
void showPreferenceDialog()
QAction * _pHideOrShowMaillageMngrAction
Affiche ou cache le Maillage Manager.
Definition: TYMainWindow.h:497
void makeProjetModeler(LPTYProjet pProjet=NULL)
virtual void closeEvent(QCloseEvent *pEvent)
void launchImporter()
void showMaillageManager(bool show)
bool saveSettings(const QString &fileName)
TYModelerFrame * _pCurrentModeler
Modeler en cours d'affichage.
Definition: TYMainWindow.h:450
void connectDefaultActionManager()
QAction * _pGoCurCalculAction
Action pour lancer le calcul courant.
Definition: TYMainWindow.h:506
void updateModelersElementGraphic(bool force=false)
QToolBar * _pCalculAcousticToolbar
Toolbar pour les calculs acoustiques.
Definition: TYMainWindow.h:515
QAction * _pCutAction
Action pour realiser un couper.
Definition: TYMainWindow.h:488
bool makeMachineModeler(LPTYMachine pMachine=NULL)
QAction * _pEditCurCalculAction
Action pour editer les preferences du calcul courant.
Definition: TYMainWindow.h:504
void setCurProjet(LPTYProjet pProjet)
QAction * _pSaveAsNoResultAction
Action pour sauvegarder un element sous un nom specifique sans les resultats de calcul.
Definition: TYMainWindow.h:466
void showOutput(bool show)
virtual QMenu * createPopupMenu()
bool testFile(const QString &fileName)
Teste l'existence et la possibilite d'ecrire le fichier.
QTextBrowser * _pHelpBrowser
Navigateur d'aide.
Definition: TYMainWindow.h:579
int _curMachineMode
Conserve le mode courant des fenetres MachineModeler.
Definition: TYMainWindow.h:534
void goCurCalcul()
void windowsMenuAboutToShow()
QToolBar * _pWindowToolbar
Toolbar pour la gestion des fenetres.
Definition: TYMainWindow.h:512
TYOutputFrame * _pOutputFrame
Frame pour les messages de retour.
Definition: TYMainWindow.h:563
void saveCurSiteMode(int mode)
bool saveAsNoResult()
void closeModeler(const TYElement *pElement)
QButtonGroup * _pSiteBtnGroup
Button group pour les toolbars site.
Definition: TYMainWindow.h:521
QAction * _pCopyAction
Action pour realiser un copier.
Definition: TYMainWindow.h:490
QToolBar * _pMainToolbar
Toolbar principale.
Definition: TYMainWindow.h:509
QAction * _pShowPluginManagerAction
Action pour afficher le gestionnaire de plug-ins.
Definition: TYMainWindow.h:469
TYBatimentToolbar * _pToolbarBatiment
Toolbar batiment.
Definition: TYMainWindow.h:550
void subWindowActivated()
int _curBatimentMode
Conserve le mode courant des fenetres BatimentModeler.
Definition: TYMainWindow.h:548
QDockWidget * _pProjetDockWnd
Fenetre dockable pour la gestion de projets.
Definition: TYMainWindow.h:555
void showSpectreManager(bool show)
QAction * _pHideOrShowBiblioAction
Affiche ou cache la Bibliotheque d'elements.
Definition: TYMainWindow.h:499
void setDefaultCameraMode()
void updateCurCalcul()
Classe generique pour une fenetre de modeleur.
void updateElementGraphic(bool force=false)
LPTYElement getElement()
TYRenderWindowInteractor * getView()
void setEditorModeToCamera()
void editorModeChanged(int mode)
void viewTypeChanged(int)
void aboutToClose()
TYActionManager * getActionManager()
void frameResized()
virtual void updateView(bool clipping=true, bool axesAndGrid=true)
Barre d'outils generale pour les modelers.
void viewTypeChanged(int view)
void activeCameraButtons(int view)
void addToButtonGroup(QButtonGroup *pBtnGroup)
void activeButtons(bool active)
void activeModif(bool active)
Boite de dialogue pour le chargement d'un element metier. L'element peut etre ouvert dans un modeleur...
void openElement(LPTYElement pElt)
void setDirName(const QString &value)
Set du nom du repertoire de travail.
void setMultiSelect(const bool &b)
QString getDirName()
Get du nom du repertoire de travail.
std::vector< LPTYElement > getTabElem()
LPTYElementArray getAvailableElements()
Realise le rendu VTK et le rendu OpenGL.
void updateDisplayList(void)
void setModelerElement(TYElement *pElement)
Frame pour les messages de retour.
Definition: TYOutputFrame.h:40
classe graphique pour la gestion de la table de correspondanceindice/element pour le picking
Boite de dialogue pour la selection du plugin de calcul.
OGenID current_solver
Boite de dialogue pour la gestion des preferences.
Frame pour la gestion de projet.
Definition: TYProjetFrame.h:42
LPTYProjet getProjet()
Definition: TYProjetFrame.h:58
void changeSite(LPTYSiteNode pSite)
void setProjet(LPTYProjet pProjet)
void changeCurrentCalcul(LPTYCalcul pCalcul)
classe de definition d'un projet.
Definition: TYProjet.h:45
void setStatusSolver(const bool &bStatus)
Definition: TYProjet.h:574
bool getStatusSolver()
Get/Set du statut de disponibilite du solveur du calcul courant.
Definition: TYProjet.h:566
LPTYCalcul getCurrentCalcul()
Set/Get du pointeur du Calcul courant.
Definition: TYProjet.h:426
static bool gSaveValues
Definition: TYProjet.h:587
Le role de cette classe est limite a emettre des signaux pouvant etre utilise pour interagir sur le r...
virtual void updateGL()
TYOpenGLRenderer * getRenderer()
Frame pour la gestion de site.
Definition: TYSiteFrame.h:43
TYSiteNode * getSiteNodeRoot()
Definition: TYSiteFrame.h:59
void setSiteNodeRoot(LPTYSiteNode pSiteNode)
Definition: TYSiteFrame.cpp:89
void setCurrentCalcul(LPTYCalcul pCalcul)
Definition: TYSiteFrame.h:142
Classe Modeler specialisee pour l'edition des sites.
virtual void setEditorMode(int mode)
void setProjet(LPTYProjet pProjet)
virtual void setRenderMaillageModeSlot()
virtual void updateView(bool clipping=true, bool axesAndGrid=true)
Barre d'outils topographie.
Definition: TYTopoToolbar.h:35
void activeButtons(bool active)
int save(QString fileName)
void createDoc(QString docName, QString version)
int addElement(TYElement *pElt)
static void setSavedFileName(QString savedFileName)
Definition: TYXMLManager.h:131
#define TY_PRODUCT_PLATFORM_
Definition: defines.h:52