Example #1
0
QScriptValue ScriptToolbox::variantToScriptValue(QScriptEngine * engine, QVariant var)
{
  if(var.isNull())
    return engine->nullValue();

  switch(var.type())
  {
    case QVariant::Invalid:
      return engine->nullValue();
    case QVariant::Bool:
      return QScriptValue(engine, var.toBool());
    case QVariant::Int:
      return QScriptValue(engine, var.toInt());
    case QVariant::UInt:
      return QScriptValue(engine, var.toUInt());
    case QVariant::Double:
      return QScriptValue(engine, var.toDouble());
    case QVariant::Char:
      return QScriptValue(engine, var.toChar().unicode());
    case QVariant::String:
      return QScriptValue(engine, var.toString());
    case QVariant::LongLong:
      return QScriptValue(engine, qsreal(var.toLongLong()));
    case QVariant::ULongLong:
      return QScriptValue(engine, qsreal(var.toULongLong()));
    case QVariant::Date:
    case QVariant::Time:
    case QVariant::DateTime:
      return engine->newDate(var.toDateTime());
    case QVariant::RegExp:
      return engine->newRegExp(var.toRegExp());
/*
 * Would be ideal to have these as well but I don't know if they are really necessary
    case QVariant::StringList:
    case QVariant::List:

    case QVariant::Map:
*/
    default:
      return engine->newVariant(var);
  }

  // If we are not doing an explicity conversion just pass the variant back
  // and see what happens
  return engine->newVariant(var);
}
Example #2
0
bool GCF::Message::encodeVariant(QDataStream& ds, const QVariant& value)
{
    QString typeName;

    if( value.isValid() )
    {
        typeName = QString(value.typeName());
        if( typeName.isEmpty() )
            return false;
    }
    else
        typeName = "Invalid";

    if( value.type() >= QVariant::UserType )
        return false;

    // Prepare the typename in-case of bool, char, int, double
    switch(value.type())
    {
    case QVariant::Int:
        typeName = is32Bit() ? "qint32" : "qint64";
        break;
    case QVariant::Char:
        typeName = "quint8";
        break;
    case QVariant::UInt:
        typeName = is32Bit() ? "quint32" : "quint64";
        break;
    default:
        break;
    }

    // Serialize value on to the byte array
    switch( value.type() )
    {
    case QVariant::Invalid:
        ds << typeName;
        ds << qint32(0);
        break;
    case QVariant::Bool:
        ds << typeName;
        ds << value.toBool();
        break;
    case QVariant::Char:
        ds << typeName;
        ds << value.toChar();
        break;
    case QVariant::Color:
        ds << typeName;
        ds << value.value<QColor>();
        break;
    case QVariant::Date:
        ds << typeName;
        ds << value.toDate();
        break;
    case QVariant::DateTime:
        ds << typeName;
        ds << value.toDateTime();
        break;
    case QVariant::Double:
        ds << typeName;
        ds << value.toDouble();
        break;
    case QVariant::Int:
        ds << typeName;
        if( is32Bit() )
            ds << (qint32)value.toInt();
        else
            ds << (qint64)value.toInt();
        break;
    case QVariant::Time:
        ds << typeName;
        ds << value.toTime();
        break;
    case QVariant::UInt:
        ds << typeName;
        if( is32Bit() )
            ds << (quint32)value.toUInt();
        else
            ds << (quint64)value.toUInt();
        break;
    case QVariant::String:
        ds << typeName;
        ds << value.toString();
        break;
    case QVariant::Pixmap:
        ds << typeName;
        ds << value.value<QPixmap>();
        break;
    case QVariant::ByteArray:
        ds << typeName;
        ds << value.toByteArray();
        break;
    case QVariant::BitArray:
        ds << typeName;
        ds << value.toBitArray();
        break;
    case QVariant::Image:
        ds << typeName;
        ds << value.value<QImage>();
        break;
    case QVariant::Url:
        ds << typeName;
        ds << value.toUrl();
        break;
    case QVariant::StringList:
        ds << typeName;
        ds << value.toStringList();
        break;
    case QVariant::SizePolicy:
        ds << typeName;
        ds << value.value<QSizePolicy>();
        break;
    case QVariant::SizeF:
        ds << typeName;
        ds << value.toSizeF();
        break;
    case QVariant::Size:
        ds << typeName;
        ds << value.toSize();
        break;
    case QVariant::RegExp:
        ds << typeName;
        ds << value.toRegExp();
        break;
    case QVariant::RectF:
        ds << typeName;
        ds << value.toRectF();
        break;
    case QVariant::Rect:
        ds << typeName;
        ds << value.toRect();
        break;
    case QVariant::Polygon:
        ds << typeName;
        ds << value.value<QPolygon>();
        break;
    case QVariant::PointF:
        ds << typeName;
        ds << value.toPointF();
        break;
    case QVariant::Point:
        ds << typeName;
        ds << value.toPoint();
        break;
    case QVariant::Matrix:
        ds << typeName;
        ds << value.value<QMatrix>();
        break;
    case QVariant::LineF:
        ds << typeName;
        ds << value.toLineF();
        break;
    case QVariant::Line:
        ds << typeName;
        ds << value.toLine();
        break;
    case QVariant::Brush:
        ds << typeName;
        ds << value.value<QBrush>();
        break;
    case QVariant::Bitmap:
        ds << typeName;
        ds << value.value<QBitmap>();
        break;
    case QVariant::Transform:
        ds << typeName;
        ds << value.value<QTransform>();
        break;
    default:
        // Other types will be supported shortly.
        // TODO: support user defined types.
        return false;
    }

    return true;
}