diff --git a/editor/qetelementeditor.cpp b/editor/qetelementeditor.cpp index 89ebabab9..40a96bae5 100644 --- a/editor/qetelementeditor.cpp +++ b/editor/qetelementeditor.cpp @@ -66,7 +66,7 @@ void QETElementEditor::setupActions() { connect(open, SIGNAL(triggered()), this, SLOT(slot_open())); connect(save, SIGNAL(triggered()), this, SLOT(slot_save())); connect(save_as, SIGNAL(triggered()), this, SLOT(slot_saveAs())); - connect(quit, SIGNAL(triggered()), this, SLOT(slot_quit())); + connect(quit, SIGNAL(triggered()), this, SLOT(close())); connect(selectall, SIGNAL(triggered()), ce_scene, SLOT(slot_selectAll())); connect(deselectall, SIGNAL(triggered()), ce_scene, SLOT(slot_deselectAll())); connect(inv_select, SIGNAL(triggered()), ce_scene, SLOT(slot_invertSelection())); @@ -119,6 +119,7 @@ void QETElementEditor::setupActions() { parts -> setExclusive(true); parts_toolbar = new QToolBar(tr("Parties"), this); + parts_toolbar -> setObjectName("parts"); foreach (QAction *action, parts -> actions()) parts_toolbar -> addAction(action); move -> setChecked(true); parts_toolbar -> setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea); @@ -205,6 +206,7 @@ void QETElementEditor::setupInterface() { // panel sur le cote pour editer les parties tools_dock = new QDockWidget(tr("Informations"), this); + tools_dock -> setObjectName("informations"); tools_dock -> setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); tools_dock -> setFeatures(QDockWidget::AllDockWidgetFeatures); tools_dock -> setMinimumWidth(290); @@ -215,6 +217,7 @@ void QETElementEditor::setupInterface() { // panel sur le cote pour les annulations undo_dock = new QDockWidget(tr("Annulations"), this); + undo_dock -> setObjectName("undo"); undo_dock -> setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); undo_dock -> setFeatures(QDockWidget::AllDockWidgetFeatures); undo_dock -> setMinimumWidth(290); @@ -429,14 +432,7 @@ bool QETElementEditor::slot_saveAs() { return(result_save); } -void QETElementEditor::slot_quit(QCloseEvent *event) { - if (close()) { - if (event != NULL) event -> accept(); - delete(this); - } else if (event != NULL) event -> ignore(); -} - -bool QETElementEditor::close() { +bool QETElementEditor::canClose() { if (ce_scene -> undoStack().isClean()) return(true); // demande d'abord a l'utilisateur s'il veut enregistrer l'element en cours QMessageBox::StandardButton answer = QMessageBox::question( @@ -460,5 +456,8 @@ bool QETElementEditor::close() { @param qce Le QCloseEvent correspondant a l'evenement de fermeture */ void QETElementEditor::closeEvent(QCloseEvent *qce) { - slot_quit(qce); + if (canClose()) { + setAttribute(Qt::WA_DeleteOnClose); + qce -> accept(); + } else qce -> ignore(); } diff --git a/editor/qetelementeditor.h b/editor/qetelementeditor.h index 89febf539..acabc032e 100644 --- a/editor/qetelementeditor.h +++ b/editor/qetelementeditor.h @@ -71,14 +71,13 @@ class QETElementEditor : public QMainWindow { void setupActions(); void setupMenus(); void setupInterface(); - bool close(); + bool canClose(); public slots: void slot_new(); void slot_open(); bool slot_save(); bool slot_saveAs(); - void slot_quit(QCloseEvent * = NULL); void slot_setRubberBandToView(); void slot_setNoDragToView(); void slot_setNormalMode(); diff --git a/main.cpp b/main.cpp index cf684f775..c309b0a1a 100644 --- a/main.cpp +++ b/main.cpp @@ -1,5 +1,5 @@ #include "qetapp.h" - +#include "qetdiagrameditor.h" /** Fonction principale du programme QElectroTech @param argc nombre de parametres diff --git a/qetapp.cpp b/qetapp.cpp index 3e93528b7..8937a629f 100644 --- a/qetapp.cpp +++ b/qetapp.cpp @@ -9,7 +9,7 @@ QETApp::QETApp(int &argc, char **argv) : QApplication(argc, argv) { // QET se loge dans le systray et ne doit donc pas quitter des que toutes // les fenetres sont cachees - setQuitOnLastWindowClosed(false); + //setQuitOnLastWindowClosed(false); // selectionne le langage du systeme QString system_language = QLocale::system().name().left(2); @@ -22,9 +22,9 @@ QETApp::QETApp(int &argc, char **argv) : QApplication(argc, argv) { quitter_qet -> setStatusTip(tr("Ferme l'application QElectroTech")); reduce_appli -> setToolTip(tr("Reduire QElectroTech dans le systray")); restore_appli -> setToolTip(tr("Restaurer QElectroTech")); - connect(quitter_qet, SIGNAL(triggered()), this, SLOT(quit()) ); - connect(reduce_appli, SIGNAL(triggered()), this, SLOT(systrayReduce()) ); - connect(restore_appli, SIGNAL(triggered()), this, SLOT(systrayRestore()) ); + connect(quitter_qet, SIGNAL(triggered()), this, SLOT(closeEveryEditor())); + connect(reduce_appli, SIGNAL(triggered()), this, SLOT(systrayReduce())); + connect(restore_appli, SIGNAL(triggered()), this, SLOT(systrayRestore())); if (QSystemTrayIcon::isSystemTrayAvailable()) { qsti = new QSystemTrayIcon(QIcon(":/ico/qet.png"), this); qsti -> setToolTip(tr("QElectroTech")); @@ -35,6 +35,7 @@ QETApp::QETApp(int &argc, char **argv) : QApplication(argc, argv) { menu_systray -> addAction(quitter_qet); qsti -> setContextMenu(menu_systray); qsti -> show(); + every_editor_reduced = false; } } @@ -78,7 +79,7 @@ void QETApp::systray(QSystemTrayIcon::ActivationReason reason) { case QSystemTrayIcon::DoubleClick: case QSystemTrayIcon::Trigger: // reduction ou restauration de l'application - //if (isVisible()) systrayReduce(); else systrayRestore(); + if (every_editor_reduced) systrayRestore(); else systrayReduce(); break; case QSystemTrayIcon::Unknown: default: // ne rien faire @@ -95,6 +96,7 @@ void QETApp::systrayReduce() { // on ajoute le menu "Restaurer" et on enleve le menu "Masquer" menu_systray -> insertAction(reduce_appli, restore_appli); menu_systray -> removeAction(reduce_appli); + every_editor_reduced = true; } /** @@ -106,6 +108,7 @@ void QETApp::systrayRestore() { // on ajoute le menu "Masquer" et on enleve le menu "Restaurer" menu_systray -> insertAction(restore_appli, reduce_appli); menu_systray -> removeAction(restore_appli); + every_editor_reduced = false; } /** @@ -188,6 +191,16 @@ QString QETApp::languagesPath() { return(QDir::current().path() + "/lang/"); } +/** + Ferme tous les editeurs +*/ +void QETApp::closeEveryEditor() { + // s'assure que toutes les fenetres soient visibles avant de quitter + systrayRestore(); + foreach(QETDiagramEditor *e, diagramEditors()) e -> close(); + foreach(QETElementEditor *e, elementEditors()) e -> close(); +} + /** Nettoie certaines choses avant que l'application ne quitte */ diff --git a/qetapp.h b/qetapp.h index 8e1a32e55..9f8c5d6cb 100644 --- a/qetapp.h +++ b/qetapp.h @@ -47,11 +47,13 @@ class QETApp : public QApplication { QAction *quitter_qet; QHash window_geometries; QHash window_states; + bool every_editor_reduced; public slots: void systray(QSystemTrayIcon::ActivationReason); void systrayReduce(); void systrayRestore(); + void closeEveryEditor(); // methodes privees private slots: diff --git a/qetdiagrameditor.cpp b/qetdiagrameditor.cpp index 3a9f0b485..1effae680 100644 --- a/qetdiagrameditor.cpp +++ b/qetdiagrameditor.cpp @@ -60,6 +60,7 @@ QETDiagramEditor::QETDiagramEditor(QWidget *parent) : QMainWindow(parent) { // ajout du panel d'Appareils en tant que QDockWidget qdw_pa = new QDockWidget(tr("Panel d'appareils"), this); + qdw_pa -> setObjectName("elements panel"); qdw_pa -> setAllowedAreas(Qt::AllDockWidgetAreas); qdw_pa -> setFeatures(QDockWidget::AllDockWidgetFeatures); qdw_pa -> setMinimumWidth(160); @@ -75,18 +76,6 @@ QETDiagramEditor::QETDiagramEditor(QWidget *parent) : QMainWindow(parent) { // mise en place des menus menus(); - // systray de l'application - if (QSystemTrayIcon::isSystemTrayAvailable()) { - qsti = new QSystemTrayIcon(QIcon(":/ico/qet.png"), this); - qsti -> setToolTip(tr("QElectroTech")); - connect(qsti, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(systray(QSystemTrayIcon::ActivationReason))); - menu_systray = new QMenu(tr("QElectroTech")); - menu_systray -> addAction(reduce_appli); - menu_systray -> addAction(quitter_qet); - qsti -> setContextMenu(menu_systray); - qsti -> show(); - } - // la fenetre est maximisee par defaut setMinimumWidth(500); setMinimumHeight(350); @@ -103,67 +92,11 @@ QETDiagramEditor::QETDiagramEditor(QWidget *parent) : QMainWindow(parent) { QETDiagramEditor::~QETDiagramEditor() { } -/** - Gere les evenements relatifs au QSystemTrayIcon - @param raison un entier representant l'evenement survenu sur le systray -*/ -void QETDiagramEditor::systray(QSystemTrayIcon::ActivationReason reason) { - if (!QSystemTrayIcon::isSystemTrayAvailable()) return; - switch(reason) { - case QSystemTrayIcon::Context: - // affichage du menu - (qsti -> contextMenu()) -> show(); - break; - case QSystemTrayIcon::DoubleClick: - case QSystemTrayIcon::Trigger: - // reduction ou restauration de l'application - if (isVisible()) systrayReduce(); else systrayRestore(); - break; - case QSystemTrayIcon::Unknown: - default: // ne rien faire - break; - } -} - -/** - Reduit l'application dans le systray -*/ -void QETDiagramEditor::systrayReduce() { - // on sauvegarde la position et les dimensions de l'application - wg = saveGeometry(); - // on cache l'application - hide(); - // on ajoute le menu "Restaurer" et on enleve le menu "Masquer" - menu_systray -> insertAction(reduce_appli, restore_appli); - menu_systray -> removeAction(reduce_appli); -} - -/** - Restaure l'application reduite dans le systray -*/ -void QETDiagramEditor::systrayRestore() { - // on restaure la position et les dimensions de l'application - restoreGeometry(wg); - // on affiche l'application - show(); - // on ajoute le menu "Masquer" et on enleve le menu "Restaurer" - menu_systray -> insertAction(restore_appli, reduce_appli); - menu_systray -> removeAction(restore_appli); -} - /** Permet de quitter l'application lors de la fermeture de la fenetre principale @param qce Le QCloseEvent correspondant a l'evenement de fermeture */ void QETDiagramEditor::closeEvent(QCloseEvent *qce) { - quit(qce); -} - -/** - Gere la sortie de l'application - @param e Le QCloseEvent correspondant a l'evenement de fermeture -*/ -void QETDiagramEditor::quit(QCloseEvent *e) { // quitte directement s'il n'y a aucun schema ouvert bool peut_quitter = true; if (diagramEnCours()) { @@ -173,15 +106,15 @@ void QETDiagramEditor::quit(QCloseEvent *e) { workspace.setActiveWindow(fenetre); if (!fermer()) { peut_quitter = false; - if (e != NULL) e -> ignore(); + qce -> ignore(); break; } } } } if (peut_quitter) { - if (QSystemTrayIcon::isSystemTrayAvailable()) qsti -> hide(); - qApp -> quit(); + setAttribute(Qt::WA_DeleteOnClose); + qce -> accept(); } } @@ -256,13 +189,6 @@ void QETDiagramEditor::actions() { a_propos_de_qet = new QAction(QIcon(":/ico/qet.png"), tr("\300 &propos de QElectroTech"), this); a_propos_de_qt = new QAction(QIcon(":/ico/qt.png"), tr("\300 propos de &Qt"), this); - reduce_appli = new QAction(QIcon(":/ico/masquer.png"), tr("&Masquer"), this); - restore_appli = new QAction(QIcon(":/ico/restaurer.png"), tr("&Restaurer"), this); - - // info-bulles - reduce_appli -> setToolTip(tr("Reduire QElectroTech dans le systray")); - restore_appli -> setToolTip(tr("Restaurer QElectroTech")); - // raccourcis clavier nouveau_fichier -> setShortcut(QKeySequence::New); ouvrir_fichier -> setShortcut(QKeySequence::Open); @@ -354,7 +280,7 @@ void QETDiagramEditor::actions() { grp_visu_sel -> setExclusive(true); // connexion a des slots - connect(quitter_qet, SIGNAL(triggered()), this, SLOT(quit()) ); + connect(quitter_qet, SIGNAL(triggered()), this, SLOT(close()) ); connect(sel_tout, SIGNAL(triggered()), this, SLOT(slot_selectAll()) ); connect(sel_rien, SIGNAL(triggered()), this, SLOT(slot_selectNothing()) ); connect(sel_inverse, SIGNAL(triggered()), this, SLOT(slot_selectInvert()) ); @@ -366,8 +292,6 @@ void QETDiagramEditor::actions() { connect(mode_visualise, SIGNAL(triggered()), this, SLOT(slot_setVisualisationMode())); connect(a_propos_de_qet, SIGNAL(triggered()), this, SLOT(aPropos()) ); connect(a_propos_de_qt, SIGNAL(triggered()), qApp, SLOT(aboutQt()) ); - connect(reduce_appli, SIGNAL(triggered()), this, SLOT(systrayReduce()) ); - connect(restore_appli, SIGNAL(triggered()), this, SLOT(systrayRestore()) ); connect(zoom_avant, SIGNAL(triggered()), this, SLOT(slot_zoomPlus()) ); connect(zoom_arriere, SIGNAL(triggered()), this, SLOT(slot_zoomMoins()) ); connect(zoom_adapte, SIGNAL(triggered()), this, SLOT(slot_zoomFit()) ); @@ -487,6 +411,7 @@ void QETDiagramEditor::menus() { */ void QETDiagramEditor::toolbar() { barre_outils = new QToolBar(tr("Outils"), this); + barre_outils -> setObjectName("toolbar"); // Modes selection / visualisation barre_outils -> addAction(mode_selection); diff --git a/qetdiagrameditor.h b/qetdiagrameditor.h index 68997bea6..1c417600a 100644 --- a/qetdiagrameditor.h +++ b/qetdiagrameditor.h @@ -35,10 +35,6 @@ class QETDiagramEditor : public QMainWindow { void toolbar(); public slots: - void systray(QSystemTrayIcon::ActivationReason); - void systrayReduce(); - void systrayRestore(); - void quit(QCloseEvent * = NULL); void toggleFullScreen(); void aPropos(); void dialog_print(); @@ -101,8 +97,6 @@ class QETDiagramEditor : public QMainWindow { QAction *expand_diagram; QAction *shrink_diagram; QAction *poser_fil; - QAction *reduce_appli; - QAction *restore_appli; QAction *zoom_avant; QAction *zoom_arriere; QAction *zoom_adapte; @@ -117,7 +111,6 @@ class QETDiagramEditor : public QMainWindow { QAction *f_reorganise; QAction *f_prec; QAction *f_suiv; - QAction *menu_systray_masquer_restaurer; private: QWorkspace workspace; @@ -126,15 +119,7 @@ class QETDiagramEditor : public QMainWindow { QDockWidget *qdw_pa; /// Panel d'Appareils ElementsPanelWidget *pa; - /// Elements de menus pour l'icone du systray - QMenu *menu_systray; - QAction *systray_masquer; - QAction * config_fullscreen; QMenu *menu_fenetres; - /// Icone dans le systray - QSystemTrayIcon *qsti; - /// Geometrie de la fenetre principale - QByteArray wg; QToolBar *barre_outils; }; #endif