Skip to content

Commit 2c36e7d

Browse files
committed
Fix #6957, move 'not vector/editable layer' dialogs to message bar for map edit and select tools
- Move notifications to base QgsMapToolEdit class - Add QgsMessageBar::INFO icon (also useful for lightweight WARNING)
1 parent d8c1593 commit 2c36e7d

15 files changed

+75
-39
lines changed

images/images.qrc

+1
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@
197197
<file>themes/default/mIconFavourites.png</file>
198198
<file>themes/default/mIconFirst.png</file>
199199
<file>themes/default/mIconGeometryLayer.png</file>
200+
<file>themes/default/mIconInfo.png</file>
200201
<file>themes/default/mIconLast.png</file>
201202
<file>themes/default/mIconLayer.png</file>
202203
<file>themes/default/mIconLineLayer.png</file>

images/themes/default/mIconInfo.png

726 Bytes
Loading

src/app/qgisapp.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -4040,11 +4040,11 @@ void QgisApp::labeling()
40404040
if ( layer == NULL || layer->type() != QgsMapLayer::VectorLayer )
40414041
{
40424042
QWidget* msg = QgsMessageBar::createMessage(
4043-
tr( "Labeling: " ),
4043+
tr( "Labeling Options: " ),
40444044
tr( "Please select a vector layer first." ) ,
4045-
QgsApplication::getThemeIcon( "/mIconWarn.png" ),
4045+
QgsApplication::getThemeIcon( "/mIconInfo.png" ),
40464046
mInfoBar );
4047-
mInfoBar->pushWidget( msg, QgsMessageBar::WARNING, 4 );
4047+
mInfoBar->pushWidget( msg, QgsMessageBar::WARNING, 5 );
40484048
return;
40494049
}
40504050

src/app/qgsmaptooladdfeature.cpp

+2-5
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,7 @@ void QgsMapToolAddFeature::canvasReleaseEvent( QMouseEvent * e )
5454

5555
if ( !vlayer )
5656
{
57-
QMessageBox::information( 0, tr( "Not a vector layer" ),
58-
tr( "The current layer is not a vector layer" ) );
57+
notifyNotVectorLayer();
5958
return;
6059
}
6160

@@ -72,9 +71,7 @@ void QgsMapToolAddFeature::canvasReleaseEvent( QMouseEvent * e )
7271

7372
if ( !vlayer->isEditable() )
7473
{
75-
QMessageBox::information( 0, tr( "Layer not editable" ),
76-
tr( "Cannot edit the vector layer. Use 'Toggle Editing' to make it editable." )
77-
);
74+
notifyNotEditableLayer();
7875
return;
7976
}
8077

src/app/qgsmaptooladdpart.cpp

+2-7
Original file line numberDiff line numberDiff line change
@@ -39,18 +39,13 @@ void QgsMapToolAddPart::canvasReleaseEvent( QMouseEvent * e )
3939
QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( mCanvas->currentLayer() );
4040
if ( !vlayer )
4141
{
42-
QMessageBox::information( 0,
43-
tr( "Not a vector layer" ),
44-
tr( "The current layer is not a vector layer" ) );
42+
notifyNotVectorLayer();
4543
return;
4644
}
4745

4846
if ( !vlayer->isEditable() )
4947
{
50-
QMessageBox::information( 0,
51-
tr( "Layer not editable" ),
52-
tr( "Cannot edit the vector layer. Use 'Toggle Editing' to make it editable." )
53-
);
48+
notifyNotEditableLayer();
5449
return;
5550
}
5651

src/app/qgsmaptooladdring.cpp

+2-5
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,13 @@ void QgsMapToolAddRing::canvasReleaseEvent( QMouseEvent * e )
3939

4040
if ( !vlayer )
4141
{
42-
QMessageBox::information( 0, tr( "Not a vector layer" ),
43-
tr( "The current layer is not a vector layer" ) );
42+
notifyNotVectorLayer();
4443
return;
4544
}
4645

4746
if ( !vlayer->isEditable() )
4847
{
49-
QMessageBox::information( 0, tr( "Layer not editable" ),
50-
tr( "Cannot edit the vector layer. Use 'Toggle Editing' to make it editable." )
51-
);
48+
notifyNotEditableLayer();
5249
return;
5350
}
5451

