Add missing QT_{BEGIN,END}_NAMESPACE
[profile/ivi/qtdeclarative.git] / src / qml / qml / qqmlscriptstring.cpp
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/
5 **
6 ** This file is part of the QtQml module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** GNU Lesser General Public License Usage
10 ** This file may be used under the terms of the GNU Lesser General Public
11 ** License version 2.1 as published by the Free Software Foundation and
12 ** appearing in the file LICENSE.LGPL included in the packaging of this
13 ** file. Please review the following information to ensure the GNU Lesser
14 ** General Public License version 2.1 requirements will be met:
15 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
16 **
17 ** In addition, as a special exception, Nokia gives you certain additional
18 ** rights. These rights are described in the Nokia Qt LGPL Exception
19 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
20 **
21 ** GNU General Public License Usage
22 ** Alternatively, this file may be used under the terms of the GNU General
23 ** Public License version 3.0 as published by the Free Software Foundation
24 ** and appearing in the file LICENSE.GPL included in the packaging of this
25 ** file. Please review the following information to ensure the GNU General
26 ** Public License version 3.0 requirements will be met:
27 ** http://www.gnu.org/copyleft/gpl.html.
28 **
29 ** Other Usage
30 ** Alternatively, this file may be used in accordance with the terms and
31 ** conditions contained in a signed written agreement between you and Nokia.
32 **
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #include "qqmlscriptstring.h"
43 #include "qqmlscriptstring_p.h"
44
45 QT_BEGIN_NAMESPACE
46
47 /*!
48 \class QQmlScriptString
49 \brief The QQmlScriptString class encapsulates a script and its context.
50 \inmodule QtQml
51
52 QQmlScriptString is used to create QObject properties that accept a script "assignment" from QML.
53
54 Normally, the following QML would result in a binding being established for the \c script
55 property; i.e. \c script would be assigned the value obtained from running \c {myObj.value = Math.max(myValue, 100)}
56
57 \qml
58 MyType {
59     script: myObj.value = Math.max(myValue, 100)
60 }
61 \endqml
62
63 If instead the property had a type of QQmlScriptString,
64 the script itself -- \e {myObj.value = Math.max(myValue, 100)} -- would be passed to the \c script property
65 and the class could choose how to handle it. Typically, the class will evaluate
66 the script at some later time using a QQmlExpression.
67
68 \code
69 QQmlExpression expr(scriptString);
70 expr.evaluate();
71 \endcode
72
73 \sa QQmlExpression
74 */
75
76 const QQmlScriptStringPrivate* QQmlScriptStringPrivate::get(const QQmlScriptString &script)
77 {
78     return script.d.constData();
79 }
80
81 /*!
82 Constructs an empty instance.
83 */
84 QQmlScriptString::QQmlScriptString()
85 :  d(new QQmlScriptStringPrivate)
86 {
87 }
88
89 /*!
90     \internal
91 */
92 QQmlScriptString::QQmlScriptString(const QString &script, QQmlContext *context, QObject *scope)
93 :  d(new QQmlScriptStringPrivate)
94 {
95     d->script = script;
96     d->context = context;
97     d->scope = scope;
98 }
99
100 /*!
101 Copies \a other.
102 */
103 QQmlScriptString::QQmlScriptString(const QQmlScriptString &other)
104 : d(other.d)
105 {
106 }
107
108 /*!
109 \internal
110 */
111 QQmlScriptString::~QQmlScriptString()
112 {
113 }
114
115 /*!
116 Assigns \a other to this.
117 */
118 QQmlScriptString &QQmlScriptString::operator=(const QQmlScriptString &other)
119 {
120     d = other.d;
121     return *this;
122 }
123
124 /*!
125 Returns whether the QQmlScriptString is empty.
126 */
127 bool QQmlScriptString::isEmpty() const
128 {
129     return d->script.isEmpty();
130 }
131
132 /*!
133 Returns whether the content of the QQmlScriptString is the \c undefined literal.
134 */
135 bool QQmlScriptString::isUndefinedLiteral() const
136 {
137     return d->script == QStringLiteral("undefined");
138 }
139
140 /*!
141 Returns whether the content of the QQmlScriptString is the \c null literal.
142 */
143 bool QQmlScriptString::isNullLiteral() const
144 {
145     return d->script == QStringLiteral("null");
146 }
147
148 /*!
149 If the content of the QQmlScriptString is a string literal, returns that string.
150 Otherwise returns a null QString.
151 */
152 QString QQmlScriptString::stringLiteral() const
153 {
154     if (d->isStringLiteral)
155         return d->script.mid(1, d->script.length()-2);
156     return QString();
157 }
158
159 /*!
160 If the content of the QQmlScriptString is a number literal, returns that number and
161 sets \a ok to true. Otherwise returns 0.0 and sets \a ok to false.
162 */
163 qreal QQmlScriptString::numberLiteral(bool *ok) const
164 {
165     if (ok)
166         *ok = d->isNumberLiteral;
167     return d->isNumberLiteral ? d->numberValue : 0.;
168 }
169
170 /*!
171 If the content of the QQmlScriptString is a boolean literal, returns the boolean value and
172 sets \a ok to true. Otherwise returns false and sets \a ok to false.
173 */
174 bool QQmlScriptString::booleanLiteral(bool *ok) const
175 {
176     bool isTrue = d->script == QStringLiteral("true");
177     bool isFalse = !isTrue && d->script == QStringLiteral("false");
178     if (ok)
179         *ok = isTrue || isFalse;
180     return isTrue ? true : false;
181 }
182
183 QT_END_NAMESPACE
184