aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client/lua_api/gui/iguispinbox.cpp110
-rw-r--r--src/client/lua_api/gui/iguispinbox.hpp12
-rw-r--r--src/client/lua_api/load_gui.cpp2
3 files changed, 124 insertions, 0 deletions
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 <stdio.h>
+#include <stdlib.h>
+extern "C" {
+ #include <lua.h>
+ #include <lauxlib.h>
+ #include <lualib.h>
+}
+#include <irrlicht.h>
+#include "../guiparts.hpp"
+#include "iguielement.hpp"
+#include "client/callbackhandeler.hpp"
+#include <shared/util/hashmap.hpp>
+#include <shared/lua_api/common.hpp>
+
+/***
+@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<s32> dim = rect<s32>(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 <stdio.h>
+#include <stdlib.h>
+#include <vector>
+extern "C" {
+ #include <lua.h>
+ #include <lauxlib.h>
+ #include <lualib.h>
+}
+#include <irrlicht.h>
+
+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);