diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2022-03-22 10:01:55 +0100 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2022-03-22 14:39:27 +0000 |
commit | fe711ebce43d389157cf68d0c42fb0ab06270533 (patch) | |
tree | 340db2bbef23f4921bb0259faac9e6e19a3b3fbe | |
parent | 635d6bab0fb28251a02cb8da4fd7ea320c5a52d4 (diff) |
QmlDesigner: Parse .metainfo files from the share folder
We have some plugins that essentially only contain a .metainfo file.
the possibility to drop .metainfo files into that folder simplifies things.
In QDS 3.2 this will be used for the particle library.
Change-Id: I0c4bb7f66bb8eaa3f806ec9d34c6991d08ef5a5f
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
-rw-r--r-- | src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp index c49a8c5035..322adb7b4c 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp @@ -30,10 +30,16 @@ #include "iwidgetplugin.h" #include <coreplugin/messagebox.h> +#include <coreplugin/icore.h> + +#include <utils/filepath.h> + #include "pluginmanager/widgetpluginmanager.h" #include <QDebug> #include <QMessageBox> +#include <QDir> +#include <QDirIterator> #include <QMutex> enum { @@ -43,6 +49,30 @@ enum { namespace QmlDesigner { namespace Internal { + +static QString globalMetaInfoPath() +{ +#ifdef SHARE_QML_PATH + if (qEnvironmentVariableIsSet("LOAD_QML_FROM_SOURCE")) + return QLatin1String(SHARE_QML_PATH) + "/globalMetaInfo"; +#endif + return Core::ICore::resourcePath("qmldesigner/globalMetaInfo").toString(); +} + +Utils::FilePaths allGlobalMetaInfoFiles() +{ + static Utils::FilePaths paths; + + if (!paths.isEmpty()) + return paths; + + QDirIterator it(globalMetaInfoPath(), { "*.metainfo" }, QDir::Files, QDirIterator::Subdirectories); + while (it.hasNext()) + paths.append(Utils::FilePath::fromString(it.next())); + + return paths; +} + class MetaInfoPrivate { Q_DISABLE_COPY(MetaInfoPrivate) @@ -99,6 +129,19 @@ void MetaInfoPrivate::parseItemLibraryDescriptions() errorMessage); } } + + const Utils::FilePaths allMetaInfoFiles = allGlobalMetaInfoFiles(); + for (const Utils::FilePath &path : allMetaInfoFiles) { + Internal::MetaInfoReader reader(*m_q); + try { + reader.readMetaInfoFile(path.toString()); + } catch (const InvalidMetaInfoException &e) { + qWarning() << e.description(); + const QString errorMessage = path.toString() + QLatin1Char('\n') + QLatin1Char('\n') + reader.errors().join(QLatin1Char('\n')); + Core::AsynchronousMessageBox::warning(QCoreApplication::translate("QmlDesigner::Internal::MetaInfoPrivate", "Invalid meta info"), + errorMessage); + } + } #endif } |