Event.cpp 4.5 KB

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