/* This file is part of the KDE project.Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).This library is free software: you can redistribute it and/or modifyit under the terms of the GNU Lesser General Public License as published bythe Free Software Foundation, either version 2.1 or 3 of the License.This library is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU Lesser General Public License for more details.You should have received a copy of the GNU Lesser General Public Licensealong with this library. If not, see <http://www.gnu.org/licenses/>.*/#ifndef OBJECTDUMP_H#define OBJECTDUMP_H#include <QObject>#include <QList>#include <QByteArray>#include <QScopedPointer>QT_BEGIN_NAMESPACEnamespace ObjectDump{/** * Abstract base for annotator classes invoked by QVisitor. */class QAnnotator : public QObject{ Q_OBJECTpublic: virtual ~QAnnotator(); virtual QList<QByteArray> annotation(const QObject& object) = 0;};/** * Annotator which replicates QObject::dumpObjectTree functionality. */class QAnnotatorBasic : public QAnnotator{ Q_OBJECTpublic: QList<QByteArray> annotation(const QObject& object);};/** * Annotator which returns widget information. */class QAnnotatorWidget : public QAnnotator{ Q_OBJECTpublic: QList<QByteArray> annotation(const QObject& object);};class QDumperPrivate;/** * Class used to dump information about individual QObjects. */class QDumper : public QObject{ Q_OBJECT Q_DECLARE_PRIVATE(QDumper)public: QDumper(); ~QDumper(); /** * Specify a prefix, to be printed on each line of output. */ void setPrefix(const QString& prefix); /** * Takes ownership of annotator. */ void addAnnotator(QAnnotator* annotator); /** * Invoke each annotator on the object and write to debug output. */ void dumpObject(const QObject& object);private: QScopedPointer<QDumperPrivate> d_ptr;};class QVisitorPrivate;/** * Visitor class which dumps information about nodes in the object tree. */class QVisitor : public QObject{ Q_OBJECT Q_DECLARE_PRIVATE(QVisitor)public: QVisitor(); ~QVisitor(); /** * Specify a prefix, to be printed on each line of output. */ void setPrefix(const QString& prefix); /** * Set number of spaces by which each level of the tree is indented. */ void setIndent(unsigned indent); /** * Called by the visitor algorithm before starting the visit. */ void visitPrepare(); /** * Called by the visitor algorithm as each node is visited. */ void visitNode(const QObject& object); /** * Called by the visitor algorithm when the visit is complete. */ void visitComplete(); /** * Takes ownership of annotator. */ void addAnnotator(QAnnotator* annotator);private: QScopedPointer<QVisitorPrivate> d_ptr;};//-----------------------------------------------------------------------------// Utility functions//-----------------------------------------------------------------------------void addDefaultAnnotators(QDumper& dumper);void addDefaultAnnotators(QVisitor& visitor);void dumpTreeFromRoot(const QObject& root, QVisitor& visitor);void dumpTreeFromLeaf(const QObject& leaf, QVisitor& visitor);void dumpAncestors(const QObject& leaf, QVisitor& visitor);} // namespace ObjectDumpQT_END_NAMESPACE#endif