forked from qt-creator/qt-creator
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:
@@ -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;
|
||||||
|
@@ -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();
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
@@ -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";
|
||||||
|
@@ -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()
|
||||||
|
@@ -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>
|
||||||
|
Reference in New Issue
Block a user