From 6c50c77fd7b85a1db2c211b45acf394f5a55ca4e Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Tue, 16 Nov 2010 00:46:15 +0000 Subject: add QXmppLoggable, a base class for QObjects which need logging facility --- src/QXmppLogger.cpp | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/QXmppLogger.h | 22 +++++++++++++++++++++ 2 files changed, 79 insertions(+) (limited to 'src') diff --git a/src/QXmppLogger.cpp b/src/QXmppLogger.cpp index 1ef081ce..6098aa2b 100644 --- a/src/QXmppLogger.cpp +++ b/src/QXmppLogger.cpp @@ -24,6 +24,7 @@ #include +#include #include #include #include @@ -58,6 +59,62 @@ static QString formatted(QXmppLogger::MessageType type, const QString& text) text; } +/// Constructs a new QXmppLoggable. +/// +/// \param parent + +QXmppLoggable::QXmppLoggable(QObject *parent) + : QObject(parent) +{ + QXmppLoggable *logParent = qobject_cast(parent); + if (logParent) { + connect(this, SIGNAL(logMessage(QXmppLogger::MessageType,QString)), + logParent, SIGNAL(logMessage(QXmppLogger::MessageType,QString))); + } +} + +void QXmppLoggable::childEvent(QChildEvent *event) +{ + QXmppLoggable *child = qobject_cast(event->child()); + if (!child) + return; + + if (event->added()) { + connect(child, SIGNAL(logMessage(QXmppLogger::MessageType,QString)), + this, SIGNAL(logMessage(QXmppLogger::MessageType,QString))); + } else if (event->removed()) { + disconnect(child, SIGNAL(logMessage(QXmppLogger::MessageType,QString)), + this, SIGNAL(logMessage(QXmppLogger::MessageType,QString))); + } +} + +/// Logs a debugging message. +/// +/// \param message + +void QXmppLoggable::debug(const QString &message) +{ + emit logMessage(QXmppLogger::DebugMessage, message); +} + +/// Logs an informational message. +/// +/// \param message + +void QXmppLoggable::info(const QString &message) +{ + emit logMessage(QXmppLogger::InformationMessage, message); +} + +/// Logs a warning message. +/// +/// \param message + +void QXmppLoggable::warning(const QString &message) +{ + emit logMessage(QXmppLogger::WarningMessage, message); +} + /// Constructs a new QXmppLogger. /// /// \param parent diff --git a/src/QXmppLogger.h b/src/QXmppLogger.h index 17adccdd..1a90238a 100644 --- a/src/QXmppLogger.h +++ b/src/QXmppLogger.h @@ -91,5 +91,27 @@ private: QXmppLogger::MessageTypes m_messageTypes; }; +/// \brief The QXmppLoggable class represents a source of logging messages. +/// +/// \ingroup Core + +class QXmppLoggable : public QObject +{ + Q_OBJECT + +public: + QXmppLoggable(QObject *parent = 0); + +protected: + virtual void childEvent(QChildEvent *event); + void debug(const QString &msg); + void info(const QString &msg); + void warning(const QString &msg); + +signals: + /// This signal is emitted to send logging messages. + void logMessage(QXmppLogger::MessageType type, const QString &msg); +}; + Q_DECLARE_OPERATORS_FOR_FLAGS(QXmppLogger::MessageTypes) #endif // QXMPPLOGGER_H -- cgit v1.2.3