summaryrefslogtreecommitdiff
path: root/client/widgets/combobox.cc
diff options
context:
space:
mode:
Diffstat (limited to 'client/widgets/combobox.cc')
-rw-r--r--client/widgets/combobox.cc83
1 files changed, 53 insertions, 30 deletions
diff --git a/client/widgets/combobox.cc b/client/widgets/combobox.cc
index 768f035..eed2d10 100644
--- a/client/widgets/combobox.cc
+++ b/client/widgets/combobox.cc
@@ -76,7 +76,7 @@ ComboBox::ComboBox(QDomNode &node, MacroWindow *macrowindow)
combobox->setInsertPolicy(QComboBox::InsertAlphabetically);
QDomNodeList children = node.childNodes();
- QStringList itemlist;
+ // QStringList itemlist;
for (int i=0; i<children.count();i++) {
QDomNode child = children.at(i);
@@ -131,23 +131,8 @@ ComboBox::ComboBox(QDomNode &node, MacroWindow *macrowindow)
case SEARCH:
combobox->setEditable(true);
- {
- QString rxs = "(";
- for(int i = 0; i < itemlist.size(); i++) {
- if(rxs != "(") rxs += "|";
- rxs += QRegExp::escape(itemlist.at(i));
- }
- rxs += ")";
- rx = QRegExp(rxs);
- rx.setCaseSensitivity(Qt::CaseInsensitive);
- }
- {
- QCompleter *completer = new QCompleter(itemlist, this);
- completer->setCaseSensitivity(Qt::CaseInsensitive);
- completer->setCompletionMode(QCompleter::PopupCompletion);
- combobox->setCompleter(completer);
- combobox->setValidator(new QRegExpValidator(rx, this));
- }
+
+ updateSearchList();
connect(combobox, SIGNAL(editTextChanged(QString)), this, SLOT(changed()));
break;
@@ -159,16 +144,41 @@ ComboBox::~ComboBox()
// delete combobox;
}
+void ComboBox::updateSearchList()
+{
+ {
+ QString rxs = "(";
+ for(int i = 0; i < itemlist.size(); i++) {
+ if(rxs != "(") rxs += "|";
+ rxs += QRegExp::escape(itemlist.at(i));
+ }
+ rxs += ")";
+ rx = QRegExp(rxs);
+ rx.setCaseSensitivity(Qt::CaseInsensitive);
+ }
+ {
+ QCompleter *completer = new QCompleter(itemlist, this);
+ completer->setCaseSensitivity(Qt::CaseInsensitive);
+ completer->setCompletionMode(QCompleter::PopupCompletion);
+ combobox->setCompleter(completer);
+ combobox->setValidator(new QRegExpValidator(rx, this));
+ }
+}
+
QString ComboBox::value()
{
QString value;
- int idx = combobox->currentIndex();
-
- if(idx != -1 && combobox->itemText(idx) == combobox->currentText())
- value = combobox->itemData(idx).toString();
+ int idx = combobox->findText(combobox->currentText());
+ /*
+ DEBUG(combobox, "idx => %d currentText => '%s'\n", idx,
+ combobox->currentText().toStdString().c_str());
+ */
+ if(idx != -1) value = combobox->itemData(idx).toString();
else value = combobox->currentText();
+ DEBUG(combobox, "value() => '%s'\n", value.toStdString().c_str());
+
return value;
}
@@ -243,13 +253,20 @@ void ComboBox::clear()
ignoreChangeEvents = false;
}
-void ComboBox::addItem(QString item)
+void ComboBox::addItem(QString item, QString value)
{
ignoreChangeEvents = true;
- combobox->addItem(item, item);
+ combobox->addItem(item, value);
+
if(combotype == EDIT) {
combobox->completer()->complete();
}
+
+ if(combotype == SEARCH) {
+ itemlist.push_back(item);
+ updateSearchList();
+ }
+
ignoreChangeEvents = false;
}
@@ -273,7 +290,7 @@ int cmb_clear(lua_State *L)
{
wdg_userdata *wdgu;
- wdgu = (wdg_userdata *)luaL_isudata(L, 1, "ComboBox");
+ wdgu = (wdg_userdata *)lua_touserdata(L, 1);
luaL_argcheck(L, wdgu, 1, "combobox expected");
ComboBox *cmb = (ComboBox*)wdgu->widget;
@@ -286,13 +303,19 @@ int cmb_add_item(lua_State *L)
{
wdg_userdata *wdgu;
- wdgu = (wdg_userdata *)luaL_isudata(L, 1, "ComboBox");
+ size_t nargs = lua_gettop(L); // number of arguments
+
+ wdgu = (wdg_userdata *)lua_touserdata(L, 1);
luaL_argcheck(L, wdgu, 1, "combobox expected");
- QString val = luaL_checkstring(L, 2);
+ QString cap = luaL_checkstring(L, 2);
+ QString val = cap;
+ if(nargs == 3) {
+ val = luaL_checkstring(L, 3);
+ }
ComboBox *cmb = (ComboBox*)wdgu->widget;
- cmb->addItem(val);
+ cmb->addItem(cap, val);
return 0;
}
@@ -301,7 +324,7 @@ int cmb_le_value(lua_State *L)
{
wdg_userdata *wdgu;
- wdgu = (wdg_userdata *)luaL_isudata(L, 1, "ComboBox");
+ wdgu = (wdg_userdata *)lua_touserdata(L, 1);
luaL_argcheck(L, wdgu, 1, "combobox expected");
ComboBox *cmb = (ComboBox*)wdgu->widget;
@@ -314,7 +337,7 @@ int cmb_le_set_value(lua_State *L)
{
wdg_userdata *wdgu;
- wdgu = (wdg_userdata *)luaL_isudata(L, 1, "ComboBox");
+ wdgu = (wdg_userdata *)lua_touserdata(L, 1);
luaL_argcheck(L, wdgu, 1, "combobox expected");
const char *val = luaL_checkstring(L, 2);