File indexing completed on 2024-12-08 12:23:04
0001 /* This file is part of the KDE libraries 0002 Copyright (C) 2005, 2006 Ian Reinhart Geiser <geiseri@kde.org> 0003 Copyright (C) 2005, 2006 Matt Broadstone <mbroadst@gmail.com> 0004 Copyright (C) 2005, 2006 Richard J. Moore <rich@kde.org> 0005 Copyright (C) 2005, 2006 Erik L. Bunce <kde@bunce.us> 0006 0007 This library is free software; you can redistribute it and/or 0008 modify it under the terms of the GNU Library General Public 0009 License as published by the Free Software Foundation; either 0010 version 2 of the License, or (at your option) any later version. 0011 0012 This library is distributed in the hope that it will be useful, 0013 but WITHOUT ANY WARRANTY; without even the implied warranty of 0014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 0015 Library General Public License for more details. 0016 0017 You should have received a copy of the GNU Library General Public License 0018 along with this library; see the file COPYING.LIB. If not, write to 0019 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 0020 Boston, MA 02110-1301, USA. 0021 */ 0022 0023 #ifndef BINDING_SUPPORT_H 0024 #define BINDING_SUPPORT_H 0025 0026 #include <QDate> 0027 #include <QStringList> 0028 0029 #include <kjsembed/kjseglobal.h> 0030 #include <kjsembed/pointer.h> 0031 #include <kjs/object.h> 0032 0033 #define KJS_BINDING( NAME ) \ 0034 class NAME \ 0035 { \ 0036 public: \ 0037 static const KJSEmbed::Method p_methods[]; \ 0038 static const KJSEmbed::Method p_statics[]; \ 0039 static const KJSEmbed::Enumerator p_enums[]; \ 0040 static const KJSEmbed::Constructor p_constructor; \ 0041 static KJS::JSObject *ctorMethod( KJS::ExecState *exec, const KJS::List &args );\ 0042 static const KJSEmbed::Enumerator *enums() { return p_enums;} \ 0043 static const KJSEmbed::Method *methods() { return p_methods;} \ 0044 static const KJSEmbed::Method *statics() { return p_statics;} \ 0045 static const KJSEmbed::Constructor *constructor() { return &p_constructor;} \ 0046 static const KJS::JSObject *construct(KJS::ExecState *exec, const KJS::List &args)\ 0047 { return (*p_constructor.construct)(exec,args); } \ 0048 }; 0049 0050 #define KJSO_BINDING( NAME, TYPE, BASENAME ) \ 0051 class KJSEMBED_EXPORT NAME : public BASENAME \ 0052 { \ 0053 public: \ 0054 NAME(KJS::ExecState *exec, TYPE * obj); \ 0055 static const KJSEmbed::Method p_methods[]; \ 0056 static const KJSEmbed::Method p_statics[]; \ 0057 static const KJSEmbed::Enumerator p_enums[]; \ 0058 static const KJSEmbed::Constructor p_constructor; \ 0059 static KJS::JSObject *bindMethod( KJS::ExecState *exec, PointerBase& ptrObj );\ 0060 static KJS::JSObject *ctorMethod( KJS::ExecState *exec, const KJS::List &args );\ 0061 static const KJSEmbed::Enumerator *enums() { return p_enums;} \ 0062 static const KJSEmbed::Method *methods() { return p_methods;} \ 0063 static const KJSEmbed::Method *statics() { return p_statics;} \ 0064 static const KJSEmbed::Constructor *constructor() { return &p_constructor;} \ 0065 }; 0066 0067 #define KJSO_BINDING_NOEXP( NAME, TYPE, BASENAME ) \ 0068 class NAME : public BASENAME \ 0069 { \ 0070 public: \ 0071 NAME(KJS::ExecState *exec, TYPE * obj); \ 0072 static const KJSEmbed::Method p_methods[]; \ 0073 static const KJSEmbed::Method p_statics[]; \ 0074 static const KJSEmbed::Enumerator p_enums[]; \ 0075 static const KJSEmbed::Constructor p_constructor; \ 0076 static KJS::JSObject *bindMethod( KJS::ExecState *exec, PointerBase& ptrObj );\ 0077 static KJS::JSObject *ctorMethod( KJS::ExecState *exec, const KJS::List &args );\ 0078 static const KJSEmbed::Enumerator *enums() { return p_enums;} \ 0079 static const KJSEmbed::Method *methods() { return p_methods;} \ 0080 static const KJSEmbed::Method *statics() { return p_statics;} \ 0081 static const KJSEmbed::Constructor *constructor() { return &p_constructor;} \ 0082 }; 0083 0084 #define KJSO_VALUE_BINDING( NAME, TYPE, BASENAME ) \ 0085 class KJSEMBED_EXPORT NAME : public BASENAME \ 0086 { \ 0087 public: \ 0088 NAME(KJS::ExecState *exec, const TYPE & val ); \ 0089 NAME(KJS::ExecState *exec, const char *typeName ); \ 0090 static const KJSEmbed::Method p_methods[]; \ 0091 static const KJSEmbed::Method p_statics[]; \ 0092 static const KJSEmbed::Enumerator p_enums[]; \ 0093 static const KJSEmbed::Constructor p_constructor; \ 0094 static KJS::JSObject *bindMethod( KJS::ExecState *exec, PointerBase& ptrObj );\ 0095 static KJS::JSObject *ctorMethod( KJS::ExecState *exec, const KJS::List &args );\ 0096 static const KJSEmbed::Enumerator *enums() { return p_enums;} \ 0097 static const KJSEmbed::Method *methods() { return p_methods;} \ 0098 static const KJSEmbed::Method *statics() { return p_statics;} \ 0099 static const KJSEmbed::Constructor *constructor() { return &p_constructor;} \ 0100 }; 0101 0102 #define KJSO_START_BINDING_CTOR( NAME, TYPE, BASENAME ) \ 0103 NAME::NAME(KJS::ExecState *exec, TYPE * obj) \ 0104 : BASENAME( exec, obj ) \ 0105 { \ 0106 StaticBinding::publish( exec, this, NAME::methods() ); 0107 0108 #define KJSO_END_BINDING_CTOR \ 0109 } 0110 0111 #define KJSO_SIMPLE_BINDING_CTOR( NAME, TYPE, BASENAME ) \ 0112 NAME::NAME(KJS::ExecState *exec, TYPE * obj) \ 0113 : BASENAME( exec, obj ) \ 0114 { \ 0115 StaticBinding::publish( exec, this, NAME::methods() ); \ 0116 } 0117 0118 #define KJSV_SIMPLE_BINDING_CTOR( NAME, JSNAME, TYPE, BASENAME ) \ 0119 NAME::NAME(KJS::ExecState *exec, const TYPE & value) \ 0120 : BASENAME( exec, #JSNAME , value ) \ 0121 { \ 0122 StaticBinding::publish( exec, this, NAME::methods() ); \ 0123 } 0124 0125 #define START_METHOD_LUT( TYPE ) \ 0126 const Method TYPE::p_methods[] = \ 0127 { 0128 0129 #define START_STATIC_METHOD_LUT( TYPE ) \ 0130 const Method TYPE::p_statics[] = \ 0131 { 0132 0133 #define END_METHOD_LUT \ 0134 ,{nullptr, 0, 0, nullptr }\ 0135 }; 0136 0137 #define START_ENUM_LUT( TYPE) \ 0138 const Enumerator TYPE::p_enums[] =\ 0139 { 0140 0141 #define END_ENUM_LUT \ 0142 ,{nullptr, 0 }\ 0143 }; 0144 0145 #define NO_ENUMS( TYPE ) \ 0146 const Enumerator TYPE::p_enums[] = {{nullptr, 0 }}; 0147 0148 #define NO_METHODS( TYPE )\ 0149 const Method TYPE::p_methods[] = { {nullptr, 0, 0, nullptr } }; 0150 0151 #define NO_STATICS( TYPE )\ 0152 const Method TYPE::p_statics[] = { {nullptr, 0, 0, nullptr } }; 0153 0154 #define START_CTOR( TYPE, JSNAME, ARGS )\ 0155 const Constructor TYPE::p_constructor = \ 0156 { \ 0157 #JSNAME, ARGS, KJS::DontDelete|KJS::ReadOnly, nullptr, &TYPE::ctorMethod, p_statics, p_enums, p_methods };\ 0158 KJS::JSObject *TYPE::ctorMethod( KJS::ExecState *exec, const KJS::List &args )\ 0159 {\ 0160 Q_UNUSED(exec);\ 0161 Q_UNUSED(args); 0162 0163 #define END_CTOR \ 0164 } 0165 0166 #define KJSO_START_CTOR( TYPE, JSNAME, ARGS )\ 0167 const Constructor TYPE::p_constructor = \ 0168 { \ 0169 #JSNAME, ARGS, KJS::DontDelete|KJS::ReadOnly, &TYPE::bindMethod, &TYPE::ctorMethod, p_statics, p_enums, p_methods };\ 0170 KJS::JSObject *TYPE::ctorMethod( KJS::ExecState *exec, const KJS::List &args )\ 0171 {\ 0172 Q_UNUSED(exec);\ 0173 Q_UNUSED(args); 0174 0175 #define KJSO_END_CTOR \ 0176 } 0177 0178 #define KJSO_START_BIND( NAME, TYPE )\ 0179 KJS::JSObject *NAME::bindMethod( KJS::ExecState *exec, PointerBase& ptrObj )\ 0180 {\ 0181 Q_UNUSED(exec);\ 0182 Q_UNUSED(ptrObj); \ 0183 0184 #define KJSO_END_BIND \ 0185 } 0186 0187 #define KJSO_QOBJECT_START_BIND( NAME, TYPE )\ 0188 KJS::JSObject *NAME::bindMethod( KJS::ExecState *exec, PointerBase& ptrObj )\ 0189 {\ 0190 Q_UNUSED(exec);\ 0191 QObject* qobj = pointer_cast<QObject>(&ptrObj); \ 0192 if (! qobj ) \ 0193 return nullptr; \ 0194 TYPE* object = qobject_cast<TYPE*>(qobj); \ 0195 if (! object ) \ 0196 return nullptr; \ 0197 0198 #define KJSO_QOBJECT_END_BIND \ 0199 } 0200 0201 #define KJSO_QOBJECT_BIND( NAME, TYPE )\ 0202 KJS::JSObject *NAME::bindMethod( KJS::ExecState *exec, PointerBase& ptrObj )\ 0203 {\ 0204 Q_UNUSED(exec);\ 0205 QObject* qobj = pointer_cast<QObject>(&ptrObj); \ 0206 if (! qobj ) \ 0207 return nullptr; \ 0208 TYPE* object = qobject_cast<TYPE*>(qobj); \ 0209 if (! object ) \ 0210 return nullptr; \ 0211 return new NAME(exec, object); \ 0212 } 0213 0214 #define KJSO_VALUE_START_BIND( NAME, TYPE )\ 0215 KJS::JSObject *NAME::bindMethod( KJS::ExecState *exec, PointerBase& ptrObj )\ 0216 {\ 0217 Q_UNUSED(exec);\ 0218 TYPE* object = pointer_cast<TYPE>(&ptrObj); \ 0219 if (! object ) \ 0220 return nullptr; \ 0221 0222 #define KJSO_VALUE_END_BIND \ 0223 } 0224 0225 #define KJSO_VALUE_BIND( NAME, TYPE )\ 0226 KJS::JSObject *NAME::bindMethod( KJS::ExecState *exec, PointerBase& ptrObj )\ 0227 {\ 0228 Q_UNUSED(exec);\ 0229 TYPE* object = pointer_cast<TYPE>(&ptrObj); \ 0230 if (! object ) \ 0231 return nullptr; \ 0232 return new NAME(exec, *object); \ 0233 } 0234 0235 namespace KJS 0236 { 0237 inline JSObject *throwError(ExecState *e, ErrorType t, const QString &m) 0238 { 0239 return throwError(e, t, KJSEmbed::toUString(m)); 0240 } 0241 } 0242 0243 namespace KJSEmbed 0244 { 0245 class KJSEMBED_EXPORT ProxyBinding : public KJS::JSObject 0246 { 0247 public: 0248 ProxyBinding(KJS::ExecState *exec); 0249 ~ProxyBinding() override {} 0250 0251 bool implementsCall() const override 0252 { 0253 return true; 0254 } 0255 bool implementsConstruct() const override 0256 { 0257 return true; 0258 } 0259 }; 0260 0261 /** 0262 * This will extract a binding implementation from a KJS::JSValue 0263 * @code 0264 * KJSEmbed ObjectBindingImp *imp = extractBindingImp<ObjectBindingImp>(exec,val); 0265 * if( imp ) 0266 * qDebug("it worked"); 0267 * else 0268 * qDebug("it failed"); 0269 * @endcode 0270 */ 0271 template <typename T> 0272 T *extractBindingImp(KJS::ExecState *exec, KJS::JSValue *val) 0273 { 0274 return dynamic_cast<T *>(val->toObject(exec)); 0275 } 0276 0277 /** 0278 * This is just a helper function similar to the one above, only it takes a KJS::JSObject 0279 */ 0280 template <typename T> 0281 T *extractBindingImp(KJS::JSObject *obj) 0282 { 0283 return dynamic_cast<T *>(obj); 0284 } 0285 0286 /** 0287 * Method callback signature. 0288 * @param exec The execution state. 0289 * @param object The current object that the method is working on (equivalent of "this") 0290 * @param args A KJS::List of KJS::JSValue objects that represents the arguments that where 0291 * passed in from the javascript function signature. 0292 */ 0293 typedef KJS::JSValue *(*callMethod)(KJS::ExecState *, KJS::JSObject *, const KJS::List &); 0294 0295 /** 0296 * Method structure 0297 */ 0298 struct KJSEMBED_EXPORT Method { 0299 /** 0300 * Method name as will appear in javascript 0301 */ 0302 const char *name; 0303 /** 0304 * Number of arguments. 0305 */ 0306 const int argc; 0307 /** 0308 * Flags for the member properties 0309 */ 0310 const int flags; 0311 /** 0312 * The callback for the method. 0313 */ 0314 const callMethod call; 0315 }; 0316 0317 /** 0318 * Enumerator structure 0319 */ 0320 struct KJSEMBED_EXPORT Enumerator { 0321 /** 0322 * Method name as will appear in javascript 0323 */ 0324 const char *name; 0325 /** 0326 * Integer value. 0327 */ 0328 const unsigned int value; 0329 }; 0330 0331 /** 0332 * Bind signature 0333 * @param exec the execution context 0334 * @param ptr A PointerBase that points to a Pointer object that contains 0335 * a pointer to the object to provide a javascript binding for. 0336 */ 0337 typedef KJS::JSObject *(*callBind)(KJS::ExecState *, PointerBase &); 0338 0339 /** 0340 * Constructor signature 0341 * @param exec the execution context 0342 * @param args A KJS::List of KJS::JSValue objects that represents the arguments that where 0343 * passed in from the javascript function signature. 0344 */ 0345 typedef KJS::JSObject *(*callConstructor)(KJS::ExecState *, const KJS::List &); 0346 0347 struct KJSEMBED_EXPORT Constructor { 0348 /** 0349 * The constructor name as it will appear in Javascript. This will be the objects 0350 * name as far as Javascript is concerned. 0351 */ 0352 const char *name; 0353 /** 0354 * Number of arguments. 0355 */ 0356 const int argc; 0357 /** 0358 * Flags for the member properties 0359 */ 0360 const int flags; 0361 /** 0362 * The callback for the constructor. 0363 */ 0364 const callBind bind; 0365 /** 0366 * The callback for the constructor. 0367 */ 0368 const callConstructor construct; 0369 /** 0370 * Static methods on the object. 0371 */ 0372 const Method *staticMethods; 0373 /** 0374 * Enumerators for the object 0375 */ 0376 const Enumerator *enumerators; 0377 /** 0378 * Member methods for the object 0379 */ 0380 const Method *methods; 0381 }; 0382 0383 /** 0384 * Extracts a QString from an argument list. If the argument is not present, or is not convertable to a string 0385 * the defaultValue is returned. 0386 */ 0387 QString KJSEMBED_EXPORT extractQString(KJS::ExecState *exec, const KJS::List &args, int idx, const QString defaultValue = QString()); 0388 0389 /** 0390 * Extract a QString from a value. If the value cannot convert to a string the defaultValue is returned. 0391 */ 0392 QString KJSEMBED_EXPORT extractQString(KJS::ExecState *exec, KJS::JSValue *value, const QString defaultValue = QString()); 0393 0394 /** 0395 * Create a new KJS::JSValue with the value of the QString 0396 */ 0397 KJS::JSValue *createQString(KJS::ExecState *exec, const QString &value); 0398 0399 /** 0400 * Extracts a QByteArray from an argument list. If the argument is not present, or is not convertable to a string 0401 * the defaultValue is returned. 0402 */ 0403 QByteArray KJSEMBED_EXPORT extractQByteArray(KJS::ExecState *exec, const KJS::List &args, int idx, const QByteArray &defaultValue = QByteArray()); 0404 0405 /** 0406 * Extract a QString from a value. If the value cannot convert to a string the defaultValue is returned. 0407 */ 0408 QByteArray KJSEMBED_EXPORT extractQByteArray(KJS::ExecState *exec, KJS::JSValue *value, const QByteArray &defaultValue = QByteArray()); 0409 0410 /** 0411 * Create a new KJS::JSValue with the value of the QString 0412 */ 0413 KJS::JSValue *createQByteArray(KJS::ExecState *exec, const QByteArray &value); 0414 0415 template<typename T> 0416 inline T KJSEMBED_EXPORT extractString(KJS::ExecState *exec, KJS::JSValue *value, T defaultValue = T()) 0417 { 0418 if (!value || !value->isString()) { 0419 return defaultValue; 0420 } 0421 0422 return (T)(value->toString(exec).ascii()); 0423 } 0424 0425 template<typename T> 0426 inline T KJSEMBED_EXPORT extractString(KJS::ExecState *exec, const KJS::List &args, int idx, T defaultValue = T()) 0427 { 0428 if (args.size() >= idx) { 0429 return extractString<T>(exec, args[idx], defaultValue); 0430 } else { 0431 return defaultValue; 0432 } 0433 } 0434 0435 /** 0436 * Extract a number from a value. If the value cannot convert to an integer or is not present defaultValue is returned 0437 */ 0438 template<typename T> 0439 inline T KJSEMBED_EXPORT extractNumber(KJS::ExecState *exec, KJS::JSValue *value, T defaultValue = T(0)) 0440 { 0441 if (!value || !value->isNumber()) { 0442 return defaultValue; 0443 } 0444 0445 return static_cast<T>(value->toNumber(exec)); 0446 } 0447 0448 /** 0449 * Extracts a number from an arguments list. If the argument is not present, or is not convertable to a number 0450 * the defaultValue is returned. 0451 */ 0452 template<typename T> 0453 inline T KJSEMBED_EXPORT extractNumber(KJS::ExecState *exec, const KJS::List &args, int idx, T defaultValue = T(0)) 0454 { 0455 if (args.size() >= idx) { 0456 return extractNumber<T>(exec, args[idx], defaultValue); 0457 } else { 0458 return defaultValue; 0459 } 0460 } 0461 0462 /** 0463 * Extract an integer from a value. If the value cannot convert to an integer or is not present defaultValue is returned 0464 */ 0465 template<typename T> 0466 inline T KJSEMBED_EXPORT extractInteger(KJS::ExecState *exec, KJS::JSValue *value, T defaultValue) 0467 { 0468 if (!value || !value->isNumber()) { 0469 return defaultValue; 0470 } 0471 0472 // deal with MSVC annoyances 0473 #if COMPILER(MSVC) || __GNUC__ == 3 0474 return static_cast<T>(static_cast<int>(value->toInteger(exec))); 0475 #else 0476 return static_cast<T>(value->toInteger(exec)); 0477 #endif 0478 } 0479 0480 // extractInteger specialization 0481 template<> 0482 inline qint32 KJSEMBED_EXPORT extractInteger<qint32>(KJS::ExecState *exec, KJS::JSValue *value, qint32 defaultValue) 0483 { 0484 if (!value || !value->isNumber()) { 0485 return defaultValue; 0486 } 0487 0488 return static_cast<qint32>(value->toInt32(exec)); 0489 } 0490 0491 // extractInteger specialization 0492 template<> 0493 inline quint32 KJSEMBED_EXPORT extractInteger<quint32>(KJS::ExecState *exec, KJS::JSValue *value, quint32 defaultValue) 0494 { 0495 if (!value || !value->isNumber()) { 0496 return defaultValue; 0497 } 0498 0499 return static_cast<quint32>(value->toUInt32(exec)); 0500 } 0501 0502 // extractInteger specialization 0503 template<> 0504 inline quint16 KJSEMBED_EXPORT extractInteger<quint16>(KJS::ExecState *exec, KJS::JSValue *value, quint16 defaultValue) 0505 { 0506 if (!value || !value->isNumber()) { 0507 return defaultValue; 0508 } 0509 0510 return static_cast<quint16>(value->toUInt16(exec)); 0511 } 0512 0513 /** 0514 * Extracts an integer from an arguments list. If the argument is not present, or is not convertable to a number 0515 * the defaultValue is returned. 0516 */ 0517 template<typename T> 0518 inline T KJSEMBED_EXPORT extractInteger(KJS::ExecState *exec, const KJS::List &args, int idx, T defaultValue = T(0)) 0519 { 0520 if (args.size() >= idx) { 0521 return extractInteger<T>(exec, args[idx], defaultValue); 0522 } else { 0523 return defaultValue; 0524 } 0525 } 0526 0527 /** 0528 * Extracts an integer from an argument list. If the argument is not present, or is not convertable to an integer 0529 * the defaultValue is returned. 0530 */ 0531 int KJSEMBED_EXPORT extractInt(KJS::ExecState *exec, const KJS::List &args, int idx, int defaultValue = 0); 0532 /** 0533 * Extract an integer from a value. If the value cannot convert to an integer the defaultValue is returned. 0534 */ 0535 int KJSEMBED_EXPORT extractInt(KJS::ExecState *exec, KJS::JSValue *value, int defaultValue = 0); 0536 /** 0537 * Create a new KJS::JSValue with the value of the integer. 0538 */ 0539 KJS::JSValue *createInt(KJS::ExecState *exec, int value); 0540 0541 /** 0542 * Extracts a double from an argument list. If the argument is not present, or is not convertable to a double 0543 * the defaultValue is returned. 0544 */ 0545 double KJSEMBED_EXPORT extractDouble(KJS::ExecState *exec, const KJS::List &args, int idx, double defaultValue = 0); 0546 /** 0547 * Extract a double from a value. If the value cannot convert to a double the defaultValue is returned. 0548 */ 0549 double KJSEMBED_EXPORT extractDouble(KJS::ExecState *exec, KJS::JSValue *value, double defaultValue = 0); 0550 /** 0551 * Create a new KJS::JSValue with the value of the double. 0552 */ 0553 KJS::JSValue *createDouble(KJS::ExecState *exec, double value); 0554 0555 /** 0556 * Extracts a float from an argument list. If the argument is not present, or is not convertable to a float 0557 * the defaultValue is returned. 0558 */ 0559 float KJSEMBED_EXPORT extractFloat(KJS::ExecState *exec, const KJS::List &args, int idx, float defaultValue = 0); 0560 /** 0561 * Extract a float from a value. If the value cannot convert to a float the defaultValue is returned. 0562 */ 0563 float KJSEMBED_EXPORT extractFloat(KJS::ExecState *exec, KJS::JSValue *value, float defaultValue = 0); 0564 /** 0565 * Create a new KJS::JSValue with the value of the float. 0566 */ 0567 KJS::JSValue *createFloat(KJS::ExecState *exec, float value); 0568 0569 /** 0570 * Extracts a bool from an argument list. If the argument is not present, or is not convertable to a bool 0571 * the defaultValue is returned. 0572 */ 0573 bool KJSEMBED_EXPORT extractBool(KJS::ExecState *exec, const KJS::List &args, int idx, bool defaultValue = false); 0574 /** 0575 * Extract a bool from a value. If the value cannot convert to a bool the defaultValue is returned. 0576 */ 0577 bool extractBool(KJS::ExecState *exec, KJS::JSValue *value, bool defaultValue = false); 0578 /** 0579 * Create a new KJS::JSValue with the value of the bool. 0580 */ 0581 KJS::JSValue *createBool(KJS::ExecState *exec, bool value); 0582 0583 /** 0584 * Extracts a QDateTime from an argument list. If the argument is not present, or is not convertable to a QDateTime 0585 * the defaultValue is returned. 0586 */ 0587 QDateTime KJSEMBED_EXPORT extractQDateTime(KJS::ExecState *exec, const KJS::List &args, int idx, const QDateTime &defaultValue = QDateTime()); 0588 /** 0589 * Extract a bool from a value. If the value cannot convert to a QDateTime the defaultValue is returned. 0590 */ 0591 QDateTime KJSEMBED_EXPORT extractQDateTime(KJS::ExecState *exec, KJS::JSValue *value, const QDateTime &defaultValue = QDateTime()); 0592 /** 0593 * Create a new KJS::JSValue with the value of the QDateTime. 0594 */ 0595 KJS::JSValue *createQDateTime(KJS::ExecState *exec, const QDateTime &value); 0596 0597 /** 0598 * Extracts a QDate from an argument list. If the argument is not present, or is not convertable to a QDate 0599 * the defaultValue is returned. 0600 */ 0601 QDate KJSEMBED_EXPORT extractQDate(KJS::ExecState *exec, const KJS::List &args, int idx, const QDate &defaultValue = QDate()); 0602 /** 0603 * Extract a QDate from a value. If the value cannot convert to a QDate the defaultValue is returned. 0604 */ 0605 QDate KJSEMBED_EXPORT extractQDate(KJS::ExecState *exec, KJS::JSValue *value, const QDate &defaultValue = QDate()); 0606 /** 0607 * Create a new KJS::JSValue with the value of the QDate. 0608 */ 0609 KJS::JSValue *createQDate(KJS::ExecState *exec, const QDate &value); 0610 0611 /** 0612 * Extracts a QTime from an argument list. If the argument is not present, or is not convertable to a QTime 0613 * the defaultValue is returned. 0614 */ 0615 QTime KJSEMBED_EXPORT extractQTime(KJS::ExecState *exec, const KJS::List &args, int idx, const QTime &defaultValue = QTime()); 0616 /** 0617 * Extract a QTime from a value. If the value cannot convert to a QTime the defaultValue is returned. 0618 */ 0619 QTime KJSEMBED_EXPORT extractQTime(KJS::ExecState *exec, KJS::JSValue *value, const QTime &defaultValue = QTime()); 0620 /** 0621 * Create a new KJS::JSValue with the value of the QTime. 0622 */ 0623 KJS::JSValue *createQTime(KJS::ExecState *exec, const QTime &value); 0624 0625 /** 0626 * Extracts a QStringList from an argument list. If the argument is not present, or is not convertable to a QStringList 0627 * the defaultValue is returned. 0628 */ 0629 QStringList KJSEMBED_EXPORT extractQStringList(KJS::ExecState *exec, const KJS::List &args, int idx, const QStringList &defaultValue = QStringList()); 0630 /** 0631 * Extract a QStringList from a value. If the value cannot convert to a QStringList the defaultValue is returned. 0632 */ 0633 QStringList KJSEMBED_EXPORT extractQStringList(KJS::ExecState *exec, KJS::JSValue *value, const QStringList &defaultValue = QStringList()); 0634 /** 0635 * Create a new KJS::JSValue with the value of the QStringList. 0636 */ 0637 KJS::JSValue *createQStringList(KJS::ExecState *exec, const QStringList &value); 0638 0639 } 0640 0641 #endif