From fc3d1473f16d1d06f8ffd97cb192ba57e34380d7 Mon Sep 17 00:00:00 2001 From: Alexander Pickering Date: Fri, 31 Aug 2018 21:23:00 -0400 Subject: Added file open dialog Added a file open dialog to the gui library --- src/client/lua_api/gui/iguifiledialog.cpp | 120 ++++++++++++++++++++++++++++++ src/client/lua_api/gui/iguifiledialog.hpp | 12 +++ 2 files changed, 132 insertions(+) create mode 100644 src/client/lua_api/gui/iguifiledialog.cpp create mode 100644 src/client/lua_api/gui/iguifiledialog.hpp (limited to 'src/client/lua_api/gui') diff --git a/src/client/lua_api/gui/iguifiledialog.cpp b/src/client/lua_api/gui/iguifiledialog.cpp new file mode 100644 index 0000000..c277ce4 --- /dev/null +++ b/src/client/lua_api/gui/iguifiledialog.cpp @@ -0,0 +1,120 @@ +#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; + //size_t pathcslen = strlen(pathc); + //path = (wchar_t*)malloc(sizeof(wchar_t) * (pathcslen + 1));// +1 for null + //mbstowcs(path,pathc,pathcslen); + //path[pathcslen] = L'\0'; + } + 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); +} diff --git a/src/client/lua_api/gui/iguifiledialog.hpp b/src/client/lua_api/gui/iguifiledialog.hpp new file mode 100644 index 0000000..85b4b7d --- /dev/null +++ b/src/client/lua_api/gui/iguifiledialog.hpp @@ -0,0 +1,12 @@ + +#include +#include +#include +extern "C" { + #include + #include + #include +} +#include + +void iguidialog_register(lua_State* L); -- cgit v1.2.3-70-g09d2