diff --git a/ico/splash.png b/ico/splash.png new file mode 100644 index 000000000..18fe98d30 Binary files /dev/null and b/ico/splash.png differ diff --git a/qelectrotech.qrc b/qelectrotech.qrc index eb9aeb576..17c8bb222 100644 --- a/qelectrotech.qrc +++ b/qelectrotech.qrc @@ -64,6 +64,7 @@ ico/send_backward.png ico/sortir_fs.png ico/south.png + ico/splash.png ico/terminal.png ico/text.png ico/textfield.png diff --git a/qetapp.cpp b/qetapp.cpp index 68c407972..335b3b5db 100644 --- a/qetapp.cpp +++ b/qetapp.cpp @@ -37,6 +37,7 @@ RecentFiles *QETApp::elements_recent_files_ = 0; */ QETApp::QETApp(int &argc, char **argv) : QETSingleApplication(argc, argv, QString("qelectrotech-" + QETApp::userName())), + splash_screen_(0), non_interactive_execution_(false) { parseArguments(); @@ -55,6 +56,7 @@ QETApp::QETApp(int &argc, char **argv) : std::exit(EXIT_SUCCESS); } + initSplashScreen(); initStyle(); initSystemTray(); @@ -72,11 +74,14 @@ QETApp::QETApp(int &argc, char **argv) : // on ouvre soit les fichiers passes en parametre soit un nouvel editeur de projet if (qet_arguments_.files().isEmpty()) { + setSplashScreenStep(tr("Chargement... \311diteur de sch\351mas")); new QETDiagramEditor(); } else { + setSplashScreenStep(tr("Chargement... Ouverture des fichiers")); openFiles(qet_arguments_); } buildSystemTrayMenu(); + splash_screen_ -> hide(); } /// Destructeur @@ -612,6 +617,30 @@ void QETApp::parseArguments() { } } +/** + Initialise le splash screen si et seulement si l'execution est interactive. + Autrement, l'attribut splash_screen_ vaut 0. +*/ +void QETApp::initSplashScreen() { + if (non_interactive_execution_) return; + splash_screen_ = new QSplashScreen(QPixmap(":/ico/splash.png")); + splash_screen_ -> show(); + setSplashScreenStep(tr("Chargement...")); +} + +/** + Change le texte du splash screen et prend en compte les evenements. + Si l'application s'execute de facon non interactive, cette methode ne fait + rien. +*/ +void QETApp::setSplashScreenStep(const QString &message) { + if (!splash_screen_) return; + if (!message.isEmpty()) { + splash_screen_ -> showMessage(message, Qt::AlignBottom | Qt::AlignLeft); + } + processEvents(); +} + /** Determine et applique le langage a utiliser pour l'application */ @@ -660,6 +689,7 @@ void QETApp::initConfiguration() { Construit l'icone dans le systray et son menu */ void QETApp::initSystemTray() { + setSplashScreenStep(tr("Chargement... icône du systray")); // initialisation des menus de l'icone dans le systray menu_systray = new QMenu(tr("QElectroTech")); diff --git a/qetapp.h b/qetapp.h index f745987aa..f4271394f 100644 --- a/qetapp.h +++ b/qetapp.h @@ -84,6 +84,7 @@ class QETApp : public QETSingleApplication { QTranslator qtTranslator; QTranslator qetTranslator; QSystemTrayIcon *qsti; + QSplashScreen *splash_screen_; QMenu *menu_systray; QAction *quitter_qet; QAction *reduce_appli; @@ -136,6 +137,8 @@ class QETApp : public QETSingleApplication { private: QList floatingToolbarsAndDocksForMainWindow(QMainWindow *) const; void parseArguments(); + void initSplashScreen(); + void setSplashScreenStep(const QString & = QString()); void initLanguage(); void initStyle(); void initConfiguration();