Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsmessagelog.h - interface for logging messages 3 : : ---------------------- 4 : : begin : October 2011 5 : : copyright : (C) 2011 by Juergen E. Fischer 6 : : email : jef at norbit dot de 7 : : *************************************************************************** 8 : : * * 9 : : * This program is free software; you can redistribute it and/or modify * 10 : : * it under the terms of the GNU General Public License as published by * 11 : : * the Free Software Foundation; either version 2 of the License, or * 12 : : * (at your option) any later version. * 13 : : * * 14 : : ***************************************************************************/ 15 : : 16 : : #ifndef QGSMESSAGELOG_H 17 : : #define QGSMESSAGELOG_H 18 : : 19 : : #include <QString> 20 : : #include <QObject> 21 : : 22 : : #include "qgis_core.h" 23 : : #include "qgis.h" 24 : : 25 : : /** 26 : : * \ingroup core 27 : : * \brief Interface for logging messages from QGIS in GUI independent way. 28 : : * 29 : : * This class provides abstraction of a tabbed window for showing messages to the user. 30 : : * By default QgsMessageLogOutput will be used if not overridden with another 31 : : * message log creator function. 32 : : 33 : : * QGIS application uses QgsMessageLog class for logging messages in a dockable 34 : : * window for the user. 35 : : * 36 : : * QgsMessageLog is not usually directly created, but rather accessed through 37 : : * QgsApplication::messageLog(). 38 : : */ 39 : : class CORE_EXPORT QgsMessageLog : public QObject 40 : : { 41 : : Q_OBJECT 42 : : 43 : : public: 44 : : 45 : : /** 46 : : * Constructor for QgsMessageLog. 47 : : */ 48 : 5 : QgsMessageLog() = default; 49 : : 50 : : /** 51 : : * Adds a \a message to the log instance (and creates it if necessary). 52 : : * 53 : : * If \a notifyUser is TRUE, then the message should be brought to the user's attention by various UI hints. 54 : : * If it is FALSE, the message should appear in logs silently. Note that log viewer implementations may 55 : : * only respect notification hints for certain message levels. 56 : : */ 57 : : static void logMessage( const QString &message, const QString &tag = QString(), Qgis::MessageLevel level = Qgis::Warning, bool notifyUser = true ); 58 : : 59 : : signals: 60 : : 61 : : /** 62 : : * Emitted whenever the log receives a \a message. 63 : : * 64 : : * This signal is emitted for all messages received by the log, regardless of the \a notifyUser flag's 65 : : * value for the message. 66 : : */ 67 : : void messageReceived( const QString &message, const QString &tag, Qgis::MessageLevel level ); 68 : : 69 : : //TODO QGIS 4.0 - remove received argument 70 : : 71 : : /** 72 : : * Emitted whenever the log receives a message which is not a Qgis::Info level message 73 : : * and which has the \a notifyUser flag as TRUE. 74 : : * 75 : : * If QgsMessageLogNotifyBlocker objects have been created then this signal may be 76 : : * temporarily suppressed. 77 : : * \see QgsMessageLogNotifyBlocker 78 : : */ 79 : : void messageReceived( bool received ); 80 : : 81 : : private: 82 : : 83 : : void emitMessage( const QString &message, const QString &tag, Qgis::MessageLevel level, bool notifyUser = true ); 84 : : 85 : 5 : int mAdviseBlockCount = 0; 86 : : 87 : : friend class QgsMessageLogNotifyBlocker; 88 : : 89 : : }; 90 : : 91 : : /** 92 : : * \brief Temporarily blocks the application QgsMessageLog (see QgsApplication::messageLog()) from emitting the messageReceived( bool ) 93 : : * signal for the lifetime of the object. 94 : : * 95 : : * Using this blocker allows messages to be logged without causing user interface hints flagging message log 96 : : * errors to be created. 97 : : * 98 : : * QgsMessageLogNotifyBlocker supports "stacked" blocking, so two QgsMessageLogNotifyBlocker created 99 : : * will both need to be destroyed before the messageReceived( bool ) signal is emitted again. 100 : : * 101 : : * \ingroup core 102 : : * \since QGIS 3.2 103 : : */ 104 : : class CORE_EXPORT QgsMessageLogNotifyBlocker 105 : : { 106 : : public: 107 : : 108 : : /** 109 : : * Constructor for QgsMessageLogNotifyBlocker. 110 : : * 111 : : * This will block the log from emitting the messageReceived( bool ) signal for the lifetime of this object. 112 : : */ 113 : : QgsMessageLogNotifyBlocker(); 114 : : 115 : : //! QgsMessageLogNotifyBlocker cannot be copied 116 : : QgsMessageLogNotifyBlocker( const QgsMessageLogNotifyBlocker &other ) = delete; 117 : : 118 : : //! QgsMessageLogNotifyBlocker cannot be copied 119 : : QgsMessageLogNotifyBlocker &operator=( const QgsMessageLogNotifyBlocker &other ) = delete; 120 : : 121 : : ~QgsMessageLogNotifyBlocker(); 122 : : 123 : : private: 124 : : 125 : : #ifdef SIP_RUN 126 : : QgsMessageLogNotifyBlocker( const QgsMessageLogNotifyBlocker &other ); 127 : : #endif 128 : : }; 129 : : 130 : : /** 131 : : * \ingroup core 132 : : * \brief Default implementation of message logging interface 133 : : * 134 : : * This class outputs log messages to the standard error. Therefore it might 135 : : * be the right choice for applications without GUI. 136 : : */ 137 : : class CORE_EXPORT QgsMessageLogConsole : public QObject 138 : : { 139 : : Q_OBJECT 140 : : 141 : : public: 142 : : 143 : : /** 144 : : * Constructor for QgsMessageLogConsole. 145 : : */ 146 : : QgsMessageLogConsole(); 147 : : 148 : : protected: 149 : : 150 : : /** 151 : : * Formats a log message. Used by child classes. 152 : : * 153 : : * \param message the message to format 154 : : * \param tag the tag of the message 155 : : * \param level the log level of the message 156 : : * \since QGIS 3.4 157 : : */ 158 : : QString formatLogMessage( const QString &message, const QString &tag, Qgis::MessageLevel level = Qgis::Info ) const; 159 : : 160 : : public slots: 161 : : 162 : : /** 163 : : * Logs a message to stderr. 164 : : * 165 : : * \param message the message to format 166 : : * \param tag the tag of the message 167 : : * \param level the log level of the message 168 : : */ 169 : : virtual void logMessage( const QString &message, const QString &tag, Qgis::MessageLevel level ); 170 : : }; 171 : : 172 : : #endif