src/app/qgsmaptooledit.cpp

+21
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
***************************************************************************/
1515

1616
#include "qgsmaptooledit.h"
17+
#include "qgisapp.h"
18+
#include "qgsapplication.h"
19+
#include "qgsmessagebar.h"
1720
#include "qgsproject.h"
1821
#include "qgsmapcanvas.h"
1922
#include "qgsrubberband.h"
@@ -119,4 +122,22 @@ int QgsMapToolEdit::addTopologicalPoints( const QList<QgsPoint>& geom )
119122
return 0;
120123
}
121124

125+
void QgsMapToolEdit::notifyNotVectorLayer()
126+
{
127+
QWidget* msg = QgsMessageBar::createMessage(
128+
QObject::tr( "No active vector layer: " ),
129+
QObject::tr( "Choose a vector layer in the legend" ) ,
130+
QgsApplication::getThemeIcon( "/mIconInfo.png" ),
131+
QgisApp::instance()->messageBar() );
132+
QgisApp::instance()->messageBar()->pushWidget( msg, QgsMessageBar::WARNING, 5 );
133+
}
122134

135+
void QgsMapToolEdit::notifyNotEditableLayer()
136+
{
137+
QWidget* msg = QgsMessageBar::createMessage(
138+
QObject::tr( "Layer not editable: " ),
139+
QObject::tr( "Use 'Toggle Editing' to make it editable" ) ,
140+
QgsApplication::getThemeIcon( "/mIconInfo.png" ),
141+
QgisApp::instance()->messageBar() );
142+
QgisApp::instance()->messageBar()->pushWidget( msg, QgsMessageBar::WARNING, 5 );
143+
}

src/app/qgsmaptooledit.h

+7
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,13 @@ class QgsMapToolEdit: public QgsMapTool
6363
@return 0 in case of success*/
6464
int addTopologicalPoints( const QList<QgsPoint>& geom );
6565

66+
/**Display a timed message bar noting the active layer is not vector.
67+
@note added in QGIS 1.9*/
68+
void notifyNotVectorLayer();
69+
/**Display a timed message bar noting the active vector layer is not editable.
70+
@note added in QGIS 1.9*/
71+
void notifyNotEditableLayer();
72+
6673
};
6774

6875
#endif

src/app/qgsmaptoolmovefeature.cpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,13 @@ void QgsMapToolMoveFeature::canvasPressEvent( QMouseEvent * e )
5656
QgsVectorLayer* vlayer = currentVectorLayer();
5757
if ( !vlayer )
5858
{
59+
notifyNotVectorLayer();
5960
return;
6061
}
6162

6263
if ( !vlayer->isEditable() )
6364
{
64-
QMessageBox::information( 0, tr( "Layer not editable" ),
65-
tr( "Cannot edit the vector layer. Use 'Toggle Editing' to make it editable." )
66-
);
65+
notifyNotEditableLayer();
6766
return;
6867
}
6968

src/app/qgsmaptooloffsetcurve.cpp

+7-1
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,16 @@ void QgsMapToolOffsetCurve::canvasPressEvent( QMouseEvent* e )
4343
mGeometryModified = false;
4444
mForceCopy = false;
4545

46+
if ( !mCanvas )
47+
{
48+
return;
49+
}
50+
4651
//get selected features or snap to nearest feature if no selection
4752
QgsVectorLayer* layer = currentVectorLayer();
48-
if ( !mCanvas || !layer )
53+
if ( !layer )
4954
{
55+
notifyNotVectorLayer();
5056
return;
5157
}
5258

src/app/qgsmaptoolreshape.cpp

+2-5
Original file line numberDiff line numberDiff line change
@@ -38,16 +38,13 @@ void QgsMapToolReshape::canvasReleaseEvent( QMouseEvent * e )
3838

3939
if ( !vlayer )
4040
{
41-
QMessageBox::information( 0, tr( "Not a vector layer" ),
42-
tr( "The current layer is not a vector layer" ) );
41+
notifyNotVectorLayer();
4342
return;
4443
}
4544

