00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <QtScript/QScriptEngine>
00023 #include <QtScript/QScriptContext>
00024 #include <QtScript/QScriptValue>
00025 #include <QtCore/QStringList>
00026 #include <QtCore/QDebug>
00027 #include <qmetaobject.h>
00028
00029 #include <QVariant>
00030 #include <qdatastream.h>
00031 #include <qpoint.h>
00032 #include <qvector2d.h>
00033 #include <qvector3d.h>
00034 #include <qvector4d.h>
00035
00036 static const char* const qtscript_QVector4D_function_names[] =
00037 {
00038 "QVector4D"
00039
00040 , "dotProduct"
00041
00042 , "isNull"
00043 , "length"
00044 , "lengthSquared"
00045 , "normalize"
00046 , "normalized"
00047 , "operator_add_assign"
00048 , "operator_divide_assign"
00049 , "equals"
00050 , "operator_multiply_assign"
00051 , "operator_subtract_assign"
00052 , "readFrom"
00053 , "setW"
00054 , "setX"
00055 , "setY"
00056 , "setZ"
00057 , "toPoint"
00058 , "toPointF"
00059 , "toVector2D"
00060 , "toVector2DAffine"
00061 , "toVector3D"
00062 , "toVector3DAffine"
00063 , "w"
00064 , "writeTo"
00065 , "x"
00066 , "y"
00067 , "z"
00068 , "toString"
00069 };
00070
00071 static const char* const qtscript_QVector4D_function_signatures[] =
00072 {
00073 "\nQPoint point\nQPointF point\nQVector2D vector\nQVector2D vector, qreal zpos, qreal wpos\nQVector3D vector\nQVector3D vector, qreal wpos\nqreal xpos, qreal ypos, qreal zpos, qreal wpos"
00074
00075 , "QVector4D v1, QVector4D v2"
00076
00077 , ""
00078 , ""
00079 , ""
00080 , ""
00081 , ""
00082 , "QVector4D vector"
00083 , "qreal divisor"
00084 , "QVector4D v2"
00085 , "QVector4D vector\nqreal factor"
00086 , "QVector4D vector"
00087 , "QDataStream arg__1"
00088 , "qreal w"
00089 , "qreal x"
00090 , "qreal y"
00091 , "qreal z"
00092 , ""
00093 , ""
00094 , ""
00095 , ""
00096 , ""
00097 , ""
00098 , ""
00099 , "QDataStream arg__1"
00100 , ""
00101 , ""
00102 , ""
00103 ""
00104 };
00105
00106 static const int qtscript_QVector4D_function_lengths[] =
00107 {
00108 4
00109
00110 , 2
00111
00112 , 0
00113 , 0
00114 , 0
00115 , 0
00116 , 0
00117 , 1
00118 , 1
00119 , 1
00120 , 1
00121 , 1
00122 , 1
00123 , 1
00124 , 1
00125 , 1
00126 , 1
00127 , 0
00128 , 0
00129 , 0
00130 , 0
00131 , 0
00132 , 0
00133 , 0
00134 , 1
00135 , 0
00136 , 0
00137 , 0
00138 , 0
00139 };
00140
00141 static QScriptValue qtscript_QVector4D_throw_ambiguity_error_helper(
00142 QScriptContext* context, const char* functionName, const char* signatures )
00143 {
00144 QStringList lines = QString::fromLatin1( signatures ).split( QLatin1Char( '\n' ) );
00145 QStringList fullSignatures;
00146 for( int i = 0; i < lines.size(); ++i )
00147 fullSignatures.append( QString::fromLatin1( "%0(%1)" ).arg( functionName ).arg( lines.at( i ) ) );
00148 return context->throwError( QString::fromLatin1( "QVector4D::%0(): could not find a function match; candidates are:\n%1" )
00149 .arg( functionName ).arg( fullSignatures.join( QLatin1String( "\n" ) ) ) );
00150 }
00151
00152 Q_DECLARE_METATYPE( QVector4D* )
00153 Q_DECLARE_METATYPE( QDataStream* )
00154
00155
00156
00157
00158
00159 static QScriptValue qtscript_QVector4D_prototype_call( QScriptContext* context, QScriptEngine* )
00160 {
00161 #if QT_VERSION > 0x040400
00162 Q_ASSERT( context->callee().isFunction() );
00163 uint _id = context->callee().data().toUInt32();
00164 #else
00165 uint _id;
00166 if( context->callee().isFunction() )
00167 _id = context->callee().data().toUInt32();
00168 else
00169 _id = 0xBABE0000 + 26;
00170 #endif
00171 Q_ASSERT(( _id & 0xFFFF0000 ) == 0xBABE0000 );
00172 _id &= 0x0000FFFF;
00173 QVector4D* _q_self = qscriptvalue_cast<QVector4D*>( context->thisObject() );
00174 if( !_q_self )
00175 {
00176 return context->throwError( QScriptContext::TypeError,
00177 QString::fromLatin1( "QVector4D.%0(): this object is not a QVector4D" )
00178 .arg( qtscript_QVector4D_function_names[_id+2] ) );
00179 }
00180
00181 switch( _id )
00182 {
00183 case 0:
00184 if( context->argumentCount() == 0 )
00185 {
00186 bool _q_result = _q_self->isNull();
00187 return QScriptValue( context->engine(), _q_result );
00188 }
00189 break;
00190
00191 case 1:
00192 if( context->argumentCount() == 0 )
00193 {
00194 qreal _q_result = _q_self->length();
00195 return qScriptValueFromValue( context->engine(), _q_result );
00196 }
00197 break;
00198
00199 case 2:
00200 if( context->argumentCount() == 0 )
00201 {
00202 qreal _q_result = _q_self->lengthSquared();
00203 return qScriptValueFromValue( context->engine(), _q_result );
00204 }
00205 break;
00206
00207 case 3:
00208 if( context->argumentCount() == 0 )
00209 {
00210 _q_self->normalize();
00211 return context->engine()->undefinedValue();
00212 }
00213 break;
00214
00215 case 4:
00216 if( context->argumentCount() == 0 )
00217 {
00218 QVector4D _q_result = _q_self->normalized();
00219 return qScriptValueFromValue( context->engine(), _q_result );
00220 }
00221 break;
00222
00223 case 5:
00224 if( context->argumentCount() == 1 )
00225 {
00226 QVector4D _q_arg0 = qscriptvalue_cast<QVector4D>( context->argument( 0 ) );
00227 QVector4D _q_result = _q_self->operator+=( _q_arg0 );
00228 return qScriptValueFromValue( context->engine(), _q_result );
00229 }
00230 break;
00231
00232 case 6:
00233 if( context->argumentCount() == 1 )
00234 {
00235 qreal _q_arg0 = qscriptvalue_cast<qreal>( context->argument( 0 ) );
00236 QVector4D _q_result = _q_self->operator/=( _q_arg0 );
00237 return qScriptValueFromValue( context->engine(), _q_result );
00238 }
00239 break;
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249 case 8:
00250 if( context->argumentCount() == 1 )
00251 {
00252 if(( qMetaTypeId<QVector4D>() == context->argument( 0 ).toVariant().userType() ) )
00253 {
00254 QVector4D _q_arg0 = qscriptvalue_cast<QVector4D>( context->argument( 0 ) );
00255 QVector4D _q_result = _q_self->operator*=( _q_arg0 );
00256 return qScriptValueFromValue( context->engine(), _q_result );
00257 }
00258 else if(( qMetaTypeId<qreal>() == context->argument( 0 ).toVariant().userType() ) )
00259 {
00260 qreal _q_arg0 = qscriptvalue_cast<qreal>( context->argument( 0 ) );
00261 QVector4D _q_result = _q_self->operator*=( _q_arg0 );
00262 return qScriptValueFromValue( context->engine(), _q_result );
00263 }
00264 }
00265 break;
00266
00267 case 9:
00268 if( context->argumentCount() == 1 )
00269 {
00270 QVector4D _q_arg0 = qscriptvalue_cast<QVector4D>( context->argument( 0 ) );
00271 QVector4D _q_result = _q_self->operator-=( _q_arg0 );
00272 return qScriptValueFromValue( context->engine(), _q_result );
00273 }
00274 break;
00275
00276 case 10:
00277 if( context->argumentCount() == 1 )
00278 {
00279 QDataStream* _q_arg0 = qscriptvalue_cast<QDataStream*>( context->argument( 0 ) );
00280 operator>>( *_q_arg0, *_q_self );
00281 return context->engine()->undefinedValue();
00282 }
00283 break;
00284
00285 case 11:
00286 if( context->argumentCount() == 1 )
00287 {
00288 qreal _q_arg0 = qscriptvalue_cast<qreal>( context->argument( 0 ) );
00289 _q_self->setW( _q_arg0 );
00290 return context->engine()->undefinedValue();
00291 }
00292 break;
00293
00294 case 12:
00295 if( context->argumentCount() == 1 )
00296 {
00297 qreal _q_arg0 = qscriptvalue_cast<qreal>( context->argument( 0 ) );
00298 _q_self->setX( _q_arg0 );
00299 return context->engine()->undefinedValue();
00300 }
00301 break;
00302
00303 case 13:
00304 if( context->argumentCount() == 1 )
00305 {
00306 qreal _q_arg0 = qscriptvalue_cast<qreal>( context->argument( 0 ) );
00307 _q_self->setY( _q_arg0 );
00308 return context->engine()->undefinedValue();
00309 }
00310 break;
00311
00312 case 14:
00313 if( context->argumentCount() == 1 )
00314 {
00315 qreal _q_arg0 = qscriptvalue_cast<qreal>( context->argument( 0 ) );
00316 _q_self->setZ( _q_arg0 );
00317 return context->engine()->undefinedValue();
00318 }
00319 break;
00320
00321 case 15:
00322 if( context->argumentCount() == 0 )
00323 {
00324 QPoint _q_result = _q_self->toPoint();
00325 return qScriptValueFromValue( context->engine(), _q_result );
00326 }
00327 break;
00328
00329 case 16:
00330 if( context->argumentCount() == 0 )
00331 {
00332 QPointF _q_result = _q_self->toPointF();
00333 return qScriptValueFromValue( context->engine(), _q_result );
00334 }
00335 break;
00336
00337 case 17:
00338 if( context->argumentCount() == 0 )
00339 {
00340 QVector2D _q_result = _q_self->toVector2D();
00341 return qScriptValueFromValue( context->engine(), _q_result );
00342 }
00343 break;
00344
00345 case 18:
00346 if( context->argumentCount() == 0 )
00347 {
00348 QVector2D _q_result = _q_self->toVector2DAffine();
00349 return qScriptValueFromValue( context->engine(), _q_result );
00350 }
00351 break;
00352
00353 case 19:
00354 if( context->argumentCount() == 0 )
00355 {
00356 QVector3D _q_result = _q_self->toVector3D();
00357 return qScriptValueFromValue( context->engine(), _q_result );
00358 }
00359 break;
00360
00361 case 20:
00362 if( context->argumentCount() == 0 )
00363 {
00364 QVector3D _q_result = _q_self->toVector3DAffine();
00365 return qScriptValueFromValue( context->engine(), _q_result );
00366 }
00367 break;
00368
00369 case 21:
00370 if( context->argumentCount() == 0 )
00371 {
00372 qreal _q_result = _q_self->w();
00373 return qScriptValueFromValue( context->engine(), _q_result );
00374 }
00375 break;
00376
00377 case 22:
00378 if( context->argumentCount() == 1 )
00379 {
00380 QDataStream* _q_arg0 = qscriptvalue_cast<QDataStream*>( context->argument( 0 ) );
00381 operator<<( *_q_arg0, *_q_self );
00382 return context->engine()->undefinedValue();
00383 }
00384 break;
00385
00386 case 23:
00387 if( context->argumentCount() == 0 )
00388 {
00389 qreal _q_result = _q_self->x();
00390 return qScriptValueFromValue( context->engine(), _q_result );
00391 }
00392 break;
00393
00394 case 24:
00395 if( context->argumentCount() == 0 )
00396 {
00397 qreal _q_result = _q_self->y();
00398 return qScriptValueFromValue( context->engine(), _q_result );
00399 }
00400 break;
00401
00402 case 25:
00403 if( context->argumentCount() == 0 )
00404 {
00405 qreal _q_result = _q_self->z();
00406 return qScriptValueFromValue( context->engine(), _q_result );
00407 }
00408 break;
00409
00410 case 26:
00411 {
00412 QString result;
00413 QDebug d( &result );
00414 d << *_q_self;
00415 return QScriptValue( context->engine(), result );
00416 }
00417
00418 default:
00419 Q_ASSERT( false );
00420 }
00421 return qtscript_QVector4D_throw_ambiguity_error_helper( context,
00422 qtscript_QVector4D_function_names[_id+2],
00423 qtscript_QVector4D_function_signatures[_id+2] );
00424 }
00425
00426 static QScriptValue qtscript_QVector4D_static_call( QScriptContext* context, QScriptEngine* )
00427 {
00428 uint _id = context->callee().data().toUInt32();
00429 Q_ASSERT(( _id & 0xFFFF0000 ) == 0xBABE0000 );
00430 _id &= 0x0000FFFF;
00431 switch( _id )
00432 {
00433 case 0:
00434 if( context->thisObject().strictlyEquals( context->engine()->globalObject() ) )
00435 {
00436 return context->throwError( QString::fromLatin1( "QVector4D(): Did you forget to construct with 'new'?" ) );
00437 }
00438 if( context->argumentCount() == 0 )
00439 {
00440 QVector4D _q_cpp_result;
00441 QScriptValue _q_result = context->engine()->newVariant( context->thisObject(), qVariantFromValue( _q_cpp_result ) );
00442 return _q_result;
00443 }
00444 else if( context->argumentCount() == 1 )
00445 {
00446 if(( qMetaTypeId<QPoint>() == context->argument( 0 ).toVariant().userType() ) )
00447 {
00448 QPoint _q_arg0 = qscriptvalue_cast<QPoint>( context->argument( 0 ) );
00449 QVector4D _q_cpp_result( _q_arg0 );
00450 QScriptValue _q_result = context->engine()->newVariant( context->thisObject(), qVariantFromValue( _q_cpp_result ) );
00451 return _q_result;
00452 }
00453 else if(( qMetaTypeId<QPointF>() == context->argument( 0 ).toVariant().userType() ) )
00454 {
00455 QPointF _q_arg0 = qscriptvalue_cast<QPointF>( context->argument( 0 ) );
00456 QVector4D _q_cpp_result( _q_arg0 );
00457 QScriptValue _q_result = context->engine()->newVariant( context->thisObject(), qVariantFromValue( _q_cpp_result ) );
00458 return _q_result;
00459 }
00460 else if(( qMetaTypeId<QVector2D>() == context->argument( 0 ).toVariant().userType() ) )
00461 {
00462 QVector2D _q_arg0 = qscriptvalue_cast<QVector2D>( context->argument( 0 ) );
00463 QVector4D _q_cpp_result( _q_arg0 );
00464 QScriptValue _q_result = context->engine()->newVariant( context->thisObject(), qVariantFromValue( _q_cpp_result ) );
00465 return _q_result;
00466 }
00467 else if(( qMetaTypeId<QVector3D>() == context->argument( 0 ).toVariant().userType() ) )
00468 {
00469 QVector3D _q_arg0 = qscriptvalue_cast<QVector3D>( context->argument( 0 ) );
00470 QVector4D _q_cpp_result( _q_arg0 );
00471 QScriptValue _q_result = context->engine()->newVariant( context->thisObject(), qVariantFromValue( _q_cpp_result ) );
00472 return _q_result;
00473 }
00474 }
00475 else if( context->argumentCount() == 2 )
00476 {
00477 QVector3D _q_arg0 = qscriptvalue_cast<QVector3D>( context->argument( 0 ) );
00478 qreal _q_arg1 = qscriptvalue_cast<qreal>( context->argument( 1 ) );
00479 QVector4D _q_cpp_result( _q_arg0, _q_arg1 );
00480 QScriptValue _q_result = context->engine()->newVariant( context->thisObject(), qVariantFromValue( _q_cpp_result ) );
00481 return _q_result;
00482 }
00483 else if( context->argumentCount() == 3 )
00484 {
00485 QVector2D _q_arg0 = qscriptvalue_cast<QVector2D>( context->argument( 0 ) );
00486 qreal _q_arg1 = qscriptvalue_cast<qreal>( context->argument( 1 ) );
00487 qreal _q_arg2 = qscriptvalue_cast<qreal>( context->argument( 2 ) );
00488 QVector4D _q_cpp_result( _q_arg0, _q_arg1, _q_arg2 );
00489 QScriptValue _q_result = context->engine()->newVariant( context->thisObject(), qVariantFromValue( _q_cpp_result ) );
00490 return _q_result;
00491 }
00492 else if( context->argumentCount() == 4 )
00493 {
00494 qreal _q_arg0 = qscriptvalue_cast<qreal>( context->argument( 0 ) );
00495 qreal _q_arg1 = qscriptvalue_cast<qreal>( context->argument( 1 ) );
00496 qreal _q_arg2 = qscriptvalue_cast<qreal>( context->argument( 2 ) );
00497 qreal _q_arg3 = qscriptvalue_cast<qreal>( context->argument( 3 ) );
00498 QVector4D _q_cpp_result( _q_arg0, _q_arg1, _q_arg2, _q_arg3 );
00499 QScriptValue _q_result = context->engine()->newVariant( context->thisObject(), qVariantFromValue( _q_cpp_result ) );
00500 return _q_result;
00501 }
00502 break;
00503
00504 case 1:
00505 if( context->argumentCount() == 2 )
00506 {
00507 QVector4D _q_arg0 = qscriptvalue_cast<QVector4D>( context->argument( 0 ) );
00508 QVector4D _q_arg1 = qscriptvalue_cast<QVector4D>( context->argument( 1 ) );
00509 qreal _q_result = QVector4D::dotProduct( _q_arg0, _q_arg1 );
00510 return qScriptValueFromValue( context->engine(), _q_result );
00511 }
00512 break;
00513
00514 default:
00515 Q_ASSERT( false );
00516 }
00517 return qtscript_QVector4D_throw_ambiguity_error_helper( context,
00518 qtscript_QVector4D_function_names[_id],
00519 qtscript_QVector4D_function_signatures[_id] );
00520 }
00521
00522 QScriptValue qtscript_create_QVector4D_class( QScriptEngine* engine )
00523 {
00524 engine->setDefaultPrototype( qMetaTypeId<QVector4D*>(), QScriptValue() );
00525 QScriptValue proto = engine->newVariant( qVariantFromValue(( QVector4D* )0 ) );
00526 for( int i = 0; i < 27; ++i )
00527 {
00528 QScriptValue fun = engine->newFunction( qtscript_QVector4D_prototype_call, qtscript_QVector4D_function_lengths[i+2] );
00529 fun.setData( QScriptValue( engine, uint( 0xBABE0000 + i ) ) );
00530 proto.setProperty( QString::fromLatin1( qtscript_QVector4D_function_names[i+2] ),
00531 fun, QScriptValue::SkipInEnumeration );
00532 }
00533
00534 engine->setDefaultPrototype( qMetaTypeId<QVector4D>(), proto );
00535 engine->setDefaultPrototype( qMetaTypeId<QVector4D*>(), proto );
00536
00537 QScriptValue ctor = engine->newFunction( qtscript_QVector4D_static_call, proto, qtscript_QVector4D_function_lengths[0] );
00538 ctor.setData( QScriptValue( engine, uint( 0xBABE0000 + 0 ) ) );
00539 for( int i = 0; i < 1; ++i )
00540 {
00541 QScriptValue fun = engine->newFunction( qtscript_QVector4D_static_call,
00542 qtscript_QVector4D_function_lengths[i+1] );
00543 fun.setData( QScriptValue( engine, uint( 0xBABE0000 + i + 1 ) ) );
00544 ctor.setProperty( QString::fromLatin1( qtscript_QVector4D_function_names[i+1] ),
00545 fun, QScriptValue::SkipInEnumeration );
00546 }
00547
00548 return ctor;
00549 }