diff options
Diffstat (limited to 'src/client/lua_api/gui/iguilabel.cpp')
| -rw-r--r-- | src/client/lua_api/gui/iguilabel.cpp | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/src/client/lua_api/gui/iguilabel.cpp b/src/client/lua_api/gui/iguilabel.cpp new file mode 100644 index 0000000..da720f9 --- /dev/null +++ b/src/client/lua_api/gui/iguilabel.cpp @@ -0,0 +1,128 @@ + +#include <stdio.h> +#include <stdlib.h> +#include <vector> +#include <memory> +#include <map> +#include <functional> +extern "C" { + #include <lua.h> + #include <lauxlib.h> + #include <lualib.h> +} +#include <irrlicht.h> +#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(); + //printf("Createing button with data %d %d %d %d, %p, %d, %s, %s\n", startx,starty,endx,endy,guielements[parent],gui_elenum,button_label,button_tooltip); + //Create the label + IGUIStaticText* llabel = (IGUIStaticText*) env->addStaticText(label,core::rect<s32>(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; +} |
