From 8a6c033edeeca11d7f30364bdd6418982a643ed0 Mon Sep 17 00:00:00 2001 From: Tasuku Suzuki Date: Sat, 7 May 2022 03:50:41 +0900 Subject: [PATCH] Imageviewer: add button to copy image as data url Change-Id: Ia30751ebb9b567b22de9d1256bb59aa2116366ba Reviewed-by: hjk Reviewed-by: Alessandro Portale --- src/plugins/imageviewer/imageview.cpp | 13 +++++++++++++ src/plugins/imageviewer/imageview.h | 1 + src/plugins/imageviewer/imageviewer.cpp | 9 +++++++++ src/plugins/imageviewer/imageviewer.h | 1 + src/plugins/imageviewer/imageviewerconstants.h | 1 + src/plugins/imageviewer/imageviewerplugin.cpp | 6 ++++++ src/plugins/imageviewer/imageviewertoolbar.ui | 7 ++++--- 7 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/plugins/imageviewer/imageview.cpp b/src/plugins/imageviewer/imageview.cpp index eebf8097bc0..e0770eb3c17 100644 --- a/src/plugins/imageviewer/imageview.cpp +++ b/src/plugins/imageviewer/imageview.cpp @@ -29,6 +29,7 @@ #include "exportdialog.h" #include "multiexportdialog.h" #include "imageviewerfile.h" +#include "utils/mimeutils.h" #include @@ -43,6 +44,8 @@ #include #include #include +#include +#include #include #include @@ -250,6 +253,16 @@ void ImageView::exportMultiImages() #endif // !QT_NO_SVG } +void ImageView::copyDataUrl() +{ + Utils::MimeType mimeType = Utils::mimeTypeForFile(m_file->filePath()); + QByteArray data = m_file->filePath().fileContents(); + const auto url = QStringLiteral("data:%1;base64,%2") + .arg(mimeType.name()) + .arg(QString::fromLatin1(data.toBase64())); + QGuiApplication::clipboard()->setText(url); +} + void ImageView::setViewBackground(bool enable) { m_showBackground = enable; diff --git a/src/plugins/imageviewer/imageview.h b/src/plugins/imageviewer/imageview.h index 5404c69d7d7..4f18f7620c1 100644 --- a/src/plugins/imageviewer/imageview.h +++ b/src/plugins/imageviewer/imageview.h @@ -53,6 +53,7 @@ public: void exportImage(); void exportMultiImages(); + void copyDataUrl(); void setViewBackground(bool enable); void setViewOutline(bool enable); void zoomIn(); diff --git a/src/plugins/imageviewer/imageviewer.cpp b/src/plugins/imageviewer/imageviewer.cpp index c676fe22d59..399ae70f5fe 100644 --- a/src/plugins/imageviewer/imageviewer.cpp +++ b/src/plugins/imageviewer/imageviewer.cpp @@ -102,6 +102,7 @@ void ImageViewer::ctor() d->ui_toolbar.setupUi(d->toolbar); d->ui_toolbar.toolButtonExportImage->setIcon(Utils::Icons::EXPORTFILE_TOOLBAR.icon()); d->ui_toolbar.toolButtonMultiExportImages->setIcon(Utils::Icons::MULTIEXPORTFILE_TOOLBAR.icon()); + d->ui_toolbar.toolButtonCopyDataUrl->setIcon(Utils::Icons::COPY_TOOLBAR.icon()); const Utils::Icon backgroundIcon({ {":/utils/images/desktopdevicesmall.png", Utils::Theme::IconsBaseColor}}); d->ui_toolbar.toolButtonBackground->setIcon(backgroundIcon.icon()); @@ -123,6 +124,7 @@ void ImageViewer::ctor() d->ui_toolbar.toolButtonExportImage->setCommandId(Constants::ACTION_EXPORT_IMAGE); d->ui_toolbar.toolButtonMultiExportImages->setCommandId(Constants::ACTION_EXPORT_MULTI_IMAGES); + d->ui_toolbar.toolButtonCopyDataUrl->setCommandId(Constants::ACTION_COPY_DATA_URL); d->ui_toolbar.toolButtonZoomIn->setCommandId(Core::Constants::ZOOM_IN); d->ui_toolbar.toolButtonZoomOut->setCommandId(Core::Constants::ZOOM_OUT); d->ui_toolbar.toolButtonOriginalSize->setCommandId(Core::Constants::ZOOM_RESET); @@ -136,6 +138,8 @@ void ImageViewer::ctor() d->imageView, &ImageView::exportImage); connect(d->ui_toolbar.toolButtonMultiExportImages, &QAbstractButton::clicked, d->imageView, &ImageView::exportMultiImages); + connect(d->ui_toolbar.toolButtonCopyDataUrl, &QAbstractButton::clicked, + d->imageView, &ImageView::copyDataUrl); connect(d->ui_toolbar.toolButtonZoomIn, &QAbstractButton::clicked, d->imageView, &ImageView::zoomIn); connect(d->ui_toolbar.toolButtonZoomOut, &QAbstractButton::clicked, @@ -207,6 +211,11 @@ void ImageViewer::exportMultiImages() d->ui_toolbar.toolButtonMultiExportImages->click(); } +void ImageViewer::copyDataUrl() +{ + d->ui_toolbar.toolButtonCopyDataUrl->click(); +} + void ImageViewer::imageSizeUpdated(const QSize &size) { QString imageSizeText; diff --git a/src/plugins/imageviewer/imageviewer.h b/src/plugins/imageviewer/imageviewer.h index 4dbf2ecf46e..5077b1521a4 100644 --- a/src/plugins/imageviewer/imageviewer.h +++ b/src/plugins/imageviewer/imageviewer.h @@ -56,6 +56,7 @@ public: void exportImage(); void exportMultiImages(); + void copyDataUrl(); void imageSizeUpdated(const QSize &size); void scaleFactorUpdate(qreal factor); diff --git a/src/plugins/imageviewer/imageviewerconstants.h b/src/plugins/imageviewer/imageviewerconstants.h index 8a72fd4678c..af7766abe66 100644 --- a/src/plugins/imageviewer/imageviewerconstants.h +++ b/src/plugins/imageviewer/imageviewerconstants.h @@ -36,6 +36,7 @@ const char IMAGEVIEWER_DISPLAY_NAME[] = QT_TRANSLATE_NOOP("OpenWith::Editors", " const char ACTION_EXPORT_IMAGE[] = "ImageViewer.ExportImage"; const char ACTION_EXPORT_MULTI_IMAGES[] = "ImageViewer.ExportMultiImages"; +const char ACTION_COPY_DATA_URL[] = "ImageViewer.CopyDataUrl"; const char ACTION_FIT_TO_SCREEN[] = "ImageViewer.FitToScreen"; const char ACTION_BACKGROUND[] = "ImageViewer.Background"; const char ACTION_OUTLINE[] = "ImageViewer.Outline"; diff --git a/src/plugins/imageviewer/imageviewerplugin.cpp b/src/plugins/imageviewer/imageviewerplugin.cpp index 2b8c68315f3..2c13f93ad8a 100644 --- a/src/plugins/imageviewer/imageviewerplugin.cpp +++ b/src/plugins/imageviewer/imageviewerplugin.cpp @@ -125,6 +125,12 @@ public: &ImageViewer::exportMultiImages, tr("Export Multiple Images"), }; + + ImageViewerAction copyDataUrlAction { + Constants::ACTION_COPY_DATA_URL, + &ImageViewer::copyDataUrl, + tr("Copy as Data URL"), + }; }; ImageViewerPlugin::~ImageViewerPlugin() diff --git a/src/plugins/imageviewer/imageviewertoolbar.ui b/src/plugins/imageviewer/imageviewertoolbar.ui index 3aac796f5d3..6ad9334ea78 100644 --- a/src/plugins/imageviewer/imageviewertoolbar.ui +++ b/src/plugins/imageviewer/imageviewertoolbar.ui @@ -31,11 +31,12 @@ + + + + - - Show Background - true