diff --git a/misc/launch_qet.sh b/misc/launch_qet.sh index 1a7c4d8b6..2f626542d 100755 --- a/misc/launch_qet.sh +++ b/misc/launch_qet.sh @@ -38,4 +38,4 @@ fi # launching ${QET_EXE} ${OPTIONS} $* -cd - +cd - > /dev/null 2>&1 diff --git a/sources/editor/qetelementeditor.cpp b/sources/editor/qetelementeditor.cpp index 1dc137a34..24561b299 100644 --- a/sources/editor/qetelementeditor.cpp +++ b/sources/editor/qetelementeditor.cpp @@ -107,6 +107,11 @@ void QETElementEditor::setupActions() { add_arc = new QAction(QET::Icons::PartArc, tr("Ajouter un arc de cercle"), this); add_terminal = new QAction(QET::Icons::Terminal, tr("Ajouter une borne"), this); add_textfield = new QAction(QET::Icons::PartTextField, tr("Ajouter un champ de texte"), this); + fullscreen = new QAction(this); + slot_updateFullScreenAction(); + configure = new QAction(QET::Icons::Configure, tr("&Configurer QElectroTech"), this); + about_qet = new QAction(QET::Icons::QETLogo, tr("\300 &propos de QElectroTech"), this); + about_qt = new QAction(QET::Icons::QtLogo, tr("\300 propos de &Qt"), this); QString add_status_tip = tr("Maintenez la touche Shift enfonc\351e pour effectuer plusieurs ajouts d'affil\351e"); add_line -> setStatusTip(add_status_tip); @@ -117,7 +122,10 @@ void QETElementEditor::setupActions() { add_arc -> setStatusTip(add_status_tip); add_terminal -> setStatusTip(add_status_tip); add_textfield -> setStatusTip(add_status_tip); - add_polygon -> setStatusTip(tr("Utilisez le bouton droit de la souris pour poser le dernier point du polygone")); + add_polygon -> setStatusTip(tr("Utilisez le bouton droit de la souris pour poser le dernier point du polygone")); + configure -> setStatusTip(tr("Permet de r\351gler diff\351rents param\350tres de QElectroTech", "status bar tip")); + about_qet -> setStatusTip(tr("Affiche des informations sur QElectroTech", "status bar tip")); + about_qt -> setStatusTip(tr("Affiche des informations sur la biblioth\350que Qt", "status bar tip")); undo = ce_scene -> undoStack().createUndoAction(this, tr("Annuler")); redo = ce_scene -> undoStack().createRedoAction(this, tr("Refaire")); @@ -147,6 +155,8 @@ void QETElementEditor::setupActions() { zoom_fit -> setShortcut(QKeySequence(tr("Ctrl+9"))); zoom_reset -> setShortcut(QKeySequence(tr("Ctrl+0"))); + fullscreen -> setShortcut(QKeySequence(tr("Ctrl+Shift+F"))); + edit_names -> setShortcut(QKeySequence(tr("Ctrl+E"))); edit_size_hs -> setShortcut(QKeySequence(tr("Ctrl+R"))); edit_ori -> setShortcut(QKeySequence(tr("Ctrl+T"))); @@ -156,6 +166,8 @@ void QETElementEditor::setupActions() { edit_backward -> setShortcut(QKeySequence(tr("Ctrl+Shift+End"))); edit_forward -> setShortcut(QKeySequence(tr("Ctrl+Shift+Home"))); + QETApp *qet_app = QETApp::instance(); + connect(new_element, SIGNAL(triggered()), this, SLOT(slot_new())); connect(open, SIGNAL(triggered()), this, SLOT(slot_open())); connect(open_file, SIGNAL(triggered()), this, SLOT(slot_openFile())); @@ -178,6 +190,8 @@ void QETElementEditor::setupActions() { connect(edit_delete, SIGNAL(triggered()), ce_scene, SLOT(slot_delete())); connect(edit_size_hs, SIGNAL(triggered()), ce_scene, SLOT(slot_editSizeHotSpot())); connect(edit_names, SIGNAL(triggered()), ce_scene, SLOT(slot_editNames())); + connect(fullscreen, SIGNAL(triggered()), this, SLOT(toggleFullScreen())); + connect(configure, SIGNAL(triggered()), qet_app, SLOT(configureQET())); connect(edit_ori, SIGNAL(triggered()), ce_scene, SLOT(slot_editOrientations())); connect(edit_forward, SIGNAL(triggered()), ce_scene, SLOT(slot_bringForward())); connect(edit_raise, SIGNAL(triggered()), ce_scene, SLOT(slot_raise())); @@ -205,6 +219,9 @@ void QETElementEditor::setupActions() { connect(add_terminal, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView())); connect(add_textfield, SIGNAL(triggered()), this, SLOT(slot_setNoDragToView())); + connect(about_qet, SIGNAL(triggered()), qet_app, SLOT(aboutQET())); + connect(about_qt, SIGNAL(triggered()), qet_app, SLOT(aboutQt())); + connect(ce_scene, SIGNAL(needNormalMode()), this, SLOT(slot_setNormalMode())); move -> setCheckable(true); @@ -292,16 +309,18 @@ void QETElementEditor::setupActions() { Met en place les menus. */ void QETElementEditor::setupMenus() { - file_menu = new QMenu(tr("Fichier"), this); - edit_menu = new QMenu(tr("\311dition"), this); - display_menu = new QMenu(tr("Affichage"), this); - tools_menu = new QMenu(tr("Outils"), this); - help_menu = new QMenu(tr("Aide"), this); + file_menu = new QMenu(tr("Fichier"), this); + edit_menu = new QMenu(tr("\311dition"), this); + display_menu = new QMenu(tr("Affichage"), this); + tools_menu = new QMenu(tr("Outils"), this); + config_menu = new QMenu(tr("&Configuration"), this); + help_menu = new QMenu(tr("Aide"), this); file_menu -> setTearOffEnabled(true); edit_menu -> setTearOffEnabled(true); display_menu -> setTearOffEnabled(true); tools_menu -> setTearOffEnabled(true); + config_menu -> setTearOffEnabled(true); help_menu -> setTearOffEnabled(true); file_menu -> addAction(new_element); @@ -340,20 +359,29 @@ void QETElementEditor::setupMenus() { edit_menu -> addAction(edit_lower); edit_menu -> addAction(edit_backward); - // menu Affichage > Afficher + display_menu -> addAction(zoom_in); + display_menu -> addAction(zoom_out); + display_menu -> addAction(zoom_fit); + display_menu -> addAction(zoom_reset); + + // menu Configurer > Afficher QMenu *display_toolbars = createPopupMenu(); display_toolbars -> setTearOffEnabled(true); display_toolbars -> setTitle(tr("Afficher")); - display_menu -> addMenu(display_toolbars); + + config_menu -> addMenu(display_toolbars); + config_menu -> addAction(fullscreen); + config_menu -> addAction(configure); + + help_menu -> addAction(about_qet); + help_menu -> addAction(about_qt); menuBar() -> addMenu(file_menu); menuBar() -> addMenu(edit_menu); menuBar() -> addMenu(display_menu); - - /* - menuBar() -> addMenu(tools_menu); + //menuBar() -> addMenu(tools_menu); + menuBar() -> addMenu(config_menu); menuBar() -> addMenu(help_menu); - */ } /** @@ -374,6 +402,23 @@ void QETElementEditor::slot_updateMenus() { edit_lower -> setEnabled(selected_items); edit_backward -> setEnabled(selected_items); save -> setEnabled(!ce_scene -> undoStack().isClean()); + + slot_updateFullScreenAction(); +} + +/** + Gere l'action permettant de passer en plein ecran ou d'en sortir +*/ +void QETElementEditor::slot_updateFullScreenAction() { + if (windowState() & Qt::WindowFullScreen) { + fullscreen -> setText(tr("Sortir du &mode plein \351cran")); + fullscreen -> setIcon(QET::Icons::FullScreenExit); + fullscreen -> setStatusTip(tr("Affiche QElectroTech en mode fen\352tr\351", "status bar tip")); + } else { + fullscreen -> setText(tr("Passer en &mode plein \351cran")); + fullscreen -> setIcon(QET::Icons::FullScreenEnter); + fullscreen -> setStatusTip(tr("Affiche QElectroTech en mode plein \351cran", "status bar tip")); + } } /** @@ -970,6 +1015,19 @@ void QETElementEditor::closeEvent(QCloseEvent *qce) { } else qce -> ignore(); } +/** + Gere les evenements du l'editeur d'element + Reimplemente ici pour : + * mettre a jour l'action permettant d'entrer en mode plein ecran ou d'en sortir + @param e Evenement +*/ +bool QETElementEditor::event(QEvent *e) { + if (e -> type() == QEvent::WindowStateChange) { + slot_updateFullScreenAction(); + } + return(QMainWindow::event(e)); +} + /** Remplit la liste des parties */ @@ -1032,6 +1090,13 @@ void QETElementEditor::slot_updateSelectionFromPartsList() { slot_updateMenus(); } +/** + Fait passer la fenetre du mode plein ecran au mode normal et vice-versa +*/ +void QETElementEditor::toggleFullScreen() { + setWindowState(windowState() ^ Qt::WindowFullScreen); +} + /// Lit les parametres de l'editeur d'element void QETElementEditor::readSettings() { QSettings &settings = QETApp::settings(); diff --git a/sources/editor/qetelementeditor.h b/sources/editor/qetelementeditor.h index 3b32923e5..767bd0769 100644 --- a/sources/editor/qetelementeditor.h +++ b/sources/editor/qetelementeditor.h @@ -43,7 +43,7 @@ class QETElementEditor : public QMainWindow { /// booleen indiquant si l'editeur est en mode "lecture seule" ou non bool read_only; /// menus - QMenu *file_menu, *edit_menu, *display_menu, *tools_menu, *help_menu; + QMenu *file_menu, *edit_menu, *display_menu, *tools_menu, *config_menu, *help_menu; /// vue sur la scene d'edition ElementView *ce_view; /// scene d'edition @@ -68,9 +68,16 @@ class QETElementEditor : public QMainWindow { QAction *selectall, *deselectall, *inv_select; QAction *cut, *copy, *paste, *paste_in_area; QAction *undo, *redo; - QAction *zoom_in, *zoom_out, *zoom_fit, *zoom_reset; QAction *edit_delete, *edit_size_hs, *edit_names, *edit_ori; QAction *edit_raise, *edit_lower, *edit_backward, *edit_forward; + /// actions du menu affichage + QAction *zoom_in, *zoom_out, *zoom_fit, *zoom_reset; + /// actions du menu configurer + QAction *fullscreen; ///< Passe en mode plein ecran ou en sort + QAction *configure; ///< Lance le dialogue de configuration de QElectroTech + /// actions du menu aide + QAction *about_qet; ///< Lance le dialogue "A propos de QElectroTech" + QAction *about_qt; ///< Lance le dialogue "A propos de Qt" /// barres d'outils QToolBar *parts_toolbar, *main_toolbar, *view_toolbar, *depth_toolbar, *element_toolbar; /// actions de la barre d'outils @@ -113,6 +120,7 @@ class QETElementEditor : public QMainWindow { protected: void closeEvent(QCloseEvent *); + virtual bool event(QEvent *); private: void setupActions(); @@ -136,10 +144,12 @@ class QETElementEditor : public QMainWindow { void slot_setNormalMode(); void slot_updateInformations(); void slot_updateMenus(); + void slot_updateFullScreenAction(); void slot_updateTitle(); void slot_createPartsList(); void slot_updatePartsList(); void slot_updateSelectionFromPartsList(); + void toggleFullScreen(); void xmlPreview(); bool checkElement(); }; diff --git a/sources/qetapp.cpp b/sources/qetapp.cpp index e4d8a619a..e40cc624f 100644 --- a/sources/qetapp.cpp +++ b/sources/qetapp.cpp @@ -16,6 +16,8 @@ along with QElectroTech. If not, see . */ #include "qetapp.h" +#include "aboutqet.h" +#include "configdialog.h" #include "qetdiagrameditor.h" #include "qetelementeditor.h" #include "elementscollectionitem.h" @@ -37,6 +39,7 @@ QMap QETApp::registered_projects_ = QMap uint QETApp::next_project_id = 0; RecentFiles *QETApp::projects_recent_files_ = 0; RecentFiles *QETApp::elements_recent_files_ = 0; +AboutQET *QETApp::about_dialog_ = 0; /** Constructeur @@ -99,6 +102,9 @@ QETApp::~QETApp() { projects_recent_files_ -> save(); delete elements_recent_files_; delete projects_recent_files_; + if (about_dialog_) { + delete about_dialog_; + } delete qsti; delete custom_collection; delete common_collection; @@ -727,6 +733,61 @@ void QETApp::openElementFiles(const QStringList &files_list) { } } +/** + Permet a l'utilisateur de configurer QET en lancant un dialogue approprie. + @see ConfigDialog +*/ +void QETApp::configureQET() { + // determine le widget parent a utiliser pour le dialogue +#ifdef Q_WS_MAC + QWidget *parent_widget = 0; +#else + QWidget *parent_widget = activeWindow(); +#endif + + // cree le dialogue + ConfigDialog cd; + + // associe le dialogue a un eventuel widget parent + if (parent_widget) { + cd.setParent(parent_widget, cd.windowFlags()); + } + + // affiche le dialogue puis evite de le lier a un quelconque widget parent + cd.exec(); + cd.setParent(0, cd.windowFlags()); +} + +/** + Dialogue "A propos de QElectroTech" + Le dialogue en question est cree lors du premier appel de cette fonction. + En consequence, sa premiere apparition n'est pas immediate. Par la suite, + le dialogue n'a pas a etre recree et il apparait instantanement. Il est + detruit en meme temps que l'application. +*/ +void QETApp::aboutQET() { + // determine le widget parent a utiliser pour le dialogue +#ifdef Q_WS_MAC + QWidget *parent_widget = 0; +#else + QWidget *parent_widget = activeWindow(); +#endif + + // cree le dialogue si cela n'a pas deja ete fait + if (!about_dialog_) { + about_dialog_ = new AboutQET(); + } + + // associe le dialogue a un eventuel widget parent + if (parent_widget) { + about_dialog_ -> setParent(parent_widget, about_dialog_ -> windowFlags()); + } + + // affiche le dialogue puis evite de le lier a un quelconque widget parent + about_dialog_ -> exec(); + about_dialog_ -> setParent(0, about_dialog_ -> windowFlags()); +} + /** @param window fenetre dont il faut trouver les barres d'outils et dock flottants @return les barres d'outils et dock flottants de la fenetre diff --git a/sources/qetapp.h b/sources/qetapp.h index c59d65dd5..901600a89 100644 --- a/sources/qetapp.h +++ b/sources/qetapp.h @@ -22,6 +22,7 @@ #include #include "elementslocation.h" #include "qetarguments.h" +class AboutQET; class QETDiagramEditor; class QETElementEditor; class ElementsCollection; @@ -136,6 +137,7 @@ class QETApp : public QETSingleApplication { static uint next_project_id; static RecentFiles *projects_recent_files_; static RecentFiles *elements_recent_files_; + static AboutQET *about_dialog_; public slots: void systray(QSystemTrayIcon::ActivationReason); @@ -157,6 +159,8 @@ class QETApp : public QETSingleApplication { void openFiles(const QETArguments &); void openProjectFiles(const QStringList &); void openElementFiles(const QStringList &); + void configureQET(); + void aboutQET(); // methodes privees private slots: diff --git a/sources/qetdiagrameditor.cpp b/sources/qetdiagrameditor.cpp index 274291867..7a8d067ed 100644 --- a/sources/qetdiagrameditor.cpp +++ b/sources/qetdiagrameditor.cpp @@ -20,9 +20,7 @@ #include "diagramview.h" #include "diagram.h" #include "elementspanelwidget.h" -#include "aboutqet.h" #include "conductorpropertieswidget.h" -#include "configdialog.h" #include "qetproject.h" #include "projectview.h" #include "recentfiles.h" @@ -168,18 +166,6 @@ void QETDiagramEditor::toggleFullScreen() { setWindowState(windowState() ^ Qt::WindowFullScreen); } -/** - Dialogue "A propos de QElectroTech" - Le dialogue en question est cree lors du premier appel de cette fonction. - En consequence, sa premiere apparition n'est pas immediate. Par la suite, - le dialogue n'a pas a etre recree et il apparait instantanement. Il est - detruit en meme temps que son parent (ici, le QETDiagramEditor). -*/ -void QETDiagramEditor::aboutQET() { - static AboutQET *apqet = new AboutQET(this); - apqet -> exec(); -} - /** Mise en place des actions */ @@ -353,6 +339,8 @@ void QETDiagramEditor::actions() { grp_view_mode -> addAction(tabbed_view_mode); grp_view_mode -> setExclusive(true); + QETApp *qet_app = QETApp::instance(); + // connexion a des slots connect(quit_editor, SIGNAL(triggered()), this, SLOT(close()) ); connect(select_all, SIGNAL(triggered()), this, SLOT(slot_selectAll()) ); @@ -361,13 +349,13 @@ void QETDiagramEditor::actions() { connect(delete_selection, SIGNAL(triggered()), this, SLOT(slot_delete()) ); connect(rotate_selection, SIGNAL(triggered()), this, SLOT(slot_rotate()) ); connect(fullscreen, SIGNAL(triggered()), this, SLOT(toggleFullScreen()) ); - connect(configure, SIGNAL(triggered()), this, SLOT(configureQET()) ); + connect(configure, SIGNAL(triggered()), qet_app, SLOT(configureQET()) ); connect(windowed_view_mode, SIGNAL(triggered()), this, SLOT(setWindowedMode()) ); connect(tabbed_view_mode, SIGNAL(triggered()), this, SLOT(setTabbedMode()) ); connect(mode_selection, SIGNAL(triggered()), this, SLOT(slot_setSelectionMode()) ); connect(mode_visualise, SIGNAL(triggered()), this, SLOT(slot_setVisualisationMode()) ); - connect(about_qet, SIGNAL(triggered()), this, SLOT(aboutQET()) ); - connect(about_qt, SIGNAL(triggered()), qApp, SLOT(aboutQt()) ); + connect(about_qet, SIGNAL(triggered()), qet_app, SLOT(aboutQET()) ); + connect(about_qt, SIGNAL(triggered()), qet_app, SLOT(aboutQt()) ); connect(prj_edit_prop, SIGNAL(triggered()), this, SLOT(editCurrentProjectProperties())); connect(prj_add_diagram, SIGNAL(triggered()), this, SLOT(addDiagramToProject()) ); connect(prj_del_diagram, SIGNAL(triggered()), this, SLOT(removeDiagramFromProject()) ); @@ -1712,15 +1700,6 @@ void QETDiagramEditor::findElementInPanel(const ElementsLocation &location) { } } -/** - Permet a l'utilisateur de configurer QET en lancant un dialogue approprie. - @see ConfigDialog -*/ -void QETDiagramEditor::configureQET() { - ConfigDialog cd(this); - cd.exec(); -} - /** @return Les proprietes par defaut pour le cartouche d'un schema */ diff --git a/sources/qetdiagrameditor.h b/sources/qetdiagrameditor.h index 0ffeca817..db65ba209 100644 --- a/sources/qetdiagrameditor.h +++ b/sources/qetdiagrameditor.h @@ -78,8 +78,6 @@ class QETDiagramEditor : public QMainWindow { public slots: void toggleFullScreen(); - void configureQET(); - void aboutQET(); void printDialog(); void exportDialog(); bool saveAsDialog();