Le systray reduit ou restaure desormais toutes les fenetres

git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@130 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
xavierqet
2007-09-21 18:07:05 +00:00
parent 438c7ae69e
commit 2ad6c27998
7 changed files with 37 additions and 114 deletions

View File

@@ -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();
}

View File

@@ -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();

View File

@@ -1,5 +1,5 @@
#include "qetapp.h"
#include "qetdiagrameditor.h"
/**
Fonction principale du programme QElectroTech
@param argc nombre de parametres

View File

@@ -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,7 +22,7 @@ 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(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()) {
@@ -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
*/

View File

@@ -47,11 +47,13 @@ class QETApp : public QApplication {
QAction *quitter_qet;
QHash<QMainWindow *, QByteArray> window_geometries;
QHash<QMainWindow *, QByteArray> window_states;
bool every_editor_reduced;
public slots:
void systray(QSystemTrayIcon::ActivationReason);
void systrayReduce();
void systrayRestore();
void closeEveryEditor();
// methodes privees
private slots:

View File

@@ -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);

View File

@@ -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