Skip to content

Commit

Permalink
cancel select by radius by pressing ESC
Browse files Browse the repository at this point in the history
  • Loading branch information
3nids committed Jan 18, 2018
1 parent aca2078 commit 4733bc8
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 0 deletions.
23 changes: 23 additions & 0 deletions src/app/qgsmaptoolselectradius.cpp
Expand Up @@ -81,6 +81,11 @@ bool QgsDistanceWidget::eventFilter( QObject *obj, QEvent *ev )
if ( obj == mDistanceSpinBox && ev->type() == QEvent::KeyPress )
{
QKeyEvent *event = static_cast<QKeyEvent *>( ev );
if ( event->key() == Qt::Key_Escape )
{
emit distanceEditingCancelled();
return true;
}
if ( event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return )
{
emit distanceEditingFinished( distance(), event->modifiers() );
Expand Down Expand Up @@ -185,6 +190,16 @@ void QgsMapToolSelectRadius::deactivate()
QgsMapTool::deactivate();
}

void QgsMapToolSelectRadius::keyReleaseEvent( QKeyEvent *e )
{
if ( mActive && e->key() == Qt::Key_Escape )
{
cancel();
return;
}
QgsMapTool::keyReleaseEvent( e );
}

void QgsMapToolSelectRadius::updateRubberband( const double &radius )
{
mRubberBand->reset( QgsWkbTypes::PolygonGeometry );
Expand Down Expand Up @@ -214,6 +229,13 @@ void QgsMapToolSelectRadius::radiusValueEntered( const double &radius, const Qt:
selectFromRubberband( modifiers );
}

void QgsMapToolSelectRadius::cancel()
{
deleteRotationWidget();
deleteRubberband();
mActive = false;
}

void QgsMapToolSelectRadius::deleteRubberband()
{
delete mRubberBand;
Expand All @@ -236,6 +258,7 @@ void QgsMapToolSelectRadius::createRotationWidget()

connect( mDistanceWidget, &QgsDistanceWidget::distanceChanged, this, &QgsMapToolSelectRadius::updateRubberband );
connect( mDistanceWidget, &QgsDistanceWidget::distanceEditingFinished, this, &QgsMapToolSelectRadius::radiusValueEntered );
connect( mDistanceWidget, &QgsDistanceWidget::distanceEditingCancelled, this, &QgsMapToolSelectRadius::cancel );
}

void QgsMapToolSelectRadius::deleteRotationWidget()
Expand Down
7 changes: 7 additions & 0 deletions src/app/qgsmaptoolselectradius.h
Expand Up @@ -44,6 +44,7 @@ class APP_EXPORT QgsDistanceWidget : public QWidget
signals:
void distanceChanged( double distance );
void distanceEditingFinished( double distance, const Qt::KeyboardModifiers &modifiers );
void distanceEditingCancelled();

protected:
bool eventFilter( QObject *obj, QEvent *ev ) override;
Expand Down Expand Up @@ -74,6 +75,9 @@ class APP_EXPORT QgsMapToolSelectRadius : public QgsMapTool
//! called when map tool is being deactivated
void deactivate() override;

//! catch escape when active to cancel selection
void keyReleaseEvent( QKeyEvent *e ) override;

private slots:
//! update the rubber band from the input widget
void updateRubberband( const double &radius );
Expand All @@ -84,6 +88,9 @@ class APP_EXPORT QgsMapToolSelectRadius : public QgsMapTool
*/
void radiusValueEntered( const double &radius, const Qt::KeyboardModifiers &modifiers );

//! cancel selecting (between two click events)
void cancel();

private:
//! perform selection using radius from rubberband
void selectFromRubberband( const Qt::KeyboardModifiers &modifiers );
Expand Down

0 comments on commit 4733bc8

Please sign in to comment.