1
/***************************************************************************
2
plasmahandlers.cpp - Plasma specific marshallers
4
begin : Sun Sep 28 2003
5
copyright : (C) 2003 by Richard Dale
6
email : Richard_Dale@tipitina.demon.co.uk
7
***************************************************************************/
9
/***************************************************************************
11
* This program is free software; you can redistribute it and/or modify *
12
* it under the terms of the GNU General Public License as published by *
13
* the Free Software Foundation; either version 2 of the License, or *
14
* (at your option) any later version. *
16
***************************************************************************/
21
#include <smokeruby.h>
22
#include <marshall_macros.h>
23
#include <smoke/qtcore_smoke.h>
25
#include <plasma/packagestructure.h>
26
#include <plasma/containment.h>
27
#include <plasma/applet.h>
28
#include <plasma/datacontainer.h>
30
void marshall_PackageStructurePtr(Marshall *m) {
32
case Marshall::FromVALUE:
37
case Marshall::ToVALUE:
39
KSharedPtr<Plasma::PackageStructure> *ptr = new KSharedPtr<Plasma::PackageStructure>(*(KSharedPtr<Plasma::PackageStructure>*)m->item().s_voidp);
44
Plasma::PackageStructure * package = ptr->data();
46
VALUE obj = getPointerObject(package);
48
smokeruby_object * o = ALLOC(smokeruby_object);
49
o->smoke = m->smoke();
50
o->classId = m->smoke()->idClass("Plasma::PackageStructure").index;
53
obj = set_obj_info("Plasma::PackageStructure", o);
69
void marshall_QHashQStringQVariant(Marshall *m) {
71
case Marshall::FromVALUE:
73
VALUE hash = *(m->var());
74
if (TYPE(hash) != T_HASH) {
75
m->item().s_voidp = 0;
79
QHash<QString,QVariant> * map = new QHash<QString,QVariant>;
81
// Convert the ruby hash to an array of key/value arrays
82
VALUE temp = rb_funcall(hash, rb_intern("to_a"), 0);
84
for (long i = 0; i < RARRAY_LEN(temp); i++) {
85
VALUE key = rb_ary_entry(rb_ary_entry(temp, i), 0);
86
VALUE value = rb_ary_entry(rb_ary_entry(temp, i), 1);
88
smokeruby_object *o = value_obj_info(value);
89
if (o == 0 || o->ptr == 0) {
93
(*map)[QString(StringValuePtr(key))] = (QVariant)*(QVariant*)o->ptr;
96
m->item().s_voidp = map;
103
case Marshall::ToVALUE:
105
QHash<QString,QVariant> *map = (QHash<QString,QVariant>*)m->item().s_voidp;
111
VALUE hv = rb_hash_new();
113
QHash<QString,QVariant>::Iterator it;
114
for (it = map->begin(); it != map->end(); ++it) {
115
void *p = new QVariant(it.value());
116
VALUE obj = getPointerObject(p);
119
smokeruby_object * o = alloc_smokeruby_object( true,
121
qtcore_Smoke->idClass("QVariant").index,
123
obj = set_obj_info("Qt::Variant", o);
126
rb_hash_aset(hv, rb_str_new2(((QString*)&(it.key()))->toLatin1()), obj);
142
DEF_LIST_MARSHALLER( PlasmaContainmentList, QList<Plasma::Containment*>, Plasma::Containment )
143
DEF_LIST_MARSHALLER( PlasmaAppletList, QList<Plasma::Applet*>, Plasma::Applet )
145
DEF_HASH_MARSHALLER( QHashQStringApplet, Plasma::Applet )
146
DEF_HASH_MARSHALLER( QHashQStringDataContainer, Plasma::DataContainer )
147
DEF_HASH_MARSHALLER( QHashQStringDataEngine, Plasma::DataEngine )
149
TypeHandler Plasma_handlers[] = {
150
{ "Plasma::PackageStructure::Ptr", marshall_PackageStructurePtr },
151
{ "QHash<QString,QVariant>", marshall_QHashQStringQVariant },
152
{ "QHash<QString,QVariant>&", marshall_QHashQStringQVariant },
153
{ "Plasma::DataEngine::Data", marshall_QHashQStringQVariant },
154
{ "Plasma::DataEngine::Data&", marshall_QHashQStringQVariant },
155
{ "Plasma::DataEngine::SourceDict", marshall_QHashQStringDataContainer },
156
{ "Plasma::DataEngine::Dict", marshall_QHashQStringDataEngine },
157
{ "QList<Plasma::Containment*>", marshall_PlasmaContainmentList },
158
{ "QList<Plasma::Containment*>&", marshall_PlasmaContainmentList },
159
{ "Plasma::Applet::List", marshall_PlasmaAppletList },