From 42c1b1587484b5dd6dc562e7fd80dacbd041bd33 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Fri, 15 Dec 2023 10:40:48 +0100 Subject: [PATCH] QmlPreview: Add QML Preview button to QML editor toolbar This adds the action from "Build->QML Preview" into the QML editor toolbar. Fixes: QTCREATORBUG-30078 Change-Id: I848b33f006b51866dde2565bd7f76c1eac0f3d28 Reviewed-by: hjk --- src/libs/utils/images/eyeoverlay.png | Bin 0 -> 141 bytes src/libs/utils/images/eyeoverlay@2x.png | Bin 0 -> 262 bytes src/libs/utils/utils.qrc | 2 + src/plugins/qmlpreview/qmlpreviewplugin.cpp | 64 ++++++++++++++++---- src/tools/icons/qtcreatoricons.svg | 23 +++++++ 5 files changed, 76 insertions(+), 13 deletions(-) create mode 100644 src/libs/utils/images/eyeoverlay.png create mode 100644 src/libs/utils/images/eyeoverlay@2x.png diff --git a/src/libs/utils/images/eyeoverlay.png b/src/libs/utils/images/eyeoverlay.png new file mode 100644 index 0000000000000000000000000000000000000000..af434244478fc91d92b5324a9294807818bbeef7 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4h9AW2CEqh_A)Rqgm}6*hDd}b|LA9vV4Hd1 zeVs1f*Ln8~8uk71IPZAQtS}ztk^`Dx5Yo@zDSO_NSLFIn}7c?;8R#AO z@{Gxh?d7!3@%!fFPfSaQ?$BLuZkB;V<4Mamj(_vro2<;YM;$s>f2GTpAzOBG{5>m% Q`ydZ`y85}Sb4q9e0L>F_IRF3v literal 0 HcmV?d00001 diff --git a/src/libs/utils/utils.qrc b/src/libs/utils/utils.qrc index 91070dc708b..42a88971d89 100644 --- a/src/libs/utils/utils.qrc +++ b/src/libs/utils/utils.qrc @@ -168,6 +168,8 @@ images/eye_closed@2x.png images/eye_open.png images/eye_open@2x.png + images/eyeoverlay.png + images/eyeoverlay@2x.png images/desktopdevicesmall.png images/desktopdevicesmall@2x.png images/reset@2x.png diff --git a/src/plugins/qmlpreview/qmlpreviewplugin.cpp b/src/plugins/qmlpreview/qmlpreviewplugin.cpp index 3a5ec69aed7..114b13ee78d 100644 --- a/src/plugins/qmlpreview/qmlpreviewplugin.cpp +++ b/src/plugins/qmlpreview/qmlpreviewplugin.cpp @@ -40,14 +40,19 @@ #include #include +#include + #include +#include #include +#include #include #include #include #include +#include using namespace ProjectExplorer; @@ -155,12 +160,12 @@ QmlPreviewPluginPrivate::QmlPreviewPluginPrivate(QmlPreviewPlugin *parent) Core::ActionContainer *menu = Core::ActionManager::actionContainer( Constants::M_BUILDPROJECT); - QAction *action = new QAction(Tr::tr("QML Preview"), this); - action->setToolTip(Tr::tr("Preview changes to QML code live in your application.")); - action->setEnabled(ProjectManager::startupProject() != nullptr); - connect(ProjectManager::instance(), &ProjectManager::startupProjectChanged, action, + QAction *runPreviewAction = new QAction(Tr::tr("QML Preview"), this); + runPreviewAction->setToolTip(Tr::tr("Preview changes to QML code live in your application.")); + runPreviewAction->setEnabled(ProjectManager::startupProject() != nullptr); + connect(ProjectManager::instance(), &ProjectManager::startupProjectChanged, runPreviewAction, &QAction::setEnabled); - connect(action, &QAction::triggered, this, [this] { + connect(runPreviewAction, &QAction::triggered, this, [this] { if (auto multiLanguageAspect = QmlProjectManager::QmlMultiLanguageAspect::current()) m_localeIsoCode = multiLanguageAspect->currentLocale(); bool skipDeploy = false; @@ -171,19 +176,52 @@ QmlPreviewPluginPrivate::QmlPreviewPluginPrivate(QmlPreviewPlugin *parent) ProjectExplorerPlugin::runStartupProject(Constants::QML_PREVIEW_RUN_MODE, skipDeploy); }); menu->addAction( - Core::ActionManager::registerAction(action, "QmlPreview.RunPreview"), + Core::ActionManager::registerAction(runPreviewAction, "QmlPreview.RunPreview"), Constants::G_BUILD_RUN); menu = Core::ActionManager::actionContainer(Constants::M_FILECONTEXT); - action = new QAction(Tr::tr("Preview File"), this); - connect(action, &QAction::triggered, q, &QmlPreviewPlugin::previewCurrentFile); + QAction *previewFileAction = new QAction(Tr::tr("Preview File"), this); + connect(previewFileAction, &QAction::triggered, q, &QmlPreviewPlugin::previewCurrentFile); menu->addAction( - Core::ActionManager::registerAction(action, "QmlPreview.PreviewFile", Core::Context(Constants::C_PROJECT_TREE)), + Core::ActionManager::registerAction(previewFileAction, "QmlPreview.PreviewFile", + Core::Context(Constants::C_PROJECT_TREE)), Constants::G_FILE_OTHER); - action->setVisible(false); - connect(ProjectTree::instance(), &ProjectTree::currentNodeChanged, action, [action](Node *node) { - const FileNode *fileNode = node ? node->asFileNode() : nullptr; - action->setVisible(fileNode ? fileNode->fileType() == FileType::QML : false); + previewFileAction->setVisible(false); + connect(ProjectTree::instance(), &ProjectTree::currentNodeChanged, previewFileAction, + [previewFileAction] (Node *node) { + const FileNode *fileNode = node ? node->asFileNode() : nullptr; + previewFileAction->setVisible(fileNode && fileNode->fileType() == FileType::QML); + }); + connect(Core::EditorManager::instance(), &Core::EditorManager::editorOpened, this, + [runPreviewAction] (Core::IEditor *editor) { + if (!editor) + return; + if (!editor->document()) + return; + + if (const QString mimeType = editor->document()->mimeType(); + mimeType != Utils::Constants::QML_MIMETYPE + && mimeType != Utils::Constants::QMLUI_MIMETYPE) { + return; + } + + auto *textEditor = qobject_cast(editor); + if (!textEditor) + return; + TextEditor::TextEditorWidget *widget = textEditor->editorWidget(); + if (!widget) + return; + QToolBar *toolBar = widget->toolBar(); + if (!toolBar) + return; + + const QIcon icon = Utils::Icon({ + {":/utils/images/run_small.png", Utils::Theme::IconsRunToolBarColor}, + {":/utils/images/eyeoverlay.png", Utils::Theme::IconsDebugColor} + }).icon(); + Utils::ProxyAction *action = + Utils::ProxyAction::proxyActionWithIcon(runPreviewAction, icon); + toolBar->insertAction(nullptr, action); }); m_parseThread.start(); diff --git a/src/tools/icons/qtcreatoricons.svg b/src/tools/icons/qtcreatoricons.svg index a6052a92002..a3514e84ffd 100644 --- a/src/tools/icons/qtcreatoricons.svg +++ b/src/tools/icons/qtcreatoricons.svg @@ -3786,6 +3786,29 @@ id="path4682" sodipodi:nodetypes="cczccccc" /> + + + + +