Mime settings: Avoid work at creation time

We do not need to collect all the editor factory information on all mime
types at creation time of the model. Do it on request.

Change-Id: I52e81a5f7949a69d96f0d3f1a5dfbe64b91977ad
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Eike Ziller
2018-06-22 12:45:44 +02:00
parent a8c5af56a9
commit 8cbe9db185

View File

@@ -81,9 +81,8 @@ class MimeTypeSettingsModel : public QAbstractTableModel
Q_OBJECT Q_OBJECT
public: public:
MimeTypeSettingsModel(QObject *parent = 0) MimeTypeSettingsModel(QObject *parent = nullptr)
: QAbstractTableModel(parent) {} : QAbstractTableModel(parent) {}
virtual ~MimeTypeSettingsModel() {}
int rowCount(const QModelIndex &parent = QModelIndex()) const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override;
int columnCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override;
@@ -93,8 +92,10 @@ public:
void load(); void load();
QString handlerForMimeType(const Utils::MimeType &mimeType) const;
QList<Utils::MimeType> m_mimeTypes; QList<Utils::MimeType> m_mimeTypes;
QHash<QString, QString> m_handlersByMimeType; mutable QHash<Utils::MimeType, QString> m_handlersByMimeType;
}; };
int MimeTypeSettingsModel::rowCount(const QModelIndex &) const int MimeTypeSettingsModel::rowCount(const QModelIndex &) const
@@ -125,11 +126,11 @@ QVariant MimeTypeSettingsModel::data(const QModelIndex &modelIndex, int role) co
const int column = modelIndex.column(); const int column = modelIndex.column();
if (role == Qt::DisplayRole) { if (role == Qt::DisplayRole) {
const QString &type = m_mimeTypes.at(modelIndex.row()).name(); const Utils::MimeType &type = m_mimeTypes.at(modelIndex.row());
if (column == 0) if (column == 0)
return type; return type.name();
else else
return m_handlersByMimeType.value(type); return handlerForMimeType(type);
} }
return QVariant(); return QVariant();
} }
@@ -141,13 +142,18 @@ void MimeTypeSettingsModel::load()
Utils::sort(m_mimeTypes, [](const Utils::MimeType &a, const Utils::MimeType &b) { Utils::sort(m_mimeTypes, [](const Utils::MimeType &a, const Utils::MimeType &b) {
return a.name().compare(b.name(), Qt::CaseInsensitive) < 0; return a.name().compare(b.name(), Qt::CaseInsensitive) < 0;
}); });
m_handlersByMimeType.clear();
endResetModel();
}
foreach (const Utils::MimeType &mimeType, m_mimeTypes) { QString MimeTypeSettingsModel::handlerForMimeType(const Utils::MimeType &mimeType) const
{
if (!m_handlersByMimeType.contains(mimeType)) {
const QList<IEditorFactory *> factories = IEditorFactory::editorFactories(mimeType); const QList<IEditorFactory *> factories = IEditorFactory::editorFactories(mimeType);
const QString value = factories.isEmpty() ? "" : factories.front()->displayName(); const QString value = factories.isEmpty() ? "" : factories.front()->displayName();
m_handlersByMimeType.insert(mimeType.name(), value); m_handlersByMimeType.insert(mimeType, value);
} }
endResetModel(); return m_handlersByMimeType.value(mimeType);
} }
// MimeTypeSettingsPrivate // MimeTypeSettingsPrivate