QVariant SourcesModel::data(const QModelIndex& index, int role) const { if (!index.isValid()) return QVariant(); if (index.row() >= m_size) return QVariant(); Plasma::QueryMatch m = fetchMatch(index.row()); Q_ASSERT(m.runner()); switch(role) { case Qt::DisplayRole: return m.text(); case Qt::DecorationRole: if (!m.iconName().isEmpty()) { return m.iconName(); } return m.icon(); case TypeRole: return m.matchCategory(); case SubtextRole: return m.subtext(); case ActionsRole: { const auto &actions = m_manager->actionsForMatch(m); if (actions.isEmpty()) { return QVariantList(); } QVariantList actionsList; actionsList.reserve(actions.size()); for (QAction *action : actions) { actionsList.append(QVariant::fromValue(action)); } return actionsList; } case DuplicateRole: return m_duplicates.value(m.text()); /* case PreviewTypeRole: return m.previewType(); case PreviewUrlRole: return m.previewUrl(); case PreviewLabelRole: return m.previewLabel(); */ } return QVariant(); }
// // Tries to make sure that all the types have the same number // of visible items // void SourcesModel::slotMatchAdded(const Plasma::QueryMatch& m) { if (m_queryString.isEmpty()) return; QString matchType = m.matchCategory(); if (!m_types.contains(matchType)) { m_types << matchType; } if (m_size == m_queryLimit) { int maxShownItems = 0; QString maxShownType; foreach (const QString& type, m_types) { TypeData data = m_matches.value(type); if (data.shown.size() >= maxShownItems) { maxShownItems = data.shown.size(); maxShownType = type; } }