void ActionModel::update(int row) { Q_ASSERT(m_core); // need to create the row list ... grrr.. if (row >= rowCount()) return; QStandardItemList list; for (int i = 0; i < NumColumns; i++) list += item(row, i); setItems(m_core, actionOfItem(list.front()), list); }
void ActionModel::setItems(QDesignerFormEditorInterface *core, QAction *action, const QIcon &defaultIcon, QStandardItemList &sl) { // Tooltip, mostly for icon view mode QString firstTooltip = action->objectName(); const QString text = action->text(); if (!text.isEmpty()) { firstTooltip += QLatin1Char('\n'); firstTooltip += text; } Q_ASSERT(sl.size() == NumColumns); QStandardItem *item = sl[NameColumn]; item->setText(action->objectName()); QIcon icon = action->icon(); if (icon.isNull()) icon = defaultIcon; item->setIcon(icon); item->setToolTip(firstTooltip); item->setWhatsThis(firstTooltip); // Used const QWidgetList associatedDesignerWidgets = associatedWidgets(action); const bool used = !associatedDesignerWidgets.empty(); item = sl[UsedColumn]; item->setCheckState(used ? Qt::Checked : Qt::Unchecked); if (used) { QString usedToolTip; const QString separator = QLatin1String(", "); const int count = associatedDesignerWidgets.size(); for (int i = 0; i < count; i++) { if (i) usedToolTip += separator; usedToolTip += associatedDesignerWidgets.at(i)->objectName(); } item->setToolTip(usedToolTip); } else { item->setToolTip(QString()); } // text item = sl[TextColumn]; item->setText(action->text()); item->setToolTip(action->text()); // shortcut const QString shortcut = actionShortCut(core, action).value().toString(QKeySequence::NativeText); item = sl[ShortCutColumn]; item->setText(shortcut); item->setToolTip(shortcut); // checkable sl[CheckedColumn]->setCheckState(action->isCheckable() ? Qt::Checked : Qt::Unchecked); // ToolTip. This might be multi-line, rich text QString toolTip = action->toolTip(); item = sl[ToolTipColumn]; item->setToolTip(toolTip); item->setText(toolTip.replace(QLatin1Char('\n'), QLatin1Char(' '))); }
QModelIndex ActionModel::addAction(QAction *action) { Q_ASSERT(m_core); QStandardItemList items; const Qt::ItemFlags flags = Qt::ItemIsSelectable|Qt::ItemIsDropEnabled|Qt::ItemIsDragEnabled|Qt::ItemIsEnabled; QVariant itemData; qVariantSetValue(itemData, action); for (int i = 0; i < NumColumns; i++) { QStandardItem *item = new QStandardItem; item->setData(itemData, ActionRole); item->setFlags(flags); items.push_back(item); } setItems(m_core, action, items); appendRow(items); return indexFromItem(items.front()); }
/** Process results sent back from various search engines (local, remote). */ void SearchDialog::processResults(Request type, const QStandardItemList &results) { QListView *listToProcess = nullptr; switch (type) { case Artist: listToProcess = _artists; break; case Album: listToProcess = _albums; break; case Track: listToProcess = _tracks; break; } QStandardItemModel *m = qobject_cast<QStandardItemModel*>(listToProcess->model()); for (int i = 0; i < results.size(); i++) { m->insertRow(0, results.at(i)); } m->sort(0); listToProcess->setFixedHeight(listToProcess->model()->rowCount() * listToProcess->sizeHintForRow(0)); qDebug() << "number of items" << listToProcess->model()->rowCount(); qDebug() << "size h f r 1" << _artists->sizeHintForRow(0) << _albums->sizeHintForRow(0) << _tracks->sizeHintForRow(0); qDebug() << "size h f r 2" << iconArtists->height() << iconAlbums->height() << iconTracks->height(); int ar = qMax(_artists->model()->rowCount() * _artists->sizeHintForRow(0), iconArtists->height()); int al = qMax(_albums->model()->rowCount() * _albums->sizeHintForRow(0), iconAlbums->height()); int tr = qMax(_tracks->model()->rowCount() * _tracks->sizeHintForRow(0), iconTracks->height()); artistLayoutWidget->setFixedHeight(ar); albumLayoutWidget->setFixedHeight(al); trackLayoutWidget->setFixedHeight(tr); qDebug() << "ar al tr" << ar << al << tr; int h = ar + al + tr; //int h = 300; h += labelSearchMore->height() + aggregated->height() + 3; int minW = qMax(iconArtists->width() + _artists->sizeHintForColumn(0), 400); this->resize(minW, h); }