diff --git a/src/plugins/imageviewer/imageviewer.cpp b/src/plugins/imageviewer/imageviewer.cpp index c979c93fd4b..a2ad9225ca6 100644 --- a/src/plugins/imageviewer/imageviewer.cpp +++ b/src/plugins/imageviewer/imageviewer.cpp @@ -26,7 +26,6 @@ #include "imageviewer.h" #include "imageviewerfile.h" -#include "imagevieweractionhandler.h" #include "imageviewerconstants.h" #include "imageview.h" #include "ui_imageviewertoolbar.h" diff --git a/src/plugins/imageviewer/imageviewer.pro b/src/plugins/imageviewer/imageviewer.pro index 6855222ba2e..df0bf03215a 100644 --- a/src/plugins/imageviewer/imageviewer.pro +++ b/src/plugins/imageviewer/imageviewer.pro @@ -6,16 +6,14 @@ HEADERS += \ imageviewerfile.h \ imageviewer.h \ imageview.h \ - imageviewerconstants.h \ - imagevieweractionhandler.h + imageviewerconstants.h SOURCES += \ imageviewerplugin.cpp \ imageviewerfactory.cpp \ imageviewerfile.cpp \ imageviewer.cpp \ - imageview.cpp \ - imagevieweractionhandler.cpp + imageview.cpp RESOURCES += \ imageviewer.qrc diff --git a/src/plugins/imageviewer/imagevieweractionhandler.cpp b/src/plugins/imageviewer/imagevieweractionhandler.cpp deleted file mode 100644 index b183335f5bd..00000000000 --- a/src/plugins/imageviewer/imagevieweractionhandler.cpp +++ /dev/null @@ -1,130 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 Denis Mingulov. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#include "imagevieweractionhandler.h" -#include "imageviewer.h" -#include "imageviewerconstants.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -namespace ImageViewer { -namespace Internal { - -enum SupportedActions { - ZoomIn = 0, - ZoomOut, - OriginalSize, - FitToScreen, - Background, - Outline, - ToggleAnimation -}; - -ImageViewerActionHandler::ImageViewerActionHandler(QObject *parent) : - QObject(parent), m_signalMapper(new QSignalMapper(this)) -{ - connect(m_signalMapper, SIGNAL(mapped(int)), SLOT(actionTriggered(int))); -} - -void ImageViewerActionHandler::actionTriggered(int supportedAction) -{ - Core::IEditor *editor = Core::EditorManager::currentEditor(); - ImageViewer *viewer = qobject_cast(editor); - if (!viewer) - return; - - SupportedActions action = static_cast(supportedAction); - switch (action) { - case ZoomIn: - viewer->zoomIn(); - break; - case ZoomOut: - viewer->zoomOut(); - break; - case OriginalSize: - viewer->resetToOriginalSize(); - break; - case FitToScreen: - viewer->fitToScreen(); - break; - case Background: - viewer->switchViewBackground(); - break; - case Outline: - viewer->switchViewOutline(); - break; - case ToggleAnimation: - viewer->togglePlay(); - break; - default: - break; - } -} - -void ImageViewerActionHandler::createActions() -{ - registerNewAction(ZoomIn, Constants::ACTION_ZOOM_IN, tr("Zoom In"), - QKeySequence(tr("Ctrl++"))); - registerNewAction(ZoomOut, Constants::ACTION_ZOOM_OUT, tr("Zoom Out"), - QKeySequence(tr("Ctrl+-"))); - registerNewAction(OriginalSize, Constants::ACTION_ORIGINAL_SIZE, tr("Original Size"), - QKeySequence(Core::UseMacShortcuts ? tr("Meta+0") : tr("Ctrl+0"))); - registerNewAction(FitToScreen, Constants::ACTION_FIT_TO_SCREEN, tr("Fit To Screen"), - QKeySequence(tr("Ctrl+="))); - registerNewAction(Background, Constants::ACTION_BACKGROUND, tr("Switch Background"), - QKeySequence(tr("Ctrl+["))); - registerNewAction(Outline, Constants::ACTION_OUTLINE, tr("Switch Outline"), - QKeySequence(tr("Ctrl+]"))); - registerNewAction(ToggleAnimation, Constants::ACTION_TOGGLE_ANIMATION, tr("Toggle Animation"), - QKeySequence()); -} - -/*! - Creates a new action with the internal id \a actionId, command id \a id, - and keyboard shortcut \a key, and registers it in the action manager. -*/ - -void ImageViewerActionHandler::registerNewAction(int actionId, Core::Id id, - const QString &title, const QKeySequence &key) -{ - Core::Context context(Constants::IMAGEVIEWER_ID); - QAction *action = new QAction(title, this); - Core::Command *command = Core::ActionManager::registerAction(action, id, context); - command->setDefaultKeySequence(key); - connect(action, SIGNAL(triggered()), m_signalMapper, SLOT(map())); - m_signalMapper->setMapping(action, actionId); -} - -} // namespace Internal -} // namespace ImageViewer diff --git a/src/plugins/imageviewer/imagevieweractionhandler.h b/src/plugins/imageviewer/imagevieweractionhandler.h deleted file mode 100644 index a6074bed78f..00000000000 --- a/src/plugins/imageviewer/imagevieweractionhandler.h +++ /dev/null @@ -1,65 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 Denis Mingulov. -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#ifndef IMAGEVIEWERACTIONHANDLER_H -#define IMAGEVIEWERACTIONHANDLER_H - -#include - -#include - -QT_BEGIN_NAMESPACE -class QKeySequence; -class QSignalMapper; -QT_END_NAMESPACE - -namespace ImageViewer { -namespace Internal { - -class ImageViewerActionHandler : public QObject -{ - Q_OBJECT - -public: - explicit ImageViewerActionHandler(QObject *parent = 0); - void createActions(); - -public slots: - void actionTriggered(int supportedAction); - -protected: - - void registerNewAction(int actionId, Core::Id id, const QString &title, - const QKeySequence &key); - -private: - QSignalMapper *m_signalMapper; -}; - -} // namespace Internal -} // namespace ImageViewer - -#endif // IMAGEVIEWERACTIONHANDLER_H diff --git a/src/plugins/imageviewer/imageviewerfactory.cpp b/src/plugins/imageviewer/imageviewerfactory.cpp index 048625ec4d8..d3419369679 100644 --- a/src/plugins/imageviewer/imageviewerfactory.cpp +++ b/src/plugins/imageviewer/imageviewerfactory.cpp @@ -57,10 +57,5 @@ Core::IEditor *ImageViewerFactory::createEditor() return new ImageViewer(); } -void ImageViewerFactory::extensionsInitialized() -{ - m_actionHandler.createActions(); -} - } // namespace Internal } // namespace ImageViewer diff --git a/src/plugins/imageviewer/imageviewerfactory.h b/src/plugins/imageviewer/imageviewerfactory.h index 73d1a407e67..d288ddaf4b7 100644 --- a/src/plugins/imageviewer/imageviewerfactory.h +++ b/src/plugins/imageviewer/imageviewerfactory.h @@ -27,8 +27,6 @@ #ifndef IMAGEVIEWERFACTORY_H #define IMAGEVIEWERFACTORY_H -#include "imagevieweractionhandler.h" - #include #include #include @@ -36,8 +34,6 @@ namespace ImageViewer { namespace Internal { -class ImageViewerActionHandler; - class ImageViewerFactory : public Core::IEditorFactory { Q_OBJECT @@ -45,11 +41,6 @@ public: explicit ImageViewerFactory(QObject *parent = 0); Core::IEditor *createEditor(); - - void extensionsInitialized(); - -private: - ImageViewerActionHandler m_actionHandler; }; } // namespace Internal diff --git a/src/plugins/imageviewer/imageviewerplugin.cpp b/src/plugins/imageviewer/imageviewerplugin.cpp index a3cb9b193bf..e0420f2bfc3 100644 --- a/src/plugins/imageviewer/imageviewerplugin.cpp +++ b/src/plugins/imageviewer/imageviewerplugin.cpp @@ -25,12 +25,18 @@ ****************************************************************************/ #include "imageviewerplugin.h" +#include "imageviewer.h" #include "imageviewerfactory.h" #include "imageviewerconstants.h" +#include +#include #include #include +#include +#include +#include #include #include #include @@ -52,9 +58,71 @@ bool ImageViewerPlugin::initialize(const QStringList &arguments, QString *errorM return true; } +static inline ImageViewer *currentImageViewer() +{ + return qobject_cast(Core::EditorManager::currentEditor()); +} + void ImageViewerPlugin::extensionsInitialized() { - m_factory->extensionsInitialized(); + QAction *a = registerNewAction(Constants::ACTION_ZOOM_IN, tr("Zoom In"), + QKeySequence(tr("Ctrl++"))); + connect(a, &QAction::triggered, this, [this]() { + if (ImageViewer *iv = currentImageViewer()) + iv->zoomIn(); + }); + + a = registerNewAction(Constants::ACTION_ZOOM_OUT, tr("Zoom Out"), + QKeySequence(tr("Ctrl+-"))); + connect(a, &QAction::triggered, this, [this]() { + if (ImageViewer *iv = currentImageViewer()) + iv->zoomOut(); + }); + + a = registerNewAction(Constants::ACTION_ORIGINAL_SIZE, tr("Original Size"), + QKeySequence(Core::UseMacShortcuts ? tr("Meta+0") : tr("Ctrl+0"))); + connect(a, &QAction::triggered, this, [this]() { + if (ImageViewer *iv = currentImageViewer()) + iv->resetToOriginalSize(); + }); + + a = registerNewAction(Constants::ACTION_FIT_TO_SCREEN, tr("Fit To Screen"), + QKeySequence(tr("Ctrl+="))); + connect(a, &QAction::triggered, this, [this]() { + if (ImageViewer *iv = currentImageViewer()) + iv->fitToScreen(); + }); + + a = registerNewAction(Constants::ACTION_BACKGROUND, tr("Switch Background"), + QKeySequence(tr("Ctrl+["))); + connect(a, &QAction::triggered, this, [this]() { + if (ImageViewer *iv = currentImageViewer()) + iv->switchViewBackground(); + }); + + a = registerNewAction(Constants::ACTION_OUTLINE, tr("Switch Outline"), + QKeySequence(tr("Ctrl+]"))); + connect(a, &QAction::triggered, this, [this]() { + if (ImageViewer *iv = currentImageViewer()) + iv->switchViewOutline(); + }); + + a = registerNewAction(Constants::ACTION_TOGGLE_ANIMATION, tr("Toggle Animation"), + QKeySequence()); + connect(a, &QAction::triggered, this, [this]() { + if (ImageViewer *iv = currentImageViewer()) + iv->togglePlay(); + }); +} + +QAction *ImageViewerPlugin::registerNewAction(Core::Id id, + const QString &title, const QKeySequence &key) +{ + Core::Context context(Constants::IMAGEVIEWER_ID); + QAction *action = new QAction(title, this); + Core::Command *command = Core::ActionManager::registerAction(action, id, context); + command->setDefaultKeySequence(key); + return action; } } // namespace Internal diff --git a/src/plugins/imageviewer/imageviewerplugin.h b/src/plugins/imageviewer/imageviewerplugin.h index 24a06391b78..841295dd88b 100644 --- a/src/plugins/imageviewer/imageviewerplugin.h +++ b/src/plugins/imageviewer/imageviewerplugin.h @@ -32,6 +32,13 @@ #include #include +QT_BEGIN_NAMESPACE +class QAction; +class QKeySequence; +QT_END_NAMESPACE + +namespace Core { class Id; } + namespace ImageViewer { namespace Internal { @@ -49,6 +56,8 @@ public: void extensionsInitialized(); private: + QAction *registerNewAction(Core::Id id, const QString &title, const QKeySequence &key); + QPointer m_factory; };