#include #include #include #include #include #include extern "C" { #include #include #include } #include #include "../guiparts.hpp" #include "iguielement.hpp" #include "../../callbackhandeler.hpp" using namespace irr; using namespace gui; //IrrlichtDevice* guidevice; static LIGUIElement* checkiguilabel(lua_State* L, int index){ void* ud = luaL_checkudata(L,index,"gui.iguilabel"); luaL_argcheck(L,ud != NULL, index, "'gui.iguilabel' expected"); return (LIGUIElement*) ud; } static LIGUIElement* checkiguilabel(lua_State* L){ return checkiguilabel(L,1); } static void iguilabelevent(irr::SEvent e){ printf("Oh no! an iguilabel generated an event!"); } static int newiguilabel(lua_State* L){ printf("Createing label!\n"); int nargs = lua_gettop(L); //The position of the text int startx = luaL_optint(L,1,0); int starty = luaL_optint(L,2,0); int endx = luaL_optint(L,3,startx+100); int endy = luaL_optint(L,4,starty+100); //Label and tooltip wchar_t* label; const char* labelopt = luaL_optstring(L,5,"Label"); int bls = strlen(labelopt); label = (wchar_t*)malloc(sizeof(wchar_t)*(bls)); mbstowcs(label,labelopt,bls); printf("Got the string option\n"); //If the element has a parrent int parent = 0; if(nargs >= 6){ parent = luaL_optint(L,6,0); printf("got the parrent\n"); } //Create the button IGUIEnvironment* env = guidevice->getGUIEnvironment(); //Create the label IGUIStaticText* llabel = (IGUIStaticText*) env->addStaticText(label,core::rect(startx,starty,endx,endy),false,false, guielements[parent], gui_elenum++, false); printf("Created the button\n"); //Register it's callback registerguicallback(llabel,EGET_ELEMENT_HOVERED,iguilabelevent); //Create it's lua representation LIGUIElement* ltext = (LIGUIElement*)lua_newuserdata(L, sizeof(LIGUIElement)); int tref = luaL_ref(L,LUA_REGISTRYINDEX); iguielements[llabel] = tref; lua_rawgeti(L,LUA_REGISTRYINDEX,tref);//Put it back on the stack since luaL_ref pops the object. //Set it's metatable luaL_getmetatable(L, "gui.iguilabel"); lua_setmetatable(L, -2); //Create the struct ltext->e = llabel; ltext->funcmap = hashmap_new(); ltext->type = "iguilabel"; //Free up anything made in this function free(label); //Put it on top and return it lua_rawgeti(L,LUA_REGISTRYINDEX,tref); return 1; } static const luaL_reg iguilabel_f[] = { {"new", newiguilabel}, {"gethandeler", guigethandeler}, {"sethandeler", guisethandeler}, {0,0}, }; static const luaL_reg iguilabel_m[] = { {"move", moveiguielement}, {"settext", setiguitext}, {"remove", removeiguielement}, {0, 0}, }; int iguilabel_register(lua_State* L, IrrlichtDevice* d){ luaL_newmetatable(L, "gui.iguilabel"); luaL_register(L,"iguilabel",iguilabel_f); lua_pushstring(L,"__index"); lua_pushstring(L,"gethandeler"); lua_gettable(L,-3); lua_settable(L,-4); lua_pushstring(L,"__newindex"); lua_pushstring(L,"sethandeler"); lua_gettable(L,-3); lua_settable(L,-4); luaL_register(L, NULL, iguilabel_m); return 1; }