Improve documentation.
[profile/ivi/qtdeclarative.git] / src / qml / qml / qqmlscriptstring.cpp
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
5 **
6 ** This file is part of the QtQml 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 Digia.  For licensing terms and
14 ** conditions see http://qt.digia.com/licensing.  For further information
15 ** use the contact form at http://qt.digia.com/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 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file.  Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 **
25 ** In addition, as a special exception, Digia gives you certain additional
26 ** rights.  These rights are described in the Digia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 **
29 ** GNU General Public License Usage
30 ** Alternatively, this file may be used under the terms of the GNU
31 ** General Public License version 3.0 as published by the Free Software
32 ** Foundation and appearing in the file LICENSE.GPL included in the
33 ** packaging of this file.  Please review the following information to
34 ** ensure the GNU General Public License version 3.0 requirements will be
35 ** met: http://www.gnu.org/copyleft/gpl.html.
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