2 Copyright (c) 2006 Paolo Capriotti <p.capriotti@sns.it>
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.
15 //BEGIN Wrapper<OptList> -------------------------------------------------------
17 const char* Wrapper
<OptList
>::class_name() {
21 int Wrapper
<OptList
>::to_string(lua_State
* l
) {
22 OptList r
= *retrieve(l
, 1, AssertOk
);
24 for(int i
=0;i
<r
.size();i
++)
25 s
+= (i
==0?"":",")+r
[i
]->name();
28 lua_pushstring(l
, s
.toAscii().constData());
32 int Wrapper
<OptList
>::newindex_event(lua_State
* l
) {
34 luaL_error(l
, "OptList cannot be modified after being constructed!!!");
38 int Wrapper
<OptList
>::index_event(lua_State
* l
) {
39 const char *k
= lua_tostring(l
, -1);
40 OptList
& list
= *retrieve(l
, -2);
42 for(int i
=0; i
<list
.size();i
++) {
43 if(list
[i
]->name() == k
) {
44 if(BoolOptPtr p
= boost::dynamic_pointer_cast
<BoolOpt
, BaseOpt
>(list
[i
]))
45 GenericWrapperByValue
<BoolOptPtr
>::create(l
, p
);
46 else if(IntOptPtr p
= boost::dynamic_pointer_cast
<IntOpt
, BaseOpt
>(list
[i
]))
47 GenericWrapperByValue
<IntOptPtr
>::create(l
, p
);
48 else if(StringOptPtr p
= boost::dynamic_pointer_cast
<StringOpt
, BaseOpt
>(list
[i
]))
49 GenericWrapperByValue
<StringOptPtr
>::create(l
, p
);
50 else if(UrlOptPtr p
= boost::dynamic_pointer_cast
<UrlOpt
, BaseOpt
>(list
[i
]))
51 GenericWrapperByValue
<UrlOptPtr
>::create(l
, p
);
52 else if(ColorOptPtr p
= boost::dynamic_pointer_cast
<ColorOpt
, BaseOpt
>(list
[i
]))
53 GenericWrapperByValue
<ColorOptPtr
>::create(l
, p
);
54 else if(FontOptPtr p
= boost::dynamic_pointer_cast
<FontOpt
, BaseOpt
>(list
[i
]))
55 GenericWrapperByValue
<FontOptPtr
>::create(l
, p
);
56 else if(ComboOptPtr p
= boost::dynamic_pointer_cast
<ComboOpt
, BaseOpt
>(list
[i
]))
57 GenericWrapperByValue
<ComboOptPtr
>::create(l
, p
);
58 else if(SelectOptPtr p
= boost::dynamic_pointer_cast
<SelectOpt
, BaseOpt
>(list
[i
]))
59 GenericWrapperByValue
<SelectOptPtr
>::create(l
, p
);
61 luaL_error(l
, "WFT?");
65 luaL_error(l
, "No item with name %s", k
);
69 void Wrapper
<OptList
>::create_index_table(lua_State
* l
) {
70 set_meta_method(l
, &to_string
, "__tostring");
71 set_meta_method(l
, &newindex_event
, "__newindex");
72 set_meta_method(l
, &index_event
, "__index");
74 Comparable
<OptList
>::register_in_index_table(l
);
77 int Wrapper
<OptList
>::constructor(lua_State
* l
) {
78 const int n
= lua_gettop(l
);
81 luaL_error(l
, "Wrong parameter list for OptList constructor");
85 while (lua_next(l
, -2) != 0) {
86 if(BoolOptPtr
*p
= Wrapper
<BoolOptPtr
>::retrieve(l
, -1))
87 list
<< BoolOptPtr(*p
);
88 else if(IntOptPtr
*p
= Wrapper
<IntOptPtr
>::retrieve(l
, -1))
89 list
<< IntOptPtr(*p
);
90 else if(StringOptPtr
*p
= Wrapper
<StringOptPtr
>::retrieve(l
, -1))
91 list
<< StringOptPtr(*p
);
92 else if(UrlOptPtr
*p
= Wrapper
<UrlOptPtr
>::retrieve(l
, -1))
93 list
<< UrlOptPtr(*p
);
94 else if(ColorOptPtr
*p
= Wrapper
<ColorOptPtr
>::retrieve(l
, -1))
95 list
<< ColorOptPtr(*p
);
96 else if(FontOptPtr
*p
= Wrapper
<FontOptPtr
>::retrieve(l
, -1))
97 list
<< FontOptPtr(*p
);
98 else if(ComboOptPtr
*p
= Wrapper
<ComboOptPtr
>::retrieve(l
, -1))
99 list
<< ComboOptPtr(*p
);
100 else if(SelectOptPtr
*p
= Wrapper
<SelectOptPtr
>::retrieve(l
, -1))
101 list
<< SelectOptPtr(*p
);
103 luaL_error(l
, "Wrong item in list for OptList constructor");
108 // for(int i=0;i<list.size();i++)
109 // std::cout << "list[" << i << "] = " << list[i]->name() << std::endl;
114 //END Wrapper<OptList> ---------------------------------------------------------
117 //BEGIN Wrapper<BoolOptList> -------------------------------------------------------
119 const char* Wrapper
<BoolOptList
>::class_name() {
120 return "BoolOptList";
123 int Wrapper
<BoolOptList
>::to_string(lua_State
* l
) {
124 BoolOptList r
= *retrieve(l
, 1, AssertOk
);
126 for(int i
=0;i
<r
.size();i
++)
127 s
+= (i
==0?"":",")+r
[i
]->name();
128 s
= "bool_list["+s
+"]";
130 lua_pushstring(l
, s
.toAscii().constData());
134 int Wrapper
<BoolOptList
>::newindex_event(lua_State
* l
) {
136 luaL_error(l
, "BoolOptList cannot be modified after being constructed!!!");
140 int Wrapper
<BoolOptList
>::index_event(lua_State
* l
) {
141 const char *k
= lua_tostring(l
, -1);
142 BoolOptList
& list
= *retrieve(l
, -2);
144 for(int i
=0; i
<list
.size();i
++) {
145 if(list
[i
]->name() == k
) {
146 GenericWrapperByValue
<BoolOptPtr
>::create(l
, list
[i
]);
150 luaL_error(l
, "No bool item with name %s", k
);
154 void Wrapper
<BoolOptList
>::create_index_table(lua_State
* l
) {
155 set_meta_method(l
, &to_string
, "__tostring");
156 set_meta_method(l
, &newindex_event
, "__newindex");
157 set_meta_method(l
, &index_event
, "__index");
159 Comparable
<BoolOptList
>::register_in_index_table(l
);
162 int Wrapper
<BoolOptList
>::constructor(lua_State
* l
) {
163 const int n
= lua_gettop(l
);
166 luaL_error(l
, "Wrong parameter list for BoolOptList constructor");
170 while (lua_next(l
, -2) != 0) {
171 list
<< *Wrapper
<BoolOptPtr
>::retrieve(l
, -1, AssertOk
);
180 //END Wrapper<BoolOptList> ---------------------------------------------------------
183 //BEGIN Wrapper<BoolOptPtr> -------------------------------------------------------
185 const char* Wrapper
<BoolOptPtr
>::class_name() {
189 int Wrapper
<BoolOptPtr
>::to_string(lua_State
* l
) {
190 BoolOptPtr r
= *retrieve(l
, 1, AssertOk
);
192 lua_pushfstring(l
, "bool[%s] = %s", r
->name().toAscii().constData(), r
->value()?"true":"false" );
196 void Wrapper
<BoolOptPtr
>::create_index_table(lua_State
* l
) {
197 SET_PROPERTY_RO(l
, name
);
198 SET_PROPERTY_RO(l
, label
);
199 SET_PROPERTY_RO(l
, sub_options
);
200 SET_PROPERTY_RW(l
, value
);
201 set_meta_method(l
, &to_string
, "__tostring");
203 Comparable
<BoolOptPtr
>::register_in_index_table(l
);
206 int Wrapper
<BoolOptPtr
>::constructor(lua_State
* l
) {
207 const int n
= lua_gettop(l
);
210 luaL_error(l
, "Wrong parameter list for BoolOpt constructor");
212 const char* name
= lua_tostring(l
, 1);
213 const char* label
= lua_tostring(l
, 2);
214 bool value
= lua_toboolean(l
, 3);
217 sub_opt
= *Wrapper
<OptList
>::retrieve(l
, 4, AssertOk
);
220 create(l
, BoolOptPtr(new BoolOpt(name
, label
, value
, sub_opt
)));
224 //END Wrapper<BoolOptPtr> ---------------------------------------------------------
227 //BEGIN Wrapper<IntOptPtr> -------------------------------------------------------
229 const char* Wrapper
<IntOptPtr
>::class_name() {
233 int Wrapper
<IntOptPtr
>::to_string(lua_State
* l
) {
234 IntOptPtr r
= *retrieve(l
, 1, AssertOk
);
236 lua_pushfstring(l
, "int[%s] = %d", r
->name().toAscii().constData(), r
->value() );
240 void Wrapper
<IntOptPtr
>::create_index_table(lua_State
* l
) {
241 SET_PROPERTY_RO(l
, name
);
242 SET_PROPERTY_RO(l
, label
);
243 SET_PROPERTY_RO(l
, min
);
244 SET_PROPERTY_RO(l
, max
);
245 SET_PROPERTY_RW(l
, value
);
246 set_meta_method(l
, &to_string
, "__tostring");
248 Comparable
<IntOptPtr
>::register_in_index_table(l
);
251 int Wrapper
<IntOptPtr
>::constructor(lua_State
* l
) {
252 const int n
= lua_gettop(l
);
255 luaL_error(l
, "Wrong parameter list for IntOpt constructor");
257 const char* name
= lua_tostring(l
, 1);
258 const char* label
= lua_tostring(l
, 2);
259 int value
= int(lua_tonumber(l
, 3));
260 int min
= int(lua_tonumber(l
, 4));
261 int max
= int(lua_tonumber(l
, 5));
264 create(l
, IntOptPtr(new IntOpt(name
, label
, value
, min
, max
)));
268 //END Wrapper<IntOptPtr> ---------------------------------------------------------
271 //BEGIN Wrapper<StringOptPtr> -------------------------------------------------------
273 const char* Wrapper
<StringOptPtr
>::class_name() {
277 int Wrapper
<StringOptPtr
>::to_string(lua_State
* l
) {
278 StringOptPtr r
= *retrieve(l
, 1, AssertOk
);
280 lua_pushfstring(l
, "string[%s] = %s", r
->name().toAscii().constData(), r
->value().toAscii().constData() );
284 void Wrapper
<StringOptPtr
>::create_index_table(lua_State
* l
) {
285 SET_PROPERTY_RO(l
, name
);
286 SET_PROPERTY_RO(l
, label
);
287 SET_PROPERTY_RW(l
, value
);
288 set_meta_method(l
, &to_string
, "__tostring");
290 Comparable
<StringOptPtr
>::register_in_index_table(l
);
293 int Wrapper
<StringOptPtr
>::constructor(lua_State
* l
) {
294 const int n
= lua_gettop(l
);
297 luaL_error(l
, "Wrong parameter list for StringOpt constructor");
299 const char* name
= lua_tostring(l
, 1);
300 const char* label
= lua_tostring(l
, 2);
301 const char* value
= lua_tostring(l
, 3);
304 sub_opt
= *Wrapper
<OptList
>::retrieve(l
, 4, AssertOk
);
307 create(l
, StringOptPtr(new StringOpt(name
, label
, value
)));
311 //END Wrapper<StringOptPtr> ---------------------------------------------------------
314 //BEGIN Wrapper<UrlOptPtr> -------------------------------------------------------
316 const char* Wrapper
<UrlOptPtr
>::class_name() {
320 int Wrapper
<UrlOptPtr
>::to_string(lua_State
* l
) {
321 UrlOptPtr r
= *retrieve(l
, 1, AssertOk
);
323 lua_pushfstring(l
, "string[%s] = %s", r
->name().toAscii().constData(), r
->value().toAscii().constData() );
327 void Wrapper
<UrlOptPtr
>::create_index_table(lua_State
* l
) {
328 SET_PROPERTY_RO(l
, name
);
329 SET_PROPERTY_RO(l
, label
);
330 SET_PROPERTY_RW(l
, value
);
331 set_meta_method(l
, &to_string
, "__tostring");
333 Comparable
<UrlOptPtr
>::register_in_index_table(l
);
336 int Wrapper
<UrlOptPtr
>::constructor(lua_State
* l
) {
337 const int n
= lua_gettop(l
);
340 luaL_error(l
, "Wrong parameter list for UrlOpt constructor");
342 const char* name
= lua_tostring(l
, 1);
343 const char* label
= lua_tostring(l
, 2);
344 const char* value
= lua_tostring(l
, 3);
347 sub_opt
= *Wrapper
<OptList
>::retrieve(l
, 4, AssertOk
);
350 create(l
, UrlOptPtr(new UrlOpt(name
, label
, value
)));
354 //END Wrapper<UrlOptPtr> ---------------------------------------------------------
357 //BEGIN Wrapper<ColorOptPtr> -------------------------------------------------------
359 const char* Wrapper
<ColorOptPtr
>::class_name() {
363 int Wrapper
<ColorOptPtr
>::to_string(lua_State
* l
) {
364 ColorOptPtr r
= *retrieve(l
, 1, AssertOk
);
366 lua_pushfstring(l
, "color[%s] = %s", r
->name().toAscii().constData(), r
->value().name().toAscii().constData() );
370 void Wrapper
<ColorOptPtr
>::create_index_table(lua_State
* l
) {
371 SET_PROPERTY_RO(l
, name
);
372 SET_PROPERTY_RO(l
, label
);
373 SET_PROPERTY_RW(l
, value
);
374 set_meta_method(l
, &to_string
, "__tostring");
376 Comparable
<ColorOptPtr
>::register_in_index_table(l
);
379 int Wrapper
<ColorOptPtr
>::constructor(lua_State
* l
) {
380 const int n
= lua_gettop(l
);
383 luaL_error(l
, "Wrong parameter list for ColorOpt constructor");
385 const char* name
= lua_tostring(l
, 1);
386 const char* label
= lua_tostring(l
, 2);
387 const char* value
= lua_tostring(l
, 3);
390 sub_opt
= *Wrapper
<OptList
>::retrieve(l
, 4, AssertOk
);
393 create(l
, ColorOptPtr(new ColorOpt(name
, label
, value
)));
397 //END Wrapper<ColorOptPtr> ---------------------------------------------------------
400 //BEGIN Wrapper<FontOptPtr> -------------------------------------------------------
402 const char* Wrapper
<FontOptPtr
>::class_name() {
406 int Wrapper
<FontOptPtr
>::to_string(lua_State
* l
) {
407 FontOptPtr r
= *retrieve(l
, 1, AssertOk
);
409 lua_pushfstring(l
, "font[%s] = %s", r
->name().toAscii().constData(), r
->value().toString().toAscii().constData() );
413 void Wrapper
<FontOptPtr
>::create_index_table(lua_State
* l
) {
414 SET_PROPERTY_RO(l
, name
);
415 SET_PROPERTY_RO(l
, label
);
416 //SET_PROPERTY_RW(l, value);
417 set_meta_method(l
, &to_string
, "__tostring");
419 Comparable
<FontOptPtr
>::register_in_index_table(l
);
422 int Wrapper
<FontOptPtr
>::constructor(lua_State
* l
) {
423 const int n
= lua_gettop(l
);
426 luaL_error(l
, "Wrong parameter list for FontOpt constructor");
428 const char* name
= lua_tostring(l
, 1);
429 const char* label
= lua_tostring(l
, 2);
430 const char* value
= lua_tostring(l
, 3);
433 sub_opt
= *Wrapper
<OptList
>::retrieve(l
, 4, AssertOk
);
436 create(l
, FontOptPtr(new FontOpt(name
, label
, QFont(value
))));
440 //END Wrapper<FontOptPtr> ---------------------------------------------------------
443 //BEGIN Wrapper<ComboOptPtr> -------------------------------------------------------
445 const char* Wrapper
<ComboOptPtr
>::class_name() {
449 int Wrapper
<ComboOptPtr
>::to_string(lua_State
* l
) {
450 ComboOptPtr r
= *retrieve(l
, 1, AssertOk
);
452 lua_pushfstring(l
, "combo[%s] = %s", r
->name().toAscii().constData(), r
->m_values
.join(",").toAscii().constData() );
456 void Wrapper
<ComboOptPtr
>::create_index_table(lua_State
* l
) {
457 SET_PROPERTY_RO(l
, name
);
458 SET_PROPERTY_RO(l
, label
);
459 SET_PROPERTY_RW(l
, selected
);
460 set_meta_method(l
, &to_string
, "__tostring");
462 Comparable
<ComboOptPtr
>::register_in_index_table(l
);
465 int Wrapper
<ComboOptPtr
>::constructor(lua_State
* l
) {
466 const int n
= lua_gettop(l
);
469 luaL_error(l
, "Wrong parameter list for ComboOpt constructor");
471 const char* name
= lua_tostring(l
, 1);
472 const char* label
= lua_tostring(l
, 2);
473 int selected
= n
==4 ? int(lua_tonumber(l
, 4)) : 0;
476 while (lua_next(l
, 3) != 0) {
477 values
<< lua_tostring(l
, -1);
482 create(l
, ComboOptPtr(new ComboOpt(name
, label
, values
, selected
)));
486 //END Wrapper<ComboOptPtr> ---------------------------------------------------------
489 //BEGIN Wrapper<SelectOptPtr> -------------------------------------------------------
491 const char* Wrapper
<SelectOptPtr
>::class_name() {
495 int Wrapper
<SelectOptPtr
>::to_string(lua_State
* l
) {
496 SelectOptPtr r
= *retrieve(l
, 1, AssertOk
);
498 lua_pushfstring(l
, "select[%s] = !!", r
->name().toAscii().constData() );
502 void Wrapper
<SelectOptPtr
>::create_index_table(lua_State
* l
) {
503 SET_PROPERTY_RO(l
, name
);
504 SET_PROPERTY_RO(l
, label
);
505 SET_PROPERTY_RO(l
, options
);
506 SET_PROPERTY_RW(l
, selected
);
507 set_meta_method(l
, &to_string
, "__tostring");
509 Comparable
<SelectOptPtr
>::register_in_index_table(l
);
512 int Wrapper
<SelectOptPtr
>::constructor(lua_State
* l
) {
513 const int n
= lua_gettop(l
);
516 luaL_error(l
, "Wrong parameter list for SelectOpt constructor");
518 const char* name
= lua_tostring(l
, 1);
519 const char* label
= lua_tostring(l
, 2);
520 BoolOptList values
= *Wrapper
<BoolOptList
>::retrieve(l
, 3, AssertOk
);
521 int selected
= n
==4 ? int(lua_tonumber(l
, 4)) : 0;
524 create(l
, SelectOptPtr(new SelectOpt(name
, label
, values
, selected
)));
528 //END Wrapper<SelectOptPtr> ---------------------------------------------------------
531 } //end namespace luaapi