Commit 89280929 authored by Denis Mingulov's avatar Denis Mingulov Committed by Thorbjørn Lindeijer

ImageViewer: Register the actions with the action manager

Merge-request: 2165
Reviewed-by: default avatarThorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com>
parent 1f33357b
......@@ -30,12 +30,15 @@
#include "imageviewer.h"
#include "imageviewerfile.h"
#include "imagevieweractionhandler.h"
#include "imageviewerconstants.h"
#include "imageview.h"
#include "ui_imageviewertoolbar.h"
#include <coreplugin/icore.h>
#include <coreplugin/uniqueidmanager.h>
#include <coreplugin/actionmanager/actionmanager.h>
#include <coreplugin/actionmanager/command.h>
#include <utils/qtcassert.h>
#include <QtCore/QMap>
......@@ -215,5 +218,35 @@ bool ImageViewer::updateButtonIconByTheme(QAbstractButton *button, const QString
return false;
}
void ImageViewer::switchViewBackground()
{
d_ptr->ui_toolbar.toolButtonBackground->click();
}
void ImageViewer::switchViewOutline()
{
d_ptr->ui_toolbar.toolButtonOutline->click();
}
void ImageViewer::zoomIn()
{
d_ptr->ui_toolbar.toolButtonZoomIn->click();
}
void ImageViewer::zoomOut()
{
d_ptr->ui_toolbar.toolButtonZoomOut->click();
}
void ImageViewer::resetToOriginalSize()
{
d_ptr->ui_toolbar.toolButtonOriginalSize->click();
}
void ImageViewer::fitToScreen()
{
d_ptr->ui_toolbar.toolButtonFitToScreen->click();
}
} // namespace Internal
} // namespace ImageViewer
......@@ -38,6 +38,7 @@
#include <QtCore/QStringList>
QT_FORWARD_DECLARE_CLASS(QAbstractButton)
QT_FORWARD_DECLARE_CLASS(QAction)
namespace ImageViewer {
namespace Internal {
......@@ -77,9 +78,16 @@ public:
public slots:
void scaleFactorUpdate(qreal factor);
void switchViewBackground();
void switchViewOutline();
void zoomIn();
void zoomOut();
void resetToOriginalSize();
void fitToScreen();
private:
/*!
\brief Try to change button's icon to the one from the current theme
\brief Try to change button's icon to the one from the current theme.
\param button Button where an icon should be changed
\param name Icon name in the in the current icon theme
\return true if icon is updated, false otherwise
......
......@@ -9,14 +9,16 @@ HEADERS += \
imageviewerfile.h \
imageviewer.h \
imageview.h \
imageviewerconstants.h
imageviewerconstants.h \
imagevieweractionhandler.h
SOURCES += \
imageviewerplugin.cpp \
imageviewerfactory.cpp \
imageviewerfile.cpp \
imageviewer.cpp \
imageview.cpp
imageview.cpp \
imagevieweractionhandler.cpp
RESOURCES += \
imageviewer.qrc
......
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
** Copyright (c) 2010 Denis Mingulov.
**
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** Commercial Usage
**
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Nokia.
**
** GNU Lesser General Public License Usage
**
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** If you are unsure which license is appropriate for your use, please
** contact the sales department at http://qt.nokia.com/contact.
**
**************************************************************************/
#include "imagevieweractionhandler.h"
#include "imageviewer.h"
#include "imageviewerconstants.h"
#include <QtCore/QList>
#include <QtCore/QPointer>
#include <QtCore/QSignalMapper>
#include <QtGui/QAction>
#include <coreplugin/icore.h>
#include <coreplugin/uniqueidmanager.h>
#include <coreplugin/actionmanager/actionmanager.h>
#include <coreplugin/actionmanager/command.h>
#include <coreplugin/editormanager/editormanager.h>
namespace ImageViewer {
namespace Internal {
enum SupportedActions { ZoomIn = 0, ZoomOut, OriginalSize, FitToScreen, Background, Outline };
struct ImageViewerActionHandlerPrivate
{
QPointer<QAction> actionZoomIn;
QPointer<QAction> actionZoomOut;
QPointer<QAction> actionOriginalSize;
QPointer<QAction> actionFitToScreen;
QPointer<QAction> actionBackground;
QPointer<QAction> actionOutline;
QList<int> context;
QPointer<QSignalMapper> signalMapper;
};
ImageViewerActionHandler::ImageViewerActionHandler(QObject *parent) :
QObject(parent),
d_ptr(new ImageViewerActionHandlerPrivate)
{
d_ptr->context << Core::ICore::instance()->uniqueIDManager()
->uniqueIdentifier(Constants::IMAGEVIEWER_ID);
d_ptr->signalMapper = new QSignalMapper(this);
connect(d_ptr->signalMapper, SIGNAL(mapped(int)), SLOT(actionTriggered(int)));
}
ImageViewerActionHandler::~ImageViewerActionHandler()
{
}
void ImageViewerActionHandler::actionTriggered(int supportedAction)
{
Core::EditorManager *editorManager = Core::EditorManager::instance();
Core::IEditor *editor = 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;
default:
break;
}
}
void ImageViewerActionHandler::createActions()
{
registerNewAction(ZoomIn, Constants::ACTION_ZOOM_IN, tr("Zoom In"),
d_ptr->context, QKeySequence(tr("Ctrl++")));
registerNewAction(ZoomOut, Constants::ACTION_ZOOM_OUT, tr("Zoom Out"),
d_ptr->context, QKeySequence(tr("Ctrl+-")));
registerNewAction(OriginalSize, Constants::ACTION_ORIGINAL_SIZE, tr("Original Size"),
d_ptr->context, QKeySequence(tr("Ctrl+0")));
registerNewAction(FitToScreen, Constants::ACTION_FIT_TO_SCREEN, tr("Fit To Screen"),
d_ptr->context, QKeySequence(tr("Ctrl+=")));
registerNewAction(Background, Constants::ACTION_BACKGROUND, tr("Switch background"),
d_ptr->context, QKeySequence(tr("Ctrl+[")));
registerNewAction(Outline, Constants::ACTION_OUTLINE, tr("Switch outline"),
d_ptr->context, QKeySequence(tr("Ctrl+]")));
}
QAction *ImageViewerActionHandler::registerNewAction(int actionId, const QString &id,
const QString &title, const QList<int> &context, const QKeySequence &key)
{
Core::ActionManager *actionManager = Core::ICore::instance()->actionManager();
Core::Command *command = 0;
QAction *action = new QAction(title, this);
command = actionManager->registerAction(action, id, context);
if (command)
command->setDefaultKeySequence(key);
connect(action, SIGNAL(triggered()), d_ptr->signalMapper, SLOT(map()));
d_ptr->signalMapper->setMapping(action, actionId);
return action;
}
} // namespace Internal
} // namespace ImageViewer
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
** Copyright (c) 2010 Denis Mingulov.
**
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** Commercial Usage
**
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Nokia.
**
** GNU Lesser General Public License Usage
**
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** If you are unsure which license is appropriate for your use, please
** contact the sales department at http://qt.nokia.com/contact.
**
**************************************************************************/
#ifndef IMAGEVIEWERACTIONHANDLER_H
#define IMAGEVIEWERACTIONHANDLER_H
#include <QObject>
#include <QtCore/QScopedPointer>
QT_FORWARD_DECLARE_CLASS(QAction)
QT_FORWARD_DECLARE_CLASS(QKeySequence)
namespace ImageViewer {
namespace Internal {
class ImageViewerActionHandler : public QObject
{
Q_OBJECT
public:
explicit ImageViewerActionHandler(QObject *parent = 0);
~ImageViewerActionHandler();
void createActions();
signals:
public slots:
void actionTriggered(int supportedAction);
protected:
/*!
\brief Create a new action and register this action in the action manager.
\param actionId Action's internal id
\param id Command id
\param title Action's title
\param context Current context
\param key Key sequence for the command
\return Created and registered action, 0 if something goes wrong
*/
QAction *registerNewAction(int actionId, const QString &id, const QString &title,
const QList<int> &context, const QKeySequence &key);
private:
QScopedPointer<struct ImageViewerActionHandlerPrivate> d_ptr;
};
} // namespace Internal
} // namespace ImageViewer
#endif // IMAGEVIEWERACTIONHANDLER_H
......@@ -37,6 +37,14 @@ namespace Constants {
const char * const IMAGEVIEWER_ID = "Editors.ImageViewer";
const char * const IMAGEVIEWER_DISPLAY_NAME = QT_TRANSLATE_NOOP("OpenWith::Editors", "Image Viewer");
// actions
const char * const ACTION_ZOOM_IN = "ImageViewer.ZoomIn";
const char * const ACTION_ZOOM_OUT = "ImageViewer.ZoomOut";
const char * const ACTION_ORIGINAL_SIZE = "ImageViewer.OriginalSize";
const char * const ACTION_FIT_TO_SCREEN = "ImageViewer.FitToScreen";
const char * const ACTION_BACKGROUND = "ImageViewer.Background";
const char * const ACTION_OUTLINE = "ImageViewer.Outline";
} // namespace Constants
} // namespace ImageViewer
......
......@@ -29,6 +29,7 @@
**************************************************************************/
#include "imageviewerfactory.h"
#include "imagevieweractionhandler.h"
#include "imageviewerconstants.h"
#include "imageviewer.h"
......@@ -39,9 +40,18 @@
namespace ImageViewer {
namespace Internal {
struct ImageViewerFactoryPrivate
{
QStringList mimeTypes;
QPointer<ImageViewerActionHandler> actionHandler;
};
ImageViewerFactory::ImageViewerFactory(QObject *parent) :
Core::IEditorFactory(parent)
Core::IEditorFactory(parent),
d_ptr(new ImageViewerFactoryPrivate)
{
d_ptr->actionHandler = new ImageViewerActionHandler(this);
QMap<QByteArray, QString> possibleMimeTypes;
possibleMimeTypes.insert("bmp", QLatin1String("image/bmp"));
possibleMimeTypes.insert("gif", QLatin1String("image/gif"));
......@@ -63,10 +73,14 @@ ImageViewerFactory::ImageViewerFactory(QObject *parent) :
foreach (const QByteArray &format, supportedFormats) {
const QString &value = possibleMimeTypes.value(format);
if (!value.isEmpty())
m_mimeTypes.append(value);
d_ptr->mimeTypes.append(value);
}
}
ImageViewerFactory::~ImageViewerFactory()
{
}
Core::IEditor *ImageViewerFactory::createEditor(QWidget *parent)
{
return new ImageViewer(parent);
......@@ -74,7 +88,7 @@ Core::IEditor *ImageViewerFactory::createEditor(QWidget *parent)
QStringList ImageViewerFactory::mimeTypes() const
{
return m_mimeTypes;
return d_ptr->mimeTypes;
}
QString ImageViewerFactory::id() const
......@@ -92,5 +106,10 @@ Core::IFile *ImageViewerFactory::open(const QString & /*fileName*/)
return 0;
}
void ImageViewerFactory::extensionsInitialized()
{
d_ptr->actionHandler->createActions();
}
} // namespace Internal
} // namespace ImageViewer
......@@ -35,7 +35,7 @@
#include <coreplugin/editormanager/ieditor.h>
#include <coreplugin/ifile.h>
#include <QtCore/QStringList>
#include <QtCore/QScopedPointer>
namespace ImageViewer {
namespace Internal {
......@@ -45,6 +45,7 @@ class ImageViewerFactory : public Core::IEditorFactory
Q_OBJECT
public:
explicit ImageViewerFactory(QObject *parent = 0);
~ImageViewerFactory();
Core::IEditor *createEditor(QWidget *parent);
......@@ -55,8 +56,10 @@ public:
Core::IFile *open(const QString &fileName);
void extensionsInitialized();
private:
QStringList m_mimeTypes;
QScopedPointer<struct ImageViewerFactoryPrivate> d_ptr;
};
} // namespace Internal
......
......@@ -42,9 +42,16 @@
namespace ImageViewer {
namespace Internal {
///////////////////////////////// ImageViewerPluginPrivate //////////////////////////////////
struct ImageViewerPluginPrivate
{
QPointer<ImageViewerFactory> factory;
};
///////////////////////////////// ImageViewerPlugin //////////////////////////////////
ImageViewerPlugin::ImageViewerPlugin()
: d_ptr(new ImageViewerPluginPrivate)
{
}
......@@ -60,16 +67,17 @@ bool ImageViewerPlugin::initialize(const QStringList &arguments, QString *errorM
if (!core->mimeDatabase()->addMimeTypes(QLatin1String(":/imageviewer/ImageViewer.mimetypes.xml"), errorMessage))
return false;
ImageViewerFactory *factory = new ImageViewerFactory(this);
d_ptr->factory = new ImageViewerFactory(this);
Aggregation::Aggregate *aggregate = new Aggregation::Aggregate;
aggregate->add(factory);
aggregate->add(d_ptr->factory);
addAutoReleasedObject(factory);
addAutoReleasedObject(d_ptr->factory);
return true;
}
void ImageViewerPlugin::extensionsInitialized()
{
d_ptr->factory->extensionsInitialized();
}
} // namespace Internal
......
......@@ -34,6 +34,7 @@
#include <extensionsystem/iplugin.h>
#include <QtCore/QtPlugin>
#include <QtCore/QScopedPointer>
namespace ImageViewer {
......@@ -52,6 +53,7 @@ public:
void extensionsInitialized();
private:
QScopedPointer<struct ImageViewerPluginPrivate> d_ptr;
};
} // namespace Internal
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment