lib

variant.cpp
1/***************************************************************************
2 * variant.cpp
3 * This file is part of the KDE project
4 * copyright (C)2004-2005 by Sebastian Sauer (mail@dipe.org)
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public License
15 * along with this program; see the file COPYING. If not, write to
16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18 ***************************************************************************/
19
20#include "variant.h"
21#include "list.h"
22
23#include <tdelocale.h>
24
25using namespace Kross::Api;
26
27Variant::Variant(const TQVariant& value)
28 : Value<Variant, TQVariant>(value)
29{
30}
31
35
36const TQString Variant::getClassName() const
37{
38 return "Kross::Api::Variant";
39}
40
41const TQString Variant::toString()
42{
43 return getValue().toString();
44}
45
46/*
47const TQString Variant::getVariantType(Object::Ptr object)
48{
49 switch( toVariant(object).type() ) {
50
51 case TQVariant::CString:
52 case TQVariant::String:
53 return "Kross::Api::Variant::String";
54 case TQVariant::Map:
55 return "Kross::Api::Variant::Dict";
56 case TQVariant::StringList:
57 case TQVariant::List:
58 return "Kross::Api::Variant::List";
59 case TQVariant::Double:
60 //return "Kross::Api::Variant::Double";
61 case TQVariant::UInt:
62 //return "Kross::Api::Variant::UInt"; // python isn't able to differ between int and uint :-(
63 case TQVariant::LongLong:
64 case TQVariant::ULongLong:
65 case TQVariant::Int:
66 return "Kross::Api::Variant::Integer";
67 case TQVariant::Bool:
68 return "Kross::Api::Variant::Bool";
69 default: //Date, Time, DateTime, ByteArray, BitArray, Rect, Size, Color, Invalid, etc.
70 return "Kross::Api::Variant";
71 }
72}
73*/
74
75const TQVariant& Variant::toVariant(Object::Ptr object)
76{
77 return Object::fromObject<Variant>( object.data() )->getValue();
78}
79
80const TQString Variant::toString(Object::Ptr object)
81{
82 const TQVariant& variant = toVariant(object);
83 if(! variant.canCast(TQVariant::String))
84 throw Exception::Ptr( new Exception(i18n("Kross::Api::Variant::String expected, but got %1.").arg(variant.typeName()).latin1()) );
85 return variant.toString();
86}
87
89{
90 const TQVariant& variant = toVariant(object);
91 if(! variant.canCast(TQVariant::Int))
92 throw Exception::Ptr( new Exception(i18n("Kross::Api::Variant::Int expected, but got %1.").arg(variant.typeName()).latin1()) );
93 return variant.toInt();
94}
95
97{
98 const TQVariant& variant = toVariant(object);
99 if(! variant.canCast(TQVariant::UInt))
100 throw Exception::Ptr( new Exception(i18n("Kross::Api::Variant::UInt expected, but got %1.").arg(variant.typeName()).latin1()) );
101 return variant.toUInt();
102}
103
105{
106 const TQVariant& variant = toVariant(object);
107 if(! variant.canCast(TQVariant::Double))
108 throw Exception::Ptr( new Exception(i18n("Kross::Api::Variant::Double expected, but got %1.").arg(variant.typeName()).latin1()) );
109 return variant.toDouble();
110}
111
113{
114 const TQVariant& variant = toVariant(object);
115 if(! variant.canCast(TQVariant::LongLong))
116 throw Exception::Ptr( new Exception(i18n("Kross::Api::Variant::LLONG expected, but got %1.").arg(variant.typeName()).latin1()) );
117 return variant.toLongLong();
118}
119
121{
122 const TQVariant& variant = toVariant(object);
123 if(! variant.canCast(TQVariant::ULongLong))
124 throw Exception::Ptr( new Exception(i18n("Kross::Api::Variant::ULLONG expected, but got %1.").arg(variant.typeName()).latin1()) );
125 return variant.toULongLong();
126}
127
129{
130 const TQVariant& variant = toVariant(object);
131 if(! variant.canCast(TQVariant::Bool))
132 throw Exception::Ptr( new Exception(i18n("Kross::Api::Variant::Bool expected, but got %1.").arg(variant.typeName()).latin1()) );
133 return variant.toBool();
134}
135
137{
138 List* list = dynamic_cast< List* >( object.data() );
139 if(list) {
140 TQStringList l;
141 TQValueList<Object::Ptr> valuelist = list->getValue();
142 TQValueList<Object::Ptr>::Iterator it(valuelist.begin()), end(valuelist.end());
143 for(; it != end; ++it)
144 l.append( toString(*it) );
145 return l;
146 }
147 const TQVariant& variant = toVariant(object);
148 if(! variant.canCast(TQVariant::StringList))
149 throw Exception::Ptr( new Exception(TQString("Kross::Api::Variant::StringList expected, but got '%1'.").arg(variant.typeName()).latin1()) );
150 return variant.toStringList();
151}
152
153TQValueList<TQVariant> Variant::toList(Object::Ptr object)
154{
155 List* list = dynamic_cast< List* >( object.data() );
156 if(list) {
157 TQValueList<TQVariant> l;
158 TQValueList<Object::Ptr> valuelist = list->getValue();
159 TQValueList<Object::Ptr>::Iterator it(valuelist.begin()), end(valuelist.end());
160 for(; it != end; ++it)
161 l.append( toVariant(*it) );
162 return l;
163 }
164 const TQVariant& variant = toVariant(object);
165 if(! variant.canCast(TQVariant::List))
166 throw Exception::Ptr( new Exception(i18n("Kross::Api::Variant::List expected, but got '%1'.").arg(variant.typeName()).latin1()) );
167 return variant.toList();
168}
Common exception class used for representing exceptions in Kross.
Definition exception.h:39
TDESharedPtr< Exception > Ptr
Shared pointer to implement reference-counting.
Definition exception.h:45
The List class implementates Value to handle lists and collections.
Definition list.h:39
static T * fromObject(Object::Ptr object)
Try to convert the Object instance to the template class T.
Definition object.h:140
TDESharedPtr< Object > Ptr
Shared pointer to implement reference-counting.
Definition object.h:56
static TQ_LLONG toLLONG(Object::Ptr object)
Try to convert the given Object into a TQ_LLONG.
Definition variant.cpp:112
virtual const TQString toString()
Definition variant.cpp:41
static const TQVariant & toVariant(Object::Ptr object)
Try to convert the given Object into a TQVariant.
Definition variant.cpp:75
static uint toUInt(Object::Ptr object)
Try to convert the given Object into a uint.
Definition variant.cpp:96
static TQStringList toStringList(Object::Ptr object)
Try to convert the given Object into a TQStringList.
Definition variant.cpp:136
static int toInt(Object::Ptr object)
Try to convert the given Object into a int.
Definition variant.cpp:88
Variant(const TQVariant &value)
Constructor.
Definition variant.cpp:27
static TQ_ULLONG toULLONG(Object::Ptr object)
Try to convert the given Object into a TQ_ULLONG.
Definition variant.cpp:120
static TQValueList< TQVariant > toList(Object::Ptr object)
Try to convert the given Object into a TQValueList of TQVariant's.
Definition variant.cpp:153
static double toDouble(Object::Ptr object)
Try to convert the given Object into a uint.
Definition variant.cpp:104
static bool toBool(Object::Ptr object)
Try to convert the given Object into a boolean value.
Definition variant.cpp:128
virtual const TQString getClassName() const
Definition variant.cpp:36
virtual ~Variant()
Destructor.
Definition variant.cpp:32
The common Kross API used as common codebase.
Definition callable.h:33