diff --git a/cmake/version.cmake b/cmake/version.cmake index 3458889..6a7769d 100644 --- a/cmake/version.cmake +++ b/cmake/version.cmake @@ -3,7 +3,7 @@ # set (QT_UTIL_MAJOR_VERSION "6") -set (QT_UTIL_MINOR_VERSION "5") +set (QT_UTIL_MINOR_VERSION "6") set (QT_UTIL_RELEASE_VERSION "0") set (QT_UTIL_VERSION ${QT_UTIL_MAJOR_VERSION}.${QT_UTIL_MINOR_VERSION}.${QT_UTIL_RELEASE_VERSION}) diff --git a/src/QtUtil/QtMessageBox.cpp b/src/QtUtil/QtMessageBox.cpp index 8be3765..644fe04 100644 --- a/src/QtUtil/QtMessageBox.cpp +++ b/src/QtUtil/QtMessageBox.cpp @@ -373,7 +373,7 @@ int QtMessageBox::displayQuestionMessage (QWidget* parent, const UTF8String& tit } // QtMessageBox::displayQuestionMessage -int QtMessageBox::systemNotification (const UTF8String& appTitle, const UTF8String& message, URGENCY_LEVEL level, size_t duration) // v 6.5.0 +int QtMessageBox::systemNotification (const UTF8String& appTitle, const string& appIconFile, const UTF8String& message, URGENCY_LEVEL level, size_t duration) // v 6.6.0 { static bool available = true; if (false == available) @@ -400,6 +400,11 @@ int QtMessageBox::systemNotification (const UTF8String& appTitle, const UTF8Stri notifySend->getOptions ( ).addOption ("-a"); notifySend->getOptions ( ).addOption (appTitle.utf8 ( )); } // if (false == appTitle.empty ( )) + if (false == appIconFile.empty ( )) + { + notifySend->getOptions ( ).addOption ("-i"); + notifySend->getOptions ( ).addOption (appIconFile); + } // if (false == appIconFile.empty ( )) notifySend->getOptions ( ).addOption (message.utf8 ( )); notifySend->execute (false); notifySend->wait ( ); @@ -409,3 +414,39 @@ int QtMessageBox::systemNotification (const UTF8String& appTitle, const UTF8Stri return notifySend->getCompletionCode ( ); } // QtMessageBox::systemNotification + + +// =========================================================================== +// LA CLASSE ActionCompletionNotifier +// =========================================================================== + +ActionCompletionNotifier::ActionCompletionNotifier ( + const UTF8String& appTitle, const string& appIconFile, const UTF8String& message, QtMessageBox::URGENCY_LEVEL level, size_t duration, size_t minimumTimeLapse) + : _timer ( ), _appTitle (appTitle), _message (message), _appIconFile (appIconFile), _urgencyLevel (level), _duration (duration), _minimumTimeLapse (minimumTimeLapse) +{ + if (0 != _minimumTimeLapse) + _timer.start ( ); +} + + +ActionCompletionNotifier::ActionCompletionNotifier (const ActionCompletionNotifier&) +{ + assert (0 && "ActionCompletionNotifier copy constructor is not allowed."); +} // ActionCompletionNotifier::ActionCompletionNotifier + + +ActionCompletionNotifier& ActionCompletionNotifier::operator = (const ActionCompletionNotifier&) +{ + assert (0 && "ActionCompletionNotifier assignment operator is not allowed."); + return *this; +} // ActionCompletionNotifier::operator = + + +ActionCompletionNotifier::~ActionCompletionNotifier ( ) +{ + if (0 != _minimumTimeLapse) + _timer.stop ( ); + + if ((0 == _minimumTimeLapse) || (_timer.duration ( ) >= _minimumTimeLapse)) + QtMessageBox::systemNotification (_appTitle, _appIconFile, _message, _urgencyLevel, _duration); +} // ActionCompletionNotifier::~ActionCompletionNotifier diff --git a/src/QtUtil/public/QtUtil/QtMessageBox.h b/src/QtUtil/public/QtUtil/QtMessageBox.h index 9c643e4..cf1db2f 100644 --- a/src/QtUtil/public/QtUtil/QtMessageBox.h +++ b/src/QtUtil/public/QtUtil/QtMessageBox.h @@ -3,6 +3,7 @@ #ifndef QT_MESSAGE_BOX_H #define QT_MESSAGE_BOX_H +#include #include #include @@ -167,13 +168,15 @@ class QtMessageBox /** * Envoie la notification système transmise en argument. Repose sur notify-send. Attention, les caractères accentués semblent ne pas passer. * @param Titre de l'application + * @param (Eventuel) fichier icône de l'application * @param Message à afficher * @param Niveau d'urgence * @param Durée (en millisecondes) de la notification. * @return 0 si la notification s'est bien passée, ou un code d'erreur. - * @since 6.5.0 + * @since 6.6.0 + * @see ActionCompletionNotifier */ - static int systemNotification (const IN_UTIL UTF8String& appTitle, const IN_UTIL UTF8String& message, URGENCY_LEVEL level = URGENCY_NORMAL, size_t duration = 5000); + static int systemNotification (const IN_UTIL UTF8String& appTitle, const std::string& appIconFile, const IN_UTIL UTF8String& message, URGENCY_LEVEL level = URGENCY_NORMAL, size_t duration = 5000); private : @@ -229,5 +232,46 @@ class QtMessageDialog : public QDialog }; // class QtMessageDialog +/** + * Cette classe permet d'envoyer une notification système lorsque le destructeur est appelé, et sous réserve éventuellement + * qu'un certain laps de temps soit écoulé. + * @see QtMessageBox::systemNotification + */ +class ActionCompletionNotifier +{ + public : + + /** + * Envoie la notification système transmise en argument. + * @param Titre de l'application + * @param (Eventuel) fichier icône de l'application + * @param Message à afficher + * @param Niveau d'urgence + * @param Durée (en millisecondes) de la notification. + * @param Laps de temps (en secondes) à partir duquel la notification doit être envoyée. + */ + ActionCompletionNotifier (const IN_UTIL UTF8String& appTitle, const std::string& appIconFile, const IN_UTIL UTF8String& message, QtMessageBox::URGENCY_LEVEL level = QtMessageBox::URGENCY_NORMAL, size_t duration = 30, size_t minimumTimeLapse = 0); + + /** + * Destructeur. Envoie la notification au système. + */ + virtual ~ActionCompletionNotifier ( ); + + + private : + + /** + * Constructeur de copie / opérateur = : interdits. + */ + ActionCompletionNotifier (const ActionCompletionNotifier&); + ActionCompletionNotifier& operator = (const ActionCompletionNotifier&); + + /** Informations nécessaires à la notification. */ + IN_UTIL Timer _timer; + IN_UTIL UTF8String _appTitle, _message; + std::string _appIconFile; + QtMessageBox::URGENCY_LEVEL _urgencyLevel; + size_t _duration, _minimumTimeLapse; +}; // class ActionCompletionNotifier #endif // QT_MESSAGE_BOX_H diff --git a/src/tests/qworkspaces.cpp b/src/tests/qworkspaces.cpp index d1eed9b..65b904e 100644 --- a/src/tests/qworkspaces.cpp +++ b/src/tests/qworkspaces.cpp @@ -98,7 +98,7 @@ void QtWorkspacesMainWindow::timeoutWarningDialogCallback ( ) try { sleep (3); - QtMessageBox::systemNotification (UTF8String ("Dialogs and Workspaces"), UTF8String ("Un message d'avertissement a été affiché."), QtMessageBox::URGENCY_NORMAL, 10000); + QtMessageBox::systemNotification (UTF8String ("Dialogs and Workspaces"), "", UTF8String ("Un message d'avertissement a été affiché."), QtMessageBox::URGENCY_NORMAL, 10000); QtMessageBox::displayWarningMessageInAppWorkspace (this, "Dialogs and Workspaces", "Ceci est un message d'avertissement"); // QtWSAboutDialog* dialog = new QtWSAboutDialog (this, "App. test", "1.0.0", "http://www.myapp.com", "Boite de dialogue affichée après un délai de 5 secondes.", 0); // dialog->show ( ); // S'affiche dans le même bureau que l'application, sans changement de bureau @@ -124,7 +124,7 @@ void QtWorkspacesMainWindow::timeoutErrorDialogCallback ( ) try { sleep (5); - QtMessageBox::systemNotification (UTF8String ("Dialogs and Workspaces"), UTF8String ("Un message d'erreur a été affiché."), QtMessageBox::URGENCY_CRITICAL, 3000); + QtMessageBox::systemNotification (UTF8String ("Dialogs and Workspaces"), "", UTF8String ("Un message d'erreur a été affiché."), QtMessageBox::URGENCY_CRITICAL, 3000); QtMessageBox::displayErrorMessageInAppWorkspace (this, "Dialogs and Workspaces", "Ceci est un message d'erreur"); // QtWSAboutDialog* dialog = new QtWSAboutDialog (this, "App. test", "1.0.0", "http://www.myapp.com", "Boite de dialogue affichée après un délai de 5 secondes.", 0); // dialog->show ( ); // S'affiche dans le même bureau que l'application, sans changement de bureau diff --git a/versions.txt b/versions.txt index 1e26cef..6951f01 100644 --- a/versions.txt +++ b/versions.txt @@ -1,3 +1,11 @@ +Version 6.6.0 : 18/09/24 +=============== + +Classe ActionCompletionNotifier permettant d'afficher automatiquement une notification en fin d'action. +Les notifications systèmes peuvent utiliser l'icône de l'application. + + + Version 6.5.0 : 16/09/24 ===============