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);