Skip to content

Commit

Permalink
#9094: keyPressed can be overrided in MapTool
Browse files Browse the repository at this point in the history
KeyPressed event of MapCanvas can be overrided in current MapTool. It
enables to use 'Delete/Backspace' key as default shortcut to delete
selected features, but it can be overrided in current maptool.
  • Loading branch information
ahuarte47 committed Dec 17, 2013
1 parent 43520c5 commit 85fe938
Show file tree
Hide file tree
Showing 17 changed files with 67 additions and 79 deletions.
24 changes: 14 additions & 10 deletions src/app/nodetool/qgsmaptoolnodetool.cpp
Expand Up @@ -700,14 +700,6 @@ void QgsMapToolNodeTool::keyPressEvent( QKeyEvent* e )
if ( e->key() == Qt::Key_Control )
{
mCtrl = true;
}
}

void QgsMapToolNodeTool::keyReleaseEvent( QKeyEvent* e )
{
if ( e->key() == Qt::Key_Control )
{
mCtrl = false;
return;
}

Expand All @@ -719,19 +711,31 @@ void QgsMapToolNodeTool::keyReleaseEvent( QKeyEvent* e )
mSelectedFeature->deleteSelectedVertexes();
safeSelectVertex( firstSelectedIndex );
mCanvas->refresh();

// Override default shortcut management in MapCanvas
e->ignore();
}
else
if ( mSelectedFeature && ( e->key() == Qt::Key_Minus || e->key() == Qt::Key_Plus ) )
if ( mSelectedFeature && ( e->key() == Qt::Key_Less || e->key() == Qt::Key_Greater ) )
{
int firstSelectedIndex = firstSelectedVertex();
if ( firstSelectedIndex == -1) return;

mSelectedFeature->deselectAllVertexes();
safeSelectVertex( firstSelectedIndex + ( (e->key() == Qt::Key_Minus) ? -1 : +1 ) );
safeSelectVertex( firstSelectedIndex + ( (e->key() == Qt::Key_Less) ? -1 : +1 ) );
mCanvas->refresh();
}
}

void QgsMapToolNodeTool::keyReleaseEvent( QKeyEvent* e )
{
if ( e->key() == Qt::Key_Control )
{
mCtrl = false;
return;
}
}

QgsRubberBand* QgsMapToolNodeTool::createRubberBandMarker( QgsPoint center, QgsVectorLayer* vlayer )
{

Expand Down
37 changes: 33 additions & 4 deletions src/app/qgisapp.cpp
Expand Up @@ -1903,6 +1903,10 @@ void QgisApp::setupConnections()
connect( mRenderSuppressionCBox, SIGNAL( toggled( bool ) ),
mMapCanvas, SLOT( setRenderFlag( bool ) ) );

// connect MapCanvas keyPress event so we can check if selected feature collection must be deleted
connect( mMapCanvas, SIGNAL( keyPressed( QKeyEvent * ) ),
this, SLOT( mapCanvas_keyPressed( QKeyEvent * ) ) );

// connect renderer
connect( mMapCanvas->mapRenderer(), SIGNAL( drawingProgress( int, int ) ),
this, SLOT( showProgress( int, int ) ) );
Expand Down Expand Up @@ -4845,9 +4849,17 @@ void QgisApp::deleteSelected( QgsMapLayer *layer, QWidget* parent, bool promptCo
return;
}

//display a warning
//validate selection
int numberOfDeletedFeatures = vlayer->selectedFeaturesIds().size();
if ( promptConfirmation && QMessageBox::warning( parent, tr( "Delete features" ), tr( "Delete %n feature(s)?", "number of features to delete", numberOfDeletedFeatures ), QMessageBox::Ok, QMessageBox::Cancel ) == QMessageBox::Cancel )
if ( numberOfDeletedFeatures == 0 )
{
messageBar()->pushMessage( tr( "No Features Selected" ),
tr( "The current layer has not selected features" ),
QgsMessageBar::INFO, messageTimeout() );
return;
}
//display a warning
if ( promptConfirmation && QMessageBox::warning( parent, tr( "Delete features" ), tr( "Delete %n feature(s)?", "number of features to delete", numberOfDeletedFeatures ), QMessageBox::Ok | QMessageBox::Cancel ) == QMessageBox::Cancel )
{
return;
}
Expand Down Expand Up @@ -6500,9 +6512,17 @@ void QgisApp::removeLayer( bool promptConfirmation )
return;
}

