aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-11-16 00:46:15 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-11-16 00:46:15 +0000
commit6c50c77fd7b85a1db2c211b45acf394f5a55ca4e (patch)
tree9fddd2a95f0ce4affc77cfee4173e2d17ff37052 /src
parent70bc01250696baf1ba7b6f45c519219fbed7cc17 (diff)
downloadqxmpp-6c50c77fd7b85a1db2c211b45acf394f5a55ca4e.tar.gz
add QXmppLoggable, a base class for QObjects which need logging facility
Diffstat (limited to 'src')
-rw-r--r--src/QXmppLogger.cpp57
-rw-r--r--src/QXmppLogger.h22
2 files changed, 79 insertions, 0 deletions
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 <iostream>
+#include <QChildEvent>
#include <QDateTime>
#include <QTextStream>
#include <QFile>
@@ -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<QXmppLoggable*>(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<QXmppLoggable*>(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