Event.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. #include "precompiled.h"
  2. #include "LuaType.h"
  3. #include "lua.hpp"
  4. #include <Rocket/Core/Event.h>
  5. #include <Rocket/Core/Element.h>
  6. #include <Rocket/Core/Dictionary.h>
  7. namespace Rocket {
  8. namespace Core {
  9. namespace Lua {
  10. //method
  11. int EventStopPropagation(lua_State* L, Event* obj)
  12. {
  13. LUACHECKOBJ(obj);
  14. obj->StopPropagation();
  15. return 0;
  16. }
  17. //getters
  18. int EventGetAttrcurrent_element(lua_State* L)
  19. {
  20. Event* evt = LuaType<Event>::check(L,1);
  21. LUACHECKOBJ(evt);
  22. Element* ele = evt->GetCurrentElement();
  23. LuaType<Element>::push(L,ele,false);
  24. return 1;
  25. }
  26. int EventGetAttrtype(lua_State* L)
  27. {
  28. Event* evt = LuaType<Event>::check(L,1);
  29. LUACHECKOBJ(evt);
  30. String type = evt->GetType();
  31. lua_pushstring(L,type.CString());
  32. return 1;
  33. }
  34. int EventGetAttrtarget_element(lua_State* L)
  35. {
  36. Event* evt = LuaType<Event>::check(L,1);
  37. LUACHECKOBJ(evt);
  38. Element* target = evt->GetTargetElement();
  39. LuaType<Element>::push(L,target,false);
  40. return 1;
  41. }
  42. int EventGetAttrparameters(lua_State* L)
  43. {
  44. Event* evt = LuaType<Event>::check(L,1);
  45. LUACHECKOBJ(evt);
  46. const Dictionary* params = evt->GetParameters();
  47. int index;
  48. String key;
  49. Variant* value;
  50. lua_newtable(L);
  51. int tableindex = lua_gettop(L);
  52. while(params->Iterate(index,key,value))
  53. {
  54. lua_pushstring(L,key.CString());
  55. Variant::Type type = value->GetType();
  56. switch(type)
  57. {
  58. case Variant::BYTE:
  59. case Variant::CHAR:
  60. case Variant::INT:
  61. lua_pushinteger(L,*(int*)value);
  62. break;
  63. case Variant::FLOAT:
  64. lua_pushnumber(L,*(float*)value);
  65. break;
  66. case Variant::COLOURB:
  67. LuaType<Colourb>::push(L,(Colourb*)value,false);
  68. break;
  69. case Variant::COLOURF:
  70. LuaType<Colourf>::push(L,(Colourf*)value,false);
  71. break;
  72. case Variant::STRING:
  73. lua_pushstring(L,((String*)value)->CString());
  74. break;
  75. case Variant::VECTOR2:
  76. //according to Variant.inl, it is going to be a Vector2f
  77. LuaType<Vector2f>::push(L,((Vector2f*)value),false);
  78. break;
  79. case Variant::VOIDPTR:
  80. lua_pushlightuserdata(L,(void*)value);
  81. break;
  82. default:
  83. lua_pushnil(L);
  84. break;
  85. }
  86. lua_settable(L,tableindex);
  87. }
  88. return 1;
  89. }
  90. //setters
  91. /*
  92. //Apparently, the dictionary returned is constant, and shouldn't be modified.
  93. //I am keeping this function in case that isn't the case
  94. int EventSetAttrparameters(lua_State* L)
  95. {
  96. Event* evt = LuaType<Event>::check(L,1);
  97. LUACHECKOBJ(evt);
  98. const Dictionary* params = evt->GetParameters();
  99. int valtype = lua_type(L,2);
  100. if(valtype == LUA_TTABLE) //if the user gives a table, then go through the table and set everything
  101. {
  102. lua_pushnil(L); //becauase lua_next pops a key from the stack first, we don't want to pop the table
  103. while(lua_next(L,2) != 0)
  104. {
  105. //[-1] is value, [-2] is key
  106. int type = lua_type(L,-1);
  107. const char* key = luaL_checkstring(L,-2); //key HAS to be a string, or things will go bad
  108. switch(type)
  109. {
  110. case LUA_TNUMBER:
  111. params->Set(key,(float)lua_tonumber(L,-1));
  112. break;
  113. case LUA_TBOOLEAN:
  114. params->Set(key,CHECK_BOOL(L,-1));
  115. break;
  116. case LUA_TSTRING:
  117. params->Set(key,luaL_checkstring(L,-1));
  118. break;
  119. case LUA_TUSERDATA:
  120. case LUA_TLIGHTUSERDATA:
  121. params->Set(key,lua_touserdata(L,-1));
  122. break;
  123. default:
  124. break;
  125. }
  126. }
  127. }
  128. else if(valtype == LUA_TNIL)
  129. {
  130. params->Clear();
  131. }
  132. return 0;
  133. }
  134. */
  135. RegType<Event> EventMethods[] =
  136. {
  137. LUAMETHOD(Event,StopPropagation)
  138. { NULL, NULL },
  139. };
  140. luaL_reg EventGetters[] =
  141. {
  142. LUAGETTER(Event,current_element)
  143. LUAGETTER(Event,type)
  144. LUAGETTER(Event,target_element)
  145. LUAGETTER(Event,parameters)
  146. { NULL, NULL },
  147. };
  148. luaL_reg EventSetters[] =
  149. {
  150. //LUASETTER(Event,parameters)
  151. { NULL, NULL },
  152. };
  153. /*
  154. template<> const char* GetTClassName<Event>() { return "Event"; }
  155. template<> RegType<Event>* GetMethodTable<Event>() { return EventMethods; }
  156. template<> luaL_reg* GetAttrTable<Event>() { return EventGetters; }
  157. template<> luaL_reg* SetAttrTable<Event>() { return EventSetters; }
  158. */
  159. }
  160. }
  161. }