aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/imageviewer/imageviewer.cpp
diff options
context:
space:
mode:
authorEike Ziller <[email protected]>2022-10-17 13:18:03 +0200
committerEike Ziller <[email protected]>2022-10-18 08:08:01 +0000
commitce6ab1a14d59acdf19860a446055130a179b76f6 (patch)
treef778ba21690612b1520528dec7eb4f46a094c122 /src/plugins/imageviewer/imageviewer.cpp
parent570a2f75ea757c47cab30dababbdcb812235f010 (diff)
ImageViewer: Improve tool bar size and behavior
Merge the various export functionality into one tool button instead of three, for this not-so-often used functionality. Put the actions into a QToolBar, so if the editor area is made so small that not all actions fit anymore, the tool bar gets the standard extension button for accessing the "overflowing" ones. Fixes: QTCREATORBUG-28309 Change-Id: I2e1fcee9414038aca49648f18f61e1f15ecf3e5a Reviewed-by: <[email protected]> Reviewed-by: Qt CI Bot <[email protected]> Reviewed-by: Alessandro Portale <[email protected]>
Diffstat (limited to 'src/plugins/imageviewer/imageviewer.cpp')
-rw-r--r--src/plugins/imageviewer/imageviewer.cpp247
1 files changed, 115 insertions, 132 deletions
diff --git a/src/plugins/imageviewer/imageviewer.cpp b/src/plugins/imageviewer/imageviewer.cpp
index a448f2fe478..be6f620bf31 100644
--- a/src/plugins/imageviewer/imageviewer.cpp
+++ b/src/plugins/imageviewer/imageviewer.cpp
@@ -28,8 +28,9 @@
#include <QImageReader>
#include <QLabel>
#include <QMap>
+#include <QMenu>
#include <QSpacerItem>
-#include <QWidget>
+#include <QToolBar>
#include <QWidget>
using namespace Core;
@@ -44,16 +45,17 @@ struct ImageViewerPrivate
ImageView *imageView;
QWidget *toolbar;
- CommandButton *toolButtonExportImage;
- CommandButton *toolButtonMultiExportImages;
- CommandButton *toolButtonCopyDataUrl;
- CommandButton *toolButtonBackground;
- CommandButton *toolButtonOutline;
- CommandButton *toolButtonFitToScreen;
- CommandButton *toolButtonOriginalSize;
- CommandButton *toolButtonZoomIn;
- CommandButton *toolButtonZoomOut;
- CommandButton *toolButtonPlayPause;
+ 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;
};
@@ -63,12 +65,12 @@ struct ImageViewerPrivate
from the current theme. Returns \c true if icon is updated, \c false
otherwise.
*/
-static bool updateButtonIconByTheme(QAbstractButton *button, const QString &name)
+static bool updateIconByTheme(QAction *action, const QString &name)
{
QTC_ASSERT(!name.isEmpty(), return false);
if (QIcon::hasThemeIcon(name)) {
- button->setIcon(QIcon::fromTheme(name));
+ action->setIcon(QIcon::fromTheme(name));
return true;
}
@@ -100,135 +102,116 @@ void ImageViewer::ctor()
setDuplicateSupported(true);
// toolbar
- d->toolbar = new QWidget;
-
- d->toolButtonExportImage = new CommandButton;
- d->toolButtonMultiExportImages = new CommandButton;
- d->toolButtonCopyDataUrl = new CommandButton;
- d->toolButtonBackground = new CommandButton;
- d->toolButtonOutline = new CommandButton;
- d->toolButtonFitToScreen = new CommandButton;
- d->toolButtonOriginalSize = new CommandButton;
- d->toolButtonZoomIn = new CommandButton;
- d->toolButtonZoomOut = new CommandButton;
- d->toolButtonPlayPause = new CommandButton;
-
- d->toolButtonBackground->setCheckable(true);
- d->toolButtonBackground->setChecked(settings.showBackground);
-
- d->toolButtonOutline->setCheckable(true);
- d->toolButtonOutline->setChecked(settings.showOutline);
-
- d->toolButtonFitToScreen->setCheckable(true);
- d->toolButtonFitToScreen->setChecked(settings.fitToScreen);
-
- d->toolButtonZoomIn->setAutoRepeat(true);
-
- d->toolButtonZoomOut->setAutoRepeat(true);
-
- d->toolButtonExportImage->setToolTipBase(Tr::tr("Export as Image"));
- d->toolButtonMultiExportImages->setToolTipBase(Tr::tr("Export Images of Multiple Sizes"));
- d->toolButtonOutline->setToolTipBase(Tr::tr("Show Outline"));
- d->toolButtonFitToScreen->setToolTipBase(Tr::tr("Fit to Screen"));
- d->toolButtonOriginalSize->setToolTipBase(Tr::tr("Original Size"));
- d->toolButtonZoomIn->setToolTipBase(Tr::tr("Zoom In"));
- d->toolButtonZoomOut->setToolTipBase(Tr::tr("Zoom Out"));
-
- d->toolButtonExportImage->setIcon(Icons::EXPORTFILE_TOOLBAR.icon());
- d->toolButtonMultiExportImages->setIcon(Icons::MULTIEXPORTFILE_TOOLBAR.icon());
- d->toolButtonCopyDataUrl->setIcon(Icons::COPY_TOOLBAR.icon());
+ 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("noArrow", 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);
+
const Icon backgroundIcon({{":/utils/images/desktopdevicesmall.png", Theme::IconsBaseColor}});
- d->toolButtonBackground->setIcon(backgroundIcon.icon());
- d->toolButtonOutline->setIcon(Icons::BOUNDING_RECT.icon());
- d->toolButtonZoomIn->setIcon(
- ActionManager::command(Core::Constants::ZOOM_IN)->action()->icon());
- d->toolButtonZoomOut->setIcon(
- ActionManager::command(Core::Constants::ZOOM_OUT)->action()->icon());
- d->toolButtonOriginalSize->setIcon(
- ActionManager::command(Core::Constants::ZOOM_RESET)->action()->icon());
- d->toolButtonFitToScreen->setIcon(Icons::FITTOVIEW_TOOLBAR.icon());
+ 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(
+ ActionManager::command(Core::Constants::ZOOM_RESET)->action()->icon());
+ d->actionFitToScreen->setIcon(Icons::FITTOVIEW_TOOLBAR.icon());
// icons update - try to use system theme
- updateButtonIconByTheme(d->toolButtonFitToScreen, QLatin1String("zoom-fit-best"));
+ updateIconByTheme(d->actionFitToScreen, QLatin1String("zoom-fit-best"));
// a display - something is on the background
- updateButtonIconByTheme(d->toolButtonBackground, QLatin1String("video-display"));
+ updateIconByTheme(d->actionBackground, QLatin1String("video-display"));
// "emblem to specify the directory where the user stores photographs"
// (photograph has outline - piece of paper)
- updateButtonIconByTheme(d->toolButtonOutline, QLatin1String("emblem-photos"));
+ updateIconByTheme(d->actionOutline, QLatin1String("emblem-photos"));
- auto setAsDefaultButton = new QToolButton;
- auto setAsDefault = new QAction(Tr::tr("Set as Default"), setAsDefaultButton);
+ auto setAsDefault = new QAction(Tr::tr("Set as Default"), d->toolbar);
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);
- d->toolButtonZoomIn->setCommandId(Core::Constants::ZOOM_IN);
- d->toolButtonZoomOut->setCommandId(Core::Constants::ZOOM_OUT);
- d->toolButtonOriginalSize->setCommandId(Core::Constants::ZOOM_RESET);
- d->toolButtonFitToScreen->setCommandId(Constants::ACTION_FIT_TO_SCREEN);
- d->toolButtonBackground->setCommandId(Constants::ACTION_BACKGROUND);
- d->toolButtonOutline->setCommandId(Constants::ACTION_OUTLINE);
- d->toolButtonPlayPause->setCommandId(Constants::ACTION_TOGGLE_ANIMATION);
d->labelImageSize = new QLabel;
d->labelInfo = new QLabel;
+ auto bar = new QToolBar;
+ bar->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
+
+ bar->addWidget(d->shareButton);
+ bar->addSeparator();
+ bar->addAction(d->actionOriginalSize);
+ bar->addAction(d->actionZoomIn);
+ bar->addAction(d->actionZoomOut);
+ bar->addAction(d->actionPlayPause);
+ bar->addAction(d->actionPlayPause);
+ bar->addSeparator();
+ bar->addAction(d->actionBackground);
+ bar->addAction(d->actionOutline);
+ bar->addAction(d->actionFitToScreen);
+ bar->addAction(setAsDefault);
+
auto horizontalLayout = new QHBoxLayout(d->toolbar);
horizontalLayout->setSpacing(0);
horizontalLayout->setContentsMargins(0, 0, 0, 0);
- 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);
- horizontalLayout->addWidget(d->toolButtonPlayPause);
- horizontalLayout->addWidget(d->toolButtonPlayPause);
- horizontalLayout->addWidget(new StyledSeparator);
- horizontalLayout->addItem(new QSpacerItem(315, 20, QSizePolicy::Expanding, QSizePolicy::Minimum));
+ horizontalLayout->addWidget(bar);
+ horizontalLayout->addItem(
+ new QSpacerItem(315, 20, QSizePolicy::Expanding, QSizePolicy::Minimum));
horizontalLayout->addWidget(new StyledSeparator);
horizontalLayout->addWidget(d->labelImageSize);
horizontalLayout->addWidget(new StyledSeparator);
horizontalLayout->addWidget(d->labelInfo);
// connections
- connect(d->toolButtonExportImage, &QAbstractButton::clicked,
- d->imageView, &ImageView::exportImage);
- connect(d->toolButtonMultiExportImages, &QAbstractButton::clicked,
- d->imageView, &ImageView::exportMultiImages);
- connect(d->toolButtonCopyDataUrl, &QAbstractButton::clicked,
- d->imageView, &ImageView::copyDataUrl);
- connect(d->toolButtonZoomIn, &QAbstractButton::clicked,
- d->imageView, &ImageView::zoomIn);
- connect(d->toolButtonZoomOut, &QAbstractButton::clicked,
- d->imageView, &ImageView::zoomOut);
- connect(d->toolButtonFitToScreen,
- &QAbstractButton::toggled,
+ connect(d->actionExportImage, &QAction::triggered, d->imageView, &ImageView::exportImage);
+ connect(d->actionMultiExportImages,
+ &QAction::triggered,
d->imageView,
- &ImageView::setFitToScreen);
+ &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,
&ImageView::fitToScreenChanged,
- d->toolButtonFitToScreen,
- &QAbstractButton::setChecked);
- connect(d->toolButtonOriginalSize,
- &QAbstractButton::clicked,
+ d->actionFitToScreen,
+ &QAction::setChecked);
+ connect(d->actionOriginalSize,
+ &QAction::triggered,
d->imageView,
&ImageView::resetToOriginalSize);
- connect(d->toolButtonBackground, &QAbstractButton::toggled,
- d->imageView, &ImageView::setViewBackground);
- connect(d->toolButtonOutline, &QAbstractButton::toggled,
- d->imageView, &ImageView::setViewOutline);
- connect(d->toolButtonPlayPause, &CommandButton::clicked,
- this, &ImageViewer::playToggled);
+ 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,
this, &ImageViewer::imageSizeUpdated);
connect(d->file.data(), &ImageViewerFile::openFinished,
@@ -280,18 +263,18 @@ IEditor *ImageViewer::duplicate()
void ImageViewer::exportImage()
{
if (d->file->type() == ImageViewerFile::TypeSvg)
- d->toolButtonExportImage->click();
+ d->actionExportImage->trigger();
}
void ImageViewer::exportMultiImages()
{
if (d->file->type() == ImageViewerFile::TypeSvg)
- d->toolButtonMultiExportImages->click();
+ d->actionMultiExportImages->trigger();
}
void ImageViewer::copyDataUrl()
{
- d->toolButtonCopyDataUrl->click();
+ d->actionButtonCopyDataUrl->trigger();
}
void ImageViewer::imageSizeUpdated(const QSize &size)
@@ -310,45 +293,45 @@ void ImageViewer::scaleFactorUpdate(qreal factor)
void ImageViewer::switchViewBackground()
{
- d->toolButtonBackground->click();
+ d->actionBackground->trigger();
}
void ImageViewer::switchViewOutline()
{
- d->toolButtonOutline->click();
+ d->actionOutline->trigger();
}
void ImageViewer::zoomIn()
{
- d->toolButtonZoomIn->click();
+ d->actionZoomIn->trigger();
}
void ImageViewer::zoomOut()
{
- d->toolButtonZoomOut->click();
+ d->actionZoomOut->trigger();
}
void ImageViewer::resetToOriginalSize()
{
- d->toolButtonOriginalSize->click();
+ d->actionOriginalSize->trigger();
}
void ImageViewer::fitToScreen()
{
- d->toolButtonFitToScreen->click();
+ d->actionFitToScreen->trigger();
}
void ImageViewer::updateToolButtons()
{
const bool isSvg = d->file->type() == ImageViewerFile::TypeSvg;
- d->toolButtonExportImage->setEnabled(isSvg);
- d->toolButtonMultiExportImages->setEnabled(isSvg);
+ d->actionExportImage->setEnabled(isSvg);
+ d->actionMultiExportImages->setEnabled(isSvg);
updatePauseAction();
}
void ImageViewer::togglePlay()
{
- d->toolButtonPlayPause->click();
+ d->actionPlayPause->trigger();
}
void ImageViewer::playToggled()
@@ -360,12 +343,12 @@ void ImageViewer::updatePauseAction()
{
bool isMovie = d->file->type() == ImageViewerFile::TypeMovie;
if (isMovie && !d->file->isPaused()) {
- d->toolButtonPlayPause->setToolTipBase(Tr::tr("Pause Animation"));
- d->toolButtonPlayPause->setIcon(Icons::INTERRUPT_SMALL_TOOLBAR.icon());
+ d->actionPlayPause->setToolTipBase(Tr::tr("Pause Animation"));
+ d->actionPlayPause->setIcon(Icons::INTERRUPT_SMALL_TOOLBAR.icon());
} else {
- d->toolButtonPlayPause->setToolTipBase(Tr::tr("Play Animation"));
- d->toolButtonPlayPause->setIcon(Icons::RUN_SMALL_TOOLBAR.icon());
- d->toolButtonPlayPause->setEnabled(isMovie);
+ d->actionPlayPause->setToolTipBase(Tr::tr("Play Animation"));
+ d->actionPlayPause->setIcon(Icons::RUN_SMALL_TOOLBAR.icon());
+ d->actionPlayPause->setEnabled(isMovie);
}
}