• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdesdk API Reference
  • KDE Home
  • Contact Us
 

okteta

  • sources
  • kde-4.12
  • kdesdk
  • okteta
  • kasten
  • controllers
  • view
  • structures
  • script
  • classes
primitivescriptclass.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of the Okteta Kasten Framework, made within the KDE community.
3  *
4  * Copyright 2011, 2012 Alex Richardson <alex.richardson@gmx.de>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) version 3, or any
10  * later version accepted by the membership of KDE e.V. (or its
11  * successor approved by the membership of KDE e.V.), which shall
12  * act as a proxy defined in Section 6 of version 3 of the license.
13  *
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
21  */
22 
23 
24 #include "primitivescriptclass.h"
25 #include "../../datatypes/primitive/primitivedatainformation.h"
26 #include "../../parsers/parserutils.h"
27 #include "../../allprimitivetypes.h"
28 
29 #include <KDebug>
30 
31 PrimitiveScriptClass::PrimitiveScriptClass(QScriptEngine* engine, ScriptHandlerInfo* handlerInfo)
32  : DefaultScriptClass(engine, handlerInfo)
33 {
34  s_value = engine->toStringHandle(QLatin1String("value"));
35  mIterableProperties.append(qMakePair(s_value, QScriptValue::ReadOnly | QScriptValue::Undeletable));
36  s_type = engine->toStringHandle(QLatin1String("type"));
37  mIterableProperties.append(qMakePair(s_type, QScriptValue::ReadOnly | QScriptValue::Undeletable));
38 
39  s_bool = engine->toStringHandle(QLatin1String("bool"));
40  mIterableProperties.append(qMakePair(s_bool, QScriptValue::ReadOnly | QScriptValue::Undeletable));
41  s_char = engine->toStringHandle(QLatin1String("char"));
42  mIterableProperties.append(qMakePair(s_char, QScriptValue::ReadOnly | QScriptValue::Undeletable));
43  s_double = engine->toStringHandle(QLatin1String("double"));
44  mIterableProperties.append(qMakePair(s_double, QScriptValue::ReadOnly | QScriptValue::Undeletable));
45  s_float = engine->toStringHandle(QLatin1String("float"));
46  mIterableProperties.append(qMakePair(s_float, QScriptValue::ReadOnly | QScriptValue::Undeletable));
47  s_int = engine->toStringHandle(QLatin1String("int"));
48  mIterableProperties.append(qMakePair(s_int, QScriptValue::ReadOnly | QScriptValue::Undeletable));
49  s_int8 = engine->toStringHandle(QLatin1String("int8"));
50  mIterableProperties.append(qMakePair(s_int8, QScriptValue::ReadOnly | QScriptValue::Undeletable));
51  s_int16 = engine->toStringHandle(QLatin1String("int16"));
52  mIterableProperties.append(qMakePair(s_int16, QScriptValue::ReadOnly | QScriptValue::Undeletable));
53  s_int32 = engine->toStringHandle(QLatin1String("int32"));
54  mIterableProperties.append(qMakePair(s_int32, QScriptValue::ReadOnly | QScriptValue::Undeletable));
55  s_int64low32 = engine->toStringHandle(QLatin1String("int64low32"));
56  mIterableProperties.append(qMakePair(s_int64low32, QScriptValue::ReadOnly | QScriptValue::Undeletable));
57  s_int64high32 = engine->toStringHandle(QLatin1String("int64high32"));
58  mIterableProperties.append(qMakePair(s_int64high32, QScriptValue::ReadOnly | QScriptValue::Undeletable));
59  s_int64 = engine->toStringHandle(QLatin1String("int64"));
60  mIterableProperties.append(qMakePair(s_int64, QScriptValue::ReadOnly | QScriptValue::Undeletable));
61  s_uint = engine->toStringHandle(QLatin1String("uint"));
62  mIterableProperties.append(qMakePair(s_uint, QScriptValue::ReadOnly | QScriptValue::Undeletable));
63  s_uint8 = engine->toStringHandle(QLatin1String("uint8"));
64  mIterableProperties.append(qMakePair(s_uint8, QScriptValue::ReadOnly | QScriptValue::Undeletable));
65  s_uint16 = engine->toStringHandle(QLatin1String("uint16"));
66  mIterableProperties.append(qMakePair(s_uint16, QScriptValue::ReadOnly | QScriptValue::Undeletable));
67  s_uint32 = engine->toStringHandle(QLatin1String("uint32"));
68  mIterableProperties.append(qMakePair(s_uint32, QScriptValue::ReadOnly | QScriptValue::Undeletable));
69  s_uint64low32 = engine->toStringHandle(QLatin1String("uint64low32"));
70  mIterableProperties.append(qMakePair(s_uint64low32, QScriptValue::ReadOnly | QScriptValue::Undeletable));
71  s_uint64high32 = engine->toStringHandle(QLatin1String("uint64high32"));
72  mIterableProperties.append(qMakePair(s_uint64high32, QScriptValue::ReadOnly | QScriptValue::Undeletable));
73  s_uint64 = engine->toStringHandle(QLatin1String("uint64"));
74  mIterableProperties.append(qMakePair(s_uint64, QScriptValue::ReadOnly | QScriptValue::Undeletable));
75 
76  mPrimitivePrototype = engine->newObject();
77  mPrimitivePrototype.setProperty(QLatin1String("toString"), engine->newFunction(Primitive_proto_toString));
78 }
79 
80 PrimitiveScriptClass::~PrimitiveScriptClass()
81 {
82 }
83 
84 bool PrimitiveScriptClass::queryAdditionalProperty(const DataInformation* data, const QScriptString& name, QScriptClass::QueryFlags* flags, uint*)
85 {
86  Q_UNUSED(data)
87  //TODO assign ids to improve speed? cant have children, so it won't conflict
88  //no need to modify flags since both read and write are handled
89  if (name == s_value || name == s_type)
90  {
91  *flags &= ~HandlesWriteAccess;
92  return true;
93  }
94  else if (name == s_bool || name == s_char || name == s_int || name == s_uint || name == s_float
95  || name == s_double || name == s_int64 || name == s_uint64 || name == s_int64low32
96  || name == s_int64high32 || name == s_uint64low32 || name == s_uint64high32 || name == s_int8
97  || name == s_int16 || name == s_int32 || name == s_uint8 || name == s_uint16 || name == s_uint32)
98  {
99  *flags &= ~HandlesWriteAccess;
100  return true;
101  }
102  return false;
103 }
104 
105 bool PrimitiveScriptClass::additionalPropertyFlags(const DataInformation*, const QScriptString&, uint, QScriptValue::PropertyFlags*)
106 {
107  return false;
108 }
109 
110 
111 QScriptValue PrimitiveScriptClass::additionalProperty(const DataInformation* data, const QScriptString& name, uint)
112 {
113  const PrimitiveDataInformation* pData = data->asPrimitive();
114 
115  if (name == s_value)
116  {
117  if (pData->wasAbleToRead())
118  return pData->valueAsQScriptValue();
119  QScriptValue callee = engine()->currentContext()->thisObject();
120  DataInformation* cause = toDataInformation(callee);
121  if (cause)
122  pData->logError() << "Attempting to read from uninitialized value. Callee was " << cause->fullObjectPath();
123  else
124  pData->logError() << "Attempting to read from uninitialized value. Callee could not be determined";
125  return engine()->undefinedValue();
126  }
127  else if (name == s_type)
128  {
129  //bitfields are handled by own scriptclass and NotPrimitive indicates an error
130  Q_ASSERT(!pData->isBitfield());
131  Q_ASSERT(pData->type() != Type_Invalid);
132  return PrimitiveType::standardTypeName(pData->type());
133  }
134  else {
135  AllPrimitiveTypes value = pData->value();
136  if (name == s_bool)
137  return value.value<quint64>() != 0;
138  else if (name == s_char)
139  return QString(value.value<quint8>() > 127 ? QChar::ReplacementCharacter : QChar(value.value<qint8>(), 0));
140  else if (name == s_float)
141  return value.value<float>();
142  else if (name == s_double)
143  return value.value<double>();
144  else if (name == s_int || name == s_int32 || name == s_int64low32)
145  return value.value<qint32>();
146  else if (name == s_uint || name == s_uint32 || name == s_uint64low32)
147  return value.value<quint32>();
148  else if (name == s_int64)
149  return QString::number(value.value<qint64>());
150  else if (name == s_uint64)
151  return QString::number(value.value<quint64>());
152  else if (name == s_int64high32)
153  return qint32(value.value<qint64>() >> 32);
154  else if (name == s_uint64high32)
155  return quint32(value.value<quint64>() >> 32);
156  else if (name == s_int8)
157  return qint32(value.value<qint8>());
158  else if (name == s_int16)
159  return qint32(value.value<qint16>());
160  else if (name == s_uint8)
161  return quint32(value.value<quint8>());
162  else if (name == s_uint16)
163  return quint32(value.value<quint16>());
164  else
165  return QScriptValue();
166  }
167 }
168 
169 bool PrimitiveScriptClass::setAdditionalProperty(DataInformation* data, const QScriptString& name, uint, const QScriptValue& value)
170 {
171  Q_UNUSED(value);
172  Q_UNUSED(data);
173  Q_UNUSED(name);
174  //TODO allow changing type
175  return false;
176 }
177 
178 QScriptValue PrimitiveScriptClass::prototype() const
179 {
180  return mPrimitivePrototype;
181 }
182 
183 QScriptValue PrimitiveScriptClass::Primitive_proto_toString(QScriptContext* ctx, QScriptEngine* eng)
184 {
185  DataInformation* data = toDataInformation(ctx->thisObject());
186  if (!data)
187  {
188  kWarning() << "could not cast data";
189  return eng->undefinedValue();
190  }
191  //this might allow proper comparison between values without having to call .value
192  return data->wasAbleToRead() ? data->valueString() : eng->undefinedValue();
193 }
194 
DataInformation::valueString
QString valueString() const
by default just returns an empty QString
Definition: datainformation.h:414
DataInformation
Interface that must be implemented by all datatypes.
Definition: datainformation.h:67
DataInformation::fullObjectPath
QString fullObjectPath() const
Definition: datainformation.cpp:258
PrimitiveScriptClass::s_uint64
QScriptString s_uint64
Definition: primitivescriptclass.h:58
PrimitiveScriptClass::PrimitiveScriptClass
PrimitiveScriptClass(QScriptEngine *engine, ScriptHandlerInfo *handlerInfo)
Definition: primitivescriptclass.cpp:31
primitivescriptclass.h
DataInformation::wasAbleToRead
bool wasAbleToRead() const
Definition: datainformation.h:283
PrimitiveDataInformation::value
virtual AllPrimitiveTypes value() const =0
PrimitiveScriptClass::s_int32
QScriptString s_int32
Definition: primitivescriptclass.h:50
PrimitiveScriptClass::s_value
QScriptString s_value
Definition: primitivescriptclass.h:45
PrimitiveScriptClass::s_uint64low32
QScriptString s_uint64low32
Definition: primitivescriptclass.h:60
PrimitiveScriptClass::s_char
QScriptString s_char
Definition: primitivescriptclass.h:64
PrimitiveScriptClass::additionalProperty
virtual QScriptValue additionalProperty(const DataInformation *data, const QScriptString &name, uint id)
Definition: primitivescriptclass.cpp:111
PrimitiveDataInformation::type
virtual PrimitiveDataType type() const =0
PrimitiveScriptClass::s_bool
QScriptString s_bool
Definition: primitivescriptclass.h:61
PrimitiveScriptClass::s_int64low32
QScriptString s_int64low32
Definition: primitivescriptclass.h:53
PrimitiveScriptClass::s_int64
QScriptString s_int64
Definition: primitivescriptclass.h:51
PrimitiveScriptClass::s_uint64high32
QScriptString s_uint64high32
Definition: primitivescriptclass.h:59
DefaultScriptClass::toDataInformation
static DataInformation * toDataInformation(const QScriptValue &val)
Convert a QScriptValue to DataInformation than qscriptvalue_cast, since we know exactly what to expec...
Definition: defaultscriptclass.cpp:75
PrimitiveScriptClass::s_int
QScriptString s_int
Definition: primitivescriptclass.h:47
DataInformationBase::asPrimitive
PrimitiveDataInformation * asPrimitive()
PrimitiveType::standardTypeName
QString standardTypeName(PrimitiveDataType type)
Definition: primitivedatatype.cpp:76
DefaultScriptClass::mIterableProperties
PropertyInfoList mIterableProperties
Contains all properties of this class, classes inheriting should add their own properties to this lis...
Definition: defaultscriptclass.h:82
PrimitiveScriptClass::s_uint
QScriptString s_uint
Definition: primitivescriptclass.h:54
PrimitiveDataInformation::valueAsQScriptValue
virtual QScriptValue valueAsQScriptValue() const =0
PrimitiveScriptClass::s_float
QScriptString s_float
Definition: primitivescriptclass.h:62
AllPrimitiveTypes::value
T value() const
ScriptHandlerInfo
Definition: scripthandlerinfo.h:39
PrimitiveScriptClass::queryAdditionalProperty
virtual bool queryAdditionalProperty(const DataInformation *data, const QScriptString &name, QScriptClass::QueryFlags *flags, uint *id)
Definition: primitivescriptclass.cpp:84
PrimitiveScriptClass::mPrimitivePrototype
QScriptValue mPrimitivePrototype
Definition: primitivescriptclass.h:67
PrimitiveScriptClass::s_int8
QScriptString s_int8
Definition: primitivescriptclass.h:48
PrimitiveScriptClass::s_uint16
QScriptString s_uint16
Definition: primitivescriptclass.h:56
PrimitiveScriptClass::s_double
QScriptString s_double
Definition: primitivescriptclass.h:63
Type_Invalid
!! DO NOT CHANGE ORDER OF ITEMS !!!
Definition: primitivedatatype.h:31
PrimitiveScriptClass::~PrimitiveScriptClass
virtual ~PrimitiveScriptClass()
Definition: primitivescriptclass.cpp:80
PrimitiveScriptClass::s_int64high32
QScriptString s_int64high32
Definition: primitivescriptclass.h:52
PrimitiveScriptClass::additionalPropertyFlags
virtual bool additionalPropertyFlags(const DataInformation *data, const QScriptString &name, uint, QScriptValue::PropertyFlags *flags)
Definition: primitivescriptclass.cpp:105
AllPrimitiveTypes
This union holds the value of one primitive datatype.
Definition: allprimitivetypes.h:70
DefaultScriptClass
Definition: defaultscriptclass.h:36
PrimitiveScriptClass::s_type
QScriptString s_type
Definition: primitivescriptclass.h:46
PrimitiveScriptClass::setAdditionalProperty
virtual bool setAdditionalProperty(DataInformation *data, const QScriptString &name, uint id, const QScriptValue &value)
Definition: primitivescriptclass.cpp:169
PrimitiveScriptClass::s_uint32
QScriptString s_uint32
Definition: primitivescriptclass.h:57
PrimitiveScriptClass::s_int16
QScriptString s_int16
Definition: primitivescriptclass.h:49
DataInformationBase::isBitfield
virtual bool isBitfield() const
Definition: datainformationbase.cpp:65
PrimitiveDataInformation
A base class for all primitive data elements (e.g.
Definition: primitivedatainformation.h:34
PrimitiveScriptClass::Primitive_proto_toString
static QScriptValue Primitive_proto_toString(QScriptContext *ctx, QScriptEngine *eng)
Definition: primitivescriptclass.cpp:183
PrimitiveScriptClass::prototype
virtual QScriptValue prototype() const
Definition: primitivescriptclass.cpp:178
PrimitiveScriptClass::s_uint8
QScriptString s_uint8
Definition: primitivescriptclass.h:55
DataInformation::logError
QDebug logError() const
just a shorthand for logger->error(this)
Definition: datainformation.h:324
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 23:04:08 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

okteta

Skip menu "okteta"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdesdk API Reference

Skip menu "kdesdk API Reference"
  • kapptemplate
  • kcachegrind
  • kompare
  • lokalize
  • okteta
  • umbrello
  •   umbrello

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal