Element.h 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. #ifndef ROCKETCORELUAELEMENT_H
  2. #define ROCKETCORELUAELEMENT_H
  3. /*
  4. This defines the Element type in the Lua global namespace
  5. A few classes "inherit" from Element, such as Document. Document will call
  6. LuaType<Element>::_regfunctions to put all of these functions in its own table, and
  7. will be used with the same syntax except it will be from a Document object. It isn't true
  8. inheritance, but it is a fair enough emulation. Any functions in the child class that have
  9. the same name as the function in Element will overwrite the one in Element.
  10. Here, I will be showing usage of the API, and it will show the type names rather than the regular
  11. local var = foo that is Lua. If you need info on the purpose of the functions, see the python docs
  12. //methods that need to be called from an Element object using the colon syntax
  13. noreturn Element:AddEventListener(string event, ? see footnote 1, [bool capture])
  14. noreturn Element:AppendChild(Element child)
  15. noreturn Element:Blur()
  16. noreturn Element:Click()
  17. noreturn Element:DispatchEvent(string event, {} params) --in params, keys have to be a string and value can be number,bool,string,userdata,lightuserdata
  18. noreturn Element:Focus()
  19. [int,float,Colourb,Colourf,string,Vector2f,lightuserdata] Element:GetAttribute(string name) --will return one of those types
  20. Element Element:GetElementById(string id)
  21. {}of elements Element:GetElementsByTagName(string tag)
  22. bool Element:HasAttribute(string name)
  23. bool Element:HasChildNodes()
  24. noreturn Element:InsertBefore(Element child,Element adjacent)
  25. bool Element:IsClassSet(string name)
  26. noreturn Element:RemoveAttribute(string name)
  27. bool Element:RemoveChild(Element child)
  28. bool Element:ReplaceChild(Element inserted,Element replaced)
  29. noreturn Element:ScrollIntoView(bool align_with_top)
  30. noreturn Element:SetAttribute(string name,string value)
  31. noreturn Element:SetClass(string name, bool activate)
  32. type_specified Element:AsType(Element.etype) --see footnote 2. Yes, that 'e' is supposed to be there.
  33. //getters accessed by the period syntax from an element object
  34. --for attributes, if you save it to a local/global variable and try to modify that variable,
  35. --your changes will not be saved. You will have to use Element:SetAttribute
  36. {} of [key=string,value=int,float,Colourb,Colourf,string,Vector2f,lightuserdata] Element.attributes
  37. {} of Element Element.child_nodes
  38. string Element.class_name
  39. float Element.client_left
  40. float Element.client_height
  41. float Element.client_top
  42. float Element.client_width
  43. Element Element.first_child
  44. string Element.id
  45. string Element.inner_rml
  46. Element Element.last_child
  47. Element Element.next_sibling
  48. float Element.offset_height
  49. float Element.offset_left
  50. Element Element.offset_parent
  51. float Element.offset_top
  52. float Element.offset_width
  53. Document Element.owner_document
  54. Element Element.parent_nod
  55. Element Element.previous_sibling
  56. float Element.scroll_height
  57. float Element.scroll_left
  58. float Element.scroll_top
  59. float Element.scroll_width
  60. ElementStyle Element.style --see ElementStyle.h documentation
  61. string Element.tag_name
  62. //setters to be used with a dot syntax on an Element object
  63. Element.class_name = string
  64. Element.id = string
  65. Element.inner_rml = string
  66. Element.scroll_left = float
  67. Element.scroll_top = float
  68. footnote 1: for Element:AddEventListener(string,?,bool)
  69. The ? can be either a string or a function.
  70. In the string, you can be guaranteed that you will have the
  71. named variables 'event','element','document' available to you, and they mean the same as if you were to put
  72. the string as onclick="string" in a .rml file.
  73. If you give it a function, the function will be called every time that C++ EventListener::ProcessEvent would
  74. would be called. In this case, it will call the function, and you can decide the name of the parameters, however
  75. it is in a specific order. The order is event,element,document. So:
  76. function foo(l,q,e) end element:AddEventListener("click",foo,true) is the correct syntax, and puts l=event,q=element,e=document
  77. They are terrible names, but it is to make a point.
  78. footnote 2: For Element:AsType(Element.etype)
  79. Element.etype is an enum that maps strings to integers. It can be one of the following:
  80. datagrid,dataselect,element,form,input,select,tabset,textarea
  81. If you give it a bad parameter, it will return an Element type
  82. */
  83. #include <Rocket/Core/Lua/LuaType.h>
  84. #include <Rocket/Core/Lua/lua.hpp>
  85. #include <Rocket/Core/Element.h>
  86. namespace Rocket {
  87. namespace Core {
  88. namespace Lua {
  89. enum Elementetype
  90. {
  91. TDATAGRID = 0, TDATASELECT, TELEMENT, TFORM, TINPUT, TSELECT, TTABSET, TTEXTAREA
  92. };
  93. template<> bool LuaType<Element>::is_reference_counted();
  94. template<> void LuaType<Element>::extra_init(lua_State* L, int metatable_index);
  95. //methods
  96. int ElementAddEventListener(lua_State* L, Element* obj);
  97. int ElementAppendChild(lua_State* L, Element* obj);
  98. int ElementBlur(lua_State* L, Element* obj);
  99. int ElementClick(lua_State* L, Element* obj);
  100. int ElementDispatchEvent(lua_State* L, Element* obj);
  101. int ElementFocus(lua_State* L, Element* obj);
  102. int ElementGetAttribute(lua_State* L, Element* obj);
  103. int ElementGetElementById(lua_State* L, Element* obj);
  104. int ElementGetElementsByTagName(lua_State* L, Element* obj);
  105. int ElementHasAttribute(lua_State* L, Element* obj);
  106. int ElementHasChildNodes(lua_State* L, Element* obj);
  107. int ElementInsertBefore(lua_State* L, Element* obj);
  108. int ElementIsClassSet(lua_State* L, Element* obj);
  109. int ElementRemoveAttribute(lua_State* L, Element* obj);
  110. int ElementRemoveChild(lua_State* L, Element* obj);
  111. int ElementReplaceChild(lua_State* L, Element* obj);
  112. int ElementScrollIntoView(lua_State* L, Element* obj);
  113. int ElementSetAttribute(lua_State* L, Element* obj);
  114. int ElementSetClass(lua_State* L, Element* obj);
  115. int ElementAsType(lua_State* L, Element* obj);
  116. //getters
  117. int ElementGetAttrattributes(lua_State* L);
  118. int ElementGetAttrchild_nodes(lua_State* L);
  119. int ElementGetAttrclass_name(lua_State* L);
  120. int ElementGetAttrclient_left(lua_State* L);
  121. int ElementGetAttrclient_height(lua_State* L);
  122. int ElementGetAttrclient_top(lua_State* L);
  123. int ElementGetAttrclient_width(lua_State* L);
  124. int ElementGetAttrfirst_child(lua_State* L);
  125. int ElementGetAttrid(lua_State* L);
  126. int ElementGetAttrinner_rml(lua_State* L);
  127. int ElementGetAttrlast_child(lua_State* L);
  128. int ElementGetAttrnext_sibling(lua_State* L);
  129. int ElementGetAttroffset_height(lua_State* L);
  130. int ElementGetAttroffset_left(lua_State* L);
  131. int ElementGetAttroffset_parent(lua_State* L);
  132. int ElementGetAttroffset_top(lua_State* L);
  133. int ElementGetAttroffset_width(lua_State* L);
  134. int ElementGetAttrowner_document(lua_State* L);
  135. int ElementGetAttrparent_node(lua_State* L);
  136. int ElementGetAttrprevious_sibling(lua_State* L);
  137. int ElementGetAttrscroll_height(lua_State* L);
  138. int ElementGetAttrscroll_left(lua_State* L);
  139. int ElementGetAttrscroll_top(lua_State* L);
  140. int ElementGetAttrscroll_width(lua_State* L);
  141. int ElementGetAttrstyle(lua_State* L);
  142. int ElementGetAttrtag_name(lua_State* L);
  143. //setters
  144. int ElementSetAttrclass_name(lua_State* L);
  145. int ElementSetAttrid(lua_State* L);
  146. int ElementSetAttrinner_rml(lua_State* L);
  147. int ElementSetAttrscroll_left(lua_State* L);
  148. int ElementSetAttrscroll_top(lua_State* L);
  149. RegType<Element> ElementMethods[];
  150. luaL_reg ElementGetters[];
  151. luaL_reg ElementSetters[];
  152. /*
  153. template<> const char* GetTClassName<Element>();
  154. template<> RegType<Element>* GetMethodTable<Element>();
  155. template<> luaL_reg* GetAttrTable<Element>();
  156. template<> luaL_reg* SetAttrTable<Element>();
  157. */
  158. }
  159. }
  160. }
  161. #endif