2 Copyright (c) 2006 Paolo Capriotti <p.capriotti@gmail.com>
3 (c) 2006 Maurizio Monge <maurizio.monge@kdemail.net>
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
13 #include "luaapi/loader.h"
17 //BEGIN Wrapper<OptList> -------------------------------------------------------
19 const char* Wrapper
<OptList
>::class_name() {
23 int Wrapper
<OptList
>::to_string(lua_State
* l
) {
24 OptList r
= *retrieve(l
, 1, AssertOk
);
26 for(int i
=0;i
<r
.size();i
++)
27 s
+= (i
==0?"":",")+r
[i
]->name();
30 lua_pushstring(l
, s
.toAscii().constData());
34 int Wrapper
<OptList
>::newindex_event(lua_State
* l
) {
36 luaL_error(l
, "OptList cannot be modified after being constructed!!!");
40 int Wrapper
<OptList
>::index_event(lua_State
* l
) {
41 const char *k
= lua_tostring(l
, -1);
42 OptList
& list
= *retrieve(l
, -2);
44 for(int i
=0; i
<list
.size();i
++) {
45 if(list
[i
]->name() == k
) {
46 if(BoolOptPtr p
= boost::dynamic_pointer_cast
<BoolOpt
, BaseOpt
>(list
[i
]))
47 GenericWrapperByValue
<BoolOptPtr
>::create(l
, p
);
48 else if(IntOptPtr p
= boost::dynamic_pointer_cast
<IntOpt
, BaseOpt
>(list
[i
]))
49 GenericWrapperByValue
<IntOptPtr
>::create(l
, p
);
50 else if(StringOptPtr p
= boost::dynamic_pointer_cast
<StringOpt
, BaseOpt
>(list
[i
]))
51 GenericWrapperByValue
<StringOptPtr
>::create(l
, p
);
52 else if(UrlOptPtr p
= boost::dynamic_pointer_cast
<UrlOpt
, BaseOpt
>(list
[i
]))
53 GenericWrapperByValue
<UrlOptPtr
>::create(l
, p
);
54 else if(ColorOptPtr p
= boost::dynamic_pointer_cast
<ColorOpt
, BaseOpt
>(list
[i
]))
55 GenericWrapperByValue
<ColorOptPtr
>::create(l
, p
);
56 else if(FontOptPtr p
= boost::dynamic_pointer_cast
<FontOpt
, BaseOpt
>(list
[i
]))
57 GenericWrapperByValue
<FontOptPtr
>::create(l
, p
);
58 else if(ComboOptPtr p
= boost::dynamic_pointer_cast
<ComboOpt
, BaseOpt
>(list
[i
]))
59 GenericWrapperByValue
<ComboOptPtr
>::create(l
, p
);
60 else if(SelectOptPtr p
= boost::dynamic_pointer_cast
<SelectOpt
, BaseOpt
>(list
[i
]))
61 GenericWrapperByValue
<SelectOptPtr
>::create(l
, p
);
63 luaL_error(l
, "WFT?");
67 luaL_error(l
, "No item with name %s", k
);
71 void Wrapper
<OptList
>::create_index_table(lua_State
* l
) {
72 set_meta_method(l
, &to_string
, "__tostring");
73 set_meta_method(l
, &newindex_event
, "__newindex");
74 set_meta_method(l
, &index_event
, "__index");
76 Comparable
<OptList
>::register_in_index_table(l
);
79 int Wrapper
<OptList
>::constructor(lua_State
* l
) {
80 const int n
= lua_gettop(l
);
83 luaL_error(l
, "Wrong parameter list for OptList constructor");
87 while (lua_next(l
, -2) != 0) {
88 if(BoolOptPtr
*p
= Wrapper
<BoolOptPtr
>::retrieve(l
, -1))
89 list
<< BoolOptPtr(*p
);
90 else if(IntOptPtr
*p
= Wrapper
<IntOptPtr
>::retrieve(l
, -1))
91 list
<< IntOptPtr(*p
);
92 else if(StringOptPtr
*p
= Wrapper
<StringOptPtr
>::retrieve(l
, -1))
93 list
<< StringOptPtr(*p
);
94 else if(UrlOptPtr
*p
= Wrapper
<UrlOptPtr
>::retrieve(l
, -1))
95 list
<< UrlOptPtr(*p
);
96 else if(ColorOptPtr
*p
= Wrapper
<ColorOptPtr
>::retrieve(l
, -1))
97 list
<< ColorOptPtr(*p
);
98 else if(FontOptPtr
*p
= Wrapper
<FontOptPtr
>::retrieve(l
, -1))
99 list
<< FontOptPtr(*p
);
100 else if(ComboOptPtr
*p
= Wrapper
<ComboOptPtr
>::retrieve(l
, -1))
101 list
<< ComboOptPtr(*p
);
102 else if(SelectOptPtr
*p
= Wrapper
<SelectOptPtr
>::retrieve(l
, -1))
103 list
<< SelectOptPtr(*p
);
105 luaL_error(l
, "Wrong item in list for OptList constructor");
110 // for(int i=0;i<list.size();i++)
111 // kDebug() << "list[" << i << "] = " << list[i]->name();
116 //END Wrapper<OptList> ---------------------------------------------------------
119 //BEGIN Wrapper<BoolOptList> -------------------------------------------------------
121 const char* Wrapper
<BoolOptList
>::class_name() {
122 return "BoolOptList";
125 int Wrapper
<BoolOptList
>::to_string(lua_State
* l
) {
126 BoolOptList r
= *retrieve(l
, 1, AssertOk
);
128 for(int i
=0;i
<r
.size();i
++)
129 s
+= (i
==0?"":",")+r
[i
]->name();
130 s
= "bool_list["+s
+"]";
132 lua_pushstring(l
, s
.toAscii().constData());
136 int Wrapper
<BoolOptList
>::newindex_event(lua_State
* l
) {
138 luaL_error(l
, "BoolOptList cannot be modified after being constructed!!!");
142 int Wrapper
<BoolOptList
>::index_event(lua_State
* l
) {
143 const char *k
= lua_tostring(l
, -1);
144 BoolOptList
& list
= *retrieve(l
, -2);
146 for(int i
=0; i
<list
.size();i
++) {
147 if(list
[i
]->name() == k
) {
148 GenericWrapperByValue
<BoolOptPtr
>::create(l
, list
[i
]);
152 luaL_error(l
, "No bool item with name %s", k
);
156 void Wrapper
<BoolOptList
>::create_index_table(lua_State
* l
) {
157 set_meta_method(l
, &to_string
, "__tostring");
158 set_meta_method(l
, &newindex_event
, "__newindex");
159 set_meta_method(l
, &index_event
, "__index");
161 Comparable
<BoolOptList
>::register_in_index_table(l
);
164 int Wrapper
<BoolOptList
>::constructor(lua_State
* l
) {
165 const int n
= lua_gettop(l
);
168 luaL_error(l
, "Wrong parameter list for BoolOptList constructor");
172 while (lua_next(l
, -2) != 0) {
173 list
<< *Wrapper
<BoolOptPtr
>::retrieve(l
, -1, AssertOk
);
182 //END Wrapper<BoolOptList> ---------------------------------------------------------
185 //BEGIN Wrapper<BoolOptPtr> -------------------------------------------------------
187 const char* Wrapper
<BoolOptPtr
>::class_name() {
191 int Wrapper
<BoolOptPtr
>::to_string(lua_State
* l
) {
192 BoolOptPtr r
= *retrieve(l
, 1, AssertOk
);
194 lua_pushfstring(l
, "bool[%s] = %s", r
->name().toAscii().constData(), r
->value()?"true":"false" );
198 void Wrapper
<BoolOptPtr
>::create_index_table(lua_State
* l
) {
199 SET_PROPERTY_RO(l
, name
);
200 SET_PROPERTY_RO(l
, label
);
201 SET_PROPERTY_RO(l
, sub_options
);
202 SET_PROPERTY_RW(l
, value
);
203 set_meta_method(l
, &to_string
, "__tostring");
205 Comparable
<BoolOptPtr
>::register_in_index_table(l
);
208 int Wrapper
<BoolOptPtr
>::constructor(lua_State
* l
) {
209 const int n
= lua_gettop(l
);
212 luaL_error(l
, "Wrong parameter list for BoolOpt constructor");
214 const char* name
= lua_tostring(l
, 1);
215 const char* label
= lua_tostring(l
, 2);
216 bool value
= lua_toboolean(l
, 3);
219 sub_opt
= *Wrapper
<OptList
>::retrieve(l
, 4, AssertOk
);
222 create(l
, BoolOptPtr(new BoolOpt(name
, label
, value
, sub_opt
)));
226 //END Wrapper<BoolOptPtr> ---------------------------------------------------------
229 //BEGIN Wrapper<IntOptPtr> -------------------------------------------------------
231 const char* Wrapper
<IntOptPtr
>::class_name() {
235 int Wrapper
<IntOptPtr
>::to_string(lua_State
* l
) {
236 IntOptPtr r
= *retrieve(l
, 1, AssertOk
);
238 lua_pushfstring(l
, "int[%s] = %d", r
->name().toAscii().constData(), r
->value() );
242 void Wrapper
<IntOptPtr
>::create_index_table(lua_State
* l
) {
243 SET_PROPERTY_RO(l
, name
);
244 SET_PROPERTY_RO(l
, label
);
245 SET_PROPERTY_RO(l
, min
);
246 SET_PROPERTY_RO(l
, max
);
247 SET_PROPERTY_RW(l
, value
);
248 SET_PROPERTY_RO(l
, visualization
);
249 set_meta_method(l
, &to_string
, "__tostring");
251 Comparable
<IntOptPtr
>::register_in_index_table(l
);
254 int Wrapper
<IntOptPtr
>::constructor(lua_State
* l
) {
255 const int n
= lua_gettop(l
);
258 luaL_error(l
, "Wrong parameter list for IntOpt constructor");
260 const char* name
= lua_tostring(l
, 1);
261 const char* label
= lua_tostring(l
, 2);
262 int value
= int(lua_tonumber(l
, 3));
263 int min
= int(lua_tonumber(l
, 4));
264 int max
= int(lua_tonumber(l
, 5));
266 IntOpt::Visualization visualization
= IntOpt::SpinBox
;
268 QString vstring
= lua_tostring(l
, 6);
269 if (vstring
.compare("slider", Qt::CaseInsensitive
) == 0) {
270 visualization
= IntOpt::Slider
;
272 else if (vstring
.compare("spinbox", Qt::CaseInsensitive
) != 0) {
273 kError() << "No such visualization `" << vstring
<< "'. Using `spinbox' instead";
278 create(l
, IntOptPtr(new IntOpt(name
, label
, value
, min
, max
, visualization
)) );
282 //END Wrapper<IntOptPtr> ---------------------------------------------------------
285 //BEGIN Wrapper<StringOptPtr> -------------------------------------------------------
287 const char* Wrapper
<StringOptPtr
>::class_name() {
291 int Wrapper
<StringOptPtr
>::to_string(lua_State
* l
) {
292 StringOptPtr r
= *retrieve(l
, 1, AssertOk
);
294 lua_pushfstring(l
, "string[%s] = %s", r
->name().toAscii().constData(), r
->value().toAscii().constData() );
298 void Wrapper
<StringOptPtr
>::create_index_table(lua_State
* l
) {
299 SET_PROPERTY_RO(l
, name
);
300 SET_PROPERTY_RO(l
, label
);
301 SET_PROPERTY_RW(l
, value
);
302 set_meta_method(l
, &to_string
, "__tostring");
304 Comparable
<StringOptPtr
>::register_in_index_table(l
);
307 int Wrapper
<StringOptPtr
>::constructor(lua_State
* l
) {
308 const int n
= lua_gettop(l
);
311 luaL_error(l
, "Wrong parameter list for StringOpt constructor");
313 const char* name
= lua_tostring(l
, 1);
314 const char* label
= lua_tostring(l
, 2);
315 const char* value
= lua_tostring(l
, 3);
318 create(l
, StringOptPtr(new StringOpt(name
, label
, value
)));
322 //END Wrapper<StringOptPtr> ---------------------------------------------------------
325 //BEGIN Wrapper<UrlOptPtr> -------------------------------------------------------
327 const char* Wrapper
<UrlOptPtr
>::class_name() {
331 int Wrapper
<UrlOptPtr
>::to_string(lua_State
* l
) {
332 UrlOptPtr r
= *retrieve(l
, 1, AssertOk
);
334 lua_pushfstring(l
, "url[%s] = %s", r
->name().toAscii().constData(), r
->value().toAscii().constData() );
338 void Wrapper
<UrlOptPtr
>::create_index_table(lua_State
* l
) {
339 SET_PROPERTY_RO(l
, name
);
340 SET_PROPERTY_RO(l
, label
);
341 SET_PROPERTY_RW(l
, value
);
342 set_meta_method(l
, &to_string
, "__tostring");
344 Comparable
<UrlOptPtr
>::register_in_index_table(l
);
347 int Wrapper
<UrlOptPtr
>::constructor(lua_State
* l
) {
348 const int n
= lua_gettop(l
);
351 luaL_error(l
, "Wrong parameter list for UrlOpt constructor");
353 const char* name
= lua_tostring(l
, 1);
354 const char* label
= lua_tostring(l
, 2);
355 const char* value
= lua_tostring(l
, 3);
358 create(l
, UrlOptPtr(new UrlOpt(name
, label
, file_path(l
, value
) )));
362 //END Wrapper<UrlOptPtr> ---------------------------------------------------------
365 //BEGIN Wrapper<ColorOptPtr> -------------------------------------------------------
367 const char* Wrapper
<ColorOptPtr
>::class_name() {
371 int Wrapper
<ColorOptPtr
>::to_string(lua_State
* l
) {
372 ColorOptPtr r
= *retrieve(l
, 1, AssertOk
);
374 lua_pushfstring(l
, "color[%s] = %s", r
->name().toAscii().constData(), r
->value().name().toAscii().constData() );
378 void Wrapper
<ColorOptPtr
>::create_index_table(lua_State
* l
) {
379 SET_PROPERTY_RO(l
, name
);
380 SET_PROPERTY_RO(l
, label
);
381 SET_PROPERTY_RW(l
, value
);
382 set_meta_method(l
, &to_string
, "__tostring");
384 Comparable
<ColorOptPtr
>::register_in_index_table(l
);
387 int Wrapper
<ColorOptPtr
>::constructor(lua_State
* l
) {
388 const int n
= lua_gettop(l
);
391 luaL_error(l
, "Wrong parameter list for ColorOpt constructor");
393 const char* name
= lua_tostring(l
, 1);
394 const char* label
= lua_tostring(l
, 2);
395 QColor value
= Wrapper
<QColor
>::get(l
, 3);
398 create(l
, ColorOptPtr(new ColorOpt(name
, label
, value
)));
402 //END Wrapper<ColorOptPtr> ---------------------------------------------------------
405 //BEGIN Wrapper<FontOptPtr> -------------------------------------------------------
407 const char* Wrapper
<FontOptPtr
>::class_name() {
411 int Wrapper
<FontOptPtr
>::to_string(lua_State
* l
) {
412 FontOptPtr r
= *retrieve(l
, 1, AssertOk
);
414 lua_pushfstring(l
, "font[%s] = %s", r
->name().toAscii().constData(), r
->value().toString().toAscii().constData() );
418 void Wrapper
<FontOptPtr
>::create_index_table(lua_State
* l
) {
419 SET_PROPERTY_RO(l
, name
);
420 SET_PROPERTY_RO(l
, label
);
421 SET_PROPERTY_RW(l
, value
);
422 set_meta_method(l
, &to_string
, "__tostring");
424 Comparable
<FontOptPtr
>::register_in_index_table(l
);
427 int Wrapper
<FontOptPtr
>::constructor(lua_State
* l
) {
428 const int n
= lua_gettop(l
);
431 luaL_error(l
, "Wrong parameter list for FontOpt constructor");
433 const char* name
= lua_tostring(l
, 1);
434 const char* label
= lua_tostring(l
, 2);
435 QFont
* value
= Wrapper
<QFont
>::retrieve(l
, 3, AssertOk
);
438 create(l
, FontOptPtr(new FontOpt(name
, label
, *value
)));
442 //END Wrapper<FontOptPtr> ---------------------------------------------------------
445 //BEGIN Wrapper<ComboOptPtr> -------------------------------------------------------
447 const char* Wrapper
<ComboOptPtr
>::class_name() {
451 int Wrapper
<ComboOptPtr
>::to_string(lua_State
* l
) {
452 ComboOptPtr r
= *retrieve(l
, 1, AssertOk
);
454 lua_pushfstring(l
, "combo[%s] = %s",
455 r
->name().toAscii().constData(),
456 r
->values().join(",").toAscii().constData() );
460 void Wrapper
<ComboOptPtr
>::create_index_table(lua_State
* l
) {
461 SET_PROPERTY_RO(l
, name
);
462 SET_PROPERTY_RO(l
, label
);
463 SET_PROPERTY_RW(l
, selected
);
464 set_meta_method(l
, &to_string
, "__tostring");
466 Comparable
<ComboOptPtr
>::register_in_index_table(l
);
469 int Wrapper
<ComboOptPtr
>::constructor(lua_State
* l
) {
470 const int n
= lua_gettop(l
);
473 luaL_error(l
, "Wrong parameter list for ComboOpt constructor");
475 const char* name
= lua_tostring(l
, 1);
476 const char* label
= lua_tostring(l
, 2);
477 int selected
= n
==4 ? int(lua_tonumber(l
, 4)) : 0;
480 while (lua_next(l
, 3) != 0) {
481 values
<< lua_tostring(l
, -1);
486 create(l
, ComboOptPtr(new ComboOpt(name
, label
, values
, selected
)));
490 //END Wrapper<ComboOptPtr> ---------------------------------------------------------
493 //BEGIN Wrapper<SelectOptPtr> -------------------------------------------------------
495 const char* Wrapper
<SelectOptPtr
>::class_name() {
499 int Wrapper
<SelectOptPtr
>::to_string(lua_State
* l
) {
500 SelectOptPtr r
= *retrieve(l
, 1, AssertOk
);
502 lua_pushfstring(l
, "select[%s] = !!", r
->name().toAscii().constData() );
506 void Wrapper
<SelectOptPtr
>::create_index_table(lua_State
* l
) {
507 SET_PROPERTY_RO(l
, name
);
508 SET_PROPERTY_RO(l
, label
);
509 SET_PROPERTY_RO(l
, options
);
510 SET_PROPERTY_RW(l
, selected
);
511 set_meta_method(l
, &to_string
, "__tostring");
513 Comparable
<SelectOptPtr
>::register_in_index_table(l
);
516 int Wrapper
<SelectOptPtr
>::constructor(lua_State
* l
) {
517 const int n
= lua_gettop(l
);
520 luaL_error(l
, "Wrong parameter list for SelectOpt constructor");
522 const char* name
= lua_tostring(l
, 1);
523 const char* label
= lua_tostring(l
, 2);
524 BoolOptList values
= *Wrapper
<BoolOptList
>::retrieve(l
, 3, AssertOk
);
525 int selected
= n
==4 ? int(lua_tonumber(l
, 4)) : 0;
528 create(l
, SelectOptPtr(new SelectOpt(name
, label
, values
, selected
)));
532 //END Wrapper<SelectOptPtr> ---------------------------------------------------------
535 } //end namespace luaapi