From 088972dd29fcae6c8f92931f855d8cd9ae20179e Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Wed, 12 Oct 2016 14:20:30 +0200 Subject: [PATCH] QmlDesigner: Allow adding of file imports All the functionality to support file imports in the import manager is already there. We just have to add the file imports as possible imports. We only include direct sub directories that contain at least one qml file, but no qmldir file. Task-number: QTCREATORBUG-12126 Task-number: QTCREATORBUG-11518 Change-Id: I1b606ae11682886f430794f451177980b9c5f9aa Reviewed-by: Tim Jenssen --- .../designercore/model/texttomodelmerger.cpp | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp index c0968a15f1a..a0e75e314a7 100644 --- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp @@ -819,7 +819,23 @@ static void removeUsedImports(QHash &filteredPossibleImportK filteredPossibleImportKeys.remove(import.info.path()); } -static QList generatePossibleImports(const QHash &filteredPossibleImportKeys) +static QList generatePossibleFileImports(const QString &path) +{ + QList possibleImports; + + foreach (const QString &subDir, QDir(path).entryList(QDir::Dirs | QDir::NoDot | QDir::NoDotDot)) { + QDir dir(path + "/" + subDir); + if (!dir.entryInfoList(QStringList("*.qml"), QDir::Files).isEmpty() + && dir.entryInfoList(QStringList("qmldir"), QDir::Files).isEmpty()) { + QmlDesigner::Import import = QmlDesigner::Import::createFileImport(subDir); + possibleImports.append(import); + } + } + + return possibleImports; +} + +static QList generatePossibleLibraryImports(const QHash &filteredPossibleImportKeys) { QList possibleImports; @@ -842,9 +858,11 @@ void TextToModelMerger::setupPossibleImports(const QmlJS::Snapshot &snapshot, co removeUsedImports(filteredPossibleImportKeys, m_scopeChain->context()->imports(m_document.data())->all()); - QList possibleImports = generatePossibleImports(filteredPossibleImportKeys); + QList possibleImports = generatePossibleLibraryImports(filteredPossibleImportKeys); - if ( m_rewriterView->isAttached()) + possibleImports.append(generatePossibleFileImports(document()->path())); + + if (m_rewriterView->isAttached()) m_rewriterView->model()->setPossibleImports(possibleImports); }