1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2015 The Qt Company Ltd. 4 ** Contact: http://www.qt.io/licensing/ 5 ** 6 ** This file is part of the test suite of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:LGPL$ 9 ** Commercial License Usage 10 ** Licensees holding valid commercial Qt licenses may use this file in 11 ** accordance with the commercial license agreement provided with the 12 ** Software or, alternatively, in accordance with the terms contained in 13 ** a written agreement between you and The Qt Company. For licensing terms 14 ** and conditions see http://www.qt.io/terms-conditions. For further 15 ** information use the contact form at http://www.qt.io/contact-us. 16 ** 17 ** GNU Lesser General Public License Usage 18 ** Alternatively, this file may be used under the terms of the GNU Lesser 19 ** General Public License version 2.1 or version 3 as published by the Free 20 ** Software Foundation and appearing in the file LICENSE.LGPLv21 and 21 ** LICENSE.LGPLv3 included in the packaging of this file. Please review the 22 ** following information to ensure the GNU Lesser General Public License 23 ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and 24 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. 25 ** 26 ** As a special exception, The Qt Company gives you certain additional 27 ** rights. These rights are described in The Qt Company LGPL Exception 28 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. 29 ** 30 ** GNU General Public License Usage 31 ** Alternatively, this file may be used under the terms of the GNU 32 ** General Public License version 3.0 as published by the Free Software 33 ** Foundation and appearing in the file LICENSE.GPL included in the 34 ** packaging of this file. Please review the following information to 35 ** ensure the GNU General Public License version 3.0 requirements will be 36 ** met: http://www.gnu.org/copyleft/gpl.html. 37 ** 38 ** $QT_END_LICENSE$ 39 ** 40 ****************************************************************************/ 41 42 #ifndef PatternistSDK_ErrorHandler_H 43 #define PatternistSDK_ErrorHandler_H 44 45 #include "Global.h" 46 #include "qabstractmessagehandler.h" 47 48 49 QT_BEGIN_HEADER 50 51 QT_BEGIN_NAMESPACE 52 53 template<typename T> class QList; 54 55 namespace QPatternistSDK 56 { 57 /** 58 * @short A MessageHandler which 59 * accumulates all its received ErrorHandler::Message instances 60 * in a list, retrievable via messages(). 61 * 62 * Thus, ErrorHandler does not report errors, but collects them 63 * and allows easy access to them. 64 * 65 * @ingroup PatternistSDK 66 * @author Frans Englich <frans.englich@nokia.com> 67 */ 68 class Q_PATTERNISTSDK_EXPORT ErrorHandler : public QAbstractMessageHandler 69 { 70 public: 71 class Message 72 { 73 public: 74 typedef QList<Message> List; 75 description()76 QString description() const 77 { 78 return m_description; 79 } 80 setDescription(const QString & desc)81 void setDescription(const QString &desc) 82 { 83 m_description = desc; 84 } 85 setIdentifier(const QUrl & newId)86 void setIdentifier(const QUrl &newId) 87 { 88 m_identifier = newId; 89 } 90 identifier()91 QUrl identifier() const 92 { 93 return m_identifier; 94 } 95 type()96 QtMsgType type() const 97 { 98 return m_type; 99 } 100 setType(const QtMsgType t)101 void setType(const QtMsgType t) 102 { 103 m_type = t; 104 } 105 106 private: 107 QUrl m_identifier; 108 QtMsgType m_type; 109 QString m_description; 110 }; 111 112 /** 113 * Clears all accumulated errors. 114 */ 115 void reset(); 116 117 Message::List messages() const; 118 119 /** 120 * Calling this function causes all Qt's internal debug messages to be 121 * sent to @p handler. If @p handler is @c null, Qt's default message 122 * handler is re-installed. In other words, via an internal proxy function, 123 * it installs @p handler as Qt's message handler. 124 * 125 * If @p handler is heap allocated, it will be leaked. 126 * 127 * @see qInstallMsgHandler() 128 */ 129 static void installQtMessageHandler(ErrorHandler *const handler); 130 131 static ErrorHandler *handler; 132 133 protected: 134 virtual void handleMessage(QtMsgType type, 135 const QString &description, 136 const QUrl &identifier = QUrl(), 137 const QSourceLocation &sourceLocation = QSourceLocation()); 138 139 private: 140 ErrorHandler::Message::List m_messages; 141 }; 142 } 143 144 QT_END_NAMESPACE 145 146 QT_END_HEADER 147 148 #endif 149 // vim: et:ts=4:sw=4:sts=4 150