ImageViewer: Remove class ImageViewerActionHandler.

Create the actions in ImageViewerPlugin and
use lambdas instead of a QSignalMapper.

Change-Id: Ic74622ca5e9daf6f0d367d00b709d732153dc62e
Reviewed-by: Alessandro Portale <alessandro.portale@theqtcompany.com>
This commit is contained in:
Friedemann Kleint
2016-03-15 14:18:20 +01:00
parent 3e040d4c3d
commit f393da3451
8 changed files with 80 additions and 215 deletions

View File

@@ -26,7 +26,6 @@
#include "imageviewer.h"
#include "imageviewerfile.h"
#include "imagevieweractionhandler.h"
#include "imageviewerconstants.h"
#include "imageview.h"
#include "ui_imageviewertoolbar.h"

View File

@@ -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

View File

@@ -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 <coreplugin/icore.h>
#include <coreplugin/actionmanager/actionmanager.h>
#include <coreplugin/actionmanager/command.h>
#include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/id.h>
#include <QAction>
#include <QList>
#include <QSignalMapper>
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<ImageViewer *>(editor);
if (!viewer)
return;
SupportedActions action = static_cast<SupportedActions>(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

View File

@@ -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 <coreplugin/id.h>
#include <QObject>
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

View File

@@ -57,10 +57,5 @@ Core::IEditor *ImageViewerFactory::createEditor()
return new ImageViewer();
}
void ImageViewerFactory::extensionsInitialized()
{
m_actionHandler.createActions();
}
} // namespace Internal
} // namespace ImageViewer

View File

@@ -27,8 +27,6 @@
#ifndef IMAGEVIEWERFACTORY_H
#define IMAGEVIEWERFACTORY_H
#include "imagevieweractionhandler.h"
#include <coreplugin/editormanager/ieditorfactory.h>
#include <coreplugin/editormanager/ieditor.h>
#include <coreplugin/idocument.h>
@@ -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

View File

@@ -25,12 +25,18 @@
****************************************************************************/
#include "imageviewerplugin.h"
#include "imageviewer.h"
#include "imageviewerfactory.h"
#include "imageviewerconstants.h"
#include <QAction>
#include <QCoreApplication>
#include <QDebug>
#include <coreplugin/icore.h>
#include <coreplugin/actionmanager/actionmanager.h>
#include <coreplugin/actionmanager/command.h>
#include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/id.h>
#include <extensionsystem/pluginmanager.h>
#include <utils/mimetypes/mimedatabase.h>
@@ -52,9 +58,71 @@ bool ImageViewerPlugin::initialize(const QStringList &arguments, QString *errorM
return true;
}
static inline ImageViewer *currentImageViewer()
{
return qobject_cast<ImageViewer *>(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

View File

@@ -32,6 +32,13 @@
#include <QPointer>
#include <QtPlugin>
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<ImageViewerFactory> m_factory;
};