QmlDesigner: Add "show in graphical shell" option

...to content library user tab's custom categories

Fixes: QDS-15153
Change-Id: If899ca6ff3f8416205718bb4ae6f5570ed2ab312
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Reviewed-by: Ali Kianian <ali.kianian@qt.io>
This commit is contained in:
Mahmoud Badri
2025-04-09 14:57:33 +03:00
parent e37e9b6a84
commit 489230d0ef
4 changed files with 36 additions and 3 deletions

View File

@@ -13,12 +13,14 @@ StudioControls.Menu {
property var targetTexture: null property var targetTexture: null
property bool hasSceneEnv: false property bool hasSceneEnv: false
property bool showRemoveAction: false // true: adds an option to remove targetTexture property bool showRemoveAction: false // true: adds an option to remove targetTexture
property bool showInGraphicalShellVisible: false
property bool canUse3D: targetTexture && ContentLibraryBackend.rootView.hasQuick3DImport && ContentLibraryBackend.rootView.hasMaterialLibrary property bool canUse3D: targetTexture && ContentLibraryBackend.rootView.hasQuick3DImport && ContentLibraryBackend.rootView.hasMaterialLibrary
function popupMenu(targetTexture = null) function popupMenu(targetTexture = null, showInGraphicalShellItemVisible = false)
{ {
this.targetTexture = targetTexture this.targetTexture = targetTexture
root.showInGraphicalShellVisible = showInGraphicalShellItemVisible
ContentLibraryBackend.rootView.updateSceneEnvState(); ContentLibraryBackend.rootView.updateSceneEnvState();
popup() popup()
} }
@@ -49,4 +51,20 @@ StudioControls.Menu {
height: visible ? implicitHeight : 0 height: visible ? implicitHeight : 0
onTriggered: ContentLibraryBackend.userModel.removeTexture(root.targetTexture) onTriggered: ContentLibraryBackend.userModel.removeTexture(root.targetTexture)
} }
StudioControls.MenuSeparator {
visible: root.showInGraphicalShellVisible
height: visible ? StudioTheme.Values.border : 0
}
StudioControls.MenuItem {
text: ContentLibraryBackend.rootView.showInGraphicalShellMsg
visible: root.showInGraphicalShellVisible
height: visible ? implicitHeight : 0
onTriggered: {
ContentLibraryBackend.rootView.showInGraphicalShell(root.targetTexture.textureParentPath)
}
}
} }

View File

