void OperationsDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { const QVariant value = index.data(Qt::EditRole); if (value.type() == QVariant::StringList) { QListWidget *lw = qobject_cast<QListWidget *>(editor); const auto items = lw->findItems(index.data(Qt::DisplayRole).toString(), Qt::MatchExactly); if (!items.empty()) lw->setCurrentItem(items.first()); else lw->setCurrentItem(lw->item(0)); const int extraWidth = 25; const int extraHeight = 6; lw->setMinimumWidth(lw->sizeHintForColumn(0) + extraWidth); // to prevent possible hiding bottom part of the list const int h = lw->count() * (lw->visualItemRect(lw->currentItem()).height() + extraHeight); const int y = (lw->parentWidget() && (lw->parentWidget()->rect().bottom() < lw->y() + h)) ? lw->parentWidget()->rect().bottom() - h - extraHeight : lw->y(); lw->setGeometry(lw->x(), y, lw->width(), h); // now lw can be partially hidden behind the tree view // if tree view has small rect, so set parent of lw // to app window and map coordinates accordingly to leave lw in place const auto globalCoord = lw->parentWidget()->mapToGlobal(lw->geometry().topLeft()); lw->setParent(appWindow); const auto newLocalCoord = appWindow->mapFromGlobal(globalCoord); lw->setGeometry(newLocalCoord.x(), newLocalCoord.y(), lw->width(), h); } else // single value QStyledItemDelegate::setEditorData(editor, index); }
dmz::V8Value dmz::JsModuleUiV8QtBasic::_list_widget_find_items (const v8::Arguments &Args) { v8::HandleScope scope; V8Value result = v8::Undefined (); JsModuleUiV8QtBasic *self = _to_self (Args); if (self) { QListWidget *table = self->v8_to_qobject<QListWidget> (Args.This ()); if (table) { if (Args.Length ()) { QString str (v8_to_qstring (Args[0])); Qt::MatchFlags flag = Qt::MatchExactly; if (Args.Length () > 1) { flag = (Qt::MatchFlags)v8_to_uint32 (Args[1]); } QList<QListWidgetItem *> items = table->findItems (str, flag); const int Length = items.count (); V8Array array = v8::Array::New (Length); for (int ix = 0; ix < Length; ++ix) { V8Value value = self->create_v8_qlistwidgetitem (items.at (ix)); array->Set (v8::Integer::New (ix), value); } result = array; } } } return scope.Close (result); }
void MainWindow::onLabelRemoved(medusa::Label const & label) { QString labelName = QString::fromStdString(label.GetName()); QListWidget *curList = nullptr; switch (label.GetType()) { case medusa::Label::LabelData: curList = dataList; break; case medusa::Label::LabelCode: curList = codeList; break; case medusa::Label::LabelString: curList = stringList; break; default: break; } if (curList != nullptr) { auto items = curList->findItems(labelName, Qt::MatchExactly); // something bad happened if (items.size() != 1) return; auto item = items.takeFirst(); curList->removeItemWidget(item); delete item; } if (label.GetType() & medusa::Label::LabelImported) curList = importedList; else if (label.GetType() & medusa::Label::LabelExported) curList = exportedList; if (curList != nullptr) { auto items = curList->findItems(labelName, Qt::MatchExactly); // something bad happened if (items.size() != 1) return; auto item = items.takeFirst(); curList->removeItemWidget(item); delete item; } }