void QgsMapToolShowHideLabels::showHideLabels( QMouseEvent * e ) { if ( !mCanvas || mCanvas->isDrawing() ) { QgsDebugMsg( "Canvas not ready" ); return; } mRender = mCanvas->mapRenderer(); if ( !mRender ) { QgsDebugMsg( "Failed to acquire map renderer" ); return; } QgsMapLayer* layer = mCanvas->currentLayer(); QgsVectorLayer* vlayer = dynamic_cast<QgsVectorLayer*>( layer ); if ( !vlayer ) { QgsDebugMsg( "Failed to cast label layer to vector layer" ); return; } if ( !vlayer->isEditable() ) { QgsDebugMsg( "Vector layer not editable, skipping label" ); return; } bool doHide = e->modifiers() & Qt::ShiftModifier ? true : false; QgsFeatureIds selectedFeatIds; if ( !doHide ) { QgsDebugMsg( "Showing labels operation" ); if ( !selectedFeatures( vlayer, selectedFeatIds ) ) { return; } } else { QgsDebugMsg( "Hiding labels operation" ); if ( !selectedLabelFeatures( vlayer, selectedFeatIds ) ) { return; } } QgsDebugMsg( "Number of selected labels or features: " + QString::number( selectedFeatIds.size() ) ); bool labelChanged = false; foreach ( const QgsFeatureId &fid, selectedFeatIds ) { if ( showHideLabel( vlayer, fid, doHide ) ) { // TODO: highlight features (maybe with QTimer?) labelChanged = true; } } if ( labelChanged ) { mCanvas->refresh(); } }
void QgsMapToolShowHideLabels::showHideLabels( QMouseEvent * e ) { QgsMapLayer* layer = mCanvas->currentLayer(); QgsVectorLayer* vlayer = dynamic_cast<QgsVectorLayer*>( layer ); if ( !vlayer ) { QgsDebugMsg( "Failed to cast label layer to vector layer" ); return; } if ( !vlayer->isEditable() ) { QgsDebugMsg( "Vector layer not editable, skipping label" ); return; } bool doHide = e->modifiers() & Qt::ShiftModifier ? true : false; QgsFeatureIds selectedFeatIds; if ( !doHide ) { QgsDebugMsg( "Showing labels operation" ); if ( !selectedFeatures( vlayer, selectedFeatIds ) ) { return; } } else { QgsDebugMsg( "Hiding labels operation" ); if ( !selectedLabelFeatures( vlayer, selectedFeatIds ) ) { return; } } 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 ); Q_FOREACH ( const QgsFeatureId &fid, selectedFeatIds ) { if ( showHideLabel( vlayer, fid, doHide ) ) { // TODO: highlight features (maybe with QTimer?) labelChanged = true; } } if ( labelChanged ) { vlayer->endEditCommand(); mCanvas->refresh(); } else { vlayer->destroyEditCommand(); } }