diff options
author | hjk <[email protected]> | 2023-11-17 17:01:21 +0100 |
---|---|---|
committer | hjk <[email protected]> | 2023-11-20 07:24:28 +0000 |
commit | 11d5fbe04cada3b844699483b740cd9dc3dc8320 (patch) | |
tree | 4081612b0f5b6829c02b59335836c9fced2bab1f /src/plugins/imageviewer/imageviewer.cpp | |
parent | 8aa78b119a93c28fd7c1cef3a1c1da186582ebcb (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.cpp | 327 |
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" |