00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "variant.h"
00021 #include "list.h"
00022
00023 #include <kdebug.h>
00024
00025 using namespace Kross::Api;
00026
00027 Variant::Variant(const QVariant& value, const QString& name)
00028 : Value<Variant, QVariant>(value, name)
00029 {
00030 }
00031
00032 Variant::~Variant()
00033 {
00034 }
00035
00036 const QString Variant::getClassName() const
00037 {
00038 return "Kross::Api::Variant";
00039 }
00040
00041 const QString Variant::toString()
00042 {
00043 return getValue().toString();
00044 }
00045
00046 const QString Variant::getVariantType(Object::Ptr object)
00047 {
00048 switch( toVariant(object).type() ) {
00049
00050 case QVariant::CString:
00051 case QVariant::String:
00052 return "Kross::Api::Variant::String";
00053
00054 case QVariant::Map:
00055 return "Kross::Api::Variant::Dict";
00056
00057 case QVariant::StringList:
00058 case QVariant::List:
00059 return "Kross::Api::Variant::List";
00060
00061 case QVariant::Double:
00062
00063 case QVariant::UInt:
00064
00065 case QVariant::LongLong:
00066 case QVariant::ULongLong:
00067 case QVariant::Int:
00068 return "Kross::Api::Variant::Integer";
00069
00070 case QVariant::Bool:
00071 return "Kross::Api::Variant::Bool";
00072
00073 default:
00074 return "Kross::Api::Variant";
00075 }
00076 }
00077
00078 const QVariant& Variant::toVariant(Object::Ptr object)
00079 {
00080 return Object::fromObject<Variant>( object.data() )->getValue();
00081 }
00082
00083 const QString Variant::toString(Object::Ptr object)
00084 {
00085 const QVariant& variant = toVariant(object);
00086 if(! variant.canCast(QVariant::String))
00087 throw Exception::Ptr( new Exception(QString("Kross::Api::Variant::String expected, but got %1.").arg(variant.typeName()).latin1()) );
00088 return variant.toString();
00089 }
00090
00091 int Variant::toInt(Object::Ptr object)
00092 {
00093 const QVariant& variant = toVariant(object);
00094 if(! variant.canCast(QVariant::Int))
00095 throw Exception::Ptr( new Exception(QString("Kross::Api::Variant::Int expected, but got %1.").arg(variant.typeName()).latin1()) );
00096 return variant.toInt();
00097 }
00098
00099 uint Variant::toUInt(Object::Ptr object)
00100 {
00101 const QVariant& variant = toVariant(object);
00102 if(! variant.canCast(QVariant::UInt))
00103 throw Exception::Ptr( new Exception(QString("Kross::Api::Variant::UInt expected, but got %1.").arg(variant.typeName()).latin1()) );
00104 return variant.toUInt();
00105 }
00106
00107 double Variant::toDouble(Object::Ptr object)
00108 {
00109 const QVariant& variant = toVariant(object);
00110 if(! variant.canCast(QVariant::Double))
00111 throw Exception::Ptr( new Exception(QString("Kross::Api::Variant::Double expected, but got %1.").arg(variant.typeName()).latin1()) );
00112 return variant.toDouble();
00113 }
00114
00115 Q_LLONG Variant::toLLONG(Object::Ptr object)
00116 {
00117 const QVariant& variant = toVariant(object);
00118 if(! variant.canCast(QVariant::LongLong))
00119 throw Exception::Ptr( new Exception(QString("Kross::Api::Variant::LLONG expected, but got %1.").arg(variant.typeName()).latin1()) );
00120 return variant.toLongLong();
00121 }
00122
00123 Q_ULLONG Variant::toULLONG(Object::Ptr object)
00124 {
00125 const QVariant& variant = toVariant(object);
00126 if(! variant.canCast(QVariant::ULongLong))
00127 throw Exception::Ptr( new Exception(QString("Kross::Api::Variant::ULLONG expected, but got %1.").arg(variant.typeName()).latin1()) );
00128 return variant.toULongLong();
00129 }
00130
00131 bool Variant::toBool(Object::Ptr object)
00132 {
00133 const QVariant& variant = toVariant(object);
00134 if(! variant.canCast(QVariant::Bool))
00135 throw Exception::Ptr( new Exception(QString("Kross::Api::Variant::Bool expected, but got %1.").arg(variant.typeName()).latin1()) );
00136 return variant.toBool();
00137 }
00138
00139 QValueList<QVariant> Variant::toList(Object::Ptr object)
00140 {
00141 if(object->getClassName() == "Kross::Api::List") {
00142 QValueList<QVariant> l;
00143 QValueList<Object::Ptr> list = Object::fromObject<List>( object.data() )->getValue();
00144 for(QValueList<Object::Ptr>::Iterator it = list.begin(); it != list.end(); ++it)
00145 l.append( toVariant(*it) );
00146 return l;
00147 }
00148 const QVariant& variant = toVariant(object);
00149 if(! variant.canCast(QVariant::List))
00150 throw Exception::Ptr( new Exception(QString("Kross::Api::Variant::List expected, but got '%1'.").arg(variant.typeName()).latin1()) );
00151 return variant.toList();
00152 }