From 165afd0d36abc8729b28e303077ed285b577caea Mon Sep 17 00:00:00 2001 From: deva Date: Fri, 18 Mar 2011 07:18:56 +0000 Subject: Moved lua methods into their respective Qt widget implementation files. --- client/widgets/button.cc | 9 +-- client/widgets/checkbox.cc | 29 ++++++++ client/widgets/checkbox.h | 21 ++++++ client/widgets/combobox.cc | 57 +++++++++++++++ client/widgets/combobox.h | 23 ++++++ client/widgets/lineedit.cc | 59 +++++++++++++++ client/widgets/lineedit.h | 23 ++++++ client/widgets/widget.cc | 175 +++++++++++++++++++++++++++++++++++++++++++-- client/widgets/widget.h | 35 +++++++++ 9 files changed, 421 insertions(+), 10 deletions(-) (limited to 'client/widgets') 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 #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 @@ -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; imacroChanged(); + 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__*/ -- cgit v1.2.3