aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/imageviewer/imageviewer.cpp
diff options
context:
space:
mode:
authorhjk <[email protected]>2023-11-17 17:01:21 +0100
committerhjk <[email protected]>2023-11-20 07:24:28 +0000
commit11d5fbe04cada3b844699483b740cd9dc3dc8320 (patch)
tree4081612b0f5b6829c02b59335836c9fced2bab1f /src/plugins/imageviewer/imageviewer.cpp
parent8aa78b119a93c28fd7c1cef3a1c1da186582ebcb (diff)
ImageViewer: Move Viewer class definition to .cpp
And de-pimpl. Change-Id: I2c4acc95a7d583b4bfbc98bee3c989425d9306c1 Reviewed-by: Jarek Kobus <[email protected]>
Diffstat (limited to 'src/plugins/imageviewer/imageviewer.cpp')
-rw-r--r--src/plugins/imageviewer/imageviewer.cpp327
1 files changed, 176 insertions, 151 deletions
diff --git a/src/plugins/imageviewer/imageviewer.cpp b/src/plugins/imageviewer/imageviewer.cpp
index d7694e654dc..fac7aaeefac 100644
--- a/src/plugins/imageviewer/imageviewer.cpp
+++ b/src/plugins/imageviewer/imageviewer.cpp
@@ -10,7 +10,6 @@
#include "imageviewertr.h"
#include <coreplugin/actionmanager/actionmanager.h>
-#include <coreplugin/actionmanager/command.h>
#include <coreplugin/actionmanager/commandbutton.h>
#include <coreplugin/coreconstants.h>
#include <coreplugin/editormanager/editormanager.h>
@@ -26,42 +25,69 @@
#include <QAction>
#include <QDebug>
-#include <QDir>
-#include <QFileInfo>
#include <QHBoxLayout>
#include <QImageReader>
#include <QLabel>
-#include <QMap>
#include <QMenu>
#include <QSpacerItem>
#include <QToolBar>
-#include <QWidget>
using namespace Core;
using namespace Utils;
namespace ImageViewer::Internal{
-struct ImageViewerPrivate
+class ImageViewer : public IEditor
{
- QString displayName;
- QSharedPointer<ImageViewerFile> file;
- ImageView *imageView;
- QWidget *toolbar;
-
- QToolButton *shareButton;
- CommandAction *actionExportImage;
- CommandAction *actionMultiExportImages;
- CommandAction *actionButtonCopyDataUrl;
- CommandAction *actionBackground;
- CommandAction *actionOutline;
- CommandAction *actionFitToScreen;
- CommandAction *actionOriginalSize;
- CommandAction *actionZoomIn;
- CommandAction *actionZoomOut;
- CommandAction *actionPlayPause;
- QLabel *labelImageSize;
- QLabel *labelInfo;
+ Q_OBJECT
+
+public:
+ ImageViewer();
+ ~ImageViewer() override;
+
+ Core::IDocument *document() const override;
+ QWidget *toolBar() override;
+
+ IEditor *duplicate() override;
+
+ void exportImage();
+ void exportMultiImages();
+ void copyDataUrl();
+ void imageSizeUpdated(const QSize &size);
+ void scaleFactorUpdate(qreal factor);
+
+ void switchViewBackground();
+ void switchViewOutline();
+ void zoomIn();
+ void zoomOut();
+ void resetToOriginalSize();
+ void fitToScreen();
+ void updateToolButtons();
+ void togglePlay();
+
+private:
+ ImageViewer(const QSharedPointer<ImageViewerFile> &document);
+ void ctor();
+ void playToggled();
+ void updatePauseAction();
+
+ QSharedPointer<ImageViewerFile> m_file;
+ ImageView *m_imageView;
+ QWidget *m_toolbar;
+
+ QToolButton *m_shareButton;
+ CommandAction *m_actionExportImage;
+ CommandAction *m_actionMultiExportImages;
+ CommandAction *m_actionButtonCopyDataUrl;
+ CommandAction *m_actionBackground;
+ CommandAction *m_actionOutline;
+ CommandAction *m_actionFitToScreen;
+ CommandAction *m_actionOriginalSize;
+ CommandAction *m_actionZoomIn;
+ CommandAction *m_actionZoomOut;
+ CommandAction *m_actionPlayPause;
+ QLabel *m_labelImageSize;
+ QLabel *m_labelInfo;
};
/*!
@@ -82,88 +108,86 @@ static bool updateIconByTheme(QAction *action, const QString &name)
}
ImageViewer::ImageViewer()
- : d(new ImageViewerPrivate)
{
- d->file.reset(new ImageViewerFile);
+ m_file.reset(new ImageViewerFile);
ctor();
}
ImageViewer::ImageViewer(const QSharedPointer<ImageViewerFile> &document)
- : d(new ImageViewerPrivate)
{
- d->file = document;
+ m_file = document;
ctor();
}
void ImageViewer::ctor()
{
- d->imageView = new ImageView(d->file.data());
- d->imageView->readSettings(ICore::settings());
- const ImageView::Settings settings = d->imageView->settings();
+ m_imageView = new ImageView(m_file.data());
+ m_imageView->readSettings(ICore::settings());
+ const ImageView::Settings settings = m_imageView->settings();
setContext(Core::Context(Constants::IMAGEVIEWER_ID));
- setWidget(d->imageView);
+ setWidget(m_imageView);
setDuplicateSupported(true);
// toolbar
- d->toolbar = new StyledBar;
-
- d->actionExportImage = new CommandAction(Constants::ACTION_EXPORT_IMAGE, d->toolbar);
- d->actionMultiExportImages = new CommandAction(Constants::ACTION_EXPORT_MULTI_IMAGES,
- d->toolbar);
- d->actionButtonCopyDataUrl = new CommandAction(Constants::ACTION_COPY_DATA_URL, d->toolbar);
- d->shareButton = new QToolButton;
- d->shareButton->setToolTip(Tr::tr("Export"));
- d->shareButton->setPopupMode(QToolButton::InstantPopup);
- d->shareButton->setIcon(Icons::EXPORTFILE_TOOLBAR.icon());
- d->shareButton->setProperty(StyleHelper::C_NO_ARROW, true);
- auto shareMenu = new QMenu(d->shareButton);
- shareMenu->addAction(d->actionExportImage);
- shareMenu->addAction(d->actionMultiExportImages);
- shareMenu->addAction(d->actionButtonCopyDataUrl);
- d->shareButton->setMenu(shareMenu);
-
- d->actionBackground = new CommandAction(Constants::ACTION_BACKGROUND, d->toolbar);
- d->actionOutline = new CommandAction(Constants::ACTION_OUTLINE, d->toolbar);
- d->actionFitToScreen = new CommandAction(Constants::ACTION_FIT_TO_SCREEN, d->toolbar);
- d->actionOriginalSize = new CommandAction(Core::Constants::ZOOM_RESET, d->toolbar);
- d->actionZoomIn = new CommandAction(Core::Constants::ZOOM_IN, d->toolbar);
- d->actionZoomOut = new CommandAction(Core::Constants::ZOOM_OUT, d->toolbar);
- d->actionPlayPause = new CommandAction(Constants::ACTION_TOGGLE_ANIMATION, d->toolbar);
-
- d->actionBackground->setCheckable(true);
- d->actionBackground->setChecked(settings.showBackground);
-
- d->actionOutline->setCheckable(true);
- d->actionOutline->setChecked(settings.showOutline);
-
- d->actionFitToScreen->setCheckable(true);
- d->actionFitToScreen->setChecked(settings.fitToScreen);
-
- d->actionZoomIn->setAutoRepeat(true);
-
- d->actionZoomOut->setAutoRepeat(true);
+ m_toolbar = new StyledBar;
+
+ m_actionExportImage = new CommandAction(Constants::ACTION_EXPORT_IMAGE, m_toolbar);
+ m_actionMultiExportImages = new CommandAction(Constants::ACTION_EXPORT_MULTI_IMAGES,
+ m_toolbar);
+ m_actionButtonCopyDataUrl = new CommandAction(Constants::ACTION_COPY_DATA_URL, m_toolbar);
+ m_shareButton = new QToolButton;
+ m_shareButton->setToolTip(Tr::tr("Export"));
+ m_shareButton->setPopupMode(QToolButton::InstantPopup);
+ m_shareButton->setIcon(Icons::EXPORTFILE_TOOLBAR.icon());
+ m_shareButton->setProperty(StyleHelper::C_NO_ARROW, true);
+ auto shareMenu = new QMenu(m_shareButton);
+ shareMenu->addAction(m_actionExportImage);
+ shareMenu->addAction(m_actionMultiExportImages);
+ shareMenu->addAction(m_actionButtonCopyDataUrl);
+ m_shareButton->setMenu(shareMenu);
+
+ m_actionBackground = new CommandAction(Constants::ACTION_BACKGROUND, m_toolbar);
+ m_actionOutline = new CommandAction(Constants::ACTION_OUTLINE, m_toolbar);
+ m_actionFitToScreen = new CommandAction(Constants::ACTION_FIT_TO_SCREEN, m_toolbar);
+ m_actionOriginalSize = new CommandAction(Core::Constants::ZOOM_RESET, m_toolbar);
+ m_actionZoomIn = new CommandAction(Core::Constants::ZOOM_IN, m_toolbar);
+ m_actionZoomOut = new CommandAction(Core::Constants::ZOOM_OUT, m_toolbar);
+ m_actionPlayPause = new CommandAction(Constants::ACTION_TOGGLE_ANIMATION, m_toolbar);
+
+ m_actionBackground->setCheckable(true);
+ m_actionBackground->setChecked(settings.showBackground);
+
+ m_actionOutline->setCheckable(true);
+ m_actionOutline->setChecked(settings.showOutline);
+
+ m_actionFitToScreen->setCheckable(true);
+ m_actionFitToScreen->setChecked(settings.fitToScreen);
+
+ m_actionZoomIn->setAutoRepeat(true);
+
+ m_actionZoomOut->setAutoRepeat(true);
const Icon backgroundIcon({{":/utils/images/desktopdevicesmall.png", Theme::IconsBaseColor}});
- d->actionBackground->setIcon(backgroundIcon.icon());
- d->actionOutline->setIcon(Icons::BOUNDING_RECT.icon());
- d->actionZoomIn->setIcon(ActionManager::command(Core::Constants::ZOOM_IN)->action()->icon());
- d->actionZoomOut->setIcon(ActionManager::command(Core::Constants::ZOOM_OUT)->action()->icon());
- d->actionOriginalSize->setIcon(
+ m_actionBackground->setIcon(backgroundIcon.icon());
+ m_actionOutline->setIcon(Icons::BOUNDING_RECT.icon());
+ m_actionZoomIn->setIcon(ActionManager::command(Core::Constants::ZOOM_IN)->action()->icon());
+ m_actionZoomOut->setIcon(ActionManager::command(Core::Constants::ZOOM_OUT)->action()->icon());
+ m_actionOriginalSize->setIcon(
ActionManager::command(Core::Constants::ZOOM_RESET)->action()->icon());
- d->actionFitToScreen->setIcon(Icons::FITTOVIEW_TOOLBAR.icon());
+ m_actionFitToScreen->setIcon(Icons::FITTOVIEW_TOOLBAR.icon());
// icons update - try to use system theme
- updateIconByTheme(d->actionFitToScreen, QLatin1String("zoom-fit-best"));
+ updateIconByTheme(m_actionFitToScreen, QLatin1String("zoom-fit-best"));
// a display - something is on the background
- updateIconByTheme(d->actionBackground, QLatin1String("video-display"));
+ updateIconByTheme(m_actionBackground, QLatin1String("video-display"));
// "emblem to specify the directory where the user stores photographs"
// (photograph has outline - piece of paper)
- updateIconByTheme(d->actionOutline, QLatin1String("emblem-photos"));
+ updateIconByTheme(m_actionOutline, QLatin1String("emblem-photos"));
- auto setAsDefault = new QAction(Tr::tr("Set as Default"), d->toolbar);
+ auto setAsDefault = new QAction(Tr::tr("Set as Default"), m_toolbar);
const auto updateSetAsDefaultToolTip = [this, setAsDefault] {
- const ImageView::Settings settings = d->imageView->settings();
+ const ImageView::Settings settings = m_imageView->settings();
const QString on = Tr::tr("on");
const QString off = Tr::tr("off");
setAsDefault->setToolTip(
@@ -176,100 +200,99 @@ void ImageViewer::ctor()
};
updateSetAsDefaultToolTip();
- d->labelImageSize = new QLabel;
- d->labelInfo = new QLabel;
+ m_labelImageSize = new QLabel;
+ m_labelInfo = new QLabel;
auto bar = new QToolBar;
bar->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
- bar->addWidget(d->shareButton);
+ bar->addWidget(m_shareButton);
bar->addSeparator();
- bar->addAction(d->actionOriginalSize);
- bar->addAction(d->actionZoomIn);
- bar->addAction(d->actionZoomOut);
- bar->addAction(d->actionPlayPause);
- bar->addAction(d->actionPlayPause);
+ bar->addAction(m_actionOriginalSize);
+ bar->addAction(m_actionZoomIn);
+ bar->addAction(m_actionZoomOut);
+ bar->addAction(m_actionPlayPause);
+ bar->addAction(m_actionPlayPause);
bar->addSeparator();
- bar->addAction(d->actionBackground);
- bar->addAction(d->actionOutline);
- bar->addAction(d->actionFitToScreen);
+ bar->addAction(m_actionBackground);
+ bar->addAction(m_actionOutline);
+ bar->addAction(m_actionFitToScreen);
bar->addAction(setAsDefault);
- auto horizontalLayout = new QHBoxLayout(d->toolbar);
+ auto horizontalLayout = new QHBoxLayout(m_toolbar);
horizontalLayout->setSpacing(0);
horizontalLayout->setContentsMargins(0, 0, 0, 0);
horizontalLayout->addWidget(bar);
horizontalLayout->addItem(
new QSpacerItem(315, 20, QSizePolicy::Expanding, QSizePolicy::Minimum));
horizontalLayout->addWidget(new StyledSeparator);
- horizontalLayout->addWidget(d->labelImageSize);
+ horizontalLayout->addWidget(m_labelImageSize);
horizontalLayout->addWidget(new StyledSeparator);
- horizontalLayout->addWidget(d->labelInfo);
+ horizontalLayout->addWidget(m_labelInfo);
// connections
- connect(d->actionExportImage, &QAction::triggered, d->imageView, &ImageView::exportImage);
- connect(d->actionMultiExportImages,
+ connect(m_actionExportImage, &QAction::triggered, m_imageView, &ImageView::exportImage);
+ connect(m_actionMultiExportImages,
&QAction::triggered,
- d->imageView,
+ m_imageView,
&ImageView::exportMultiImages);
- connect(d->actionButtonCopyDataUrl, &QAction::triggered, d->imageView, &ImageView::copyDataUrl);
- connect(d->actionZoomIn, &QAction::triggered, d->imageView, &ImageView::zoomIn);
- connect(d->actionZoomOut, &QAction::triggered, d->imageView, &ImageView::zoomOut);
- connect(d->actionFitToScreen, &QAction::triggered, d->imageView, &ImageView::setFitToScreen);
- connect(d->imageView,
+ connect(m_actionButtonCopyDataUrl, &QAction::triggered, m_imageView, &ImageView::copyDataUrl);
+ connect(m_actionZoomIn, &QAction::triggered, m_imageView, &ImageView::zoomIn);
+ connect(m_actionZoomOut, &QAction::triggered, m_imageView, &ImageView::zoomOut);
+ connect(m_actionFitToScreen, &QAction::triggered, m_imageView, &ImageView::setFitToScreen);
+ connect(m_imageView,
&ImageView::fitToScreenChanged,
- d->actionFitToScreen,
+ m_actionFitToScreen,
&QAction::setChecked);
- connect(d->actionOriginalSize,
+ connect(m_actionOriginalSize,
&QAction::triggered,
- d->imageView,
+ m_imageView,
&ImageView::resetToOriginalSize);
- connect(d->actionBackground, &QAction::toggled, d->imageView, &ImageView::setViewBackground);
- connect(d->actionOutline, &QAction::toggled, d->imageView, &ImageView::setViewOutline);
- connect(d->actionPlayPause, &QAction::triggered, this, &ImageViewer::playToggled);
- connect(d->file.data(), &ImageViewerFile::imageSizeChanged,
+ connect(m_actionBackground, &QAction::toggled, m_imageView, &ImageView::setViewBackground);
+ connect(m_actionOutline, &QAction::toggled, m_imageView, &ImageView::setViewOutline);
+ connect(m_actionPlayPause, &QAction::triggered, this, &ImageViewer::playToggled);
+ connect(m_file.data(), &ImageViewerFile::imageSizeChanged,
this, &ImageViewer::imageSizeUpdated);
- connect(d->file.data(), &ImageViewerFile::openFinished,
- d->imageView, &ImageView::createScene);
- connect(d->file.data(), &ImageViewerFile::openFinished,
+ connect(m_file.data(), &ImageViewerFile::openFinished,
+ m_imageView, &ImageView::createScene);
+ connect(m_file.data(), &ImageViewerFile::openFinished,
this, &ImageViewer::updateToolButtons);
- connect(d->file.data(), &ImageViewerFile::aboutToReload,
- d->imageView, &ImageView::reset);
- connect(d->file.data(), &ImageViewerFile::reloadFinished,
- d->imageView, &ImageView::createScene);
- connect(d->file.data(), &ImageViewerFile::movieStateChanged,
+ connect(m_file.data(), &ImageViewerFile::aboutToReload,
+ m_imageView, &ImageView::reset);
+ connect(m_file.data(), &ImageViewerFile::reloadFinished,
+ m_imageView, &ImageView::createScene);
+ connect(m_file.data(), &ImageViewerFile::movieStateChanged,
this, &ImageViewer::updatePauseAction);
- connect(d->imageView, &ImageView::scaleFactorChanged,
+ connect(m_imageView, &ImageView::scaleFactorChanged,
this, &ImageViewer::scaleFactorUpdate);
- connect(setAsDefault, &QAction::triggered, d->imageView, [this, updateSetAsDefaultToolTip] {
- d->imageView->writeSettings(ICore::settings());
+ connect(setAsDefault, &QAction::triggered, m_imageView, [this, updateSetAsDefaultToolTip] {
+ m_imageView->writeSettings(ICore::settings());
updateSetAsDefaultToolTip();
});
}
ImageViewer::~ImageViewer()
{
- delete d->imageView;
- delete d->toolbar;
- delete d;
+ delete m_imageView;
+ delete m_toolbar;
}
IDocument *ImageViewer::document() const
{
- return d->file.data();
+ return m_file.data();
}
QWidget *ImageViewer::toolBar()
{
- return d->toolbar;
+ return m_toolbar;
}
IEditor *ImageViewer::duplicate()
{
- auto other = new ImageViewer(d->file);
- other->d->imageView->createScene();
+ auto other = new ImageViewer(m_file);
+ other->m_imageView->createScene();
other->updateToolButtons();
- other->d->labelImageSize->setText(d->labelImageSize->text());
+ other->m_labelImageSize->setText(m_labelImageSize->text());
emit editorDuplicated(other);
@@ -278,19 +301,19 @@ IEditor *ImageViewer::duplicate()
void ImageViewer::exportImage()
{
- if (d->file->type() == ImageViewerFile::TypeSvg)
- d->actionExportImage->trigger();
+ if (m_file->type() == ImageViewerFile::TypeSvg)
+ m_actionExportImage->trigger();
}
void ImageViewer::exportMultiImages()
{
- if (d->file->type() == ImageViewerFile::TypeSvg)
- d->actionMultiExportImages->trigger();
+ if (m_file->type() == ImageViewerFile::TypeSvg)
+ m_actionMultiExportImages->trigger();
}
void ImageViewer::copyDataUrl()
{
- d->actionButtonCopyDataUrl->trigger();
+ m_actionButtonCopyDataUrl->trigger();
}
void ImageViewer::imageSizeUpdated(const QSize &size)
@@ -298,64 +321,64 @@ void ImageViewer::imageSizeUpdated(const QSize &size)
QString imageSizeText;
if (size.isValid())
imageSizeText = QString::fromLatin1("%1x%2").arg(size.width()).arg(size.height());
- d->labelImageSize->setText(imageSizeText);
+ m_labelImageSize->setText(imageSizeText);
}
void ImageViewer::scaleFactorUpdate(qreal factor)
{
const QString info = QString::number(factor * 100, 'f', 2) + QLatin1Char('%');
- d->labelInfo->setText(info);
+ m_labelInfo->setText(info);
}
void ImageViewer::switchViewBackground()
{
- d->actionBackground->trigger();
+ m_actionBackground->trigger();
}
void ImageViewer::switchViewOutline()
{
- d->actionOutline->trigger();
+ m_actionOutline->trigger();
}
void ImageViewer::zoomIn()
{
- d->actionZoomIn->trigger();
+ m_actionZoomIn->trigger();
}
void ImageViewer::zoomOut()
{
- d->actionZoomOut->trigger();
+ m_actionZoomOut->trigger();
}
void ImageViewer::resetToOriginalSize()
{
- d->actionOriginalSize->trigger();
+ m_actionOriginalSize->trigger();
}
void ImageViewer::fitToScreen()
{
- d->actionFitToScreen->trigger();
+ m_actionFitToScreen->trigger();
}
void ImageViewer::updateToolButtons()
{
- const bool isSvg = d->file->type() == ImageViewerFile::TypeSvg;
- d->actionExportImage->setEnabled(isSvg);
- d->actionMultiExportImages->setEnabled(isSvg);
+ const bool isSvg = m_file->type() == ImageViewerFile::TypeSvg;
+ m_actionExportImage->setEnabled(isSvg);
+ m_actionMultiExportImages->setEnabled(isSvg);
updatePauseAction();
}
void ImageViewer::togglePlay()
{
- d->actionPlayPause->trigger();
+ m_actionPlayPause->trigger();
}
void ImageViewer::playToggled()
{
- QMovie *m = d->file->movie();
+ QMovie *m = m_file->movie();
if (!m)
return;
- const QMovie::MovieState state = d->file->movie()->state();
+ const QMovie::MovieState state = m_file->movie()->state();
switch (state) {
case QMovie::NotRunning:
m->start();
@@ -371,9 +394,9 @@ void ImageViewer::playToggled()
void ImageViewer::updatePauseAction()
{
- const bool isMovie = d->file->type() == ImageViewerFile::TypeMovie;
- const QMovie::MovieState state = isMovie ? d->file->movie()->state() : QMovie::NotRunning;
- CommandAction *a = d->actionPlayPause;
+ const bool isMovie = m_file->type() == ImageViewerFile::TypeMovie;
+ const QMovie::MovieState state = isMovie ? m_file->movie()->state() : QMovie::NotRunning;
+ CommandAction *a = m_actionPlayPause;
switch (state) {
case QMovie::NotRunning:
a->setToolTipBase(Tr::tr("Play Animation"));
@@ -393,7 +416,7 @@ void ImageViewer::updatePauseAction()
// Factory
-class ImageViewerFactory final : public Core::IEditorFactory
+class ImageViewerFactory final : public IEditorFactory
{
public:
ImageViewerFactory()
@@ -458,3 +481,5 @@ void setupImageViewer(QObject *guard)
}
} // ImageViewer::Internal
+
+#include "imageviewer.moc"