From 8cbe9db185df6a2e1fa5df69b7df67c06c4603be Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 22 Jun 2018 12:45:44 +0200 Subject: [PATCH] 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 --- src/plugins/coreplugin/mimetypesettings.cpp | 24 +++++++++++++-------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/plugins/coreplugin/mimetypesettings.cpp b/src/plugins/coreplugin/mimetypesettings.cpp index 42daffe396c..6e770330f62 100644 --- a/src/plugins/coreplugin/mimetypesettings.cpp +++ b/src/plugins/coreplugin/mimetypesettings.cpp @@ -81,9 +81,8 @@ class MimeTypeSettingsModel : public QAbstractTableModel Q_OBJECT public: - MimeTypeSettingsModel(QObject *parent = 0) + MimeTypeSettingsModel(QObject *parent = nullptr) : QAbstractTableModel(parent) {} - virtual ~MimeTypeSettingsModel() {} int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; @@ -93,8 +92,10 @@ public: void load(); + QString handlerForMimeType(const Utils::MimeType &mimeType) const; + QList m_mimeTypes; - QHash m_handlersByMimeType; + mutable QHash m_handlersByMimeType; }; int MimeTypeSettingsModel::rowCount(const QModelIndex &) const @@ -125,11 +126,11 @@ QVariant MimeTypeSettingsModel::data(const QModelIndex &modelIndex, int role) co const int column = modelIndex.column(); 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) - return type; + return type.name(); else - return m_handlersByMimeType.value(type); + return handlerForMimeType(type); } return QVariant(); } @@ -141,13 +142,18 @@ void MimeTypeSettingsModel::load() Utils::sort(m_mimeTypes, [](const Utils::MimeType &a, const Utils::MimeType &b) { 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 factories = IEditorFactory::editorFactories(mimeType); 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