Skip to content

Commit

Permalink
Merge pull request #7 from LIHPC-Computational-Geometry/issue-112
Browse files Browse the repository at this point in the history
Version 6.6.0. ActionCompletionNotifier class used to automatically d…
  • Loading branch information
CharlesPignerol authored Sep 18, 2024
2 parents 932290d + ffa6f11 commit ad9e568
Show file tree
Hide file tree
Showing 5 changed files with 99 additions and 6 deletions.
2 changes: 1 addition & 1 deletion cmake/version.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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})

Expand Down
43 changes: 42 additions & 1 deletion src/QtUtil/QtMessageBox.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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 ( );
Expand All @@ -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
48 changes: 46 additions & 2 deletions src/QtUtil/public/QtUtil/QtMessageBox.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#ifndef QT_MESSAGE_BOX_H
#define QT_MESSAGE_BOX_H

#include <TkUtil/Timer.h>
#include <TkUtil/UTF8String.h>

#include <QWidget>
Expand Down Expand Up @@ -167,13 +168,15 @@ class QtMessageBox
/**
* Envoie la notification système transmise en argument. Repose sur <I>notify-send</I>. 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 :
Expand Down Expand Up @@ -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
4 changes: 2 additions & 2 deletions src/tests/qworkspaces.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
8 changes: 8 additions & 0 deletions versions.txt
Original file line number Diff line number Diff line change
@@ -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
===============

Expand Down

0 comments on commit ad9e568

Please sign in to comment.