diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp index 3baacb2571f..19a57659c8e 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp @@ -358,15 +358,14 @@ void ItemLibraryModel::update(Model *model) itemLibImport->setImportExpanded(loadExpandedState(itemLibImport->importUrl())); } -#ifndef QDS_USE_PROJECTSTORAGE DesignDocument *document = QmlDesignerPlugin::instance()->currentDesignDocument(); const bool blockNewImports = document->inFileComponentModelActive(); -#endif TypeName currentFileType = QFileInfo(model->fileUrl().toLocalFile()).baseName().toUtf8(); - const QList itemLibEntries = model->itemLibraryEntries(); - for (const ItemLibraryEntry &entry : itemLibEntries) { + QList itemLibEntries = model->allItemLibraryEntries(); + itemLibEntries.append(model->directoryImportsItemLibraryEntries()); + for (const ItemLibraryEntry &entry : std::as_const(itemLibEntries)) { NodeMetaInfo metaInfo; #ifdef QDS_USE_PROJECTSTORAGE @@ -407,15 +406,14 @@ void ItemLibraryModel::update(Model *model) } } -#ifndef QDS_USE_PROJECTSTORAGE Import import = entryToImport(entry); bool hasImport = model->hasImport(import, true, true); +#ifndef QDS_USE_PROJECTSTORAGE bool isImportPossible = false; if (!hasImport) isImportPossible = !blockNewImports && model->isImportPossible(import, true, true); #else - bool hasImport = true; - bool isImportPossible = false; + bool isImportPossible = !blockNewImports; #endif bool isUsable = (valid && (isItem || forceVisibility)) && (entry.requiredImport().isEmpty() || hasImport); diff --git a/src/plugins/qmldesigner/libs/designercore/include/model.h b/src/plugins/qmldesigner/libs/designercore/include/model.h index ba73b3ab44c..6266a31b012 100644 --- a/src/plugins/qmldesigner/libs/designercore/include/model.h +++ b/src/plugins/qmldesigner/libs/designercore/include/model.h @@ -210,6 +210,7 @@ public: QList itemLibraryEntries() const; QList directoryImportsItemLibraryEntries() const; + QList allItemLibraryEntries() const; void attachView(AbstractView *view); void detachView(AbstractView *view, ViewNotification emitDetachNotify = NotifyView); diff --git a/src/plugins/qmldesigner/libs/designercore/model/model.cpp b/src/plugins/qmldesigner/libs/designercore/model/model.cpp index 9f385c2a904..d6a80e05c36 100644 --- a/src/plugins/qmldesigner/libs/designercore/model/model.cpp +++ b/src/plugins/qmldesigner/libs/designercore/model/model.cpp @@ -2830,6 +2830,16 @@ QList Model::directoryImportsItemLibraryEntries() const #endif } +QList Model::allItemLibraryEntries() const +{ +#ifdef QDS_USE_PROJECTSTORAGE + using namespace Storage::Info; + return toItemLibraryEntries(*d->pathCache, d->projectStorage->allItemLibraryEntries()); +#else + return d->metaInfo().itemLibraryInfo()->entries(); +#endif +} + NodeMetaInfo Model::qtQuickTimelineKeyframeGroupMetaInfo() const { if constexpr (useProjectStorage()) { diff --git a/tests/unit/tests/unittests/model/model-test.cpp b/tests/unit/tests/unittests/model/model-test.cpp index 8207ee4f245..3d41c0ff3d5 100644 --- a/tests/unit/tests/unittests/model/model-test.cpp +++ b/tests/unit/tests/unittests/model/model-test.cpp @@ -1363,6 +1363,36 @@ TEST_F(Model_TypeAnnotation, directory_imports_item_library_entries) ElementsAre(IsItemLibraryProperty("x", "double"_L1, QVariant{1})), ElementsAre(u"/extra/file/path")))); } +TEST_F(Model_TypeAnnotation, all_item_library_entries) +{ + using namespace Qt::StringLiterals; + QmlDesigner::Storage::Info::ItemLibraryEntries storageEntries{{itemTypeId, + "Item", + "Item", + "/path/to/icon", + "basic category", + "QtQuick", + "It's a item", + "/path/to/template"}}; + storageEntries.front().properties.emplace_back("x", "double", Sqlite::ValueView::create(1)); + storageEntries.front().extraFilePaths.emplace_back("/extra/file/path"); + ON_CALL(projectStorageMock, allItemLibraryEntries()).WillByDefault(Return(storageEntries)); + + auto entries = model.allItemLibraryEntries(); + + ASSERT_THAT(entries, + ElementsAre( + IsItemLibraryEntry(itemTypeId, + "Item", + u"Item", + u"/path/to/icon", + u"basic category", + u"QtQuick", + u"It's a item", + u"/path/to/template", + ElementsAre(IsItemLibraryProperty("x", "double"_L1, QVariant{1})), + ElementsAre(u"/extra/file/path")))); +} class Model_ViewManagement : public Model {