4645
if ( !vlayer->isEditable() )
4746
{
48-
QMessageBox::information( 0, tr( "Layer not editable" ),
49-
tr( "Cannot edit the vector layer. Use 'Toggle Editing' to make it editable." )
50-
);
47+
notifyNotEditableLayer();
5148
return;
5249
}
5350

src/app/qgsmaptoolrotatepointsymbols.cpp

+8-1
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,17 @@ void QgsMapToolRotatePointSymbols::canvasPressEvent( QMouseEvent *e )
7878
mActiveLayer = currentVectorLayer();
7979
if ( !mActiveLayer )
8080
{
81+
notifyNotVectorLayer();
8182
return;
8283
}
8384

84-
if ( mActiveLayer->geometryType() != QGis::Point || !mActiveLayer->isEditable() )
85+
if ( !mActiveLayer->isEditable() )
86+
{
87+
notifyNotEditableLayer();
88+
return;
89+
}
90+
91+
if ( mActiveLayer->geometryType() != QGis::Point )
8592
{
8693
return;
8794
}

src/app/qgsmaptoolselectutils.cpp

+9-4
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ email : jpalmer at linz dot govt dot nz
1616
#include <limits>
1717

1818
#include "qgsmaptoolselectutils.h"
19+
#include "qgisapp.h"
20+
#include "qgsapplication.h"
21+
#include "qgsmessagebar.h"
1922
#include "qgsmapcanvas.h"
2023
#include "qgsvectorlayer.h"
2124
#include "qgsfeature.h"
@@ -35,10 +38,12 @@ QgsVectorLayer* QgsMapToolSelectUtils::getCurrentVectorLayer( QgsMapCanvas* canv
3538
if ( !canvas->currentLayer()
3639
|| ( vlayer = qobject_cast<QgsVectorLayer *>( canvas->currentLayer() ) ) == NULL )
3740
{
38-
QMessageBox::warning( canvas, QObject::tr( "No active vector layer" ),
39-
QObject::tr( "To select features, you must choose a "
40-
"vector layer by clicking on its name in the legend"
41-
) );
41+
QWidget* msg = QgsMessageBar::createMessage(
42+
QObject::tr( "No active vector layer: " ),
43+
QObject::tr( "To select features, choose a vector layer in the legend" ) ,
44+
QgsApplication::getThemeIcon( "/mIconInfo.png" ),
45+
QgisApp::instance()->messageBar() );
46+
QgisApp::instance()->messageBar()->pushWidget( msg, QgsMessageBar::WARNING, 5 );
4247
}
4348
return vlayer;
4449
}

src/app/qgsmaptoolsimplify.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,13 @@ bool QgsMapToolSimplify::calculateSliderBoudaries()
251251
void QgsMapToolSimplify::canvasPressEvent( QMouseEvent * e )
252252
{
253253
QgsVectorLayer * vlayer = currentVectorLayer();
254+
255+
if ( !vlayer )
256+
{
257+
notifyNotVectorLayer();
258+
return;
259+
}
260+
254261
QgsPoint layerCoords = mCanvas->getCoordinateTransform()->toMapPoint( e->pos().x(), e->pos().y() );
255262

256263
double r = QgsTolerance::vertexSearchRadius( vlayer, mCanvas->mapRenderer() );

src/app/qgsmaptoolsplitfeatures.cpp

+2-5
Original file line numberDiff line numberDiff line change
@@ -38,16 +38,13 @@ void QgsMapToolSplitFeatures::canvasReleaseEvent( QMouseEvent * e )
3838

3939
if ( !vlayer )
4040
{
41-
QMessageBox::information( 0, tr( "Not a vector layer" ),
42-
tr( "The current layer is not a vector layer" ) );
41+
notifyNotVectorLayer();
4342
return;
4443
}
4544

4645
if ( !vlayer->isEditable() )
4746
{
48-
QMessageBox::information( 0, tr( "Layer not editable" ),
49-
tr( "Cannot edit the vector layer. Use 'Toggle Editing' to make it editable." )
50-
);
47+
notifyNotEditableLayer();
5148
return;
5249
}
5350

0 commit comments

Comments
 (0)