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 #include "qscriptdebuggerevent_p.h"
41 #include "qscriptdebuggervalue_p.h"
42
43 #include <QtCore/qhash.h>
44 #include <QtCore/qdatastream.h>
45
46 Q_DECLARE_METATYPE(QScriptDebuggerValue)
47
48 QT_BEGIN_NAMESPACE
49
50 class QScriptDebuggerEventPrivate
51 {
52 public:
53 QScriptDebuggerEventPrivate();
54 ~QScriptDebuggerEventPrivate();
55
56 QScriptDebuggerEvent::Type type;
57 QHash<QScriptDebuggerEvent::Attribute, QVariant> attributes;
58 };
59
QScriptDebuggerEventPrivate()60 QScriptDebuggerEventPrivate::QScriptDebuggerEventPrivate()
61 : type(QScriptDebuggerEvent::None)
62 {
63 }
64
~QScriptDebuggerEventPrivate()65 QScriptDebuggerEventPrivate::~QScriptDebuggerEventPrivate()
66 {
67 }
68
QScriptDebuggerEvent()69 QScriptDebuggerEvent::QScriptDebuggerEvent()
70 : d_ptr(new QScriptDebuggerEventPrivate)
71 {
72 d_ptr->type = None;
73 }
74
QScriptDebuggerEvent(Type type)75 QScriptDebuggerEvent::QScriptDebuggerEvent(Type type)
76 : d_ptr(new QScriptDebuggerEventPrivate)
77 {
78 d_ptr->type = type;
79 }
80
QScriptDebuggerEvent(Type type,qint64 scriptId,int lineNumber,int columnNumber)81 QScriptDebuggerEvent::QScriptDebuggerEvent(Type type, qint64 scriptId,
82 int lineNumber, int columnNumber)
83 : d_ptr(new QScriptDebuggerEventPrivate)
84 {
85 d_ptr->type = type;
86 d_ptr->attributes[ScriptID] = scriptId;
87 d_ptr->attributes[LineNumber] = lineNumber;
88 d_ptr->attributes[ColumnNumber] = columnNumber;
89 }
90
QScriptDebuggerEvent(const QScriptDebuggerEvent & other)91 QScriptDebuggerEvent::QScriptDebuggerEvent(const QScriptDebuggerEvent &other)
92 : d_ptr(new QScriptDebuggerEventPrivate)
93 {
94 *d_ptr = *other.d_ptr;
95 }
96
~QScriptDebuggerEvent()97 QScriptDebuggerEvent::~QScriptDebuggerEvent()
98 {
99 }
100
operator =(const QScriptDebuggerEvent & other)101 QScriptDebuggerEvent &QScriptDebuggerEvent::operator=(const QScriptDebuggerEvent &other)
102 {
103 *d_ptr = *other.d_ptr;
104 return *this;
105 }
106
type() const107 QScriptDebuggerEvent::Type QScriptDebuggerEvent::type() const
108 {
109 Q_D(const QScriptDebuggerEvent);
110 return d->type;
111 }
112
attribute(Attribute attribute,const QVariant & defaultValue) const113 QVariant QScriptDebuggerEvent::attribute(Attribute attribute,
114 const QVariant &defaultValue) const
115 {
116 Q_D(const QScriptDebuggerEvent);
117 return d->attributes.value(attribute, defaultValue);
118 }
119
setAttribute(Attribute attribute,const QVariant & value)120 void QScriptDebuggerEvent::setAttribute(Attribute attribute,
121 const QVariant &value)
122 {
123 Q_D(QScriptDebuggerEvent);
124 if (!value.isValid())
125 d->attributes.remove(attribute);
126 else
127 d->attributes[attribute] = value;
128 }
129
attributes() const130 QHash<QScriptDebuggerEvent::Attribute, QVariant> QScriptDebuggerEvent::attributes() const
131 {
132 Q_D(const QScriptDebuggerEvent);
133 return d->attributes;
134 }
135
scriptId() const136 qint64 QScriptDebuggerEvent::scriptId() const
137 {
138 Q_D(const QScriptDebuggerEvent);
139 return d->attributes.value(ScriptID, -1).toLongLong();
140 }
141
setScriptId(qint64 id)142 void QScriptDebuggerEvent::setScriptId(qint64 id)
143 {
144 Q_D(QScriptDebuggerEvent);
145 d->attributes[ScriptID] = id;
146 }
147
fileName() const148 QString QScriptDebuggerEvent::fileName() const
149 {
150 Q_D(const QScriptDebuggerEvent);
151 return d->attributes.value(FileName).toString();
152 }
153
setFileName(const QString & fileName)154 void QScriptDebuggerEvent::setFileName(const QString &fileName)
155 {
156 Q_D(QScriptDebuggerEvent);
157 d->attributes[FileName] = fileName;
158 }
159
lineNumber() const160 int QScriptDebuggerEvent::lineNumber() const
161 {
162 Q_D(const QScriptDebuggerEvent);
163 return d->attributes.value(LineNumber, -1).toInt();
164 }
165
setLineNumber(int lineNumber)166 void QScriptDebuggerEvent::setLineNumber(int lineNumber)
167 {
168 Q_D(QScriptDebuggerEvent);
169 d->attributes[LineNumber] = lineNumber;
170 }
171
columnNumber() const172 int QScriptDebuggerEvent::columnNumber() const
173 {
174 Q_D(const QScriptDebuggerEvent);
175 return d->attributes.value(ColumnNumber, -1).toInt();
176 }
177
setColumnNumber(int columnNumber)178 void QScriptDebuggerEvent::setColumnNumber(int columnNumber)
179 {
180 Q_D(QScriptDebuggerEvent);
181 d->attributes[ColumnNumber] = columnNumber;
182 }
183
breakpointId() const184 int QScriptDebuggerEvent::breakpointId() const
185 {
186 Q_D(const QScriptDebuggerEvent);
187 return d->attributes.value(BreakpointID, -1).toInt();
188 }
189
setBreakpointId(int id)190 void QScriptDebuggerEvent::setBreakpointId(int id)
191 {
192 Q_D(QScriptDebuggerEvent);
193 d->attributes[BreakpointID] = id;
194 }
195
message() const196 QString QScriptDebuggerEvent::message() const
197 {
198 Q_D(const QScriptDebuggerEvent);
199 return d->attributes.value(Message).toString();
200 }
201
setMessage(const QString & message)202 void QScriptDebuggerEvent::setMessage(const QString &message)
203 {
204 Q_D(QScriptDebuggerEvent);
205 d->attributes[Message] = message;
206 }
207
scriptValue() const208 QScriptDebuggerValue QScriptDebuggerEvent::scriptValue() const
209 {
210 Q_D(const QScriptDebuggerEvent);
211 return qvariant_cast<QScriptDebuggerValue>(d->attributes[Value]);
212 }
213
setScriptValue(const QScriptDebuggerValue & value)214 void QScriptDebuggerEvent::setScriptValue(const QScriptDebuggerValue &value)
215 {
216 Q_D(QScriptDebuggerEvent);
217 d->attributes[Value] = QVariant::fromValue(value);
218 }
219
setNestedEvaluate(bool nested)220 void QScriptDebuggerEvent::setNestedEvaluate(bool nested)
221 {
222 Q_D(QScriptDebuggerEvent);
223 d->attributes[IsNestedEvaluate] = nested;
224 }
225
isNestedEvaluate() const226 bool QScriptDebuggerEvent::isNestedEvaluate() const
227 {
228 Q_D(const QScriptDebuggerEvent);
229 return d->attributes.value(IsNestedEvaluate).toBool();
230 }
231
setHasExceptionHandler(bool hasHandler)232 void QScriptDebuggerEvent::setHasExceptionHandler(bool hasHandler)
233 {
234 Q_D(QScriptDebuggerEvent);
235 d->attributes[HasExceptionHandler] = hasHandler;
236 }
237
hasExceptionHandler() const238 bool QScriptDebuggerEvent::hasExceptionHandler() const
239 {
240 Q_D(const QScriptDebuggerEvent);
241 return d->attributes.value(HasExceptionHandler).toBool();
242 }
243
244 /*!
245 Returns true if this QScriptDebuggerEvent is equal to the \a other
246 event, otherwise returns false.
247 */
operator ==(const QScriptDebuggerEvent & other) const248 bool QScriptDebuggerEvent::operator==(const QScriptDebuggerEvent &other) const
249 {
250 Q_D(const QScriptDebuggerEvent);
251 const QScriptDebuggerEventPrivate *od = other.d_func();
252 if (d == od)
253 return true;
254 if (!d || !od)
255 return false;
256 return ((d->type == od->type)
257 && (d->attributes == od->attributes));
258 }
259
260 /*!
261 Returns true if this QScriptDebuggerEvent is not equal to the \a
262 other event, otherwise returns false.
263 */
operator !=(const QScriptDebuggerEvent & other) const264 bool QScriptDebuggerEvent::operator!=(const QScriptDebuggerEvent &other) const
265 {
266 return !(*this == other);
267 }
268
269 /*!
270 \relates QScriptDebuggerEvent
271
272 Writes the given \a event to the specified \a stream.
273 */
operator <<(QDataStream & out,const QScriptDebuggerEvent & event)274 QDataStream &operator<<(QDataStream &out, const QScriptDebuggerEvent &event)
275 {
276 const QScriptDebuggerEventPrivate *d = event.d_ptr.data();
277 out << (quint32)d->type;
278 out << (qint32)d->attributes.size();
279 QHash<QScriptDebuggerEvent::Attribute, QVariant>::const_iterator it;
280 for (it = d->attributes.constBegin(); it != d->attributes.constEnd(); ++it) {
281 out << (quint32)it.key();
282 out << it.value();
283 }
284 return out;
285 }
286
287 /*!
288 \relates QScriptDebuggerEvent
289
290 Reads a QScriptDebuggerEvent from the specified \a stream into the
291 given \a event.
292 */
operator >>(QDataStream & in,QScriptDebuggerEvent & event)293 QDataStream &operator>>(QDataStream &in, QScriptDebuggerEvent &event)
294 {
295 QScriptDebuggerEventPrivate *d = event.d_ptr.data();
296
297 quint32 type;
298 in >> type;
299 d->type = QScriptDebuggerEvent::Type(type);
300
301 qint32 attribCount;
302 in >> attribCount;
303 QHash<QScriptDebuggerEvent::Attribute, QVariant> attribs;
304 for (qint32 i = 0; i < attribCount; ++i) {
305 quint32 key;
306 in >> key;
307 QVariant value;
308 in >> value;
309 attribs[QScriptDebuggerEvent::Attribute(key)] = value;
310 }
311 d->attributes = attribs;
312
313 return in;
314 }
315
316 QT_END_NAMESPACE
317