diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2019-04-29 12:09:12 +0200 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2019-04-29 10:10:08 +0000 |
commit | 63a646af9b9b4828ad9638f0a8e7477b67575851 (patch) | |
tree | bbf7a08d494e57715b12e1ddcfa0c5fb9772dca5 | |
parent | ee68989e2a2f467f5c5ebcd4bda78cc333d25ced (diff) |
QmlDesigner: Add hints for visibility in library and navigator
Change-Id: If5d3a4c34a0010cc5a826296aa428a5915142659
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
5 files changed, 31 insertions, 6 deletions
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp index 72ee60fd92..ae53990cf9 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 <model.h> +#include <nodehints.h> #include <nodemetainfo.h> #include <utils/algorithm.h> @@ -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 e98e7c3379..126fed8e68 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp @@ -252,7 +252,7 @@ QList<ModelNode> 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 c8fc4e5b54..07434102fc 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp @@ -48,6 +48,7 @@ #include <utils/utilsicons.h> #include <QHeaderView> +#include <QTimer> 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 982c3a80b0..1e8b7d99e4 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<QString, QString> 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 28d7c0a205..be7623323d 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<QString, QString> NodeHints::hints() const { return m_hints; |