diff options
-rw-r--r-- | client/lua.cc | 2 | ||||
-rw-r--r-- | client/luawidget.cc | 391 | ||||
-rw-r--r-- | client/luawidget.h | 13 | ||||
-rw-r--r-- | client/widgets/button.cc | 9 | ||||
-rw-r--r-- | client/widgets/checkbox.cc | 29 | ||||
-rw-r--r-- | client/widgets/checkbox.h | 21 | ||||
-rw-r--r-- | client/widgets/combobox.cc | 57 | ||||
-rw-r--r-- | client/widgets/combobox.h | 23 | ||||
-rw-r--r-- | client/widgets/lineedit.cc | 59 | ||||
-rw-r--r-- | client/widgets/lineedit.h | 23 | ||||
-rw-r--r-- | client/widgets/widget.cc | 175 | ||||
-rw-r--r-- | client/widgets/widget.h | 35 |
12 files changed, 441 insertions, 396 deletions
diff --git a/client/lua.cc b/client/lua.cc index 8c4fa55..5d6b194 100644 --- a/client/lua.cc +++ b/client/lua.cc @@ -233,7 +233,7 @@ void LUA::clear() lua_register(L, "user", get_user); lua_register(L, "patientid", get_patientid); - register_widget(L); + register_widgets(L); register_db(L); } 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); } diff --git a/client/luawidget.h b/client/luawidget.h index b110598..e6e0be3 100644 --- a/client/luawidget.h +++ b/client/luawidget.h @@ -33,7 +33,18 @@ #include "widgets/widget.h" -void register_widget(lua_State *L); +#define LUA_SRC "lua" + +void *luaL_isudata (lua_State *L, int ud, const char *tname); + +#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; + +void register_widgets(lua_State *L); int wdg_make_widget(lua_State *L, Widget *widget); #endif/*__PRACRO_LUAWIDGET_H__*/ diff --git a/client/widgets/button.cc b/client/widgets/button.cc index 42c4371..6ef6ac8 100644 --- a/client/widgets/button.cc +++ b/client/widgets/button.cc @@ -56,10 +56,11 @@ Button::Button(QDomNode &node, MacroWindow *macrowindow) } } - connect(this, SIGNAL(act_commit()), macrowindow, SLOT(commit())); - connect(this, SIGNAL(act_cancel()), macrowindow, SLOT(cancel())); - connect(macrowindow, SIGNAL(macroHasChanged()), this, SLOT(do_enable())); - + if(macrowindow) { + connect(this, SIGNAL(act_commit()), macrowindow, SLOT(commit())); + connect(this, SIGNAL(act_cancel()), macrowindow, SLOT(cancel())); + connect(macrowindow, SIGNAL(macroHasChanged()), this, SLOT(do_enable())); + } } Button::~Button() diff --git a/client/widgets/checkbox.cc b/client/widgets/checkbox.cc index 5acf694..9083990 100644 --- a/client/widgets/checkbox.cc +++ b/client/widgets/checkbox.cc @@ -29,6 +29,7 @@ #include <QCheckBox> #include "common.h" +#include "luawidget.h" CheckBox::CheckBox(QDomNode &node, MacroWindow *macrowindow) : Widget(node, macrowindow) @@ -126,3 +127,31 @@ void CheckBox::setWdgValid(bool valid) checkbox->setPalette(palette); } + +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; +} + +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; +} diff --git a/client/widgets/checkbox.h b/client/widgets/checkbox.h index 7cf2651..0930d50 100644 --- a/client/widgets/checkbox.h +++ b/client/widgets/checkbox.h @@ -58,4 +58,25 @@ private: QCheckBox *checkbox; }; +int chk_checked(lua_State *L); +int chk_set_checked(lua_State *L); + +#define CHKBOX_METHS \ + {"checked", chk_checked},\ + {"setChecked", chk_set_checked} + +const struct luaL_Reg chkbox_meths[] = + { WDG_METHS, CHKBOX_METHS, {NULL, NULL} }; + +inline void register_checkbox(lua_State *L) +{ + register_widget(L); + + luaL_newmetatable(L, "CheckBox"); + lua_pushliteral(L, "__index"); + lua_pushvalue(L, -2); + lua_rawset(L, -3); + luaL_register(L, NULL, chkbox_meths); +} + #endif/*__PRACRO_CHECKBOX_H__*/ diff --git a/client/widgets/combobox.cc b/client/widgets/combobox.cc index c06e145..768f035 100644 --- a/client/widgets/combobox.cc +++ b/client/widgets/combobox.cc @@ -40,6 +40,7 @@ #include "common.h" #include "debug.h" +#include "luawidget.h" // Enable this to make the combobox drawn in windows style. // This will make its background red even when not expanded. @@ -267,3 +268,59 @@ void ComboBox::setLineEditValue(QString value) } ignoreChangeEvents = false; } + +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; +} + +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; +} + +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; +} + +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; +} diff --git a/client/widgets/combobox.h b/client/widgets/combobox.h index ec8c9ba..657d458 100644 --- a/client/widgets/combobox.h +++ b/client/widgets/combobox.h @@ -77,4 +77,27 @@ private: bool ignoreChangeEvents; }; +int cmb_clear(lua_State *L); +int cmb_add_item(lua_State *L); +int cmb_le_value(lua_State *L); +int cmb_le_set_value(lua_State *L); + +#define CMBBOX_METHS \ + {"clear", cmb_clear},\ + {"addItem", cmb_add_item},\ + {"lineEditValue", cmb_le_value},\ + {"setLineEditValue", cmb_le_set_value} + +const struct luaL_Reg cmbbox_meths[] = + { WDG_METHS, CMBBOX_METHS, {NULL, NULL} }; + +inline void register_combobox(lua_State *L) +{ + luaL_newmetatable(L, "ComboBox"); + lua_pushliteral(L, "__index"); + lua_pushvalue(L, -2); + lua_rawset(L, -3); + luaL_register(L, NULL, cmbbox_meths); +} + #endif/*__PRACRO_COMBOBOX_H__*/ diff --git a/client/widgets/lineedit.cc b/client/widgets/lineedit.cc index d6aa619..e50f9cd 100644 --- a/client/widgets/lineedit.cc +++ b/client/widgets/lineedit.cc @@ -37,6 +37,7 @@ #include "common.h" #include "debug.h" +#include "luawidget.h" LineEdit::LineEdit(QDomNode &node, MacroWindow *macrowindow) : Widget(node, macrowindow) @@ -173,3 +174,61 @@ void LineEdit::showSuggestions() QCompleter *comp = lineedit->completer(); comp->complete(); } + + +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; +} + +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; +} + +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; +} + +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; +} diff --git a/client/widgets/lineedit.h b/client/widgets/lineedit.h index 8159aad..6ddb9af 100644 --- a/client/widgets/lineedit.h +++ b/client/widgets/lineedit.h @@ -64,4 +64,27 @@ private: QStringList suggestions; }; +int lin_clear_suggestions(lua_State *L); +int lin_show_suggestions(lua_State *L); +int lin_is_suggested(lua_State *L); +int lin_add_suggestion(lua_State *L); + +#define LINEDT_METHS \ + {"clearSuggestions", lin_clear_suggestions}, \ + {"showSuggestions", lin_show_suggestions},\ + {"isSuggested", lin_is_suggested},\ + {"addSuggestion", lin_add_suggestion} + +const struct luaL_Reg linedt_meths[] = + { WDG_METHS, LINEDT_METHS, {NULL, NULL} }; + +inline void register_lineedit(lua_State *L) +{ + luaL_newmetatable(L, "LineEdit"); + lua_pushliteral(L, "__index"); + lua_pushvalue(L, -2); + lua_rawset(L, -3); + luaL_register(L, NULL, linedt_meths); +} + #endif/*__PRACRO_LINEEDIT_H__*/ diff --git a/client/widgets/widget.cc b/client/widgets/widget.cc index 085ac21..33e4309 100644 --- a/client/widgets/widget.cc +++ b/client/widgets/widget.cc @@ -27,7 +27,7 @@ #include "widget.h" #include "macrowindow.h" -#include "lua.h" +#include "luawidget.h" #include "../widgets.h" #include <QLayout> @@ -44,7 +44,11 @@ Widget::Widget(QDomNode &node, MacroWindow *macrowindow) QDomElement elem = node.toElement(); this->macrowindow = macrowindow; - this->lua = macrowindow->lua; + if(macrowindow) { + this->lua = macrowindow->lua; + } else { + this->lua = NULL; + } widget_type = elem.tagName(); @@ -154,7 +158,7 @@ void Widget::runEventOnChange(bool deep) //if(preValid() == false) setWdgValid(false); setWdgValid(valid()); if(hasOnChangeEvent) - lua->runScript(onChangeEventScript, this, "onChange"); + if(lua) lua->runScript(onChangeEventScript, this, "onChange"); } if(!deep) return; @@ -172,7 +176,7 @@ void Widget::runEventOnInit(bool deep) //if(preValid() == false) setWdgValid(false); setWdgValid(valid()); if(hasOnInitEvent) - lua->runScript(onInitEventScript, this, "onInit"); + if(lua) lua->runScript(onInitEventScript, this, "onInit"); } if(!deep) return; @@ -299,7 +303,7 @@ void Widget::addChild(Widget *widget) void Widget::addChildren(QDomNode &node, QLayout *layout) { QDomNodeList children = node.childNodes(); - for (int i=0; i<children.count();i++) { + for(int i = 0; i < children.count(); i++) { QDomNode child = children.at(i); createWidget(child, layout); } @@ -324,7 +328,7 @@ void Widget::createWidget(QDomNode &xml_node, QLayout *layout) // TODO: Why do we do this?? if(xml_elem.hasAttribute("prefilled") && xml_elem.attribute("prefilled") != "pracro") { - macrowindow->macroChanged(); + if(macrowindow) macrowindow->macroChanged(); } Widget *widget = NULL; @@ -416,3 +420,162 @@ void Widget::createWidget(QDomNode &xml_node, QLayout *layout) if(widget && widget->qwidget()) widget->qwidget()->show(); } + +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; +} + +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; +} + +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; +} + +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; +} + +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; +} + +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; +} + +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; +} + +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; +} + +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; +} + +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; +} diff --git a/client/widgets/widget.h b/client/widgets/widget.h index 3d06ef3..bb7ce6c 100644 --- a/client/widgets/widget.h +++ b/client/widgets/widget.h @@ -124,4 +124,39 @@ protected: QString onInitEventScript; }; +int wdg_name(lua_State *L); +int wdg_type(lua_State *L); +int wdg_value(lua_State *L); +int wdg_set_value(lua_State *L); +int wdg_enabled(lua_State *L); +int wdg_set_enabled(lua_State *L); +int wdg_visible(lua_State *L); +int wdg_set_visible(lua_State *L); +int wdg_valid(lua_State *L); +int wdg_set_valid(lua_State *L); + +#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} + +const struct luaL_Reg wdg_meths[] = + { WDG_METHS, {NULL, NULL} }; + +inline void register_widget(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); +} + #endif/*__PRACRO_WIDGET_H__*/ |