//display a warning
//validate selection
int numberOfRemovedLayers = mMapLegend->selectedLayers().size();
if ( promptConfirmation && QMessageBox::warning( this, tr( "Remove layers" ), tr( "Remove %n layer(s)?", "number of layers to remove", numberOfRemovedLayers ), QMessageBox::Ok, QMessageBox::Cancel ) == QMessageBox::Cancel )
if ( numberOfRemovedLayers == 0 )
{
messageBar()->pushMessage( tr( "No Layer Selected" ),
tr( "To remove layers, you must select they in the legend" ),
QgsMessageBar::INFO, messageTimeout() );
return;
}
//display a warning
if ( promptConfirmation && QMessageBox::warning( this, tr( "Remove layers" ), tr( "Remove %n layer(s)?", "number of layers to remove", numberOfRemovedLayers ), QMessageBox::Ok | QMessageBox::Cancel ) == QMessageBox::Cancel )
{
return;
}
Expand Down Expand Up @@ -9074,6 +9094,15 @@ void QgisApp::keyPressEvent( QKeyEvent * e )
}
}

void QgisApp::mapCanvas_keyPressed( QKeyEvent *e )
{
// Delete selected features when it is possible and KeyEvent was not managed by current MapTool
if ( ( e->key() == Qt::Key_Backspace || e->key() == Qt::Key_Delete ) && e->isAccepted() && mActionDeleteSelected->isEnabled() )
{
deleteSelected();
}
}

#ifdef Q_OS_WIN
// hope your wearing your peril sensitive sunglasses.
void QgisApp::contextMenuEvent( QContextMenuEvent *e )
Expand Down
3 changes: 3 additions & 0 deletions src/app/qgisapp.h
Expand Up @@ -1161,6 +1161,9 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow

void clipboardChanged();

//! catch MapCanvas keyPress event so we can check if selected feature collection must be deleted
void mapCanvas_keyPressed( QKeyEvent *e );

signals:
/** emitted when a key is pressed and we want non widget sublasses to be able
to pick up on this (e.g. maplayer) */
Expand Down
3 changes: 3 additions & 0 deletions src/app/qgsmaptoolannotation.cpp
Expand Up @@ -141,6 +141,9 @@ void QgsMapToolAnnotation::keyPressEvent( QKeyEvent* e )
mCanvas->scene()->removeItem( sItem );
delete sItem;
mCanvas->setCursor( neutralCursor );

// Override default shortcut management in MapCanvas
e->ignore();
}
}
}
Expand Down
3 changes: 3 additions & 0 deletions src/app/qgsmaptoolcapture.cpp
Expand Up @@ -269,6 +269,9 @@ void QgsMapToolCapture::keyPressEvent( QKeyEvent* e )
if ( e->key() == Qt::Key_Backspace || e->key() == Qt::Key_Delete )
{
undo();

// Override default shortcut management in MapCanvas
e->ignore();
}
}

Expand Down
9 changes: 0 additions & 9 deletions src/app/qgsmaptoolselect.cpp
Expand Up @@ -13,7 +13,6 @@
* *
***************************************************************************/

#include "qgisapp.h"
#include "qgsmaptoolselect.h"
#include "qgsmaptoolselectutils.h"
#include "qgsrubberband.h"
Expand Down Expand Up @@ -50,11 +49,3 @@ void QgsMapToolSelect::canvasReleaseEvent( QMouseEvent * e )
delete selectGeom;
rubberBand.reset( QGis::Polygon );
}

