void *lqtL_toudata (lua_State *L, int index, const char *name) { void *ret = 0; if (!lqtL_testudata(L, index, name)) return 0; void **pp = static_cast<void**>(lua_touserdata(L, index)); ret = *pp; lua_getfield(L, index, name); ret = (void*)(lua_tointeger(L, -1) + (char*)ret); lua_pop(L, 1); return ret; }
void lqtL_eraseudata (lua_State *L, int index, const char *name) { void *ret = 0; if (name!=NULL && !lqtL_testudata(L, index, name)) return; void **pp = static_cast<void**>(lua_touserdata(L, index)); void *p = *pp; *pp = 0; lqtL_getpointertable(L); // (1) lua_pushlightuserdata(L, p); // (2) lua_pushnil(L); // (3) lua_settable(L, -3); // (1) lua_pop(L, 1); return; }
// converts the value at index `n` to `to_type` and returns a pointer to it void *lqtL_convert(lua_State *L, int n, const char *to_type) { if (lqtL_testudata(L, n, to_type)) return lqtL_toudata(L, n, to_type); int oldtop = lua_gettop(L); luaL_getmetatable(L, to_type); lua_getfield(L, -1, "__convert"); if (lua_isnil(L, -1)) { lua_settop(L, oldtop); return false; } lqt_convertfunc func = (lqt_convertfunc) lua_touserdata(L, -1); lua_settop(L, oldtop); return func(L, n); }
int lqtL_qvariant_setValue(lua_State *L) { QVariant* self = static_cast<QVariant*>(lqtL_toudata(L, 1, "QVariant*")); lqtL_selfcheck(L, self, "QVariant"); /* basic types */ if (lua_isnil(L, 2)) { self->clear(); } else if (lua_isboolean(L, 2)) { self->setValue((bool)lua_toboolean(L, 2)); } else if (lua_isnumber(L, 2)) { self->setValue((double)lua_tonumber(L, 2)); } else if (lua_isstring(L, 2)) { size_t size; const char * str = lua_tolstring(L, 2, &size); self->setValue(QByteArray(str, size)); } /* QtCore types */ else if (lqtL_testudata(L, 2, "QBitArray*")) { self->setValue(*(QBitArray*)lqtL_toudata(L, 2, "QBitArray*")); } else if (lqtL_testudata(L, 2, "QByteArray*")) { self->setValue(*(QByteArray*)lqtL_toudata(L, 2, "QByteArray*")); } else if (lqtL_testudata(L, 2, "QChar*")) { self->setValue(*(QChar*)lqtL_toudata(L, 2, "QChar*")); } else if (lqtL_testudata(L, 2, "QDate*")) { self->setValue(*(QDate*)lqtL_toudata(L, 2, "QDate*")); } else if (lqtL_testudata(L, 2, "QDateTime*")) { self->setValue(*(QDateTime*)lqtL_toudata(L, 2, "QDateTime*")); } else if (lqtL_testudata(L, 2, "QKeySequence*")) { self->setValue(*(QKeySequence*)lqtL_toudata(L, 2, "QKeySequence*")); } else if (lqtL_testudata(L, 2, "QLine*")) { self->setValue(*(QLine*)lqtL_toudata(L, 2, "QLine*")); } else if (lqtL_testudata(L, 2, "QLineF*")) { self->setValue(*(QLineF*)lqtL_toudata(L, 2, "QLineF*")); } else if (lqtL_testudata(L, 2, "QList<QVariant>*")) { self->setValue(*(QList<QVariant>*)lqtL_toudata(L, 2, "QList<QVariant>*")); } else if (lqtL_testudata(L, 2, "QLocale*")) { self->setValue(*(QLocale*)lqtL_toudata(L, 2, "QLocale*")); } else if (lqtL_testudata(L, 2, "QRect*")) { self->setValue(*(QRect*)lqtL_toudata(L, 2, "QRect*")); } else if (lqtL_testudata(L, 2, "QRectF*")) { self->setValue(*(QRectF*)lqtL_toudata(L, 2, "QRectF*")); } else if (lqtL_testudata(L, 2, "QRegExp*")) { self->setValue(*(QRegExp*)lqtL_toudata(L, 2, "QRegExp*")); } else if (lqtL_testudata(L, 2, "QSize*")) { self->setValue(*(QSize*)lqtL_toudata(L, 2, "QSize*")); } else if (lqtL_testudata(L, 2, "QSizeF*")) { self->setValue(*(QSizeF*)lqtL_toudata(L, 2, "QSizeF*")); } else if (lqtL_testudata(L, 2, "QString*")) { self->setValue(*(QString*)lqtL_toudata(L, 2, "QString*")); } else if (lqtL_testudata(L, 2, "QStringList*")) { self->setValue(*(QStringList*)lqtL_toudata(L, 2, "QStringList*")); } else if (lqtL_testudata(L, 2, "QTime*")) { self->setValue(*(QTime*)lqtL_toudata(L, 2, "QTime*")); } else if (lqtL_testudata(L, 2, "QUrl*")) { self->setValue(*(QUrl*)lqtL_toudata(L, 2, "QUrl*")); } #ifdef MODULE_qtgui /* QtGui types */ else if (lqtL_testudata(L, 2, "QBitmap*")) { self->setValue(*(QBitmap*)lqtL_toudata(L, 2, "QBitmap*")); } else if (lqtL_testudata(L, 2, "QBrush*")) { self->setValue(*(QBrush*)lqtL_toudata(L, 2, "QBrush*")); } else if (lqtL_testudata(L, 2, "QColor*")) { self->setValue(*(QColor*)lqtL_toudata(L, 2, "QColor*")); } else if (lqtL_testudata(L, 2, "QCursor*")) { self->setValue(*(QCursor*)lqtL_toudata(L, 2, "QCursor*")); } else if (lqtL_testudata(L, 2, "QFont*")) { self->setValue(*(QFont*)lqtL_toudata(L, 2, "QFont*")); } else if (lqtL_testudata(L, 2, "QIcon*")) { self->setValue(*(QIcon*)lqtL_toudata(L, 2, "QIcon*")); } else if (lqtL_testudata(L, 2, "QImage*")) { self->setValue(*(QImage*)lqtL_toudata(L, 2, "QImage*")); } else if (lqtL_testudata(L, 2, "QMatrix*")) { self->setValue(*(QMatrix*)lqtL_toudata(L, 2, "QMatrix*")); } else if (lqtL_testudata(L, 2, "QMatrix4x4*")) { self->setValue(*(QMatrix4x4*)lqtL_toudata(L, 2, "QMatrix4x4*")); } else if (lqtL_testudata(L, 2, "QPalette*")) { self->setValue(*(QPalette*)lqtL_toudata(L, 2, "QPalette*")); } else if (lqtL_testudata(L, 2, "QPen*")) { self->setValue(*(QPen*)lqtL_toudata(L, 2, "QPen*")); } else if (lqtL_testudata(L, 2, "QPoint*")) { self->setValue(*(QPoint*)lqtL_toudata(L, 2, "QPoint*")); } else if (lqtL_testudata(L, 2, "QPointF*")) { self->setValue(*(QPointF*)lqtL_toudata(L, 2, "QPointF*")); } else if (lqtL_testudata(L, 2, "QPixmap*")) { self->setValue(*(QPixmap*)lqtL_toudata(L, 2, "QPixmap*")); } else if (lqtL_testudata(L, 2, "QPolygon*")) { self->setValue(*(QPolygon*)lqtL_toudata(L, 2, "QPolygon*")); } else if (lqtL_testudata(L, 2, "QQuaternion*")) { self->setValue(*(QQuaternion*)lqtL_toudata(L, 2, "QQuaternion*")); } else if (lqtL_testudata(L, 2, "QRegion*")) { self->setValue(*(QRegion*)lqtL_toudata(L, 2, "QRegion*")); } else if (lqtL_testudata(L, 2, "QSizePolicy*")) { self->setValue(*(QSizePolicy*)lqtL_toudata(L, 2, "QSizePolicy*")); } else if (lqtL_testudata(L, 2, "QTextFormat*")) { self->setValue(*(QTextFormat*)lqtL_toudata(L, 2, "QTextFormat*")); } else if (lqtL_testudata(L, 2, "QTextLength*")) { self->setValue(*(QTextLength*)lqtL_toudata(L, 2, "QTextLength*")); } else if (lqtL_testudata(L, 2, "QTransform*")) { self->setValue(*(QTransform*)lqtL_toudata(L, 2, "QTransform*")); } else if (lqtL_testudata(L, 2, "QVector2D*")) { self->setValue(*(QVector2D*)lqtL_toudata(L, 2, "QVector2D*")); } else if (lqtL_testudata(L, 2, "QVector3D*")) { self->setValue(*(QVector3D*)lqtL_toudata(L, 2, "QVector3D*")); } else if (lqtL_testudata(L, 2, "QVector4D*")) { self->setValue(*(QVector4D*)lqtL_toudata(L, 2, "QVector4D*")); } #endif return 0; }