/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set et sw=2 ts=2: */ /*************************************************************************** * luawidget.cc * * Tue Aug 3 10:17:02 CEST 2010 * Copyright 2010 Bent Bisballe Nyeng * deva@aasimon.org ****************************************************************************/ /* * This file is part of Pracro. * * Pracro is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Pracro is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Pracro; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #include "luawidget.h" #include "widgets.h" #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)); 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; return 1; } void register_widgets(lua_State *L) { register_widget(L); register_checkbox(L); register_combobox(L); register_lineedit(L); }