summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordeva <deva>2011-03-14 11:38:48 +0000
committerdeva <deva>2011-03-14 11:38:48 +0000
commit97d32901efc2b6cbec3ab41f78fa409d2ce78804 (patch)
tree9cfae8667285d7a271ad928514b203f299abb2ae
parent1ad461c0bb7d687fb604d40456a0aea336c9e6bd (diff)
Some more changes to LineEdit lua methods to make medicine macro (db looked up suggestions to lineedit) work as expected.
-rw-r--r--client/luawidget.cc89
-rw-r--r--client/widgets/lineedit.cc40
-rw-r--r--client/widgets/lineedit.h8
3 files changed, 136 insertions, 1 deletions
diff --git a/client/luawidget.cc b/client/luawidget.cc
index 86dc2bb..944120d 100644
--- a/client/luawidget.cc
+++ b/client/luawidget.cc
@@ -66,6 +66,7 @@ static int wdg_name(lua_State *L)
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());
@@ -80,6 +81,7 @@ static int wdg_type(lua_State *L)
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
@@ -95,6 +97,7 @@ static int wdg_value(lua_State *L)
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());
@@ -109,6 +112,7 @@ static int wdg_set_value(lua_State *L)
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);
@@ -125,6 +129,7 @@ static int wdg_enabled(lua_State *L)
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());
@@ -139,6 +144,7 @@ static int wdg_set_enabled(lua_State *L)
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);
@@ -155,6 +161,7 @@ static int wdg_visible(lua_State *L)
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());
@@ -169,6 +176,7 @@ static int wdg_set_visible(lua_State *L)
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);
@@ -185,6 +193,7 @@ static int wdg_valid(lua_State *L)
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());
@@ -199,6 +208,7 @@ static int wdg_set_valid(lua_State *L)
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);
@@ -288,7 +298,7 @@ static int cmb_le_value(lua_State *L)
luaL_argcheck(L, wdgu, 1, "combobox expected");
ComboBox *cmb = (ComboBox*)wdgu->widget;
- lua_pushstring(L, cmb->lineEditValue().toStdString().c_str());
+ lua_pushstring(L, cmb->lineEditValue().toStdString().c_str());
return 1;
}
@@ -314,6 +324,71 @@ static int cmb_le_set_value(lua_State *L)
{"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} };
@@ -323,6 +398,9 @@ static const struct luaL_Reg chkbox_meths[] =
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;
@@ -330,6 +408,7 @@ int wdg_make_widget(lua_State *L, Widget *widget)
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);
@@ -364,5 +443,13 @@ void register_widget(lua_State *L)
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);
}
diff --git a/client/widgets/lineedit.cc b/client/widgets/lineedit.cc
index 97fb92b..d6aa619 100644
--- a/client/widgets/lineedit.cc
+++ b/client/widgets/lineedit.cc
@@ -32,6 +32,9 @@
#include <QEvent>
#include <QKeyEvent>
+#include <QCompleter>
+#include <QStringListModel>
+
#include "common.h"
#include "debug.h"
@@ -62,6 +65,13 @@ LineEdit::LineEdit(QDomNode &node, MacroWindow *macrowindow)
connect(lineedit, SIGNAL(textEdited(QString)), this, SLOT(user_changed()));
lineedit->installEventFilter(this); // Detect keyboard input.
+
+ QCompleter *comp = new QCompleter();
+ comp->setCaseSensitivity(Qt::CaseInsensitive);
+ QStringListModel *mdl = new QStringListModel();
+ comp->setModel(mdl);
+ // comp->popup()->setWindowOpacity(0.3);
+ lineedit->setCompleter(comp);
}
LineEdit::~LineEdit()
@@ -71,6 +81,7 @@ LineEdit::~LineEdit()
void LineEdit::changed()
{
+ // if(lineedit->completer()->popup()->isVisible()) return;
emit eventOnChange();
}
@@ -133,3 +144,32 @@ void LineEdit::setWdgValid(bool valid)
lineedit->setPalette(palette);
}
+
+void LineEdit::clearSuggestions()
+{
+ QCompleter *comp = lineedit->completer();
+ QStringListModel *mdl = (QStringListModel *)comp->model();
+ suggestions.clear();
+ mdl->setStringList(suggestions);
+}
+
+void LineEdit::addSuggestion(QString suggestion)
+{
+ suggestions << suggestion;
+ suggestions.sort();
+
+ QCompleter *comp = lineedit->completer();
+ QStringListModel *mdl = (QStringListModel *)comp->model();
+ mdl->setStringList(suggestions);
+}
+
+bool LineEdit::isSuggested(QString val)
+{
+ return suggestions.contains(val);
+}
+
+void LineEdit::showSuggestions()
+{
+ QCompleter *comp = lineedit->completer();
+ comp->complete();
+}
diff --git a/client/widgets/lineedit.h b/client/widgets/lineedit.h
index 90fac75..8159aad 100644
--- a/client/widgets/lineedit.h
+++ b/client/widgets/lineedit.h
@@ -27,6 +27,8 @@
#ifndef __PRACRO_LINEEDIT_H__
#define __PRACRO_LINEEDIT_H__
+#include <QStringList>
+
#include "widget.h"
class QLineEdit;
@@ -43,6 +45,11 @@ public:
void setWdgValid(bool valid);
+ void clearSuggestions();
+ void addSuggestion(QString suggestion);
+ bool isSuggested(QString value);
+ void showSuggestions();
+
public slots:
void changed();
void user_changed();
@@ -54,6 +61,7 @@ private:
bool eventFilter(QObject *, QEvent *event);
QLineEdit *lineedit;
+ QStringList suggestions;
};
#endif/*__PRACRO_LINEEDIT_H__*/