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_QVector2D_function_names[] =
00037 {
00038 "QVector2D"
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 , "setX"
00054 , "setY"
00055 , "toPoint"
00056 , "toPointF"
00057 , "toVector3D"
00058 , "toVector4D"
00059 , "writeTo"
00060 , "x"
00061 , "y"
00062 , "toString"
00063 };
00064
00065 static const char* const qtscript_QVector2D_function_signatures[] =
00066 {
00067 "\nQPoint point\nQPointF point\nQVector3D vector\nQVector4D vector\nqreal xpos, qreal ypos"
00068
00069 , "QVector2D v1, QVector2D v2"
00070
00071 , ""
00072 , ""
00073 , ""
00074 , ""
00075 , ""
00076 , "QVector2D vector"
00077 , "qreal divisor"
00078 , "QVector2D v2"
00079 , "QVector2D vector\nqreal factor"
00080 , "QVector2D vector"
00081 , "QDataStream arg__1"
00082 , "qreal x"
00083 , "qreal y"
00084 , ""
00085 , ""
00086 , ""
00087 , ""
00088 , "QDataStream arg__1"
00089 , ""
00090 , ""
00091 ""
00092 };
00093
00094 static const int qtscript_QVector2D_function_lengths[] =
00095 {
00096 2
00097
00098 , 2
00099
00100 , 0
00101 , 0
00102 , 0
00103 , 0
00104 , 0
00105 , 1
00106 , 1
00107 , 1
00108 , 1
00109 , 1
00110 , 1
00111 , 1
00112 , 1
00113 , 0
00114 , 0
00115 , 0
00116 , 0
00117 , 1
00118 , 0
00119 , 0
00120 , 0
00121 };
00122
00123 static QScriptValue qtscript_QVector2D_throw_ambiguity_error_helper(
00124 QScriptContext* context, const char* functionName, const char* signatures )
00125 {
00126 QStringList lines = QString::fromLatin1( signatures ).split( QLatin1Char( '\n' ) );
00127 QStringList fullSignatures;
00128 for( int i = 0; i < lines.size(); ++i )
00129 fullSignatures.append( QString::fromLatin1( "%0(%1)" ).arg( functionName ).arg( lines.at( i ) ) );
00130 return context->throwError( QString::fromLatin1( "QVector2D::%0(): could not find a function match; candidates are:\n%1" )
00131 .arg( functionName ).arg( fullSignatures.join( QLatin1String( "\n" ) ) ) );
00132 }
00133
00134 Q_DECLARE_METATYPE( QVector2D* )
00135 Q_DECLARE_METATYPE( QDataStream* )
00136
00137
00138
00139
00140
00141 static QScriptValue qtscript_QVector2D_prototype_call( QScriptContext* context, QScriptEngine* )
00142 {
00143 #if QT_VERSION > 0x040400
00144 Q_ASSERT( context->callee().isFunction() );
00145 uint _id = context->callee().data().toUInt32();
00146 #else
00147 uint _id;
00148 if( context->callee().isFunction() )
00149 _id = context->callee().data().toUInt32();
00150 else
00151 _id = 0xBABE0000 + 20;
00152 #endif
00153 Q_ASSERT(( _id & 0xFFFF0000 ) == 0xBABE0000 );
00154 _id &= 0x0000FFFF;
00155 QVector2D* _q_self = qscriptvalue_cast<QVector2D*>( context->thisObject() );
00156 if( !_q_self )
00157 {
00158 return context->throwError( QScriptContext::TypeError,
00159 QString::fromLatin1( "QVector2D.%0(): this object is not a QVector2D" )
00160 .arg( qtscript_QVector2D_function_names[_id+2] ) );
00161 }
00162
00163 switch( _id )
00164 {
00165 case 0:
00166 if( context->argumentCount() == 0 )
00167 {
00168 bool _q_result = _q_self->isNull();
00169 return QScriptValue( context->engine(), _q_result );
00170 }
00171 break;
00172
00173 case 1:
00174 if( context->argumentCount() == 0 )
00175 {
00176 qreal _q_result = _q_self->length();
00177 return qScriptValueFromValue( context->engine(), _q_result );
00178 }
00179 break;
00180
00181 case 2:
00182 if( context->argumentCount() == 0 )
00183 {
00184 qreal _q_result = _q_self->lengthSquared();
00185 return qScriptValueFromValue( context->engine(), _q_result );
00186 }
00187 break;
00188
00189 case 3:
00190 if( context->argumentCount() == 0 )
00191 {
00192 _q_self->normalize();
00193 return context->engine()->undefinedValue();
00194 }
00195 break;
00196
00197 case 4:
00198 if( context->argumentCount() == 0 )
00199 {
00200 QVector2D _q_result = _q_self->normalized();
00201 return qScriptValueFromValue( context->engine(), _q_result );
00202 }
00203 break;
00204
00205 case 5:
00206 if( context->argumentCount() == 1 )
00207 {
00208 QVector2D _q_arg0 = qscriptvalue_cast<QVector2D>( context->argument( 0 ) );
00209 QVector2D _q_result = _q_self->operator+=( _q_arg0 );
00210 return qScriptValueFromValue( context->engine(), _q_result );
00211 }
00212 break;
00213
00214 case 6:
00215 if( context->argumentCount() == 1 )
00216 {
00217 qreal _q_arg0 = qscriptvalue_cast<qreal>( context->argument( 0 ) );
00218 QVector2D _q_result = _q_self->operator/=( _q_arg0 );
00219 return qScriptValueFromValue( context->engine(), _q_result );
00220 }
00221 break;
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231 case 8:
00232 if( context->argumentCount() == 1 )
00233 {
00234 if(( qMetaTypeId<QVector2D>() == context->argument( 0 ).toVariant().userType() ) )
00235 {
00236 QVector2D _q_arg0 = qscriptvalue_cast<QVector2D>( context->argument( 0 ) );
00237 QVector2D _q_result = _q_self->operator*=( _q_arg0 );
00238 return qScriptValueFromValue( context->engine(), _q_result );
00239 }
00240 else if(( qMetaTypeId<qreal>() == context->argument( 0 ).toVariant().userType() ) )
00241 {
00242 qreal _q_arg0 = qscriptvalue_cast<qreal>( context->argument( 0 ) );
00243 QVector2D _q_result = _q_self->operator*=( _q_arg0 );
00244 return qScriptValueFromValue( context->engine(), _q_result );
00245 }
00246 }
00247 break;
00248
00249 case 9:
00250 if( context->argumentCount() == 1 )
00251 {
00252 QVector2D _q_arg0 = qscriptvalue_cast<QVector2D>( context->argument( 0 ) );
00253 QVector2D _q_result = _q_self->operator-=( _q_arg0 );
00254 return qScriptValueFromValue( context->engine(), _q_result );
00255 }
00256 break;
00257
00258 case 10:
00259 if( context->argumentCount() == 1 )
00260 {
00261 QDataStream* _q_arg0 = qscriptvalue_cast<QDataStream*>( context->argument( 0 ) );
00262 operator>>( *_q_arg0, *_q_self );
00263 return context->engine()->undefinedValue();
00264 }
00265 break;
00266
00267 case 11:
00268 if( context->argumentCount() == 1 )
00269 {
00270 qreal _q_arg0 = qscriptvalue_cast<qreal>( context->argument( 0 ) );
00271 _q_self->setX( _q_arg0 );
00272 return context->engine()->undefinedValue();
00273 }
00274 break;
00275
00276 case 12:
00277 if( context->argumentCount() == 1 )
00278 {
00279 qreal _q_arg0 = qscriptvalue_cast<qreal>( context->argument( 0 ) );
00280 _q_self->setY( _q_arg0 );
00281 return context->engine()->undefinedValue();
00282 }
00283 break;
00284
00285 case 13:
00286 if( context->argumentCount() == 0 )
00287 {
00288 QPoint _q_result = _q_self->toPoint();
00289 return qScriptValueFromValue( context->engine(), _q_result );
00290 }
00291 break;
00292
00293 case 14:
00294 if( context->argumentCount() == 0 )
00295 {
00296 QPointF _q_result = _q_self->toPointF();
00297 return qScriptValueFromValue( context->engine(), _q_result );
00298 }
00299 break;
00300
00301 case 15:
00302 if( context->argumentCount() == 0 )
00303 {
00304 QVector3D _q_result = _q_self->toVector3D();
00305 return qScriptValueFromValue( context->engine(), _q_result );
00306 }
00307 break;
00308
00309 case 16:
00310 if( context->argumentCount() == 0 )
00311 {
00312 QVector4D _q_result = _q_self->toVector4D();
00313 return qScriptValueFromValue( context->engine(), _q_result );
00314 }
00315 break;
00316
00317 case 17:
00318 if( context->argumentCount() == 1 )
00319 {
00320 QDataStream* _q_arg0 = qscriptvalue_cast<QDataStream*>( context->argument( 0 ) );
00321 operator<<( *_q_arg0, *_q_self );
00322 return context->engine()->undefinedValue();
00323 }
00324 break;
00325
00326 case 18:
00327 if( context->argumentCount() == 0 )
00328 {
00329 qreal _q_result = _q_self->x();
00330 return qScriptValueFromValue( context->engine(), _q_result );
00331 }
00332 break;
00333
00334 case 19:
00335 if( context->argumentCount() == 0 )
00336 {
00337 qreal _q_result = _q_self->y();
00338 return qScriptValueFromValue( context->engine(), _q_result );
00339 }
00340 break;
00341
00342 case 20:
00343 {
00344 QString result;
00345 QDebug d( &result );
00346 d << *_q_self;
00347 return QScriptValue( context->engine(), result );
00348 }
00349
00350 default:
00351 Q_ASSERT( false );
00352 }
00353 return qtscript_QVector2D_throw_ambiguity_error_helper( context,
00354 qtscript_QVector2D_function_names[_id+2],
00355 qtscript_QVector2D_function_signatures[_id+2] );
00356 }
00357
00358 static QScriptValue qtscript_QVector2D_static_call( QScriptContext* context, QScriptEngine* )
00359 {
00360 uint _id = context->callee().data().toUInt32();
00361 Q_ASSERT(( _id & 0xFFFF0000 ) == 0xBABE0000 );
00362 _id &= 0x0000FFFF;
00363 switch( _id )
00364 {
00365 case 0:
00366 if( context->thisObject().strictlyEquals( context->engine()->globalObject() ) )
00367 {
00368 return context->throwError( QString::fromLatin1( "QVector2D(): Did you forget to construct with 'new'?" ) );
00369 }
00370 if( context->argumentCount() == 0 )
00371 {
00372 QVector2D _q_cpp_result;
00373 QScriptValue _q_result = context->engine()->newVariant( context->thisObject(), qVariantFromValue( _q_cpp_result ) );
00374 return _q_result;
00375 }
00376 else if( context->argumentCount() == 1 )
00377 {
00378 if(( qMetaTypeId<QPoint>() == context->argument( 0 ).toVariant().userType() ) )
00379 {
00380 QPoint _q_arg0 = qscriptvalue_cast<QPoint>( context->argument( 0 ) );
00381 QVector2D _q_cpp_result( _q_arg0 );
00382 QScriptValue _q_result = context->engine()->newVariant( context->thisObject(), qVariantFromValue( _q_cpp_result ) );
00383 return _q_result;
00384 }
00385 else if(( qMetaTypeId<QPointF>() == context->argument( 0 ).toVariant().userType() ) )
00386 {
00387 QPointF _q_arg0 = qscriptvalue_cast<QPointF>( context->argument( 0 ) );
00388 QVector2D _q_cpp_result( _q_arg0 );
00389 QScriptValue _q_result = context->engine()->newVariant( context->thisObject(), qVariantFromValue( _q_cpp_result ) );
00390 return _q_result;
00391 }
00392 else if(( qMetaTypeId<QVector3D>() == context->argument( 0 ).toVariant().userType() ) )
00393 {
00394 QVector3D _q_arg0 = qscriptvalue_cast<QVector3D>( context->argument( 0 ) );
00395 QVector2D _q_cpp_result( _q_arg0 );
00396 QScriptValue _q_result = context->engine()->newVariant( context->thisObject(), qVariantFromValue( _q_cpp_result ) );
00397 return _q_result;
00398 }
00399 else if(( qMetaTypeId<QVector4D>() == context->argument( 0 ).toVariant().userType() ) )
00400 {
00401 QVector4D _q_arg0 = qscriptvalue_cast<QVector4D>( context->argument( 0 ) );
00402 QVector2D _q_cpp_result( _q_arg0 );
00403 QScriptValue _q_result = context->engine()->newVariant( context->thisObject(), qVariantFromValue( _q_cpp_result ) );
00404 return _q_result;
00405 }
00406 }
00407 else if( context->argumentCount() == 2 )
00408 {
00409 qreal _q_arg0 = qscriptvalue_cast<qreal>( context->argument( 0 ) );
00410 qreal _q_arg1 = qscriptvalue_cast<qreal>( context->argument( 1 ) );
00411 QVector2D _q_cpp_result( _q_arg0, _q_arg1 );
00412 QScriptValue _q_result = context->engine()->newVariant( context->thisObject(), qVariantFromValue( _q_cpp_result ) );
00413 return _q_result;
00414 }
00415 break;
00416
00417 case 1:
00418 if( context->argumentCount() == 2 )
00419 {
00420 QVector2D _q_arg0 = qscriptvalue_cast<QVector2D>( context->argument( 0 ) );
00421 QVector2D _q_arg1 = qscriptvalue_cast<QVector2D>( context->argument( 1 ) );
00422 qreal _q_result = QVector2D::dotProduct( _q_arg0, _q_arg1 );
00423 return qScriptValueFromValue( context->engine(), _q_result );
00424 }
00425 break;
00426
00427 default:
00428 Q_ASSERT( false );
00429 }
00430 return qtscript_QVector2D_throw_ambiguity_error_helper( context,
00431 qtscript_QVector2D_function_names[_id],
00432 qtscript_QVector2D_function_signatures[_id] );
00433 }
00434
00435 QScriptValue qtscript_create_QVector2D_class( QScriptEngine* engine )
00436 {
00437 engine->setDefaultPrototype( qMetaTypeId<QVector2D*>(), QScriptValue() );
00438 QScriptValue proto = engine->newVariant( qVariantFromValue(( QVector2D* )0 ) );
00439 for( int i = 0; i < 21; ++i )
00440 {
00441 QScriptValue fun = engine->newFunction( qtscript_QVector2D_prototype_call, qtscript_QVector2D_function_lengths[i+2] );
00442 fun.setData( QScriptValue( engine, uint( 0xBABE0000 + i ) ) );
00443 proto.setProperty( QString::fromLatin1( qtscript_QVector2D_function_names[i+2] ),
00444 fun, QScriptValue::SkipInEnumeration );
00445 }
00446
00447 engine->setDefaultPrototype( qMetaTypeId<QVector2D>(), proto );
00448 engine->setDefaultPrototype( qMetaTypeId<QVector2D*>(), proto );
00449
00450 QScriptValue ctor = engine->newFunction( qtscript_QVector2D_static_call, proto, qtscript_QVector2D_function_lengths[0] );
00451 ctor.setData( QScriptValue( engine, uint( 0xBABE0000 + 0 ) ) );
00452 for( int i = 0; i < 1; ++i )
00453 {
00454 QScriptValue fun = engine->newFunction( qtscript_QVector2D_static_call,
00455 qtscript_QVector2D_function_lengths[i+1] );
00456 fun.setData( QScriptValue( engine, uint( 0xBABE0000 + i + 1 ) ) );
00457 ctor.setProperty( QString::fromLatin1( qtscript_QVector2D_function_names[i+1] ),
00458 fun, QScriptValue::SkipInEnumeration );
00459 }
00460
00461 return ctor;
00462 }