From 6389aabffe198ece92b58ae34a905902c7eefe7c Mon Sep 17 00:00:00 2001 From: deva Date: Tue, 28 Jun 2011 06:38:10 +0000 Subject: Complete rewrite of the way lua widget methods, 'inheritance' in particular, are handled. --- client/widgets/combobox.cc | 83 +++++++++++++++++++++++++++++----------------- 1 file changed, 53 insertions(+), 30 deletions(-) (limited to 'client/widgets/combobox.cc') 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; isetEditable(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); -- cgit v1.2.3