X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FcreaMessageManager.h;h=54dd93efcc954ff73cb1f9b7b81cf5397b4809b1;hb=b4cd33464fc8cc5658da64fe75c3f689169f0cb0;hp=b5058d32fb48c8437d32a3b703c835441dae3fb6;hpb=fc539949aa0de85868e5507919857a2e5749a048;p=crea.git diff --git a/src/creaMessageManager.h b/src/creaMessageManager.h index b5058d3..54dd93e 100644 --- a/src/creaMessageManager.h +++ b/src/creaMessageManager.h @@ -1,8 +1,32 @@ +/* +# --------------------------------------------------------------------- +# +# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image +# pour la Santé) +# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton +# Previous Authors : Laurent Guigues, Jean-Pierre Roux +# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil +# +# This software is governed by the CeCILL-B license under French law and +# abiding by the rules of distribution of free software. You can use, +# modify and/ or redistribute the software under the terms of the CeCILL-B +# license as circulated by CEA, CNRS and INRIA at the following URL +# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +# or in the file LICENSE.txt. +# +# As a counterpart to the access to the source code and rights to copy, +# modify and redistribute granted by the license, users are provided only +# with a limited warranty and the software's author, the holder of the +# economic rights, and the successive licensors have only limited +# liability. +# +# The fact that you are presently reading this means that you have had +# knowledge of the CeCILL-B license and that you accept its terms. +# ------------------------------------------------------------------------ +*/ /*! \file - \brief Class creaMessageManager and Macros for outputing messages in crea - There are 4 kinds of messages : - Messages (normal messages) - Debug messages (not compiled in release) @@ -17,60 +41,98 @@ -The first string is the type of the message (the category which will be used to generate a message of this type) -The second string is help string -The integer is the initial level for the messages of this type (see below). - To generate a message of a known type then use one of the macros : creaMessage, creaDebugMessage, creaWarning, creaError or their variants. - example : - creaMessage("Kernel",4,"problem with "< +#include #include - #include #include #include #include + + +namespace crea +{ + class CREA_EXPORT MessageManager + { + public: + //============================================= + typedef boost::signals2::signal MessageSignalType; + typedef MessageSignalType::slot_function_type MessageCallbackType; + //============================================= + MessageManager(); + ~MessageManager(); + static MessageManager* GetInstance(); + static void RegisterMessageType(const std::string& key, + const std::string& help, + unsigned char default_level = 9); + static void SetMessageLevel(const std::string& key, unsigned char level); + static int GetMessageLevel(const std::string& key); + static void HSendMessage(const std::string& key, const std::string& mess); + static void AddMessageObserver(const std::string& key, MessageCallbackType callback ); + static void SendMessagesToCout(bool v = true); + static std::string& GetTab() { static std::string s; return s; } + static std::string GetSpace(int n) { std::string s; s.insert(0," ",n); return s; } + static void IncTab() { GetTab() += std::string(" "); } + static void DecTab() { GetTab() = GetTab().substr(0,GetTab().length()-1); } + static void ResetTab() { GetTab() = std::string(""); } + static void PrintInfo(); +private: + struct MessageType + { + MessageType(int l, const std::string& h) : Level(l), Help(h) {} + int Level; + std::string Help; + MessageSignalType Signal; + }; + typedef std::map MessageMapType; + MessageMapType mMessageMap; + unsigned int mMaxMessageLength; + bool mSendToCout; + }; + //=========================================================== +} + + + + + + + + // Comment out these symbols to prevent compilation //#define CREA_COMPILE_MESSAGES //#define CREA_COMPILE_DEBUG_MESSAGES //#define CREA_COMPILE_WARNING_MESSAGES //#define CREA_COMPILE_ERROR_MESSAGES - - #define creaOnMessageLevel(key,value) \ int __creaOnMessageLevelVariable = \ crea::MessageManager::GetMessageLevel(key); \ @@ -101,9 +163,13 @@ #else #define creaMessageSpace(value) "" #endif + + + //=========================================================== + #ifdef CREA_COMPILE_MESSAGES // Macro for messages @@ -116,11 +182,13 @@ << creaMessageTab \ << creaMessageSpace(value) \ << MESSAGE; \ - crea::MessageManager::SendMessage(key,s.str()); \ + crea::MessageManager::HSendMessage(key,s.str()); \ } \ } \ while (0) + + // Macro for continuing a message (when one wants to split the macro // call into multiple lines) #define creaMessageCont(key,value,MESSAGE) \ @@ -130,11 +198,12 @@ { \ std::ostringstream s; \ s << MESSAGE; \ - crea::MessageManager::SendMessage(key,s.str()); \ + crea::MessageManager::HSendMessage(key,s.str()); \ } \ } \ while (0) + #define creaMessageInc(key,value,MESSAGE) \ do \ { \ @@ -143,12 +212,13 @@ << creaMessageTab \ << creaMessageSpace(value) \ << MESSAGE; \ - crea::MessageManager::SendMessage(key,s.str()); \ + crea::MessageManager::HSendMessage(key,s.str()); \ crea::MessageManager::IncTab(); \ } \ } \ while (0) + #define creaMessageDec(key,value,MESSAGE) \ do \ { \ @@ -160,11 +230,12 @@ << creaMessageTab \ << creaMessageSpace(value) \ << MESSAGE; \ - crea::MessageManager::SendMessage(key,s.str()); \ + crea::MessageManager::HSendMessage(key,s.str()); \ } \ } \ while (0) + #define creaDecTab(key,value) \ do \ { \ @@ -175,6 +246,7 @@ } \ while (0) + #define creaIncTab(key,value) \ do \ { \ @@ -185,6 +257,7 @@ } \ while (0) + #define creaResetTab() \ do \ { \ @@ -201,31 +274,57 @@ #define creaIncTab(key,value) #define creaResetTab() #endif + //=========================================================== + + + + //=========================================================== + // Macros for debug messages + #ifdef CREA_COMPILE_DEBUG_MESSAGES + #define creaDebugMessage(key,value,MESSAGE) creaMessage(key,value,MESSAGE) + #define creaDebugMessageCont(key,value,MESSAGE) creaMessageCont(key,value,MESSAGE) + #define creaDebugMessageInc(key,value,MESSAGE) creaMessageInc(key,value,MESSAGE) + #define creaDebugMessageDec(key,value,MESSAGE) creaMessageDec(key,value,MESSAGE) + #define creaDebugDecTab(key,value) creaDecTab(key,value) + #define creaDebugIncTab(key,value) creaIncTab(key,value) + #define creaDebugResetTab() creaResetTab() + #else + #define creaDebugMessage(key,value,MESSAGE) + #define creaDebugMessageCont(key,value,MESSAGE) + #define creaDebugMessageInc(key,value,MESSAGE) + #define creaDebugMessageDec(key,value,MESSAGE) + #define creaDebugDecTab(key,value) + #define creaDebugIncTab(key,value) + #endif + //=========================================================== + + //=========================================================== + #ifdef CREA_COMPILE_WARNING_MESSAGES #define creaWarning(MESSAGE) \ do \ @@ -246,10 +345,15 @@ #else #define creaWarning(MESSAGE) #endif + //=========================================================== + + + //=========================================================== + #ifdef CREA_COMPILE_ERROR_MESSAGES //#include "creaWx.h" #define creaError(MESSAGE) \ @@ -266,6 +370,8 @@ } \ while (0) + + #define creaGlobalError(MESSAGE) \ do \ { \ @@ -280,6 +386,8 @@ } \ while (0) + + #define CREA_INTERNAL_ERROR_MESSAGE \ "\n\n***********************************************\n**** THIS IS AN INTERNAL ERROR TO crea ****\n**** Please send a full bug report to : ****\n**** creatools@creatis.insa-lyon.fr ****\n***********************************************\n\n" @@ -297,80 +405,34 @@ } \ while (0) + + #else #define creaError(MESSAGE) #define creaGlobalError(MESSAGE) #define creaInternalError(MESSAGE) #endif + //=========================================================== + + //=========================================================== + #define creaendl std::endl + //=========================================================== -namespace crea -{ - - class CREA_EXPORT MessageManager - { - public: - //============================================= - typedef boost::signal MessageSignalType; - typedef MessageSignalType::slot_function_type MessageCallbackType; - //============================================= - /// - MessageManager(); - /// - ~MessageManager(); - /// - static MessageManager* GetInstance(); - /// - static void RegisterMessageType(const std::string& key, - const std::string& help, - unsigned char default_level = 9); - /// - static void SetMessageLevel(const std::string& key, unsigned char level); - /// - static int GetMessageLevel(const std::string& key); - /// - static void SendMessage(const std::string& key, const std::string& mess); - /// - static void AddMessageObserver(const std::string& key, MessageCallbackType callback ); - /// - static void SendMessagesToCout(bool v = true); - /// - static std::string& GetTab() { static std::string s; return s; } - /// - static std::string GetSpace(int n) { - std::string s; s.insert(0," ",n); return s; } - /// - static void IncTab() { GetTab() += std::string(" "); } - /// - static void DecTab() { GetTab() = GetTab().substr(0,GetTab().length()-1); } - /// - static void ResetTab() { GetTab() = std::string(""); } - /// - static void PrintInfo(); - /// - - private: - struct MessageType - { - MessageType(int l, const std::string& h) : Level(l), Help(h) {} - int Level; - std::string Help; - MessageSignalType Signal; - }; - typedef std::map MessageMapType; - MessageMapType mMessageMap; - unsigned int mMaxMessageLength; - bool mSendToCout; - }; - //=========================================================== - -} + + + + + #include "creaException.h" + + #endif +