Imageviewer: add button to copy image as data url

Change-Id: Ia30751ebb9b567b22de9d1256bb59aa2116366ba
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Tasuku Suzuki
2022-05-07 03:50:41 +09:00
parent f35cd3c13f
commit 8a6c033ede
7 changed files with 35 additions and 3 deletions

View File

@@ -29,6 +29,7 @@
#include "exportdialog.h" #include "exportdialog.h"
#include "multiexportdialog.h" #include "multiexportdialog.h"
#include "imageviewerfile.h" #include "imageviewerfile.h"
#include "utils/mimeutils.h"
#include <coreplugin/messagemanager.h> #include <coreplugin/messagemanager.h>
@@ -43,6 +44,8 @@
#include <QImage> #include <QImage>
#include <QPainter> #include <QPainter>
#include <QPixmap> #include <QPixmap>
#include <QClipboard>
#include <QGuiApplication>
#include <QDir> #include <QDir>
#include <QFileInfo> #include <QFileInfo>
@@ -250,6 +253,16 @@ void ImageView::exportMultiImages()
#endif // !QT_NO_SVG #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) void ImageView::setViewBackground(bool enable)
{ {
m_showBackground = enable; m_showBackground = enable;

View File

@@ -53,6 +53,7 @@ public:
void exportImage(); void exportImage();
void exportMultiImages(); void exportMultiImages();
void copyDataUrl();
void setViewBackground(bool enable); void setViewBackground(bool enable);
void setViewOutline(bool enable); void setViewOutline(bool enable);
void zoomIn(); void zoomIn();

View File

@@ -102,6 +102,7 @@ void ImageViewer::ctor()
d->ui_toolbar.setupUi(d->toolbar); d->ui_toolbar.setupUi(d->toolbar);
d->ui_toolbar.toolButtonExportImage->setIcon(Utils::Icons::EXPORTFILE_TOOLBAR.icon()); d->ui_toolbar.toolButtonExportImage->setIcon(Utils::Icons::EXPORTFILE_TOOLBAR.icon());
d->ui_toolbar.toolButtonMultiExportImages->setIcon(Utils::Icons::MULTIEXPORTFILE_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({ const Utils::Icon backgroundIcon({
{":/utils/images/desktopdevicesmall.png", Utils::Theme::IconsBaseColor}}); {":/utils/images/desktopdevicesmall.png", Utils::Theme::IconsBaseColor}});
d->ui_toolbar.toolButtonBackground->setIcon(backgroundIcon.icon()); 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.toolButtonExportImage->setCommandId(Constants::ACTION_EXPORT_IMAGE);
d->ui_toolbar.toolButtonMultiExportImages->setCommandId(Constants::ACTION_EXPORT_MULTI_IMAGES); 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.toolButtonZoomIn->setCommandId(Core::Constants::ZOOM_IN);
d->ui_toolbar.toolButtonZoomOut->setCommandId(Core::Constants::ZOOM_OUT); d->ui_toolbar.toolButtonZoomOut->setCommandId(Core::Constants::ZOOM_OUT);
d->ui_toolbar.toolButtonOriginalSize->setCommandId(Core::Constants::ZOOM_RESET); d->ui_toolbar.toolButtonOriginalSize->setCommandId(Core::Constants::ZOOM_RESET);
@@ -136,6 +138,8 @@ void ImageViewer::ctor()
d->imageView, &ImageView::exportImage); d->imageView, &ImageView::exportImage);
connect(d->ui_toolbar.toolButtonMultiExportImages, &QAbstractButton::clicked, connect(d->ui_toolbar.toolButtonMultiExportImages, &QAbstractButton::clicked,
d->imageView, &ImageView::exportMultiImages); d->imageView, &ImageView::exportMultiImages);
connect(d->ui_toolbar.toolButtonCopyDataUrl, &QAbstractButton::clicked,
d->imageView, &ImageView::copyDataUrl);
connect(d->ui_toolbar.toolButtonZoomIn, &QAbstractButton::clicked, connect(d->ui_toolbar.toolButtonZoomIn, &QAbstractButton::clicked,
d->imageView, &ImageView::zoomIn); d->imageView, &ImageView::zoomIn);
connect(d->ui_toolbar.toolButtonZoomOut, &QAbstractButton::clicked, connect(d->ui_toolbar.toolButtonZoomOut, &QAbstractButton::clicked,
@@ -207,6 +211,11 @@ void ImageViewer::exportMultiImages()
d->ui_toolbar.toolButtonMultiExportImages->click(); d->ui_toolbar.toolButtonMultiExportImages->click();
} }
void ImageViewer::copyDataUrl()
{
d->ui_toolbar.toolButtonCopyDataUrl->click();
}
void ImageViewer::imageSizeUpdated(const QSize &size) void ImageViewer::imageSizeUpdated(const QSize &size)
{ {
QString imageSizeText; QString imageSizeText;

View File

@@ -56,6 +56,7 @@ public:
void exportImage(); void exportImage();
void exportMultiImages(); void exportMultiImages();
void copyDataUrl();
void imageSizeUpdated(const QSize &size); void imageSizeUpdated(const QSize &size);
void scaleFactorUpdate(qreal factor); void scaleFactorUpdate(qreal factor);

View File

@@ -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_IMAGE[] = "ImageViewer.ExportImage";
const char ACTION_EXPORT_MULTI_IMAGES[] = "ImageViewer.ExportMultiImages"; 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_FIT_TO_SCREEN[] = "ImageViewer.FitToScreen";
const char ACTION_BACKGROUND[] = "ImageViewer.Background"; const char ACTION_BACKGROUND[] = "ImageViewer.Background";
const char ACTION_OUTLINE[] = "ImageViewer.Outline"; const char ACTION_OUTLINE[] = "ImageViewer.Outline";

View File

@@ -125,6 +125,12 @@ public:
&ImageViewer::exportMultiImages, &ImageViewer::exportMultiImages,
tr("Export Multiple Images"), tr("Export Multiple Images"),
}; };
ImageViewerAction copyDataUrlAction {
Constants::ACTION_COPY_DATA_URL,
&ImageViewer::copyDataUrl,
tr("Copy as Data URL"),
};
}; };
ImageViewerPlugin::~ImageViewerPlugin() ImageViewerPlugin::~ImageViewerPlugin()

View File

@@ -31,11 +31,12 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="Core::CommandButton" name="toolButtonCopyDataUrl">
</widget>
</item>
<item> <item>
<widget class="Core::CommandButton" name="toolButtonBackground"> <widget class="Core::CommandButton" name="toolButtonBackground">
<property name="toolTipBase">
<string>Show Background</string>
</property>
<property name="checkable"> <property name="checkable">
<bool>true</bool> <bool>true</bool>
</property> </property>