diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp index 72ee60fd925..ae53990cf9d 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp @@ -30,6 +30,7 @@ #include "itemlibrarysection.h" #include +#include #include #include @@ -184,8 +185,10 @@ void ItemLibraryModel::update(ItemLibraryInfo *itemLibraryInfo, Model *model) qDebug() << Utils::transform(metaInfo.superClasses(), &NodeMetaInfo::typeName); } + bool forceVisiblity = valid && NodeHints::fromItemLibraryEntry(entry).visibleInLibrary(); + if (valid - && isItem //We can change if the navigator does support pure QObjects + && (isItem || forceVisiblity) //We can change if the navigator does support pure QObjects && (entry.requiredImport().isEmpty() || model->hasImport(entryToImport(entry), true, true))) { QString itemSectionName = entry.category(); diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp index e98e7c3379b..126fed8e68f 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp @@ -252,7 +252,7 @@ QList filteredList(const NodeListProperty &property, bool filter) return property.toModelNodeList(); return Utils::filtered(property.toModelNodeList(), [] (const ModelNode &arg) { - return QmlItemNode::isValidQmlItemNode(arg); + return QmlItemNode::isValidQmlItemNode(arg) || NodeHints::fromModelNode(arg).visibleInNavigator(); }); } diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp index c8fc4e5b54f..07434102fce 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp @@ -48,6 +48,7 @@ #include #include +#include static inline void setScenePos(const QmlDesigner::ModelNode &modelNode,const QPointF &pos) @@ -147,15 +148,21 @@ void NavigatorView::modelAttached(Model *model) { AbstractView::modelAttached(model); - m_currentModelInterface->setFilter( - DesignerSettings::getValue(DesignerSettingsKey::NAVIGATOR_SHOW_ONLY_VISIBLE_ITEMS).toBool()); - QTreeView *treeView = treeWidget(); - treeView->expandAll(); treeView->header()->setSectionResizeMode(0, QHeaderView::Stretch); treeView->header()->resizeSection(1,26); treeView->setIndentation(20); + + m_currentModelInterface->setFilter(false); + + + QTimer::singleShot(0, this, [this, treeView]() { + m_currentModelInterface->setFilter( + DesignerSettings::getValue(DesignerSettingsKey::NAVIGATOR_SHOW_ONLY_VISIBLE_ITEMS).toBool()); + treeView->expandAll(); + }); + #ifdef _LOCK_ITEMS_ treeView->header()->resizeSection(2,20); #endif diff --git a/src/plugins/qmldesigner/designercore/include/nodehints.h b/src/plugins/qmldesigner/designercore/include/nodehints.h index 982c3a80b06..1e8b7d99e41 100644 --- a/src/plugins/qmldesigner/designercore/include/nodehints.h +++ b/src/plugins/qmldesigner/designercore/include/nodehints.h @@ -65,6 +65,8 @@ public: bool canBeReparentedTo(const ModelNode &potenialParent); QString indexPropertyForStackedContainer() const; bool takesOverRenderingOfChildren() const; + bool visibleInNavigator() const; + bool visibleInLibrary() const; QHash hints() const; static NodeHints fromModelNode(const ModelNode &modelNode); diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp index 28d7c0a205a..be7623323d4 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp @@ -201,6 +201,19 @@ bool NodeHints::takesOverRenderingOfChildren() const return evaluateBooleanExpression("takesOverRenderingOfChildren", false); } +bool NodeHints::visibleInNavigator() const +{ + if (!isValid()) + return false; + + return evaluateBooleanExpression("visibleInNavigator", false); +} + +bool NodeHints::visibleInLibrary() const +{ + return evaluateBooleanExpression("visibleInLibrary", true); +} + QHash NodeHints::hints() const { return m_hints;