diff --git a/python/gui/qgsmapcanvas.sip b/python/gui/qgsmapcanvas.sip index b2870c931d1..d2efcec9258 100644 --- a/python/gui/qgsmapcanvas.sip +++ b/python/gui/qgsmapcanvas.sip @@ -263,6 +263,36 @@ class QgsMapCanvas : QGraphicsView //! returns last position of mouse cursor QPoint mouseLastXY(); + + /** Enables a preview mode for the map canvas + * @param previewEnabled set to true to enable a preview mode + * @see setPreviewMode + * @note added in 2.3 */ + void setPreviewModeEnabled( bool previewEnabled ); + + /** Returns whether a preview mode is enabled for the map canvas + * @returns true if a preview mode is currently enabled + * @see setPreviewModeEnabled + * @see previewMode + * @note added in 2.3 */ + bool previewModeEnabled() const; + + /** Sets a preview mode for the map canvas. This setting only has an effect if + * previewModeEnabled is true. + * @param mode preview mode for the canvas + * @see previewMode + * @see setPreviewModeEnabled + * @see previewModeEnabled + * @note added in 2.3 */ + void setPreviewMode( QgsPreviewEffect::PreviewMode mode ); + + /** Returns the current preview mode for the map canvas. This setting only has an effect if + * previewModeEnabled is true. + * @returns preview mode for map canvas + * @see setPreviewMode + * @see previewModeEnabled + * @note added in 2.3 */ + QgsPreviewEffect::PreviewMode previewMode() const; public slots: diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index 106e8438c30..30a26ca381a 100755 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -1287,6 +1287,16 @@ void QgisApp::createActionGroups() mMapToolGroup->addAction( mActionMoveLabel ); mMapToolGroup->addAction( mActionRotateLabel ); mMapToolGroup->addAction( mActionChangeLabelProperties ); + + // + // Preview Modes Group + QActionGroup* mPreviewGroup = new QActionGroup( this ); + mPreviewGroup->setExclusive( true ); + mActionPreviewModeOff->setActionGroup( mPreviewGroup ); + mActionPreviewModeGrayscale->setActionGroup( mPreviewGroup ); + mActionPreviewModeMono->setActionGroup( mPreviewGroup ); + mActionPreviewProtanope->setActionGroup( mPreviewGroup ); + mActionPreviewDeuteranope->setActionGroup( mPreviewGroup ); } void QgisApp::setAppStyleSheet( const QString& stylesheet ) @@ -1960,6 +1970,13 @@ void QgisApp::setupConnections() connect( this, SIGNAL( projectRead() ), this, SLOT( fileOpenedOKAfterLaunch() ) ); + // connect preview modes actions + connect( mActionPreviewModeOff, SIGNAL( triggered() ), this, SLOT( disablePreviewMode() ) ); + connect( mActionPreviewModeGrayscale, SIGNAL( triggered() ), this, SLOT( activateGrayscalePreview() ) ); + connect( mActionPreviewModeMono, SIGNAL( triggered() ), this, SLOT( activateMonoPreview() ) ); + connect( mActionPreviewProtanope, SIGNAL( triggered() ), this, SLOT( activateProtanopePreview() ) ); + connect( mActionPreviewDeuteranope, SIGNAL( triggered() ), this, SLOT( activateDeuteranopePreview() ) ); + // handle deprecated labels in project for QGIS 2.0 connect( this, SIGNAL( newProject() ), this, SLOT( checkForDeprecatedLabelsInProject() ) ); @@ -3959,6 +3976,35 @@ void QgisApp::deleteComposerManager() mComposerManager = 0; } +void QgisApp::disablePreviewMode() +{ + mMapCanvas->setPreviewModeEnabled( false ); +} + +void QgisApp::activateGrayscalePreview() +{ + mMapCanvas->setPreviewModeEnabled( true ); + mMapCanvas->setPreviewMode( QgsPreviewEffect::PreviewGrayscale ); +} + +void QgisApp::activateMonoPreview() +{ + mMapCanvas->setPreviewModeEnabled( true ); + mMapCanvas->setPreviewMode( QgsPreviewEffect::PreviewMono ); +} + +void QgisApp::activateProtanopePreview() +{ + mMapCanvas->setPreviewModeEnabled( true ); + mMapCanvas->setPreviewMode( QgsPreviewEffect::PreviewProtanope ); +} + +void QgisApp::activateDeuteranopePreview() +{ + mMapCanvas->setPreviewModeEnabled( true ); + mMapCanvas->setPreviewMode( QgsPreviewEffect::PreviewDeuteranope ); +} + void QgisApp::saveMapAsImage() { QPair< QString, QString> myFileNameAndFilter = QgisGui::getSaveAsImageName( this, tr( "Choose a file name to save the map image as" ) ); diff --git a/src/app/qgisapp.h b/src/app/qgisapp.h old mode 100644 new mode 100755 index 2f4743d69ac..7759d598e70 --- a/src/app/qgisapp.h +++ b/src/app/qgisapp.h @@ -1189,6 +1189,22 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow //! Deletes the active QgsComposerManager instance void deleteComposerManager(); + /** Disable any preview modes shown on the map canvas + * @note added in 2.3 */ + void disablePreviewMode(); + /** Enable a grayscale preview mode on the map canvas + * @note added in 2.3 */ + void activateGrayscalePreview(); + /** Enable a monochrome preview mode on the map canvas + * @note added in 2.3 */ + void activateMonoPreview(); + /** Enable a color blindness (protanope) preview mode on the map canvas + * @note added in 2.3 */ + void activateProtanopePreview(); + /** Enable a color blindness (deuteranope) preview mode on the map canvas + * @note added in 2.3 */ + void activateDeuteranopePreview(); + signals: /** emitted when a key is pressed and we want non widget sublasses to be able to pick up on this (e.g. maplayer) */ @@ -1343,6 +1359,7 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow // action groups ---------------------------------- QActionGroup *mMapToolGroup; + QActionGroup *mPreviewGroup; // menus ------------------------------------------ diff --git a/src/gui/qgsmapcanvas.cpp b/src/gui/qgsmapcanvas.cpp old mode 100644 new mode 100755 index 9960e54f1de..0a11789eb84 --- a/src/gui/qgsmapcanvas.cpp +++ b/src/gui/qgsmapcanvas.cpp @@ -163,6 +163,7 @@ QgsMapCanvas::QgsMapCanvas( QWidget * parent, const char *name ) , mUseParallelRendering( false ) , mDrawRenderingStats( false ) , mCache( 0 ) + , mPreviewEffect( 0 ) { setObjectName( name ); mScene = new QGraphicsScene(); @@ -227,6 +228,9 @@ QgsMapCanvas::QgsMapCanvas( QWidget * parent, const char *name ) viewport()->setAttribute( Qt::WA_AcceptTouchEvents ); #endif + mPreviewEffect = new QgsPreviewEffect( this ); + viewport()->setGraphicsEffect( mPreviewEffect ); + refresh(); } // QgsMapCanvas ctor @@ -1606,6 +1610,46 @@ QPoint QgsMapCanvas::mouseLastXY() return mCanvasProperties->mouseLastXY; } +void QgsMapCanvas::setPreviewModeEnabled( bool previewEnabled ) +{ + if ( !mPreviewEffect ) + { + return; + } + + mPreviewEffect->setEnabled( previewEnabled ); +} + +bool QgsMapCanvas::previewModeEnabled() const +{ + if ( !mPreviewEffect ) + { + return false; + } + + return mPreviewEffect->isEnabled(); +} + +void QgsMapCanvas::setPreviewMode( QgsPreviewEffect::PreviewMode mode ) +{ + if ( !mPreviewEffect ) + { + return; + } + + mPreviewEffect->setMode( mode ); +} + +QgsPreviewEffect::PreviewMode QgsMapCanvas::previewMode() const +{ + if ( !mPreviewEffect ) + { + return QgsPreviewEffect::PreviewGrayscale; + } + + return mPreviewEffect->mode(); +} + void QgsMapCanvas::readProject( const QDomDocument & doc ) { QDomNodeList nodes = doc.elementsByTagName( "mapcanvas" ); diff --git a/src/gui/qgsmapcanvas.h b/src/gui/qgsmapcanvas.h old mode 100644 new mode 100755 index 38c9f5bb9ff..e61195f7236 --- a/src/gui/qgsmapcanvas.h +++ b/src/gui/qgsmapcanvas.h @@ -33,6 +33,7 @@ #include #include "qgsmapsettings.h" // TEMPORARY +#include "qgsprevieweffect.h" //for QgsPreviewEffect::PreviewMode #ifdef HAVE_TOUCH #include @@ -330,6 +331,36 @@ class GUI_EXPORT QgsMapCanvas : public QGraphicsView //! returns last position of mouse cursor QPoint mouseLastXY(); + /** Enables a preview mode for the map canvas + * @param previewEnabled set to true to enable a preview mode + * @see setPreviewMode + * @note added in 2.3 */ + void setPreviewModeEnabled( bool previewEnabled ); + + /** Returns whether a preview mode is enabled for the map canvas + * @returns true if a preview mode is currently enabled + * @see setPreviewModeEnabled + * @see previewMode + * @note added in 2.3 */ + bool previewModeEnabled() const; + + /** Sets a preview mode for the map canvas. This setting only has an effect if + * previewModeEnabled is true. + * @param mode preview mode for the canvas + * @see previewMode + * @see setPreviewModeEnabled + * @see previewModeEnabled + * @note added in 2.3 */ + void setPreviewMode( QgsPreviewEffect::PreviewMode mode ); + + /** Returns the current preview mode for the map canvas. This setting only has an effect if + * previewModeEnabled is true. + * @returns preview mode for map canvas + * @see setPreviewMode + * @see previewModeEnabled + * @note added in 2.3 */ + QgsPreviewEffect::PreviewMode previewMode() const; + public slots: /**Repaints the canvas map*/ @@ -590,6 +621,9 @@ class GUI_EXPORT QgsMapCanvas : public QGraphicsView QTimer *mResizeTimer; + + QgsPreviewEffect* mPreviewEffect; + }; // class QgsMapCanvas diff --git a/src/ui/qgisapp.ui b/src/ui/qgisapp.ui old mode 100644 new mode 100755 index 9e5f48aaa56..4783eafd645 --- a/src/ui/qgisapp.ui +++ b/src/ui/qgisapp.ui @@ -88,6 +88,16 @@ + + + Preview Mode + + + + + + + @@ -105,10 +115,12 @@ + + @@ -2168,6 +2180,64 @@ Acts on currently active editable layer Save As Layer Definition File... + + + true + + + true + + + Normal + + + Normal preview mode + + + + + true + + + Simulate photocopy (grayscale) + + + Simulate Photocopy (Grayscale) + + + + + true + + + Simulate fax (mono) + + + Simulate Fax (Mono) + + + + + true + + + Simulate color blindness (Protanope) + + + Simulate Color Blindness (Protanope) + + + + + true + + + Simulate color blindness (Deuteranope) + + + Simulate Color Blindness (Deuteranope) + +