From 6389aabffe198ece92b58ae34a905902c7eefe7c Mon Sep 17 00:00:00 2001 From: deva Date: Tue, 28 Jun 2011 06:38:10 +0000 Subject: Complete rewrite of the way lua widget methods, 'inheritance' in particular, are handled. --- client/luawidget.cc | 32 +++++++------------------------- 1 file changed, 7 insertions(+), 25 deletions(-) (limited to 'client/luawidget.cc') diff --git a/client/luawidget.cc b/client/luawidget.cc index 2095a64..28ae488 100644 --- a/client/luawidget.cc +++ b/client/luawidget.cc @@ -31,36 +31,12 @@ #include "debug.h" -/** - ** Copied from lauxlib.c, but modified return NULL upon error instead of - ** casting a lua error. - **/ -void *luaL_isudata (lua_State *L, int ud, const char *tname) -{ - void *p = lua_touserdata(L, ud); - if (p != NULL) { /* value is a userdata? */ - if (lua_getmetatable(L, ud)) { /* does it have a metatable? */ - lua_getfield(L, LUA_REGISTRYINDEX, tname); /* get correct metatable */ - if (lua_rawequal(L, -1, -2)) { /* does it have the correct mt? */ - lua_pop(L, 2); /* remove both metatables */ - return p; - } - } - } - // luaL_typerror(L, ud, tname); /* else error */ - return NULL; /* to avoid warnings */ -} - int wdg_make_widget(lua_State *L, Widget *widget) { wdg_userdata *wdgu; wdgu = (wdg_userdata *)lua_newuserdata(L, sizeof(wdg_userdata)); + luaL_getmetatable(L, widget->luaclass().toStdString().c_str()); - if(widget->type() == "combobox") luaL_getmetatable(L, "ComboBox"); - else if(widget->type() == "checkbox") luaL_getmetatable(L, "CheckBox"); - else if(widget->type() == "lineedit") luaL_getmetatable(L, "LineEdit"); - else luaL_getmetatable(L, "Widget"); - lua_setmetatable(L, -2); wdgu->widget = widget; @@ -71,8 +47,14 @@ int wdg_make_widget(lua_State *L, Widget *widget) void register_widgets(lua_State *L) { register_widget(L); + register_checkbox(L); + register_checkgroupbox(L); + register_combobox(L); + register_altcombobox(L); + + register_listbox(L); register_lineedit(L); } -- cgit v1.2.3