DirModel::DirModel(QObject *parent) : KDirModel(parent), m_screenshotSize(180, 120) { #if 0 // unused here in trash QMimeDatabase db; QList<QMimeType> mimeList = db.allMimeTypes(); m_mimeTypes << "inode/directory"; foreach (const QMimeType &mime, mimeList) { if (mime.name().startsWith(QStringLiteral("image/"))) { m_mimeTypes << mime.name(); } } //TODO: configurable mime filter //dirLister()->setMimeFilter(m_mimeTypes); #endif m_previewTimer = new QTimer(this); m_previewTimer->setSingleShot(true); connect(m_previewTimer, &QTimer::timeout, this, &DirModel::delayedPreview); //using the same cache of the engine, they index both by url m_imageCache = new KImageCache(QStringLiteral("org.kde.dirmodel-qml"), 10485760); connect(this, &QAbstractItemModel::rowsInserted, this, &DirModel::countChanged); connect(this, &QAbstractItemModel::rowsRemoved, this, &DirModel::countChanged); connect(this, &QAbstractItemModel::modelReset, this, &DirModel::countChanged); }
void MimetypeModel::populate() { typedef QList<QMimeType>::Iterator Iterator; QMimeDatabase mimeDatabase; QList<QMimeType> allTypes = mimeDatabase.allMimeTypes(); // Move top level types to rear end of list, sort this partition, // create top level items and truncate the list. Iterator end = allTypes.end(); const Iterator topLevelStart = std::stable_partition(allTypes.begin(), end, [](const QMimeType &t) { return !t.parentMimeTypes().isEmpty(); }); std::stable_sort(topLevelStart, end); for (Iterator it = topLevelStart; it != end; ++it) { const StandardItemList row = createRow(*it); appendRow(row); m_nameIndexHash.insert(it->name(), indexFromItem(row.constFirst())); } allTypes.erase(topLevelStart, end); while (!allTypes.isEmpty()) { // Find a type inheriting one that is already in the model. end = allTypes.end(); auto nameIndexIt = m_nameIndexHash.constEnd(); for (Iterator it = allTypes.begin(); it != end; ++it) { nameIndexIt = m_nameIndexHash.constFind(it->parentMimeTypes().constFirst()); if (nameIndexIt != m_nameIndexHash.constEnd()) break; } if (nameIndexIt == m_nameIndexHash.constEnd()) { qWarning() << "Orphaned mime types:" << allTypes; break; } // Move types inheriting the parent type to rear end of list, sort this partition, // append the items to parent and truncate the list. const QString &parentName = nameIndexIt.key(); const Iterator start = std::stable_partition(allTypes.begin(), end, [parentName](const QMimeType &t) { return !t.parentMimeTypes().contains(parentName); }); std::stable_sort(start, end); QStandardItem *parentItem = itemFromIndex(nameIndexIt.value()); for (Iterator it = start; it != end; ++it) { const StandardItemList row = createRow(*it); parentItem->appendRow(row); m_nameIndexHash.insert(it->name(), indexFromItem(row.constFirst())); } allTypes.erase(start, end); } }
void MimetypeViewer::loadAllMimeTypes() { mediaTypes.clear(); mGroupItems.clear(); mItemList.clear(); QStringList selectedMimeTypes; QMimeDatabase db; QList<QMimeType> mimetypes = db.allMimeTypes(); qSort(mimetypes.begin(), mimetypes.end(), mimeTypeLessThan); for (const QMimeType &mt : qAsConst(mimetypes)) { const QString mimetype = mt.name(); const int i = mimetype.indexOf(QLatin1Char('/')); const QString mediaType = mimetype.left(i); const QString subType = mimetype.mid(i + 1); MimeTypeData* data = new MimeTypeData(mt); if (!mediaTypes.contains(mediaType)) { // A new type of media mediaTypes.append(mediaType); QTreeWidgetItem *item = new QTreeWidgetItem(widget.mimetypeTreeWidget, GroupType); item->setText(0, mediaType); widget.mimetypeTreeWidget->insertTopLevelItem(0, item); mGroupItems.insert(mediaType, item); } QTreeWidgetItem *item = new QTreeWidgetItem(mGroupItems.value(mediaType), EntrieType); QVariant v; v.setValue(*data); item->setData(0, Qt::UserRole, v); item->setText(0, subType); mItemList.append(item); } widget.mimetypeTreeWidget->resizeColumnToContents(1); widget.mimetypeTreeWidget->show(); }