From 92940a587d3db28f95a7e2ddf72cbbe7f110e107 Mon Sep 17 00:00:00 2001 From: Alexander Pickering Date: Fri, 31 Aug 2018 21:44:51 -0400 Subject: Added spin box gui element --- src/client/lua_api/gui/iguispinbox.cpp | 110 +++++++++++++++++++++++++++++++++ src/client/lua_api/gui/iguispinbox.hpp | 12 ++++ src/client/lua_api/load_gui.cpp | 2 + 3 files changed, 124 insertions(+) create mode 100644 src/client/lua_api/gui/iguispinbox.cpp create mode 100644 src/client/lua_api/gui/iguispinbox.hpp (limited to 'src/client') diff --git a/src/client/lua_api/gui/iguispinbox.cpp b/src/client/lua_api/gui/iguispinbox.cpp new file mode 100644 index 0000000..0cea67e --- /dev/null +++ b/src/client/lua_api/gui/iguispinbox.cpp @@ -0,0 +1,110 @@ +#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 newspinbox() +Creates a new spinbox +@tparam dimensions rect 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 parent (iguielement | nil) parent The parent element of the button. +@tparam default_text (string | nil) default_text The default text to have in the button +@treturn iguibutton The button element +*/ +//gui.newspinbox({{sx,sy},{ex,ey}}[,"text"][,parent][,border]) +static int newiguispinbox(lua_State* L){ + printf("Createing gui spinbox!\n"); + int nargs = lua_gettop(L); + printf("Nargs was %d\n",nargs); + + IGUIElement* parent = NULL; + const char *label_c = ""; + int border = 1; + if(nargs > 3){ + border = lua_toboolean(L,-1); + lua_pop(L,1); + } + if(nargs > 2){ + lua_getfield(L,-1,"guielement"); + parent = (IGUIElement*)lua_touserdata(L,-1); + lua_pop(L,2);//{{sx,sy},{ex,ey}},"text" + } + if(nargs > 1){ + label_c = lua_tostring(L,-1); + lua_pop(L,1); + } + + size_t labellen = strlen(label_c); + wchar_t label_w[labellen + 1]; //+1 for null + mbstowcs(label_w,label_c,labellen); + label_w[labellen] = L'\0'; + //const wchar_t* label_w = irr::core::stringw(label_c).c_str();//{{sx,sy},{ex,ey}},"text" + //lua_pop(L,1);//{{sx,sy},{ex,ey}} + printf("Created title\n"); + long sx,sy,ex,ey; + poprecti(L,&sx,&sy,&ex,&ey);// + + printf("Got coords\n"); + rect dim = rect(sx,sy,ex,ey); + IGUIEnvironment* env = device->getGUIEnvironment(); + IGUISpinBox* but = env->addSpinBox(label_w,dim,border,parent,-1); + + printf("Added spinbox\n"); + lua_newtable(L);//{} + lua_pushlightuserdata(L,but);//{},ud_iguibutton + lua_setfield(L,-2,"guielement");//{guielement} + luaL_getmetatable(L,"gui.iguispinbox");//{guielement},{m_iguibutton} + lua_setmetatable(L,-2);//{guielement} + + printf("Created lua representation\n"); + setelementcallback(L,EGET_SPINBOX_CHANGED,"onChanged");// + printf("Finished registering callback\n"); + + return 1; +} + +static const luaL_reg iguispinbox_f[] = { + {"new", newiguispinbox}, + {0,0}, +}; + +static const luaL_reg iguispinbox_m[] = { + {0,0}, +}; + +void iguispinbox_register(lua_State* L){ + tL = L; + + luaL_newmetatable(L, "gui.iguispinbox");//{m_iguibutton} + lua_newtable(L);//{m_iguibutton},{} + luaL_register(L,NULL,iguielement_m); + luaL_register(L,NULL,iguispinbox_m);//{m_iguibutton},{} + lua_setfield(L,-2,"__index");//{m_iguibutton} + + lua_pop(L,1); + + lua_getglobal(L,"gui"); + lua_pushcfunction(L,newiguispinbox); + lua_setfield(L,-2,"newspinbox"); + + lua_pop(L,1); +} diff --git a/src/client/lua_api/gui/iguispinbox.hpp b/src/client/lua_api/gui/iguispinbox.hpp new file mode 100644 index 0000000..da4efea --- /dev/null +++ b/src/client/lua_api/gui/iguispinbox.hpp @@ -0,0 +1,12 @@ + +#include +#include +#include +extern "C" { + #include + #include + #include +} +#include + +void iguispinbox_register(lua_State* L); diff --git a/src/client/lua_api/load_gui.cpp b/src/client/lua_api/load_gui.cpp index f62fb14..c5d5dd1 100644 --- a/src/client/lua_api/load_gui.cpp +++ b/src/client/lua_api/load_gui.cpp @@ -22,6 +22,7 @@ extern "C" { #include "gui/iguieditbox.hpp" #include "gui/iguicolorselector.hpp" #include "gui/iguifiledialog.hpp" +#include "gui/iguispinbox.hpp" #include "../callbackhandeler.hpp" #include "guiparts.hpp" @@ -66,6 +67,7 @@ void load_guifuncs(lua_State* L){ iguibutton_register(L); iguicolorselector_register(L); iguidialog_register(L); + iguispinbox_register(L); iguieditbox_register(L); -- cgit v1.2.3-70-g09d2