1 /****************************************************************************
2 **
3 ** Copyright (C) 2018 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the QtSCriptTools module 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 https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://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 3 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 3 requirements
23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24 **
25 ** GNU General Public License Usage
26 ** Alternatively, this file may be used under the terms of the GNU
27 ** General Public License version 2.0 or (at your option) the GNU General
28 ** Public license version 3 or any later version approved by the KDE Free
29 ** Qt Foundation. The licenses are as published by the Free Software
30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31 ** included in the packaging of this file. Please review the following
32 ** information to ensure the GNU General Public License requirements will
33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34 ** https://www.gnu.org/licenses/gpl-3.0.html.
35 **
36 ** $QT_END_LICENSE$
37 **
38 ****************************************************************************/
39 
40 #ifndef QSCRIPTDEBUGGEREVENT_P_H
41 #define QSCRIPTDEBUGGEREVENT_P_H
42 
43 //
44 //  W A R N I N G
45 //  -------------
46 //
47 // This file is not part of the Qt API.  It exists purely as an
48 // implementation detail.  This header file may change from version to
49 // version without notice, or even be removed.
50 //
51 // We mean it.
52 //
53 
54 #include <QtCore/qobjectdefs.h>
55 #include <QtCore/qcoreevent.h>
56 #include <QtCore/qhash.h>
57 #include <QtCore/qvariant.h>
58 #include <QtCore/qscopedpointer.h>
59 
60 QT_BEGIN_NAMESPACE
61 
62 class QDataStream;
63 class QScriptDebuggerValue;
64 
65 class QScriptDebuggerEventPrivate;
66 class Q_AUTOTEST_EXPORT QScriptDebuggerEvent
67 {
68 public:
69     friend Q_AUTOTEST_EXPORT QDataStream &operator<<(QDataStream &, const QScriptDebuggerEvent &);
70     friend Q_AUTOTEST_EXPORT QDataStream &operator>>(QDataStream &, QScriptDebuggerEvent &);
71 
72     enum Type {
73         None,
74         Interrupted,
75         SteppingFinished,
76         LocationReached,
77         Breakpoint,
78         Exception,
79         Trace,
80         InlineEvalFinished,
81         DebuggerInvocationRequest,
82         ForcedReturn,
83         UserEvent = 1000,
84         MaxUserEvent = 32767
85     };
86 
87     enum Attribute {
88         ScriptID,
89         FileName,
90         BreakpointID,
91         LineNumber,
92         ColumnNumber,
93         Value,
94         Message,
95         IsNestedEvaluate,
96         HasExceptionHandler,
97         UserAttribute = 1000,
98         MaxUserAttribute = 32767
99     };
100 
101     QScriptDebuggerEvent();
102     QScriptDebuggerEvent(Type type);
103     QScriptDebuggerEvent(Type type, qint64 scriptId, int lineNumber, int columnNumber);
104     QScriptDebuggerEvent(const QScriptDebuggerEvent &other);
105     ~QScriptDebuggerEvent();
106 
107     Type type() const;
108 
109     QVariant attribute(Attribute attribute,
110                        const QVariant &defaultValue = QVariant()) const;
111     void setAttribute(Attribute attribute, const QVariant &value);
112     QHash<Attribute, QVariant> attributes() const;
113 
114     qint64 scriptId() const;
115     void setScriptId(qint64 id);
116     QString fileName() const;
117     void setFileName(const QString &fileName);
118     int lineNumber() const;
119     void setLineNumber(int lineNumber);
120     int columnNumber() const;
121     void setColumnNumber(int columnNumber);
122     int breakpointId() const;
123     void setBreakpointId(int id);
124     QString message() const;
125     void setMessage(const QString &message);
126     QScriptDebuggerValue scriptValue() const;
127     void setScriptValue(const QScriptDebuggerValue &value);
128     void setNestedEvaluate(bool nested);
129     bool isNestedEvaluate() const;
130     void setHasExceptionHandler(bool hasHandler);
131     bool hasExceptionHandler() const;
132 
133     QScriptDebuggerEvent &operator=(const QScriptDebuggerEvent &other);
134 
135     bool operator==(const QScriptDebuggerEvent &other) const;
136     bool operator!=(const QScriptDebuggerEvent &other) const;
137 
138 private:
139     QScopedPointer<QScriptDebuggerEventPrivate> d_ptr;
140 
141     Q_DECLARE_PRIVATE(QScriptDebuggerEvent)
142 };
143 
144 Q_AUTOTEST_EXPORT QDataStream &operator<<(QDataStream &, const QScriptDebuggerEvent &);
145 Q_AUTOTEST_EXPORT QDataStream &operator>>(QDataStream &, QScriptDebuggerEvent &);
146 
147 // helper class that's used to transport a debugger event through the Qt event loop
148 class QScriptDebuggerEventEvent : public QEvent
149 {
150 public:
QScriptDebuggerEventEvent(const QScriptDebuggerEvent & event)151     QScriptDebuggerEventEvent(const QScriptDebuggerEvent &event)
152         : QEvent(QEvent::Type(QEvent::User+1)), m_event(event) {}
~QScriptDebuggerEventEvent()153     ~QScriptDebuggerEventEvent() {}
event()154     const QScriptDebuggerEvent &event() const
155         { return m_event; }
156 private:
157     QScriptDebuggerEvent m_event;
158 };
159 
160 QT_END_NAMESPACE
161 
162 #endif
163