@@ -191,10 +191,14 @@ Item {
} }
Grid { Grid {
id: grid
width: section.width - section.leftPadding - section.rightPadding width: section.width - section.leftPadding - section.rightPadding
spacing: StudioTheme.Values.sectionGridSpacing spacing: StudioTheme.Values.sectionGridSpacing
columns: root.numColumns columns: root.numColumns
property int catIdx: index
Repeater { Repeater {
id: repeater id: repeater
@@ -220,7 +224,7 @@ Item {
width: root.cellWidth width: root.cellWidth
height: root.cellWidth // for textures use a square size since there is no name row height: root.cellWidth // for textures use a square size since there is no name row
onShowContextMenu: ctxMenuTexture.popupMenu(modelData) onShowContextMenu: ctxMenuTexture.popupMenu(modelData, grid.catIdx > 2)
} }
} }
DelegateChoice { DelegateChoice {

View File

@@ -13,7 +13,6 @@
#include "contentlibraryusermodel.h" #include "contentlibraryusermodel.h"
#include <bundleimporter.h> #include <bundleimporter.h>
#include <coreplugin/icore.h>
#include <designerpaths.h> #include <designerpaths.h>
#include <nodemetainfo.h> #include <nodemetainfo.h>
#include <qmldesignerconstants.h> #include <qmldesignerconstants.h>
@@ -27,6 +26,9 @@
#include <qmldesignerutils/fileextractor.h> #include <qmldesignerutils/fileextractor.h>
#include <qmldesignerutils/multifiledownloader.h> #include <qmldesignerutils/multifiledownloader.h>
#include <coreplugin/fileutils.h>
#include <coreplugin/icore.h>
#include <utils/algorithm.h> #include <utils/algorithm.h>
#include <utils/fileutils.h> #include <utils/fileutils.h>
#include <utils/hostosinfo.h> #include <utils/hostosinfo.h>
@@ -135,6 +137,7 @@ ContentLibraryWidget::ContentLibraryWidget()
, m_environmentsModel(new ContentLibraryTexturesModel("Environments", this)) , m_environmentsModel(new ContentLibraryTexturesModel("Environments", this))
, m_effectsModel(new ContentLibraryEffectsModel(this)) , m_effectsModel(new ContentLibraryEffectsModel(this))
, m_userModel(new ContentLibraryUserModel(this)) , m_userModel(new ContentLibraryUserModel(this))
, m_showInGraphicalShellMsg(Core::FileUtils::msgGraphicalShellAction())
{ {
qmlRegisterType<QmlDesigner::FileDownloader>("WebFetcher", 1, 0, "FileDownloader"); qmlRegisterType<QmlDesigner::FileDownloader>("WebFetcher", 1, 0, "FileDownloader");
qmlRegisterType<QmlDesigner::FileExtractor>("WebFetcher", 1, 0, "FileExtractor"); qmlRegisterType<QmlDesigner::FileExtractor>("WebFetcher", 1, 0, "FileExtractor");
@@ -946,4 +949,9 @@ void ContentLibraryWidget::setHasModelSelection(bool b)
emit hasModelSelectionChanged(); emit hasModelSelectionChanged();
} }
void ContentLibraryWidget::showInGraphicalShell(const QString &path)
{
Core::FileUtils::showInGraphicalShell(Utils::FilePath::fromString(path));
}
} // namespace QmlDesigner } // namespace QmlDesigner

View File

@@ -42,6 +42,7 @@ class ContentLibraryWidget : public QFrame
Q_PROPERTY(bool isQt6Project READ isQt6Project NOTIFY isQt6ProjectChanged) Q_PROPERTY(bool isQt6Project READ isQt6Project NOTIFY isQt6ProjectChanged)
Q_PROPERTY(bool importerRunning READ importerRunning WRITE setImporterRunning NOTIFY importerRunningChanged) Q_PROPERTY(bool importerRunning READ importerRunning WRITE setImporterRunning NOTIFY importerRunningChanged)
Q_PROPERTY(bool hasModelSelection READ hasModelSelection NOTIFY hasModelSelectionChanged) Q_PROPERTY(bool hasModelSelection READ hasModelSelection NOTIFY hasModelSelectionChanged)
Q_PROPERTY(QString showInGraphicalShellMsg MEMBER m_showInGraphicalShellMsg CONSTANT)
// Needed for a workaround for a bug where after drag-n-dropping an item, the ScrollView scrolls to a random position // Needed for a workaround for a bug where after drag-n-dropping an item, the ScrollView scrolls to a random position
Q_PROPERTY(bool isDragging MEMBER m_isDragging NOTIFY isDraggingChanged) Q_PROPERTY(bool isDragging MEMBER m_isDragging NOTIFY isDraggingChanged)
@@ -105,6 +106,7 @@ public:
Q_INVOKABLE bool hasTexture(const QString &format, const QVariant &data) const; Q_INVOKABLE bool hasTexture(const QString &format, const QVariant &data) const;
Q_INVOKABLE void addQtQuick3D(); Q_INVOKABLE void addQtQuick3D();
Q_INVOKABLE void browseBundleFolder(); Q_INVOKABLE void browseBundleFolder();
Q_INVOKABLE void showInGraphicalShell(const QString &path);
QSize sizeHint() const override; QSize sizeHint() const override;
@@ -180,6 +182,7 @@ private:
bool m_hasModelSelection = false; bool m_hasModelSelection = false;
QString m_textureBundleUrl; QString m_textureBundleUrl;
QString m_bundlePath; QString m_bundlePath;
QString m_showInGraphicalShellMsg;
}; };
} // namespace QmlDesigner } // namespace QmlDesigner