diff options
Diffstat (limited to 'client/luawidget.cc')
-rw-r--r-- | client/luawidget.cc | 391 |
1 files changed, 7 insertions, 384 deletions
diff --git a/client/luawidget.cc b/client/luawidget.cc index 944120d..2095a64 100644 --- a/client/luawidget.cc +++ b/client/luawidget.cc @@ -31,13 +31,12 @@ #include "debug.h" -#define LUA_SRC "lua" - /** ** Copied from lauxlib.c, but modified return NULL upon error instead of ** casting a lua error. **/ -static void *luaL_isudata (lua_State *L, int ud, const char *tname) { +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? */ @@ -52,355 +51,6 @@ static void *luaL_isudata (lua_State *L, int ud, const char *tname) { return NULL; /* to avoid warnings */ } -#define luaL_checkbool(L, i) \ - (lua_isboolean(L,i) ? lua_toboolean(L,i) : luaL_checkint(L,i)) - -typedef struct wdg_userdata { - Widget *widget; -} wdg_userdata; - -static int wdg_name(lua_State *L) -{ - wdg_userdata *wdgu; - - wdgu = (wdg_userdata *)luaL_isudata(L, 1, "Widget"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "CheckBox"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "ComboBox"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "LineEdit"); - luaL_argcheck(L, wdgu, 1, "widget expected"); - - lua_pushstring(L, wdgu->widget->name().toStdString().c_str()); - - return 1; -} - -static int wdg_type(lua_State *L) -{ - wdg_userdata *wdgu; - - wdgu = (wdg_userdata *)luaL_isudata(L, 1, "Widget"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "CheckBox"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "ComboBox"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "LineEdit"); - luaL_argcheck(L, wdgu, 1, "widget expected"); - - // return error code - lua_pushstring(L, wdgu->widget->type().toStdString().c_str()); - - return 1; -} - -static int wdg_value(lua_State *L) -{ - wdg_userdata *wdgu; - - wdgu = (wdg_userdata *)luaL_isudata(L, 1, "Widget"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "CheckBox"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "ComboBox"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "LineEdit"); - luaL_argcheck(L, wdgu, 1, "widget expected"); - - lua_pushstring(L, wdgu->widget->value().toStdString().c_str()); - - return 1; -} - -static int wdg_set_value(lua_State *L) -{ - wdg_userdata *wdgu; - - wdgu = (wdg_userdata *)luaL_isudata(L, 1, "Widget"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "CheckBox"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "ComboBox"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "LineEdit"); - luaL_argcheck(L, wdgu, 1, "widget expected"); - - const char *val = luaL_checkstring(L, 2); - - wdgu->widget->setValue(val, LUA_SRC); - - return 0; -} - -static int wdg_enabled(lua_State *L) -{ - wdg_userdata *wdgu; - - wdgu = (wdg_userdata *)luaL_isudata(L, 1, "Widget"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "CheckBox"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "ComboBox"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "LineEdit"); - luaL_argcheck(L, wdgu, 1, "widget expected"); - - lua_pushboolean(L, wdgu->widget->enabled()); - - return 1; -} - -static int wdg_set_enabled(lua_State *L) -{ - wdg_userdata *wdgu; - - wdgu = (wdg_userdata *)luaL_isudata(L, 1, "Widget"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "CheckBox"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "ComboBox"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "LineEdit"); - luaL_argcheck(L, wdgu, 1, "widget expected"); - - bool val = luaL_checkbool(L, 2); - - wdgu->widget->setEnabled(val); - - return 0; -} - -static int wdg_visible(lua_State *L) -{ - wdg_userdata *wdgu; - - wdgu = (wdg_userdata *)luaL_isudata(L, 1, "Widget"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "CheckBox"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "ComboBox"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "LineEdit"); - luaL_argcheck(L, wdgu, 1, "widget expected"); - - lua_pushboolean(L, wdgu->widget->visible()); - - return 1; -} - -static int wdg_set_visible(lua_State *L) -{ - wdg_userdata *wdgu; - - wdgu = (wdg_userdata *)luaL_isudata(L, 1, "Widget"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "CheckBox"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "ComboBox"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "LineEdit"); - luaL_argcheck(L, wdgu, 1, "widget expected"); - - bool val = luaL_checkbool(L, 2); - - wdgu->widget->setVisible(val); - - return 0; -} - -static int wdg_valid(lua_State *L) -{ - wdg_userdata *wdgu; - - wdgu = (wdg_userdata *)luaL_isudata(L, 1, "Widget"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "CheckBox"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "ComboBox"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "LineEdit"); - luaL_argcheck(L, wdgu, 1, "widget expected"); - - lua_pushboolean(L, wdgu->widget->valid()); - - return 1; -} - -static int wdg_set_valid(lua_State *L) -{ - wdg_userdata *wdgu; - - wdgu = (wdg_userdata *)luaL_isudata(L, 1, "Widget"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "CheckBox"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "ComboBox"); - if(!wdgu) wdgu = (wdg_userdata *)luaL_isudata(L, 1, "LineEdit"); - luaL_argcheck(L, wdgu, 1, "widget expected"); - - bool val = luaL_checkbool(L, 2); - - wdgu->widget->setValid(val); - - return 0; -} - -#define WDG_METHS \ - {"name", wdg_name},\ - {"type", wdg_type},\ - {"value", wdg_value},\ - {"setValue", wdg_set_value},\ - {"enabled", wdg_enabled},\ - {"setEnabled", wdg_set_enabled},\ - {"visible", wdg_visible},\ - {"setVisible", wdg_set_visible},\ - {"valid", wdg_valid},\ - {"setValid", wdg_set_valid} - -static int chk_checked(lua_State *L) -{ - wdg_userdata *wdgu; - - wdgu = (wdg_userdata *)luaL_isudata(L, 1, "CheckBox"); - luaL_argcheck(L, wdgu, 1, "checkbox expected"); - - CheckBox *chk = (CheckBox*)wdgu->widget; - lua_pushboolean(L, chk->checked()); - - return 1; -} - -static int chk_set_checked(lua_State *L) -{ - wdg_userdata *wdgu; - - wdgu = (wdg_userdata *)luaL_isudata(L, 1, "CheckBox"); - luaL_argcheck(L, wdgu, 1, "checkbox expected"); - - bool val = luaL_checkbool(L, 2); - - CheckBox *chk = (CheckBox*)wdgu->widget; - chk->setChecked(val); - - return 0; -} - -#define CHKBOX_METHS \ - {"checked", chk_checked},\ - {"setChecked", chk_set_checked} - -static int cmb_clear(lua_State *L) -{ - wdg_userdata *wdgu; - - wdgu = (wdg_userdata *)luaL_isudata(L, 1, "ComboBox"); - luaL_argcheck(L, wdgu, 1, "combobox expected"); - - ComboBox *cmb = (ComboBox*)wdgu->widget; - cmb->clear(); - - return 0; -} - -static int cmb_add_item(lua_State *L) -{ - wdg_userdata *wdgu; - - wdgu = (wdg_userdata *)luaL_isudata(L, 1, "ComboBox"); - luaL_argcheck(L, wdgu, 1, "combobox expected"); - - QString val = luaL_checkstring(L, 2); - - ComboBox *cmb = (ComboBox*)wdgu->widget; - cmb->addItem(val); - - return 0; -} - -static int cmb_le_value(lua_State *L) -{ - wdg_userdata *wdgu; - - wdgu = (wdg_userdata *)luaL_isudata(L, 1, "ComboBox"); - luaL_argcheck(L, wdgu, 1, "combobox expected"); - - ComboBox *cmb = (ComboBox*)wdgu->widget; - lua_pushstring(L, cmb->lineEditValue().toStdString().c_str()); - - return 1; -} - -static int cmb_le_set_value(lua_State *L) -{ - wdg_userdata *wdgu; - - wdgu = (wdg_userdata *)luaL_isudata(L, 1, "ComboBox"); - luaL_argcheck(L, wdgu, 1, "combobox expected"); - - const char *val = luaL_checkstring(L, 2); - - ComboBox *cmb = (ComboBox*)wdgu->widget; - cmb->setLineEditValue(val); - - return 0; -} - -#define CMBBOX_METHS \ - {"clear", cmb_clear},\ - {"addItem", cmb_add_item},\ - {"lineEditValue", cmb_le_value},\ - {"setLineEditValue", cmb_le_set_value} - -static int lin_clear_suggestions(lua_State *L) -{ - wdg_userdata *wdgu; - - wdgu = (wdg_userdata *)luaL_isudata(L, 1, "LineEdit"); - luaL_argcheck(L, wdgu, 1, "lineedit expected"); - - LineEdit *led = (LineEdit*)wdgu->widget; - led->clearSuggestions(); - - return 0; -} - -static int lin_show_suggestions(lua_State *L) -{ - wdg_userdata *wdgu; - - wdgu = (wdg_userdata *)luaL_isudata(L, 1, "LineEdit"); - luaL_argcheck(L, wdgu, 1, "lineedit expected"); - - LineEdit *led = (LineEdit*)wdgu->widget; - led->showSuggestions(); - - return 0; -} - -static int lin_is_suggested(lua_State *L) -{ - wdg_userdata *wdgu; - - wdgu = (wdg_userdata *)luaL_isudata(L, 1, "LineEdit"); - luaL_argcheck(L, wdgu, 1, "lineedit expected"); - - const char *val = luaL_checkstring(L, 2); - - LineEdit *led = (LineEdit*)wdgu->widget; - - lua_pushboolean(L, led->isSuggested(val)); - - return 1; -} - -static int lin_add_suggestion(lua_State *L) -{ - wdg_userdata *wdgu; - - wdgu = (wdg_userdata *)luaL_isudata(L, 1, "LineEdit"); - luaL_argcheck(L, wdgu, 1, "lineedit expected"); - - const char *val = luaL_checkstring(L, 2); - - LineEdit *led = (LineEdit*)wdgu->widget; - led->addSuggestion(val); - - return 0; -} - - -#define LINEDT_METHS \ - {"clearSuggestions", lin_clear_suggestions},\ - {"showSuggestions", lin_show_suggestions},\ - {"isSuggested", lin_is_suggested},\ - {"addSuggestion", lin_add_suggestion} - - -static const struct luaL_Reg wdg_meths[] = - { WDG_METHS, {NULL, NULL} }; - -static const struct luaL_Reg chkbox_meths[] = - { WDG_METHS, CHKBOX_METHS, {NULL, NULL} }; - -static const struct luaL_Reg cmbbox_meths[] = - { WDG_METHS, CMBBOX_METHS, {NULL, NULL} }; - -static const struct luaL_Reg linedt_meths[] = - { WDG_METHS, LINEDT_METHS, {NULL, NULL} }; - int wdg_make_widget(lua_State *L, Widget *widget) { wdg_userdata *wdgu; @@ -418,38 +68,11 @@ int wdg_make_widget(lua_State *L, Widget *widget) return 1; } -void register_widget(lua_State *L) +void register_widgets(lua_State *L) { - luaL_newmetatable(L, "Widget"); - lua_pushliteral(L, "__index"); - lua_pushvalue(L, -2); - lua_rawset(L, -3); - luaL_register(L, NULL, wdg_meths); - - // lua_pop(L, 2); - - luaL_newmetatable(L, "CheckBox"); - lua_pushliteral(L, "__index"); - lua_pushvalue(L, -2); - lua_rawset(L, -3); - luaL_register(L, NULL, chkbox_meths); - - // lua_pop(L, 2); - - luaL_newmetatable(L, "ComboBox"); - lua_pushliteral(L, "__index"); - lua_pushvalue(L, -2); - lua_rawset(L, -3); - luaL_register(L, NULL, cmbbox_meths); - - // lua_pop(L, 2); - - luaL_newmetatable(L, "LineEdit"); - lua_pushliteral(L, "__index"); - lua_pushvalue(L, -2); - lua_rawset(L, -3); - luaL_register(L, NULL, linedt_meths); - - // lua_pop(L, 2); + register_widget(L); + register_checkbox(L); + register_combobox(L); + register_lineedit(L); } |