diff --git a/src/libs/utils/images/eyeoverlay.png b/src/libs/utils/images/eyeoverlay.png
new file mode 100644
index 00000000000..af434244478
Binary files /dev/null and b/src/libs/utils/images/eyeoverlay.png differ
diff --git a/src/libs/utils/images/eyeoverlay@2x.png b/src/libs/utils/images/eyeoverlay@2x.png
new file mode 100644
index 00000000000..e475fd1690f
Binary files /dev/null and b/src/libs/utils/images/eyeoverlay@2x.png differ
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" />
+
+
+
+
+