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 "multiexportdialog.h"
#include "imageviewerfile.h"
#include "utils/mimeutils.h"
#include <coreplugin/messagemanager.h>
@@ -43,6 +44,8 @@
#include <QImage>
#include <QPainter>
#include <QPixmap>
#include <QClipboard>
#include <QGuiApplication>
#include <QDir>
#include <QFileInfo>
@@ -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;

View File

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

View File

@@ -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;

View File

@@ -56,6 +56,7 @@ public:
void exportImage();
void exportMultiImages();
void copyDataUrl();
void imageSizeUpdated(const QSize &size);
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_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";

View File

@@ -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()

View File

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