diff --git a/src/plugins/imageviewer/imageview.cpp b/src/plugins/imageviewer/imageview.cpp index 984ad0fd793..3f670d9e5cd 100644 --- a/src/plugins/imageviewer/imageview.cpp +++ b/src/plugins/imageviewer/imageview.cpp @@ -14,6 +14,7 @@ #include #include +#include #include #include @@ -34,6 +35,11 @@ #include #endif +const char kSettingsGroup[] = "ImageViewer"; +const char kSettingsBackground[] = "ShowBackground"; +const char kSettingsOutline[] = "ShowOutline"; +const char kSettingsFitToScreen[] = "FitToScreen"; + namespace ImageViewer { namespace Constants { const qreal DEFAULT_SCALE_FACTOR = 1.2; @@ -105,7 +111,7 @@ void ImageView::createScene() m_backgroundItem = new QGraphicsRectItem(m_imageItem->boundingRect()); m_backgroundItem->setBrush(Qt::white); m_backgroundItem->setPen(Qt::NoPen); - m_backgroundItem->setVisible(m_showBackground); + m_backgroundItem->setVisible(m_settings.showBackground); m_backgroundItem->setZValue(-1); // outline @@ -114,7 +120,7 @@ void ImageView::createScene() outline.setCosmetic(true); m_outlineItem->setPen(outline); m_outlineItem->setBrush(Qt::NoBrush); - m_outlineItem->setVisible(m_showOutline); + m_outlineItem->setVisible(m_settings.showOutline); m_outlineItem->setZValue(1); QGraphicsScene *s = scene(); @@ -242,14 +248,14 @@ void ImageView::copyDataUrl() void ImageView::setViewBackground(bool enable) { - m_showBackground = enable; + m_settings.showBackground = enable; if (m_backgroundItem) m_backgroundItem->setVisible(enable); } void ImageView::setViewOutline(bool enable) { - m_showOutline = enable; + m_settings.showOutline = enable; if (m_outlineItem) m_outlineItem->setVisible(enable); } @@ -276,7 +282,7 @@ void ImageView::wheelEvent(QWheelEvent *event) void ImageView::resizeEvent(QResizeEvent *event) { QGraphicsView::resizeEvent(event); - if (m_fitToScreen) + if (m_settings.fitToScreen) doFitToScreen(); } @@ -305,12 +311,39 @@ void ImageView::resetToOriginalSize() void ImageView::setFitToScreen(bool fit) { - if (fit == m_fitToScreen) + if (fit == m_settings.fitToScreen) return; - m_fitToScreen = fit; - if (m_fitToScreen) + m_settings.fitToScreen = fit; + if (m_settings.fitToScreen) doFitToScreen(); - emit fitToScreenChanged(m_fitToScreen); + emit fitToScreenChanged(m_settings.fitToScreen); +} + +void ImageView::readSettings(Utils::QtcSettings *settings) +{ + const Settings def; + settings->beginGroup(kSettingsGroup); + m_settings.showBackground = settings->value(kSettingsBackground, def.showBackground).toBool(); + m_settings.showOutline = settings->value(kSettingsOutline, def.showOutline).toBool(); + m_settings.fitToScreen = settings->value(kSettingsFitToScreen, def.fitToScreen).toBool(); + settings->endGroup(); +} + +void ImageView::writeSettings(Utils::QtcSettings *settings) const +{ + const Settings def; + settings->beginGroup(kSettingsGroup); + settings->setValueWithDefault(kSettingsBackground, + m_settings.showBackground, + def.showBackground); + settings->setValueWithDefault(kSettingsOutline, m_settings.showOutline, def.showOutline); + settings->setValueWithDefault(kSettingsFitToScreen, m_settings.fitToScreen, def.fitToScreen); + settings->endGroup(); +} + +ImageView::Settings ImageView::settings() const +{ + return m_settings; } void ImageView::doFitToScreen() diff --git a/src/plugins/imageviewer/imageview.h b/src/plugins/imageviewer/imageview.h index 8420305629c..e5980887b44 100644 --- a/src/plugins/imageviewer/imageview.h +++ b/src/plugins/imageviewer/imageview.h @@ -8,6 +8,10 @@ QT_FORWARD_DECLARE_CLASS(QImage) +namespace Utils { +class QtcSettings; +} + namespace ImageViewer::Internal { class ImageViewerFile; @@ -22,6 +26,13 @@ class ImageView : public QGraphicsView Q_OBJECT public: + struct Settings + { + bool showBackground = false; + bool showOutline = true; + bool fitToScreen = false; + }; + ImageView(ImageViewerFile *file); ~ImageView() override; @@ -38,6 +49,10 @@ public: void resetToOriginalSize(); void setFitToScreen(bool fit); + void readSettings(Utils::QtcSettings *settings); + void writeSettings(Utils::QtcSettings *settings) const; + Settings settings() const; + signals: void scaleFactorChanged(qreal factor); void imageSizeChanged(const QSize &size); @@ -61,9 +76,7 @@ private: QGraphicsItem *m_imageItem = nullptr; QGraphicsRectItem *m_backgroundItem = nullptr; QGraphicsRectItem *m_outlineItem = nullptr; - bool m_showBackground = false; - bool m_showOutline = true; - bool m_fitToScreen = false; + Settings m_settings; }; } // ImageViewer::Internal diff --git a/src/plugins/imageviewer/imageviewer.cpp b/src/plugins/imageviewer/imageviewer.cpp index a3ecd5de5f7..a448f2fe478 100644 --- a/src/plugins/imageviewer/imageviewer.cpp +++ b/src/plugins/imageviewer/imageviewer.cpp @@ -92,6 +92,8 @@ ImageViewer::ImageViewer(const QSharedPointer &document) void ImageViewer::ctor() { d->imageView = new ImageView(d->file.data()); + d->imageView->readSettings(ICore::settings()); + const ImageView::Settings settings = d->imageView->settings(); setContext(Core::Context(Constants::IMAGEVIEWER_ID)); setWidget(d->imageView); @@ -112,12 +114,13 @@ void ImageViewer::ctor() d->toolButtonPlayPause = new CommandButton; d->toolButtonBackground->setCheckable(true); - d->toolButtonBackground->setChecked(false); + d->toolButtonBackground->setChecked(settings.showBackground); d->toolButtonOutline->setCheckable(true); - d->toolButtonOutline->setChecked(true); + d->toolButtonOutline->setChecked(settings.showOutline); d->toolButtonFitToScreen->setCheckable(true); + d->toolButtonFitToScreen->setChecked(settings.fitToScreen); d->toolButtonZoomIn->setAutoRepeat(true); @@ -153,6 +156,12 @@ void ImageViewer::ctor() // (photograph has outline - piece of paper) updateButtonIconByTheme(d->toolButtonOutline, QLatin1String("emblem-photos")); + auto setAsDefaultButton = new QToolButton; + auto setAsDefault = new QAction(Tr::tr("Set as Default"), setAsDefaultButton); + setAsDefault->setToolTip(Tr::tr("Use the current settings for background, outline, and fitting " + "to screen as the default for new image viewers.")); + setAsDefaultButton->setDefaultAction(setAsDefault); + d->toolButtonExportImage->setCommandId(Constants::ACTION_EXPORT_IMAGE); d->toolButtonMultiExportImages->setCommandId(Constants::ACTION_EXPORT_MULTI_IMAGES); d->toolButtonCopyDataUrl->setCommandId(Constants::ACTION_COPY_DATA_URL); @@ -173,9 +182,12 @@ void ImageViewer::ctor() horizontalLayout->addWidget(d->toolButtonExportImage); horizontalLayout->addWidget(d->toolButtonMultiExportImages); horizontalLayout->addWidget(d->toolButtonCopyDataUrl); + horizontalLayout->addWidget(new StyledSeparator); horizontalLayout->addWidget(d->toolButtonBackground); horizontalLayout->addWidget(d->toolButtonOutline); horizontalLayout->addWidget(d->toolButtonFitToScreen); + horizontalLayout->addWidget(setAsDefaultButton); + horizontalLayout->addWidget(new StyledSeparator); horizontalLayout->addWidget(d->toolButtonOriginalSize); horizontalLayout->addWidget(d->toolButtonZoomIn); horizontalLayout->addWidget(d->toolButtonZoomOut); @@ -231,6 +243,9 @@ void ImageViewer::ctor() this, &ImageViewer::updatePauseAction); connect(d->imageView, &ImageView::scaleFactorChanged, this, &ImageViewer::scaleFactorUpdate); + connect(setAsDefault, &QAction::triggered, d->imageView, [this] { + d->imageView->writeSettings(ICore::settings()); + }); } ImageViewer::~ImageViewer()