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/fileutils.h>
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
|
#include <utils/qtcsettings.h>
|
||||||
|
|
||||||
#include <QClipboard>
|
#include <QClipboard>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
@@ -34,6 +35,11 @@
|
|||||||
#include <QSvgRenderer>
|
#include <QSvgRenderer>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char kSettingsGroup[] = "ImageViewer";
|
||||||
|
const char kSettingsBackground[] = "ShowBackground";
|
||||||
|
const char kSettingsOutline[] = "ShowOutline";
|
||||||
|
const char kSettingsFitToScreen[] = "FitToScreen";
|
||||||
|
|
||||||
namespace ImageViewer {
|
namespace ImageViewer {
|
||||||
namespace Constants {
|
namespace Constants {
|
||||||
const qreal DEFAULT_SCALE_FACTOR = 1.2;
|
const qreal DEFAULT_SCALE_FACTOR = 1.2;
|
||||||
@@ -105,7 +111,7 @@ void ImageView::createScene()
|
|||||||
m_backgroundItem = new QGraphicsRectItem(m_imageItem->boundingRect());
|
m_backgroundItem = new QGraphicsRectItem(m_imageItem->boundingRect());
|
||||||
m_backgroundItem->setBrush(Qt::white);
|
m_backgroundItem->setBrush(Qt::white);
|
||||||
m_backgroundItem->setPen(Qt::NoPen);
|
m_backgroundItem->setPen(Qt::NoPen);
|
||||||
m_backgroundItem->setVisible(m_showBackground);
|
m_backgroundItem->setVisible(m_settings.showBackground);
|
||||||
m_backgroundItem->setZValue(-1);
|
m_backgroundItem->setZValue(-1);
|
||||||
|
|
||||||
// outline
|
// outline
|
||||||
@@ -114,7 +120,7 @@ void ImageView::createScene()
|
|||||||
outline.setCosmetic(true);
|
outline.setCosmetic(true);
|
||||||
m_outlineItem->setPen(outline);
|
m_outlineItem->setPen(outline);
|
||||||
m_outlineItem->setBrush(Qt::NoBrush);
|
m_outlineItem->setBrush(Qt::NoBrush);
|
||||||
m_outlineItem->setVisible(m_showOutline);
|
m_outlineItem->setVisible(m_settings.showOutline);
|
||||||
m_outlineItem->setZValue(1);
|
m_outlineItem->setZValue(1);
|
||||||
|
|
||||||
QGraphicsScene *s = scene();
|
QGraphicsScene *s = scene();
|
||||||
@@ -242,14 +248,14 @@ void ImageView::copyDataUrl()
|
|||||||
|
|
||||||
void ImageView::setViewBackground(bool enable)
|
void ImageView::setViewBackground(bool enable)
|
||||||
{
|
{
|
||||||
m_showBackground = enable;
|
m_settings.showBackground = enable;
|
||||||
if (m_backgroundItem)
|
if (m_backgroundItem)
|
||||||
m_backgroundItem->setVisible(enable);
|
m_backgroundItem->setVisible(enable);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImageView::setViewOutline(bool enable)
|
void ImageView::setViewOutline(bool enable)
|
||||||
{
|
{
|
||||||
m_showOutline = enable;
|
m_settings.showOutline = enable;
|
||||||
if (m_outlineItem)
|
if (m_outlineItem)
|
||||||
m_outlineItem->setVisible(enable);
|
m_outlineItem->setVisible(enable);
|
||||||
}
|
}
|
||||||
@@ -276,7 +282,7 @@ void ImageView::wheelEvent(QWheelEvent *event)
|
|||||||
void ImageView::resizeEvent(QResizeEvent *event)
|
void ImageView::resizeEvent(QResizeEvent *event)
|
||||||
{
|
{
|
||||||
QGraphicsView::resizeEvent(event);
|
QGraphicsView::resizeEvent(event);
|
||||||
if (m_fitToScreen)
|
if (m_settings.fitToScreen)
|
||||||
doFitToScreen();
|
doFitToScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -305,12 +311,39 @@ void ImageView::resetToOriginalSize()
|
|||||||
|
|
||||||
void ImageView::setFitToScreen(bool fit)
|
void ImageView::setFitToScreen(bool fit)
|
||||||
{
|
{
|
||||||
if (fit == m_fitToScreen)
|
if (fit == m_settings.fitToScreen)
|
||||||
return;
|
return;
|
||||||
m_fitToScreen = fit;
|
m_settings.fitToScreen = fit;
|
||||||
if (m_fitToScreen)
|
if (m_settings.fitToScreen)
|
||||||
doFitToScreen();
|
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()
|
void ImageView::doFitToScreen()
|
||||||
|
|||||||
@@ -8,6 +8,10 @@
|
|||||||
|
|
||||||
QT_FORWARD_DECLARE_CLASS(QImage)
|
QT_FORWARD_DECLARE_CLASS(QImage)
|
||||||
|
|
||||||
|
namespace Utils {
|
||||||
|
class QtcSettings;
|
||||||
|
}
|
||||||
|
|
||||||
namespace ImageViewer::Internal {
|
namespace ImageViewer::Internal {
|
||||||
|
|
||||||
class ImageViewerFile;
|
class ImageViewerFile;
|
||||||
@@ -22,6 +26,13 @@ class ImageView : public QGraphicsView
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
struct Settings
|
||||||
|
{
|
||||||
|
bool showBackground = false;
|
||||||
|
bool showOutline = true;
|
||||||
|
bool fitToScreen = false;
|
||||||
|
};
|
||||||
|
|
||||||
ImageView(ImageViewerFile *file);
|
ImageView(ImageViewerFile *file);
|
||||||
~ImageView() override;
|
~ImageView() override;
|
||||||
|
|
||||||
@@ -38,6 +49,10 @@ public:
|
|||||||
void resetToOriginalSize();
|
void resetToOriginalSize();
|
||||||
void setFitToScreen(bool fit);
|
void setFitToScreen(bool fit);
|
||||||
|
|
||||||
|
void readSettings(Utils::QtcSettings *settings);
|
||||||
|
void writeSettings(Utils::QtcSettings *settings) const;
|
||||||
|
Settings settings() const;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void scaleFactorChanged(qreal factor);
|
void scaleFactorChanged(qreal factor);
|
||||||
void imageSizeChanged(const QSize &size);
|
void imageSizeChanged(const QSize &size);
|
||||||
@@ -61,9 +76,7 @@ private:
|
|||||||
QGraphicsItem *m_imageItem = nullptr;
|
QGraphicsItem *m_imageItem = nullptr;
|
||||||
QGraphicsRectItem *m_backgroundItem = nullptr;
|
QGraphicsRectItem *m_backgroundItem = nullptr;
|
||||||
QGraphicsRectItem *m_outlineItem = nullptr;
|
QGraphicsRectItem *m_outlineItem = nullptr;
|
||||||
bool m_showBackground = false;
|
Settings m_settings;
|
||||||
bool m_showOutline = true;
|
|
||||||
bool m_fitToScreen = false;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // ImageViewer::Internal
|
} // ImageViewer::Internal
|
||||||
|
|||||||
@@ -92,6 +92,8 @@ ImageViewer::ImageViewer(const QSharedPointer<ImageViewerFile> &document)
|
|||||||
void ImageViewer::ctor()
|
void ImageViewer::ctor()
|
||||||
{
|
{
|
||||||
d->imageView = new ImageView(d->file.data());
|
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));
|
setContext(Core::Context(Constants::IMAGEVIEWER_ID));
|
||||||
setWidget(d->imageView);
|
setWidget(d->imageView);
|
||||||
@@ -112,12 +114,13 @@ void ImageViewer::ctor()
|
|||||||
d->toolButtonPlayPause = new CommandButton;
|
d->toolButtonPlayPause = new CommandButton;
|
||||||
|
|
||||||
d->toolButtonBackground->setCheckable(true);
|
d->toolButtonBackground->setCheckable(true);
|
||||||
d->toolButtonBackground->setChecked(false);
|
d->toolButtonBackground->setChecked(settings.showBackground);
|
||||||
|
|
||||||
d->toolButtonOutline->setCheckable(true);
|
d->toolButtonOutline->setCheckable(true);
|
||||||
d->toolButtonOutline->setChecked(true);
|
d->toolButtonOutline->setChecked(settings.showOutline);
|
||||||
|
|
||||||
d->toolButtonFitToScreen->setCheckable(true);
|
d->toolButtonFitToScreen->setCheckable(true);
|
||||||
|
d->toolButtonFitToScreen->setChecked(settings.fitToScreen);
|
||||||
|
|
||||||
d->toolButtonZoomIn->setAutoRepeat(true);
|
d->toolButtonZoomIn->setAutoRepeat(true);
|
||||||
|
|
||||||
@@ -153,6 +156,12 @@ void ImageViewer::ctor()
|
|||||||
// (photograph has outline - piece of paper)
|
// (photograph has outline - piece of paper)
|
||||||
updateButtonIconByTheme(d->toolButtonOutline, QLatin1String("emblem-photos"));
|
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->toolButtonExportImage->setCommandId(Constants::ACTION_EXPORT_IMAGE);
|
||||||
d->toolButtonMultiExportImages->setCommandId(Constants::ACTION_EXPORT_MULTI_IMAGES);
|
d->toolButtonMultiExportImages->setCommandId(Constants::ACTION_EXPORT_MULTI_IMAGES);
|
||||||
d->toolButtonCopyDataUrl->setCommandId(Constants::ACTION_COPY_DATA_URL);
|
d->toolButtonCopyDataUrl->setCommandId(Constants::ACTION_COPY_DATA_URL);
|
||||||
@@ -173,9 +182,12 @@ void ImageViewer::ctor()
|
|||||||
horizontalLayout->addWidget(d->toolButtonExportImage);
|
horizontalLayout->addWidget(d->toolButtonExportImage);
|
||||||
horizontalLayout->addWidget(d->toolButtonMultiExportImages);
|
horizontalLayout->addWidget(d->toolButtonMultiExportImages);
|
||||||
horizontalLayout->addWidget(d->toolButtonCopyDataUrl);
|
horizontalLayout->addWidget(d->toolButtonCopyDataUrl);
|
||||||
|
horizontalLayout->addWidget(new StyledSeparator);
|
||||||
horizontalLayout->addWidget(d->toolButtonBackground);
|
horizontalLayout->addWidget(d->toolButtonBackground);
|
||||||
horizontalLayout->addWidget(d->toolButtonOutline);
|
horizontalLayout->addWidget(d->toolButtonOutline);
|
||||||
horizontalLayout->addWidget(d->toolButtonFitToScreen);
|
horizontalLayout->addWidget(d->toolButtonFitToScreen);
|
||||||
|
horizontalLayout->addWidget(setAsDefaultButton);
|
||||||
|
horizontalLayout->addWidget(new StyledSeparator);
|
||||||
horizontalLayout->addWidget(d->toolButtonOriginalSize);
|
horizontalLayout->addWidget(d->toolButtonOriginalSize);
|
||||||
horizontalLayout->addWidget(d->toolButtonZoomIn);
|
horizontalLayout->addWidget(d->toolButtonZoomIn);
|
||||||
horizontalLayout->addWidget(d->toolButtonZoomOut);
|
horizontalLayout->addWidget(d->toolButtonZoomOut);
|
||||||
@@ -231,6 +243,9 @@ void ImageViewer::ctor()
|
|||||||
this, &ImageViewer::updatePauseAction);
|
this, &ImageViewer::updatePauseAction);
|
||||||
connect(d->imageView, &ImageView::scaleFactorChanged,
|
connect(d->imageView, &ImageView::scaleFactorChanged,
|
||||||
this, &ImageViewer::scaleFactorUpdate);
|
this, &ImageViewer::scaleFactorUpdate);
|
||||||
|
connect(setAsDefault, &QAction::triggered, d->imageView, [this] {
|
||||||
|
d->imageView->writeSettings(ICore::settings());
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
ImageViewer::~ImageViewer()
|
ImageViewer::~ImageViewer()
|
||||||
|
|||||||
Reference in New Issue
Block a user