From 868e3133c0340b8cc6072788542c644866bfaa4c Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Wed, 29 Jan 2020 12:28:30 +0100 Subject: [PATCH] QmlDesigner: Add flow mode to ItemLibrary If in flow mode we only show FlowItems. Change-Id: I7d41155eac8bc180c7ac1d0092b35d7fc3f9be91 Reviewed-by: Tim Jenssen --- .../components/itemlibrary/itemlibrarymodel.cpp | 17 +++++++++++++++++ .../components/itemlibrary/itemlibrarymodel.h | 3 +++ .../components/itemlibrary/itemlibraryview.cpp | 2 ++ .../itemlibrary/itemlibrarywidget.cpp | 5 +++++ .../components/itemlibrary/itemlibrarywidget.h | 2 ++ 5 files changed, 29 insertions(+) diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp index ae53990cf9d..37baf1118c6 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp @@ -64,6 +64,13 @@ void ItemLibraryModel::setExpanded(bool expanded, const QString §ion) collapsedStateHash.insert(section, expanded); } +void ItemLibraryModel::setFlowMode(bool b) +{ + m_flowMode = b; + bool changed; + updateVisibility(&changed); +} + ItemLibraryModel::ItemLibraryModel(QObject *parent) : QAbstractListModel(parent) { @@ -187,6 +194,12 @@ void ItemLibraryModel::update(ItemLibraryInfo *itemLibraryInfo, Model *model) bool forceVisiblity = valid && NodeHints::fromItemLibraryEntry(entry).visibleInLibrary(); + if (m_flowMode) { + forceVisiblity = false; + isItem = metaInfo.isSubclassOf("FlowView.FlowItem"); + } + + if (valid && (isItem || forceVisiblity) //We can change if the navigator does support pure QObjects && (entry.requiredImport().isEmpty() @@ -262,6 +275,10 @@ void ItemLibraryModel::updateVisibility(bool *changed) bool sectionChanged = false; bool sectionVisibility = itemLibrarySection->updateSectionVisibility(sectionSearchText, §ionChanged); + + if (m_flowMode && itemLibrarySection->sectionName() != "My QML Components") + sectionVisibility= false; + *changed |= sectionChanged; *changed |= itemLibrarySection->setVisible(sectionVisibility); } diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h index 99496c9f422..5d39a000856 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h @@ -73,6 +73,8 @@ public: void setExpanded(bool, const QString §ion); + void setFlowMode(bool); + signals: void qmlModelChanged(); void searchTextChanged(); @@ -88,6 +90,7 @@ private: // variables QHash m_roleNames; QString m_searchText; + bool m_flowMode = false; }; } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp index 34955acd87f..99ceb2fff37 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryview.cpp @@ -27,6 +27,7 @@ #include "itemlibrarywidget.h" #include #include +#include #include namespace QmlDesigner { @@ -68,6 +69,7 @@ void ItemLibraryView::modelAttached(Model *model) updateImports(); model->attachView(m_importManagerView); m_hasErrors = !rewriterView()->errors().isEmpty(); + m_widget->setFlowMode(QmlItemNode(rootModelNode()).isFlowView()); } void ItemLibraryView::modelAboutToBeDetached(Model *model) diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp index 218c6c78f6a..10464f77fe8 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp @@ -416,6 +416,11 @@ void ItemLibraryWidget::startDragAndDrop(QQuickItem *mouseArea, QVariant itemLib }); } +void ItemLibraryWidget::setFlowMode(bool b) +{ + m_itemLibraryModel->setFlowMode(b); +} + void ItemLibraryWidget::removeImport(const QString &name) { QTC_ASSERT(m_model, return); diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h index 006de006fc1..6e8fc0340aa 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h @@ -86,6 +86,8 @@ public: Q_INVOKABLE void startDragAndDrop(QQuickItem *mouseArea, QVariant itemLibId); + void setFlowMode(bool b); + signals: void itemActivated(const QString& itemName);