From 6173b78860d53d7cf9cc1dc4f344637f8ad64ff7 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 11 Feb 2022 13:41:22 +0200 Subject: [PATCH] QmlDesigner: Allow going into component from item library Added "Go into Component" to item library context menu for items that have customComponentSource available. Doubleclicking on the item also does the same. Fixes: QDS-5786 Change-Id: I954bfb4864d74fa04b5da5b961f9aa2035132022 Reviewed-by: Thomas Hartmann Reviewed-by: Mahmoud Badri Reviewed-by: Samuel Ghinet Reviewed-by: --- .../itemLibraryQmlSources/ItemDelegate.qml | 6 ++++ .../itemLibraryQmlSources/ItemsView.qml | 30 +++++++++++++------ .../HelperWidgets/ImagePreviewTooltipArea.qml | 5 ++++ .../itemlibrary/itemlibraryitem.cpp | 5 ++++ .../components/itemlibrary/itemlibraryitem.h | 2 ++ .../itemlibrary/itemlibrarywidget.cpp | 6 ++++ .../itemlibrary/itemlibrarywidget.h | 1 + src/plugins/qmldesigner/documentmanager.cpp | 14 +++++++-- src/plugins/qmldesigner/documentmanager.h | 1 + 9 files changed, 59 insertions(+), 11 deletions(-) diff --git a/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemDelegate.qml b/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemDelegate.qml index c2bf8fb4b8d..03e536676d2 100644 --- a/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemDelegate.qml +++ b/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemDelegate.qml @@ -91,6 +91,12 @@ Item { if (mouse.button === Qt.LeftButton) rootView.startDragAndDrop(itemLibraryEntry, mapToGlobal(mouse.x, mouse.y)) } + onDoubleClicked: (mouse)=> { + if (mouse.button === Qt.LeftButton && itemComponentSource) { + hide() + rootView.goIntoComponent(itemComponentSource) + } + } } } } diff --git a/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml b/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml index 17d187c2418..e43342d650d 100644 --- a/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml +++ b/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml @@ -76,8 +76,9 @@ itemLibraryModel [ Item { id: itemsView - property string importToRemove: "" - property string importToAdd: "" + property string importToRemove + property string importToAdd + property string componentSource property var currentCategory: null property var currentImport: null property bool isHorizontalView: false @@ -123,7 +124,7 @@ Item { text: qsTr("Remove Module") visible: itemsView.currentCategory === null height: visible ? implicitHeight : 0 - enabled: itemsView.importToRemove !== "" && !rootView.subCompEditMode + enabled: itemsView.importToRemove && !rootView.subCompEditMode onTriggered: rootView.removeImport(itemsView.importToRemove) } @@ -184,14 +185,23 @@ Item { StudioControls.Menu { id: itemContextMenu // Workaround for menu item implicit width not properly propagating to menu - width: importMenuItem.implicitWidth + width: Math.max(importMenuItem.implicitWidth, openSourceItem.implicitWidth) StudioControls.MenuItem { id: importMenuItem text: qsTr("Add Module: ") + itemsView.importToAdd - enabled: itemsView.importToAdd !== "" + visible: itemsView.importToAdd + height: visible ? implicitHeight : 0 onTriggered: rootView.addImportForItem(itemsView.importToAdd) } + + StudioControls.MenuItem { + id: openSourceItem + text: qsTr("Go into Component") + visible: itemsView.componentSource + height: visible ? implicitHeight : 0 + onTriggered: rootView.goIntoComponent(itemsView.componentSource) + } } } @@ -323,8 +333,9 @@ Item { width: styleConstants.cellWidth height: styleConstants.cellHeight onShowContextMenu: { - if (!itemUsable) { - itemsView.importToAdd = itemRequiredImport + if (!itemUsable || itemComponentSource) { + itemsView.importToAdd = !itemUsable ? itemRequiredImport : "" + itemsView.componentSource = itemComponentSource itemContextMenu.popup() } } @@ -480,8 +491,9 @@ Item { width: styleConstants.cellWidth height: styleConstants.cellHeight onShowContextMenu: { - if (!itemUsable) { - itemsView.importToAdd = itemRequiredImport + if (!itemUsable || itemComponentSource) { + itemsView.importToAdd = !itemUsable ? itemRequiredImport : "" + itemsView.componentSource = itemComponentSource itemContextMenu.popup() } } diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ImagePreviewTooltipArea.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ImagePreviewTooltipArea.qml index f8331acd4da..e354f5a6981 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ImagePreviewTooltipArea.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ImagePreviewTooltipArea.qml @@ -32,6 +32,11 @@ MouseArea { signal showContextMenu() + function hide() + { + tooltipBackend.hideTooltip() + } + onExited: tooltipBackend.hideTooltip() onCanceled: tooltipBackend.hideTooltip() onPositionChanged: tooltipBackend.reposition() diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryitem.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryitem.cpp index c86e5360d1c..c438fc61d5f 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryitem.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryitem.cpp @@ -68,6 +68,11 @@ QString ItemLibraryItem::requiredImport() const return m_itemLibraryEntry.requiredImport(); } +QString ItemLibraryItem::componentSource() const +{ + return m_itemLibraryEntry.customComponentSource(); +} + bool ItemLibraryItem::setVisible(bool isVisible) { if (isVisible != m_isVisible) { diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryitem.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryitem.h index 564a2a9aa54..10fd9e091fd 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryitem.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryitem.h @@ -45,6 +45,7 @@ class ItemLibraryItem: public QObject Q_PROPERTY(QString componentPath READ componentPath FINAL) Q_PROPERTY(bool itemUsable READ isUsable FINAL) Q_PROPERTY(QString itemRequiredImport READ requiredImport FINAL) + Q_PROPERTY(QString itemComponentSource READ componentSource FINAL) public: ItemLibraryItem(const ItemLibraryEntry &itemLibraryEntry, bool isImported, QObject *parent); @@ -55,6 +56,7 @@ public: QString itemLibraryIconPath() const; QString componentPath() const; QString requiredImport() const; + QString componentSource() const; bool setVisible(bool isVisible); bool isVisible() const; diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp index 649ee343f8a..7b8c0c2a3f4 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp @@ -32,6 +32,7 @@ #include #include +#include #include #include #include @@ -269,6 +270,11 @@ void ItemLibraryWidget::handleAddImport(int index) updateSearch(); } +void ItemLibraryWidget::goIntoComponent(const QString &source) +{ + DocumentManager::goIntoComponent(source); +} + void ItemLibraryWidget::delayedUpdateModel() { static bool disableTimer = DesignerSettings::getValue(DesignerSettingsKey::DISABLE_ITEM_LIBRARY_UPDATE_TIMER).toBool(); diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h index 85b95ce23f4..7a3db274f84 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h @@ -95,6 +95,7 @@ public: Q_INVOKABLE void addImportForItem(const QString &importUrl); Q_INVOKABLE void handleSearchfilterChanged(const QString &filterText); Q_INVOKABLE void handleAddImport(int index); + Q_INVOKABLE void goIntoComponent(const QString &source); signals: void itemActivated(const QString &itemName); diff --git a/src/plugins/qmldesigner/documentmanager.cpp b/src/plugins/qmldesigner/documentmanager.cpp index a0ef9a52128..d75d570fc92 100644 --- a/src/plugins/qmldesigner/documentmanager.cpp +++ b/src/plugins/qmldesigner/documentmanager.cpp @@ -108,14 +108,19 @@ static inline void applyProperties(ModelNode &node, const QHashviewManager().nextFileIsCalledInternally(); - Core::EditorManager::openEditor(FilePath::fromString(modelNode.metaInfo().componentFileName()), + Core::EditorManager::openEditor(FilePath::fromString(fileName), Utils::Id(), Core::EditorManager::DoNotMakeVisible); } +static void openFileComponent(const ModelNode &modelNode) +{ + openFileComponentForFile(modelNode.metaInfo().componentFileName()); +} + static void openFileComponentForDelegate(const ModelNode &modelNode) { openFileComponent(modelNode.nodeProperty("delegate").modelNode()); @@ -305,6 +310,11 @@ bool DocumentManager::goIntoComponent(const ModelNode &modelNode) return false; } +void DocumentManager::goIntoComponent(const QString &fileName) +{ + openFileComponentForFile(fileName); +} + bool DocumentManager::createFile(const QString &filePath, const QString &contents) { Utils::TextFileFormat textFileFormat; diff --git a/src/plugins/qmldesigner/documentmanager.h b/src/plugins/qmldesigner/documentmanager.h index f8b29fee5f9..f8ef1113554 100644 --- a/src/plugins/qmldesigner/documentmanager.h +++ b/src/plugins/qmldesigner/documentmanager.h @@ -52,6 +52,7 @@ public: void removeEditors(const QList &editors); static bool goIntoComponent(const ModelNode &modelNode); + static void goIntoComponent(const QString &fileName); static bool createFile(const QString &filePath, const QString &contents); static void addFileToVersionControl(const QString &directoryPath, const QString &newFilePath);