void QgsMapToolMoveLabel::canvasPressEvent( QgsMapMouseEvent* e ) { deleteRubberBands(); if ( !labelAtPosition( e, mCurrentLabelPos ) ) { return; } QgsMapLayer* layer = QgsMapLayerRegistry::instance()->mapLayer( mCurrentLabelPos.layerID ); if ( !layer || !layer->isEditable() ) { return; } int xCol, yCol; if ( labelMoveable( layer, xCol, yCol ) || diagramMoveable( layer, xCol, yCol ) ) { mStartPointMapCoords = toMapCoordinates( e->pos() ); QgsPoint referencePoint; if ( !rotationPoint( referencePoint, !preserveRotation(), false ) ) { referencePoint.setX( mCurrentLabelPos.labelRect.xMinimum() ); referencePoint.setY( mCurrentLabelPos.labelRect.yMinimum() ); } mClickOffsetX = mStartPointMapCoords.x() - referencePoint.x(); mClickOffsetY = mStartPointMapCoords.y() - referencePoint.y(); createRubberBands(); } }
bool QgsMapToolLabel::dataDefinedPosition( QgsVectorLayer* vlayer, const QgsFeatureId &featureId, double& x, bool& xSuccess, double& y, bool& ySuccess, int& xCol, int& yCol ) const { xSuccess = false; ySuccess = false; if ( !vlayer ) { return false; } if ( mCurrentLabelPos.isDiagram ) { if ( !diagramMoveable( vlayer, xCol, yCol ) ) { return false; } } else if ( !labelMoveable( vlayer, xCol, yCol ) ) { return false; } QgsFeature f; if ( !vlayer->getFeatures( QgsFeatureRequest().setFilterFid( featureId ).setFlags( QgsFeatureRequest::NoGeometry ) ).nextFeature( f ) ) { return false; } const QgsAttributes& attributes = f.attributes(); x = attributes[xCol].toDouble( &xSuccess ); y = attributes[yCol].toDouble( &ySuccess ); return true; }
void QgsMapToolMoveLabel::canvasPressEvent( QgsMapMouseEvent* e ) { deleteRubberBands(); QgsLabelPosition labelPos; if ( !labelAtPosition( e, labelPos ) ) { mCurrentLabel = LabelDetails(); return; } mCurrentLabel = LabelDetails( labelPos ); QgsVectorLayer* vlayer = mCurrentLabel.layer; if ( !vlayer || !vlayer->isEditable() ) { return; } int xCol, yCol; if ( labelMoveable( vlayer, mCurrentLabel.settings, xCol, yCol ) || diagramMoveable( vlayer, xCol, yCol ) ) { mStartPointMapCoords = toMapCoordinates( e->pos() ); QgsPoint referencePoint; if ( !currentLabelRotationPoint( referencePoint, !currentLabelPreserveRotation(), false ) ) { referencePoint.setX( mCurrentLabel.pos.labelRect.xMinimum() ); referencePoint.setY( mCurrentLabel.pos.labelRect.yMinimum() ); } mClickOffsetX = mStartPointMapCoords.x() - referencePoint.x(); mClickOffsetY = mStartPointMapCoords.y() - referencePoint.y(); createRubberBands(); } }
bool QgsMapToolLabel::dataDefinedPosition( QgsVectorLayer* vlayer, int featureId, double& x, bool& xSuccess, double& y, bool& ySuccess, int& xCol, int& yCol ) const { xSuccess = false; ySuccess = false; if ( !vlayer ) { return false; } if ( mCurrentLabelPos.isDiagram ) { if ( !diagramMoveable( vlayer, xCol, yCol ) ) { return false; } } else if ( !labelMoveable( vlayer, xCol, yCol ) ) { return false; } QgsFeature f; if ( !vlayer->featureAtId( featureId, f, false, true ) ) { return false; } QgsAttributeMap attributes = f.attributeMap(); x = attributes[xCol].toDouble( &xSuccess ); y = attributes[yCol].toDouble( &ySuccess ); return true; }
bool QgsMapToolLabel::labelMoveable( QgsVectorLayer *vlayer, int &xCol, int &yCol ) const { if ( !vlayer || !vlayer->isEditable() || !vlayer->labelsEnabled() ) { return false; } Q_FOREACH ( const QString &providerId, vlayer->labeling()->subProviders() ) { if ( labelMoveable( vlayer, vlayer->labeling()->settings( providerId ), xCol, yCol ) ) return true; } return false; }
bool QgsMapToolLabel::currentLabelDataDefinedPosition( double &x, bool &xSuccess, double &y, bool &ySuccess, int &xCol, int &yCol ) const { QgsVectorLayer *vlayer = mCurrentLabel.layer; QgsFeatureId featureId = mCurrentLabel.pos.featureId; xSuccess = false; ySuccess = false; if ( !vlayer ) { return false; } if ( mCurrentLabel.pos.isDiagram ) { if ( !diagramMoveable( vlayer, xCol, yCol ) ) { return false; } } else if ( !labelMoveable( vlayer, mCurrentLabel.settings, xCol, yCol ) ) { return false; } QgsFeature f; if ( !vlayer->getFeatures( QgsFeatureRequest().setFilterFid( featureId ).setFlags( QgsFeatureRequest::NoGeometry ) ).nextFeature( f ) ) { return false; } QgsAttributes attributes = f.attributes(); if ( !attributes.at( xCol ).isNull() ) x = attributes.at( xCol ).toDouble( &xSuccess ); if ( !attributes.at( yCol ).isNull() ) y = attributes.at( yCol ).toDouble( &ySuccess ); return true; }
bool QgsMapToolLabel::layerCanPin( QgsMapLayer* ml, int& xCol, int& yCol ) const { // currently same as QgsMapToolLabel::labelMoveable, but may change bool canPin = labelMoveable( ml, xCol, yCol ); return canPin; }
void QgsMapToolMoveLabel::canvasPressEvent( QgsMapMouseEvent *e ) { deleteRubberBands(); QgsLabelPosition labelPos; if ( !labelAtPosition( e, labelPos ) ) { mCurrentLabel = LabelDetails(); return; } mCurrentLabel = LabelDetails( labelPos ); QgsVectorLayer *vlayer = mCurrentLabel.layer; if ( !vlayer ) { return; } int xCol = -1, yCol = -1; if ( !mCurrentLabel.pos.isDiagram && !labelMoveable( vlayer, mCurrentLabel.settings, xCol, yCol ) ) { QgsPalIndexes indexes; if ( createAuxiliaryFields( indexes ) ) return; if ( !labelMoveable( vlayer, mCurrentLabel.settings, xCol, yCol ) ) return; xCol = indexes[ QgsPalLayerSettings::PositionX ]; yCol = indexes[ QgsPalLayerSettings::PositionY ]; } else if ( mCurrentLabel.pos.isDiagram && !diagramMoveable( vlayer, xCol, yCol ) ) { QgsDiagramIndexes indexes; if ( createAuxiliaryFields( indexes ) ) return; if ( !diagramMoveable( vlayer, xCol, yCol ) ) return; xCol = indexes[ QgsDiagramLayerSettings::PositionX ]; yCol = indexes[ QgsDiagramLayerSettings::PositionY ]; } if ( xCol >= 0 && yCol >= 0 ) { mStartPointMapCoords = toMapCoordinates( e->pos() ); QgsPointXY referencePoint; if ( !currentLabelRotationPoint( referencePoint, !currentLabelPreserveRotation(), false ) ) { referencePoint.setX( mCurrentLabel.pos.labelRect.xMinimum() ); referencePoint.setY( mCurrentLabel.pos.labelRect.yMinimum() ); } mClickOffsetX = mStartPointMapCoords.x() - referencePoint.x(); mClickOffsetY = mStartPointMapCoords.y() - referencePoint.y(); createRubberBands(); } }