void QgsMapToolSelect::keyPressEvent( QKeyEvent* e )
{
if ( e->key() == Qt::Key_Backspace || e->key() == Qt::Key_Delete )
{
QgisApp::instance()->deleteSelected( );
}
}
3 changes: 0 additions & 3 deletions src/app/qgsmaptoolselect.h
Expand Up @@ -30,9 +30,6 @@ class APP_EXPORT QgsMapToolSelect : public QgsMapTool
//! Overridden mouse release event
virtual void canvasReleaseEvent( QMouseEvent * e );

//! Overridden key press event
virtual void keyPressEvent( QKeyEvent* e );

private:
};

Expand Down
9 changes: 0 additions & 9 deletions src/app/qgsmaptoolselectfreehand.cpp
Expand Up @@ -13,7 +13,6 @@ email : jpalmer at linz dot govt dot nz
* *
***************************************************************************/

#include "qgisapp.h"
#include "qgsmaptoolselectfreehand.h"
#include "qgsmaptoolselectutils.h"
#include "qgsgeometry.h"
Expand Down Expand Up @@ -78,11 +77,3 @@ void QgsMapToolSelectFreehand::canvasReleaseEvent( QMouseEvent * e )
mRubberBand = 0;
mDragging = false;
}

void QgsMapToolSelectFreehand::keyPressEvent( QKeyEvent* e )
{
if ( e->key() == Qt::Key_Backspace || e->key() == Qt::Key_Delete )
{
QgisApp::instance()->deleteSelected( );
}
}
3 changes: 0 additions & 3 deletions src/app/qgsmaptoolselectfreehand.h
Expand Up @@ -39,9 +39,6 @@ class APP_EXPORT QgsMapToolSelectFreehand : public QgsMapTool
//! Overridden mouse release event
virtual void canvasReleaseEvent( QMouseEvent * e );

//! Overridden key press event
virtual void keyPressEvent( QKeyEvent* e );

private:

//! used for storing all of the maps point for the freehand sketch
Expand Down
9 changes: 0 additions & 9 deletions src/app/qgsmaptoolselectpolygon.cpp
Expand Up @@ -13,7 +13,6 @@ email : jpalmer at linz dot govt dot nz
* *
***************************************************************************/

#include "qgisapp.h"
#include "qgsmaptoolselectpolygon.h"
#include "qgsmaptoolselectutils.h"
#include "qgsgeometry.h"
Expand Down Expand Up @@ -72,11 +71,3 @@ void QgsMapToolSelectPolygon::canvasMoveEvent( QMouseEvent * e )
mRubberBand->addPoint( toMapCoordinates( e->pos() ) );
}
}

void QgsMapToolSelectPolygon::keyPressEvent( QKeyEvent* e )
{
if ( e->key() == Qt::Key_Backspace || e->key() == Qt::Key_Delete )
{
QgisApp::instance()->deleteSelected( );
}
}
3 changes: 0 additions & 3 deletions src/app/qgsmaptoolselectpolygon.h
Expand Up @@ -36,9 +36,6 @@ class APP_EXPORT QgsMapToolSelectPolygon : public QgsMapTool
//! Overridden mouse press event
virtual void canvasPressEvent( QMouseEvent * e );

//! Overridden key press event
virtual void keyPressEvent( QKeyEvent* e );

private:

//! used for storing all of the maps point for the polygon
Expand Down
8 changes: 0 additions & 8 deletions src/app/qgsmaptoolselectradius.cpp
Expand Up @@ -13,7 +13,6 @@ email : jpalmer at linz dot govt dot nz
* *
***************************************************************************/

#include "qgisapp.h"
#include "qgsmaptoolselectradius.h"
#include "qgsmaptoolselectutils.h"
#include "qgsgeometry.h"
Expand Down Expand Up @@ -111,10 +110,3 @@ void QgsMapToolSelectRadius::setRadiusRubberBand( QgsPoint & radiusEdge )
}
}

