void QgsMapToolLabel::currentAlignment( QString& hali, QString& vali ) { hali = "Left"; vali = "Bottom"; QgsVectorLayer* vlayer = currentLayer(); if ( !vlayer ) { return; } QgsFeature f; if ( !currentFeature( f ) ) { return; } int haliIndx = dataDefinedColumnIndex( QgsPalLayerSettings::Hali, vlayer ); if ( haliIndx != -1 ) { hali = f.attribute( haliIndx ).toString(); } int valiIndx = dataDefinedColumnIndex( QgsPalLayerSettings::Vali, vlayer ); if ( valiIndx != -1 ) { vali = f.attribute( valiIndx ).toString(); } }
bool QgsMapToolLabel::labelMoveable( QgsMapLayer *ml, int& xCol, int& yCol ) const { QgsVectorLayer* vlayer = qobject_cast<QgsVectorLayer*>( ml ); if ( !vlayer || !vlayer->isEditable() ) { return false; } bool xColOk = false; bool yColOk = false; int xColumn = dataDefinedColumnIndex( QgsPalLayerSettings::PositionX, vlayer ); if ( xColumn != -1 ) { xCol = xColumn; xColOk = true; } int yColumn = dataDefinedColumnIndex( QgsPalLayerSettings::PositionY, vlayer ); if ( yColumn != -1 ) { yCol = yColumn; yColOk = true; } if ( xColOk && yColOk ) { return true; } return false; }
bool QgsMapToolLabel::layerIsRotatable( QgsMapLayer* layer, int& rotationCol ) const { QgsVectorLayer* vlayer = qobject_cast<QgsVectorLayer*>( layer ); if ( !vlayer || !vlayer->isEditable() ) { return false; } int rotCol = dataDefinedColumnIndex( QgsPalLayerSettings::Rotation, vlayer ); if ( rotCol != -1 ) { rotationCol = rotCol; return true; } return false; }
bool QgsMapToolLabel::layerCanShowHide( QgsMapLayer* ml, int& showCol ) const { //QgsDebugMsg( "entered" ); QgsVectorLayer* vlayer = qobject_cast<QgsVectorLayer*>( ml ); if ( !vlayer || !vlayer->isEditable() ) { return false; } int showColmn = dataDefinedColumnIndex( QgsPalLayerSettings::Show, vlayer ); if ( showColmn != -1 ) { showCol = showColmn; return true; } return false; }
QFont QgsMapToolLabel::labelFontCurrentFeature() { QFont font; QgsVectorLayer* vlayer = currentLayer(); bool labelSettingsOk; QgsPalLayerSettings& labelSettings = currentLabelSettings( &labelSettingsOk ); if ( labelSettingsOk && vlayer ) { font = labelSettings.textFont; QgsFeature f; if ( vlayer->getFeatures( QgsFeatureRequest().setFilterFid( mCurrentLabelPos.featureId ).setFlags( QgsFeatureRequest::NoGeometry ) ).nextFeature( f ) ) { //size int sizeIndx = dataDefinedColumnIndex( QgsPalLayerSettings::Size, vlayer ); if ( sizeIndx != -1 ) { if ( labelSettings.fontSizeInMapUnits ) { font.setPixelSize( labelSettings.sizeToPixel( f.attribute( sizeIndx ).toDouble(), QgsRenderContext(), QgsPalLayerSettings::MapUnits, true ) ); } else { font.setPointSizeF( f.attribute( sizeIndx ).toDouble() ); } } //family int fmIndx = dataDefinedColumnIndex( QgsPalLayerSettings::Family, vlayer ); if ( fmIndx != -1 ) { font.setFamily( f.attribute( fmIndx ).toString() ); } //underline int ulIndx = dataDefinedColumnIndex( QgsPalLayerSettings::Underline, vlayer ); if ( ulIndx != -1 ) { font.setUnderline( f.attribute( ulIndx ).toBool() ); } //strikeout int soIndx = dataDefinedColumnIndex( QgsPalLayerSettings::Strikeout, vlayer ); if ( soIndx != -1 ) { font.setStrikeOut( f.attribute( soIndx ).toBool() ); } //bold int boIndx = dataDefinedColumnIndex( QgsPalLayerSettings::Bold, vlayer ); if ( boIndx != -1 ) { font.setBold( f.attribute( boIndx ).toBool() ); } //italic int itIndx = dataDefinedColumnIndex( QgsPalLayerSettings::Italic, vlayer ); if ( itIndx != -1 ) { font.setItalic( f.attribute( itIndx ).toBool() ); } // TODO: Add other font data defined values (word spacing, etc.) } } return font; }
QFont QgsMapToolLabel::currentLabelFont() { QFont font; QgsPalLayerSettings &labelSettings = mCurrentLabel.settings; QgsVectorLayer *vlayer = mCurrentLabel.layer; QgsRenderContext context = QgsRenderContext::fromMapSettings( mCanvas->mapSettings() ); if ( mCurrentLabel.valid && vlayer ) { font = labelSettings.format().font(); QgsFeature f; if ( vlayer->getFeatures( QgsFeatureRequest().setFilterFid( mCurrentLabel.pos.featureId ).setFlags( QgsFeatureRequest::NoGeometry ) ).nextFeature( f ) ) { //size int sizeIndx = dataDefinedColumnIndex( QgsPalLayerSettings::Size, mCurrentLabel.settings, vlayer ); if ( sizeIndx != -1 ) { font.setPixelSize( QgsTextRenderer::sizeToPixel( f.attribute( sizeIndx ).toDouble(), context, labelSettings.format().sizeUnit(), labelSettings.format().sizeMapUnitScale() ) ); } //family int fmIndx = dataDefinedColumnIndex( QgsPalLayerSettings::Family, labelSettings, vlayer ); if ( fmIndx != -1 ) { font.setFamily( f.attribute( fmIndx ).toString() ); } //underline int ulIndx = dataDefinedColumnIndex( QgsPalLayerSettings::Underline, labelSettings, vlayer ); if ( ulIndx != -1 ) { font.setUnderline( f.attribute( ulIndx ).toBool() ); } //strikeout int soIndx = dataDefinedColumnIndex( QgsPalLayerSettings::Strikeout, labelSettings, vlayer ); if ( soIndx != -1 ) { font.setStrikeOut( f.attribute( soIndx ).toBool() ); } //bold int boIndx = dataDefinedColumnIndex( QgsPalLayerSettings::Bold, labelSettings, vlayer ); if ( boIndx != -1 ) { font.setBold( f.attribute( boIndx ).toBool() ); } //italic int itIndx = dataDefinedColumnIndex( QgsPalLayerSettings::Italic, labelSettings, vlayer ); if ( itIndx != -1 ) { font.setItalic( f.attribute( itIndx ).toBool() ); } // TODO: Add other font data defined values (word spacing, etc.) } } return font; }