forked from qt-creator/qt-creator
ImageViewer: Add button for saving current view settings as default
Fixes: QTCREATORBUG-27816 Change-Id: I85806634ea9f10761d281ab8c8cf892dd1b65145 Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
|
||||
#include <utils/fileutils.h>
|
||||
#include <utils/qtcassert.h>
|
||||
#include <utils/qtcsettings.h>
|
||||
|
||||
#include <QClipboard>
|
||||
#include <QDir>
|
||||
@@ -34,6 +35,11 @@
|
||||
#include <QSvgRenderer>
|
||||
#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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -92,6 +92,8 @@ ImageViewer::ImageViewer(const QSharedPointer<ImageViewerFile> &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()
|
||||
|
||||
Reference in New Issue
Block a user