void QgsMapToolSelectRadius::keyPressEvent( QKeyEvent* e )
{
if ( e->key() == Qt::Key_Backspace || e->key() == Qt::Key_Delete )
{
QgisApp::instance()->deleteSelected( );
}
}
3 changes: 0 additions & 3 deletions src/app/qgsmaptoolselectradius.h
Expand Up @@ -41,9 +41,6 @@ class APP_EXPORT QgsMapToolSelectRadius : public QgsMapTool
//! Overridden mouse release event
virtual void canvasReleaseEvent( QMouseEvent * e );

//! Overridden key press event
virtual void keyPressEvent( QKeyEvent* e );

private:

//! sets the rubber band to a circle approximated using 40 segments.
Expand Down
9 changes: 0 additions & 9 deletions src/app/qgsmaptoolselectrectangle.cpp
Expand Up @@ -14,7 +14,6 @@
* *
***************************************************************************/

#include "qgisapp.h"
#include "qgsmaptoolselectrectangle.h"
#include "qgsmaptoolselectutils.h"
#include "qgsrubberband.h"
Expand Down Expand Up @@ -112,11 +111,3 @@ void QgsMapToolSelectRectangle::canvasReleaseEvent( QMouseEvent *e )

mDragging = false;
}

void QgsMapToolSelectRectangle::keyPressEvent( QKeyEvent* e )
{
if ( e->key() == Qt::Key_Backspace || e->key() == Qt::Key_Delete )
{
QgisApp::instance()->deleteSelected( );
}
}
3 changes: 0 additions & 3 deletions src/app/qgsmaptoolselectrectangle.h
Expand Up @@ -43,9 +43,6 @@ class APP_EXPORT QgsMapToolSelectRectangle : public QgsMapTool
//! Overridden mouse release event
virtual void canvasReleaseEvent( QMouseEvent * e );

//! Overridden key press event
virtual void keyPressEvent( QKeyEvent* e );

private:

//! Flag to indicate a map canvas drag operation is taking place
Expand Down
14 changes: 8 additions & 6 deletions src/gui/qgsmapcanvas.cpp
Expand Up @@ -802,10 +802,11 @@ void QgsMapCanvas::keyPressEvent( QKeyEvent * e )
e->ignore();
}

emit keyPressed( e );

if ( mCanvasProperties->mouseButtonDown || mCanvasProperties->panSelectorDown )
{
emit keyPressed( e );
return;
}

QPainter paint;
QPen pen( Qt::gray );
Expand Down Expand Up @@ -886,12 +887,14 @@ void QgsMapCanvas::keyPressEvent( QKeyEvent * e )
{
mMapTool->keyPressEvent( e );
}
e->ignore();
else e->ignore();

QgsDebugMsg( "Ignoring key: " + QString::number( e->key() ) );

}
}

emit keyPressed( e );

} //keyPressEvent()

void QgsMapCanvas::keyReleaseEvent( QKeyEvent * e )
Expand Down Expand Up @@ -921,8 +924,7 @@ void QgsMapCanvas::keyReleaseEvent( QKeyEvent * e )
{
mMapTool->keyReleaseEvent( e );
}

e->ignore();
else e->ignore();

QgsDebugMsg( "Ignoring key release: " + QString::number( e->key() ) );
}
Expand Down
3 changes: 3 additions & 0 deletions src/plugins/grass/qgsgrassmapcalc.cpp
Expand Up @@ -832,6 +832,9 @@ void QgsGrassMapcalc::keyPressEvent( QKeyEvent * e )
if ( e->key() == Qt::Key_Delete )
{
deleteItem();

// Override default shortcut management in MapCanvas
e->ignore();
}
}

Expand Down

0 comments on commit 85fe938

Please sign in to comment.