#include #include #include #include #include #include #include extern "C" { #include #include #include } #include #include "../guiparts.hpp" #include "iguielement.hpp" #include "client/callbackhandeler.hpp" #include #include /*** @module gui */ using namespace irr; using namespace core; using namespace gui; extern IrrlichtDevice* device; /*** @function newfileopendialog() Creates a new dialog to open a file @tparam title string The rectangle to place the button at. If the box has a parent, it is offset from the upper-left of the parent element. @tparam path string The path to open the file dialog to @tparam parent (iguielement | nil) parent The parent element of the button. @tparam modal boolean If other gui elements can be interacted with before this element is closed @treturn iguifileopendialog The button element */ //gui.newfileopendialog(["title"][,"path"][,parent][,modal]) static int newfileopendialog(lua_State* L){ wchar_t *title = NULL;// = L"File open dialog"; io::path::char_type *path = NULL;// = L""; bool modal = true; IGUIElement* parent = NULL; int nargs = lua_gettop(L); if(nargs > 3){ modal = lua_toboolean(L,-1) == 1;//"title","path",{parent},modal lua_pop(L,1);//"title","path",{parent} } if(nargs > 2){ lua_getfield(L,-1,"guielement");//"title","path",{parent},ud_parent parent = (IGUIElement*)lua_touserdata(L,-1);//"title","path",{parent},ud_parent lua_pop(L,2);//"title","path" } if(nargs > 1){ const char *pathc = lua_tostring(L,-1);//"title","path" lua_pop(L,1);//"title" path = (io::path::char_type*)pathc; } if(nargs > 0){ const char *titlec = lua_tostring(L,-1); lua_pop(L,1);// size_t titlecslen = strlen(titlec); title = (wchar_t*)malloc(sizeof(wchar_t) * (titlecslen + 1)); mbstowcs(title,titlec,titlecslen); title[titlecslen] = L'\0'; } IGUIEnvironment *env = device->getGUIEnvironment(); IGUIFileOpenDialog *but = env->addFileOpenDialog(title,modal,parent,-1,false,path); //printf("Added file open dialog\n"); lua_newtable(L);//{} lua_pushlightuserdata(L,but);//{},ud_iguibutton lua_setfield(L,-2,"guielement");//{guielement} luaL_getmetatable(L,"gui.iguifileopendialog");//{guielement},{m_iguibutton} lua_setmetatable(L,-2);//{guielement} //printf("Created lua representation\n"); setelementcallback(L,EGET_DIRECTORY_SELECTED,"onDirectory");// setelementcallback(L,EGET_FILE_SELECTED,"onFileSelected"); setelementcallback(L,EGET_FILE_CHOOSE_DIALOG_CANCELLED,"onCanceled"); //printf("Finished registering callback\n"); free(title); free(path); return 1; } static const luaL_reg iguifileopendialog_f[] = { {"new", newfileopendialog}, {0,0}, }; static const luaL_reg iguifileopendialog_m[] = { {0,0}, }; void iguidialog_register(lua_State* L){ tL = L; luaL_newmetatable(L, "gui.iguifileopendialog");//{m_iguibutton} lua_newtable(L);//{m_iguibutton},{} luaL_register(L,NULL,iguielement_m); luaL_register(L,NULL,iguifileopendialog_m);//{m_iguibutton},{} lua_setfield(L,-2,"__index");//{m_iguibutton} lua_pop(L,1); lua_getglobal(L,"gui"); lua_pushcfunction(L,newfileopendialog); lua_setfield(L,-2,"newfileopendialog"); lua_pop(L,1); }