Use new vector edit macro support to batch Show/Hide Label tool's operation

This commit is contained in:
Larry Shaffer 2013-02-10 22:46:14 -07:00
parent 2de2f2327e
commit dd1bb457d2

View File

@ -156,9 +156,15 @@ void QgsMapToolShowHideLabels::showHideLabels( QMouseEvent * e )
QgsDebugMsg( "Number of selected labels or features: " + QString::number( selectedFeatIds.size() ) );
if ( selectedFeatIds.isEmpty() )
{
return;
}
bool labelChanged = false;
QString editTxt = doHide ? tr( "Hid labels" ) : tr( "Showed labels" );
vlayer->beginEditCommand( editTxt );
foreach ( const QgsFeatureId &fid, selectedFeatIds )
{
if ( showHideLabel( vlayer, fid, doHide ) )
@ -167,11 +173,16 @@ void QgsMapToolShowHideLabels::showHideLabels( QMouseEvent * e )
labelChanged = true;
}
}
vlayer->endEditCommand();
if ( labelChanged )
{
mCanvas->refresh();
}
else
{
vlayer->destroyEditCommand();
}
}
bool QgsMapToolShowHideLabels::selectedFeatures( QgsVectorLayer* vlayer,
@ -294,14 +305,10 @@ bool QgsMapToolShowHideLabels::showHideLabel( QgsVectorLayer* vlayer,
}
// different attribute value, edit table
QString editTxt = hide ? tr( "Hid label" ) : tr( "Showed label" );
vlayer->beginEditCommand( editTxt );
if ( !vlayer->changeAttributeValue( fid, showCol, curVal, false ) )
{
QgsDebugMsg( "Failed write to attribute table" );
vlayer->endEditCommand();
return false;
}
vlayer->endEditCommand();
return true;
}