QgsVectorLayer code cleaning use enums instead of int

It was one of the TODOs for QGIS 3
This commit is contained in:
Alessandro Pasotti 2017-11-23 12:09:30 +01:00
parent d1cf7e614f
commit def85fa202
12 changed files with 164 additions and 170 deletions

View File

@ -52,8 +52,11 @@ class QgsGeometry
Success, Success,
NothingHappened, NothingHappened,
InvalidBaseGeometry, InvalidBaseGeometry,
InvalidInput, InvalidInputGeometryType,
SelectionIsEmpty,
SelectionIsGreaterThanOne,
GeometryEngineError, GeometryEngineError,
LayerNotEditable,
AddPartSelectedGeometryNotFound, AddPartSelectedGeometryNotFound,
AddPartNotMultiGeometry, AddPartNotMultiGeometry,
AddRingNotClosed, AddRingNotClosed,

View File

@ -1043,32 +1043,50 @@ Return the provider type for this layer
:rtype: bool :rtype: bool
%End %End
int addRing( const QVector<QgsPointXY> &ring, QgsFeatureId *featureId = 0 ); QgsGeometry::OperationResult addRing( const QVector<QgsPointXY> &ring, QgsFeatureId *featureId = 0 );
%Docstring %Docstring
:rtype: int Adds a ring to polygon/multipolygon features
\param ring ring to add
\param featureId if specified, feature ID for feature ring was added to will be stored in this parameter
:return: QgsGeometry.OperationResult
:rtype: QgsGeometry.OperationResult
%End %End
int addRing( QgsCurve *ring /Transfer/, QgsFeatureId *featureId = 0 ) /PyName=addCurvedRing/; QgsGeometry::OperationResult addRing( QgsCurve *ring /Transfer/, QgsFeatureId *featureId = 0 ) /PyName=addCurvedRing/;
%Docstring %Docstring
:rtype: int Adds a ring to polygon/multipolygon features (takes ownership)
\param ring ring to add
\param featureId if specified, feature ID for feature ring was added to will be stored in this parameter
:return: QgsGeometry.OperationResult
.. note::
available in Python as addCurvedRing
:rtype: QgsGeometry.OperationResult
%End %End
int addPart( const QList<QgsPointXY> &ring ); QgsGeometry::OperationResult addPart( const QList<QgsPointXY> &ring );
%Docstring %Docstring
:rtype: int Adds a new part polygon to a multipart feature
:return: QgsGeometry.OperationResult
:rtype: QgsGeometry.OperationResult
%End %End
int addPart( const QgsPointSequence &ring ) /PyName=addPartV2/; QgsGeometry::OperationResult addPart( const QgsPointSequence &ring ) /PyName=addPartV2/;
%Docstring %Docstring
:rtype: int Adds a new part polygon to a multipart feature
:return: QgsGeometry.OperationResult
.. note::
available in Python bindings as addPartV2
:rtype: QgsGeometry.OperationResult
%End %End
int addPart( QgsCurve *ring /Transfer/ ) /PyName=addCurvedPart/; QgsGeometry::OperationResult addPart( QgsCurve *ring /Transfer/ ) /PyName=addCurvedPart/;
%Docstring %Docstring
.. note:: .. note::
available in Python as addCurvedPart available in Python as addCurvedPart
:rtype: int :rtype: QgsGeometry.OperationResult
%End %End
int translateFeature( QgsFeatureId featureId, double dx, double dy ); int translateFeature( QgsFeatureId featureId, double dx, double dy );
@ -1081,14 +1099,22 @@ Return the provider type for this layer
:rtype: int :rtype: int
%End %End
int splitParts( const QVector<QgsPointXY> &splitLine, bool topologicalEditing = false ); QgsGeometry::OperationResult splitParts( const QVector<QgsPointXY> &splitLine, bool topologicalEditing = false );
%Docstring %Docstring
:rtype: int Splits parts cut by the given line
\param splitLine line that splits the layer features
\param topologicalEditing true if topological editing is enabled
:return: QgsGeometry.OperationResult
:rtype: QgsGeometry.OperationResult
%End %End
int splitFeatures( const QVector<QgsPointXY> &splitLine, bool topologicalEditing = false ); QgsGeometry::OperationResult splitFeatures( const QVector<QgsPointXY> &splitLine, bool topologicalEditing = false );
%Docstring %Docstring
:rtype: int Splits features cut by the given line
\param splitLine line that splits the layer features
\param topologicalEditing true if topological editing is enabled
:return: QgsGeometry.OperationResult
:rtype: QgsGeometry.OperationResult
%End %End
int addTopologicalPoints( const QgsGeometry &geom ); int addTopologicalPoints( const QgsGeometry &geom );

View File

@ -90,28 +90,30 @@ void QgsMapToolFillRing::cadCanvasReleaseEvent( QgsMapMouseEvent *e )
QVector< QgsPointXY > pointList = points(); QVector< QgsPointXY > pointList = points();
int addRingReturnCode = vlayer->addRing( pointList, &fid ); QgsGeometry::OperationResult addRingReturnCode = vlayer->addRing( pointList, &fid );
if ( addRingReturnCode != 0 )
// AP: this is all dead code:
//todo: open message box to communicate errors
if ( addRingReturnCode != QgsGeometry::OperationResult::Success )
{ {
QString errorMessage; QString errorMessage;
//todo: open message box to communicate errors if ( addRingReturnCode == QgsGeometry::OperationResult::InvalidInputGeometryType )
if ( addRingReturnCode == 1 )
{ {
errorMessage = tr( "a problem with geometry type occurred" ); errorMessage = tr( "a problem with geometry type occurred" );
} }
else if ( addRingReturnCode == 2 ) else if ( addRingReturnCode == QgsGeometry::OperationResult::AddRingNotClosed )
{ {
errorMessage = tr( "the inserted Ring is not closed" ); errorMessage = tr( "the inserted Ring is not closed" );
} }
else if ( addRingReturnCode == 3 ) else if ( addRingReturnCode == QgsGeometry::OperationResult::AddRingNotValid )
{ {
errorMessage = tr( "the inserted Ring is not a valid geometry" ); errorMessage = tr( "the inserted Ring is not a valid geometry" );
} }
else if ( addRingReturnCode == 4 ) else if ( addRingReturnCode == QgsGeometry::OperationResult::AddRingCrossesExistingRings )
{ {
errorMessage = tr( "the inserted Ring crosses existing rings" ); errorMessage = tr( "the inserted Ring crosses existing rings" );
} }
else if ( addRingReturnCode == 5 ) else if ( addRingReturnCode == QgsGeometry::OperationResult::AddRingNotInExistingFeature )
{ {
errorMessage = tr( "the inserted Ring is not contained in a feature" ); errorMessage = tr( "the inserted Ring is not contained in a feature" );
} }

View File

@ -93,9 +93,9 @@ void QgsMapToolSplitFeatures::cadCanvasReleaseEvent( QgsMapMouseEvent *e )
//bring up dialog if a split was not possible (polygon) or only done once (line) //bring up dialog if a split was not possible (polygon) or only done once (line)
int topologicalEditing = QgsProject::instance()->topologicalEditing(); int topologicalEditing = QgsProject::instance()->topologicalEditing();
vlayer->beginEditCommand( tr( "Features split" ) ); vlayer->beginEditCommand( tr( "Features split" ) );
int returnCode = vlayer->splitFeatures( points(), topologicalEditing ); QgsGeometry::OperationResult returnCode = vlayer->splitFeatures( points(), topologicalEditing );
vlayer->endEditCommand(); vlayer->endEditCommand();
if ( returnCode == 4 ) if ( returnCode == QgsGeometry::OperationResult::NothingHappened )
{ {
QgisApp::instance()->messageBar()->pushMessage( QgisApp::instance()->messageBar()->pushMessage(
tr( "No features were split" ), tr( "No features were split" ),
@ -103,7 +103,7 @@ void QgsMapToolSplitFeatures::cadCanvasReleaseEvent( QgsMapMouseEvent *e )
QgsMessageBar::WARNING, QgsMessageBar::WARNING,
QgisApp::instance()->messageTimeout() ); QgisApp::instance()->messageTimeout() );
} }
else if ( returnCode == 3 ) else if ( returnCode == QgsGeometry::OperationResult::GeometryEngineError )
{ {
QgisApp::instance()->messageBar()->pushMessage( QgisApp::instance()->messageBar()->pushMessage(
tr( "No feature split done" ), tr( "No feature split done" ),
@ -111,7 +111,7 @@ void QgsMapToolSplitFeatures::cadCanvasReleaseEvent( QgsMapMouseEvent *e )
QgsMessageBar::WARNING, QgsMessageBar::WARNING,
QgisApp::instance()->messageTimeout() ); QgisApp::instance()->messageTimeout() );
} }
else if ( returnCode == 7 ) else if ( returnCode == QgsGeometry::OperationResult::InvalidBaseGeometry )
{ {
QgisApp::instance()->messageBar()->pushMessage( QgisApp::instance()->messageBar()->pushMessage(
tr( "No feature split done" ), tr( "No feature split done" ),
@ -119,7 +119,7 @@ void QgsMapToolSplitFeatures::cadCanvasReleaseEvent( QgsMapMouseEvent *e )
QgsMessageBar::WARNING, QgsMessageBar::WARNING,
QgisApp::instance()->messageTimeout() ); QgisApp::instance()->messageTimeout() );
} }
else if ( returnCode != 0 ) else if ( returnCode != QgsGeometry::OperationResult::Success )
{ {
//several intersections but only one split (most likely line) //several intersections but only one split (most likely line)
QgisApp::instance()->messageBar()->pushMessage( QgisApp::instance()->messageBar()->pushMessage(

View File

@ -91,9 +91,9 @@ void QgsMapToolSplitParts::cadCanvasReleaseEvent( QgsMapMouseEvent *e )
//bring up dialog if a split was not possible (polygon) or only done once (line) //bring up dialog if a split was not possible (polygon) or only done once (line)
bool topologicalEditing = QgsProject::instance()->topologicalEditing(); bool topologicalEditing = QgsProject::instance()->topologicalEditing();
vlayer->beginEditCommand( tr( "Parts split" ) ); vlayer->beginEditCommand( tr( "Parts split" ) );
int returnCode = vlayer->splitParts( points(), topologicalEditing ); QgsGeometry::OperationResult returnCode = vlayer->splitParts( points(), topologicalEditing );
vlayer->endEditCommand(); vlayer->endEditCommand();
if ( returnCode == 4 ) if ( returnCode == QgsGeometry::OperationResult::NothingHappened )
{ {
QgisApp::instance()->messageBar()->pushMessage( QgisApp::instance()->messageBar()->pushMessage(
tr( "No parts were split" ), tr( "No parts were split" ),
@ -101,7 +101,7 @@ void QgsMapToolSplitParts::cadCanvasReleaseEvent( QgsMapMouseEvent *e )
QgsMessageBar::WARNING, QgsMessageBar::WARNING,
QgisApp::instance()->messageTimeout() ); QgisApp::instance()->messageTimeout() );
} }
else if ( returnCode == 3 ) else if ( returnCode == QgsGeometry::OperationResult::GeometryEngineError )
{ {
QgisApp::instance()->messageBar()->pushMessage( QgisApp::instance()->messageBar()->pushMessage(
tr( "No part split done" ), tr( "No part split done" ),
@ -109,7 +109,7 @@ void QgsMapToolSplitParts::cadCanvasReleaseEvent( QgsMapMouseEvent *e )
QgsMessageBar::WARNING, QgsMessageBar::WARNING,
QgisApp::instance()->messageTimeout() ); QgisApp::instance()->messageTimeout() );
} }
else if ( returnCode == 7 ) else if ( returnCode == QgsGeometry::OperationResult::InvalidBaseGeometry )
{ {
QgisApp::instance()->messageBar()->pushMessage( QgisApp::instance()->messageBar()->pushMessage(
tr( "No part split done" ), tr( "No part split done" ),
@ -117,7 +117,7 @@ void QgsMapToolSplitParts::cadCanvasReleaseEvent( QgsMapMouseEvent *e )
QgsMessageBar::WARNING, QgsMessageBar::WARNING,
QgisApp::instance()->messageTimeout() ); QgisApp::instance()->messageTimeout() );
} }
else if ( returnCode != 0 ) else if ( returnCode != QgsGeometry::OperationResult::Success )
{ {
//several intersections but only one split (most likely line) //several intersections but only one split (most likely line)
QgisApp::instance()->messageBar()->pushMessage( QgisApp::instance()->messageBar()->pushMessage(

View File

@ -625,7 +625,7 @@ QgsGeometry::OperationResult QgsGeometry::addRing( QgsCurve *ring )
std::unique_ptr< QgsCurve > r( ring ); std::unique_ptr< QgsCurve > r( ring );
if ( !d->geometry ) if ( !d->geometry )
{ {
return InvalidInput; return InvalidInputGeometryType;
} }
detach(); detach();
@ -816,7 +816,7 @@ QgsGeometry::OperationResult QgsGeometry::splitGeometry( const QVector<QgsPointX
case QgsGeometryEngine::InvalidBaseGeometry: case QgsGeometryEngine::InvalidBaseGeometry:
return QgsGeometry::InvalidBaseGeometry; return QgsGeometry::InvalidBaseGeometry;
case QgsGeometryEngine::InvalidInput: case QgsGeometryEngine::InvalidInput:
return QgsGeometry::InvalidInput; return QgsGeometry::InvalidInputGeometryType;
case QgsGeometryEngine::SplitCannotSplitPoint: case QgsGeometryEngine::SplitCannotSplitPoint:
return QgsGeometry::SplitCannotSplitPoint; return QgsGeometry::SplitCannotSplitPoint;
case QgsGeometryEngine::NothingHappened: case QgsGeometryEngine::NothingHappened:
@ -857,7 +857,7 @@ QgsGeometry::OperationResult QgsGeometry::reshapeGeometry( const QgsLineString &
case QgsGeometryEngine::InvalidBaseGeometry: case QgsGeometryEngine::InvalidBaseGeometry:
return InvalidBaseGeometry; return InvalidBaseGeometry;
case QgsGeometryEngine::InvalidInput: case QgsGeometryEngine::InvalidInput:
return InvalidInput; return InvalidInputGeometryType;
case QgsGeometryEngine::SplitCannotSplitPoint: // should not happen case QgsGeometryEngine::SplitCannotSplitPoint: // should not happen
return GeometryEngineError; return GeometryEngineError;
case QgsGeometryEngine::NothingHappened: case QgsGeometryEngine::NothingHappened:

View File

@ -121,8 +121,11 @@ class CORE_EXPORT QgsGeometry
Success = 0, //!< Operation succeeded Success = 0, //!< Operation succeeded
NothingHappened = 1000, //!< Nothing happened, without any error NothingHappened = 1000, //!< Nothing happened, without any error
InvalidBaseGeometry, //!< The base geometry on which the operation is done is invalid or empty InvalidBaseGeometry, //!< The base geometry on which the operation is done is invalid or empty
InvalidInput, //!< The input geometry (ring, part, split line, etc.) has not the correct geometry type InvalidInputGeometryType, //!< The input geometry (ring, part, split line, etc.) has not the correct geometry type
SelectionIsEmpty, //!< No features were selected
SelectionIsGreaterThanOne, //!< More than one features were selected
GeometryEngineError, //!< Geometry engine misses a method implemented or an error occurred in the geometry engine GeometryEngineError, //!< Geometry engine misses a method implemented or an error occurred in the geometry engine
LayerNotEditable, //!< Cannot edit layer
/* Add part issues */ /* Add part issues */
AddPartSelectedGeometryNotFound, //!< The selected geometry cannot be found AddPartSelectedGeometryNotFound, //!< The selected geometry cannot be found
AddPartNotMultiGeometry, //!< The source geometry is not multi AddPartNotMultiGeometry, //!< The source geometry is not multi

View File

@ -30,7 +30,7 @@ QgsGeometry::OperationResult QgsGeometryEditUtils::addRing( QgsAbstractGeometry
{ {
if ( !ring ) if ( !ring )
{ {
return QgsGeometry::InvalidInput; return QgsGeometry::InvalidInputGeometryType;
} }
QVector< QgsCurvePolygon * > polygonList; QVector< QgsCurvePolygon * > polygonList;
@ -50,7 +50,7 @@ QgsGeometry::OperationResult QgsGeometryEditUtils::addRing( QgsAbstractGeometry
} }
else else
{ {
return QgsGeometry::InvalidInput; //not polygon / multipolygon; return QgsGeometry::InvalidInputGeometryType; //not polygon / multipolygon;
} }
//ring must be closed //ring must be closed
@ -104,7 +104,7 @@ QgsGeometry::OperationResult QgsGeometryEditUtils::addPart( QgsAbstractGeometry
if ( !part ) if ( !part )
{ {
return QgsGeometry::InvalidInput; return QgsGeometry::InvalidInputGeometryType;
} }
//multitype? //multitype?
@ -155,19 +155,19 @@ QgsGeometry::OperationResult QgsGeometryEditUtils::addPart( QgsAbstractGeometry
{ {
while ( geomCollection->numGeometries() > n ) while ( geomCollection->numGeometries() > n )
geomCollection->removeGeometry( n ); geomCollection->removeGeometry( n );
return QgsGeometry::InvalidInput; return QgsGeometry::InvalidInputGeometryType;
} }
} }
else else
{ {
return QgsGeometry::InvalidInput; return QgsGeometry::InvalidInputGeometryType;
} }
} }
else else
{ {
added = geomCollection->addGeometry( part.release() ); added = geomCollection->addGeometry( part.release() );
} }
return added ? QgsGeometry::Success : QgsGeometry::InvalidInput; return added ? QgsGeometry::Success : QgsGeometry::InvalidInputGeometryType;
} }
bool QgsGeometryEditUtils::deleteRing( QgsAbstractGeometry *geom, int ringNum, int partNum ) bool QgsGeometryEditUtils::deleteRing( QgsAbstractGeometry *geom, int ringNum, int partNum )

View File

@ -491,7 +491,7 @@ void QgsVectorLayer::modifySelection( const QgsFeatureIds &selectIds, const QgsF
QgsFeatureIds intersectingIds = selectIds & deselectIds; QgsFeatureIds intersectingIds = selectIds & deselectIds;
if ( !intersectingIds.isEmpty() ) if ( !intersectingIds.isEmpty() )
{ {
QgsDebugMsg( "Trying to select and deselect the same item at the same time. Unsure what to do. Selecting dubious items." ); QgsDebugMsgLevel( QStringLiteral( "Trying to select and deselect the same item at the same time. Unsure what to do. Selecting dubious items." ), 3 );
} }
mSelectedFeatureIds -= deselectIds; mSelectedFeatureIds -= deselectIds;
@ -584,7 +584,7 @@ QgsWkbTypes::GeometryType QgsVectorLayer::geometryType() const
} }
else else
{ {
QgsDebugMsg( "invalid layer or pointer to mDataProvider is null" ); QgsDebugMsgLevel( QStringLiteral( "invalid layer or pointer to mDataProvider is null" ), 3 );
} }
// We shouldn't get here, and if we have, other things are likely to // We shouldn't get here, and if we have, other things are likely to
@ -592,7 +592,9 @@ QgsWkbTypes::GeometryType QgsVectorLayer::geometryType() const
// rewritten to cope with a value of Qgis::Unknown. To make this // rewritten to cope with a value of Qgis::Unknown. To make this
// need known, the following message is printed every time we get // need known, the following message is printed every time we get
// here. // here.
QgsDebugMsg( "WARNING: This code should never be reached. Problems may occur..." ); // AP: it looks like we almost always get here, since 2.x ... either we remove this
// warning of take care of the problems that may occur
QgsDebugMsg( QStringLiteral( "WARNING: This code should never be reached. Problems may occur..." ) );
return QgsWkbTypes::UnknownGeometry; return QgsWkbTypes::UnknownGeometry;
} }
@ -736,17 +738,17 @@ QgsVectorLayerFeatureCounter *QgsVectorLayer::countSymbolFeatures()
if ( !mValid ) if ( !mValid )
{ {
QgsDebugMsg( "invoked with invalid layer" ); QgsDebugMsgLevel( QStringLiteral( "invoked with invalid layer" ), 3 );
return mFeatureCounter; return mFeatureCounter;
} }
if ( !mDataProvider ) if ( !mDataProvider )
{ {
QgsDebugMsg( "invoked with null mDataProvider" ); QgsDebugMsgLevel( QStringLiteral( "invoked with null mDataProvider" ), 3 );
return mFeatureCounter; return mFeatureCounter;
} }
if ( !mRenderer ) if ( !mRenderer )
{ {
QgsDebugMsg( "invoked with null mRenderer" ); QgsDebugMsgLevel( QStringLiteral( "invoked with null mRenderer" ), 3 );
return mFeatureCounter; return mFeatureCounter;
} }
@ -816,7 +818,7 @@ QgsRectangle QgsVectorLayer::extent() const
QgsRectangle mbr = mDataProvider->extent(); QgsRectangle mbr = mDataProvider->extent();
// show the extent // show the extent
QgsDebugMsg( "Extent of layer: " + mbr.toString() ); QgsDebugMsgLevel( QStringLiteral( "Extent of layer: %1" ).arg( mbr.toString() ), 3 );
// store the extent // store the extent
mValidExtent = true; mValidExtent = true;
mExtent = mbr; mExtent = mbr;
@ -829,7 +831,7 @@ QgsRectangle QgsVectorLayer::extent() const
if ( !mValid || !mDataProvider ) if ( !mValid || !mDataProvider )
{ {
QgsDebugMsg( "invoked with invalid layer or null mDataProvider" ); QgsDebugMsgLevel( QStringLiteral( "invoked with invalid layer or null mDataProvider" ), 3 );
return rect; return rect;
} }
@ -899,7 +901,7 @@ QString QgsVectorLayer::subsetString() const
{ {
if ( !mValid || !mDataProvider ) if ( !mValid || !mDataProvider )
{ {
QgsDebugMsg( "invoked with invalid layer or null mDataProvider" ); QgsDebugMsgLevel( QStringLiteral( "invoked with invalid layer or null mDataProvider" ), 3 );
return QString(); return QString();
} }
return mDataProvider->subsetString(); return mDataProvider->subsetString();
@ -909,7 +911,7 @@ bool QgsVectorLayer::setSubsetString( const QString &subset )
{ {
if ( !mValid || !mDataProvider ) if ( !mValid || !mDataProvider )
{ {
QgsDebugMsg( "invoked with invalid layer or null mDataProvider" ); QgsDebugMsgLevel( QStringLiteral( "invoked with invalid layer or null mDataProvider" ), 3 );
return false; return false;
} }
@ -977,7 +979,7 @@ bool QgsVectorLayer::updateFeature( const QgsFeature &updatedFeature, bool skipD
QgsFeature currentFeature = getFeature( updatedFeature.id() ); QgsFeature currentFeature = getFeature( updatedFeature.id() );
if ( currentFeature.isValid() ) if ( currentFeature.isValid() )
{ {
QgsDebugMsg( QString( "feature %1 could not be retrieved" ).arg( updatedFeature.id() ) ); QgsDebugMsgLevel( QStringLiteral( "feature %1 could not be retrieved" ).arg( updatedFeature.id() ), 3 );
if ( updatedFeature.hasGeometry() && currentFeature.hasGeometry() && !updatedFeature.geometry().isGeosEqual( currentFeature.geometry() ) ) if ( updatedFeature.hasGeometry() && currentFeature.hasGeometry() && !updatedFeature.geometry().isGeosEqual( currentFeature.geometry() ) )
{ {
@ -987,7 +989,7 @@ bool QgsVectorLayer::updateFeature( const QgsFeature &updatedFeature, bool skipD
} }
else else
{ {
QgsDebugMsg( QString( "geometry of feature %1 could not be changed." ).arg( updatedFeature.id() ) ); QgsDebugMsgLevel( QStringLiteral( "geometry of feature %1 could not be changed." ).arg( updatedFeature.id() ), 3 );
} }
} }
@ -1004,7 +1006,7 @@ bool QgsVectorLayer::updateFeature( const QgsFeature &updatedFeature, bool skipD
} }
else else
{ {
QgsDebugMsg( QString( "attribute %1 of feature %2 could not be changed." ).arg( attr ).arg( updatedFeature.id() ) ); QgsDebugMsgLevel( QStringLiteral( "attribute %1 of feature %2 could not be changed." ).arg( attr ).arg( updatedFeature.id() ), 3 );
hasError = true; hasError = true;
} }
} }
@ -1116,13 +1118,13 @@ bool QgsVectorLayer::deleteSelectedFeatures( int *deletedCount )
return deleted == count; return deleted == count;
} }
int QgsVectorLayer::addRing( const QVector<QgsPointXY> &ring, QgsFeatureId *featureId ) QgsGeometry::OperationResult QgsVectorLayer::addRing( const QVector<QgsPointXY> &ring, QgsFeatureId *featureId )
{ {
if ( !mValid || !mEditBuffer || !mDataProvider ) if ( !mValid || !mEditBuffer || !mDataProvider )
return 6; return QgsGeometry::OperationResult::LayerNotEditable;
QgsVectorLayerEditUtils utils( this ); QgsVectorLayerEditUtils utils( this );
int result = 5; QgsGeometry::OperationResult result = QgsGeometry::OperationResult::AddRingNotInExistingFeature;
//first try with selected features //first try with selected features
if ( !mSelectedFeatureIds.isEmpty() ) if ( !mSelectedFeatureIds.isEmpty() )
@ -1130,7 +1132,7 @@ int QgsVectorLayer::addRing( const QVector<QgsPointXY> &ring, QgsFeatureId *feat
result = utils.addRing( ring, mSelectedFeatureIds, featureId ); result = utils.addRing( ring, mSelectedFeatureIds, featureId );
} }
if ( result != 0 ) if ( result != QgsGeometry::OperationResult::Success )
{ {
//try with all intersecting features //try with all intersecting features
result = utils.addRing( ring, QgsFeatureIds(), featureId ); result = utils.addRing( ring, QgsFeatureIds(), featureId );
@ -1139,27 +1141,27 @@ int QgsVectorLayer::addRing( const QVector<QgsPointXY> &ring, QgsFeatureId *feat
return result; return result;
} }
int QgsVectorLayer::addRing( QgsCurve *ring, QgsFeatureId *featureId ) QgsGeometry::OperationResult QgsVectorLayer::addRing( QgsCurve *ring, QgsFeatureId *featureId )
{ {
if ( !mValid || !mEditBuffer || !mDataProvider ) if ( !mValid || !mEditBuffer || !mDataProvider )
{ {
delete ring; delete ring;
return 6; return QgsGeometry::OperationResult::LayerNotEditable;
} }
if ( !ring ) if ( !ring )
{ {
return 1; return QgsGeometry::OperationResult::InvalidInputGeometryType;
} }
if ( !ring->isClosed() ) if ( !ring->isClosed() )
{ {
delete ring; delete ring;
return 2; return QgsGeometry::OperationResult::AddRingNotClosed;
} }
QgsVectorLayerEditUtils utils( this ); QgsVectorLayerEditUtils utils( this );
int result = 5; QgsGeometry::OperationResult result = QgsGeometry::OperationResult::AddRingNotInExistingFeature;
//first try with selected features //first try with selected features
if ( !mSelectedFeatureIds.isEmpty() ) if ( !mSelectedFeatureIds.isEmpty() )
@ -1167,7 +1169,7 @@ int QgsVectorLayer::addRing( QgsCurve *ring, QgsFeatureId *featureId )
result = utils.addRing( static_cast< QgsCurve * >( ring->clone() ), mSelectedFeatureIds, featureId ); result = utils.addRing( static_cast< QgsCurve * >( ring->clone() ), mSelectedFeatureIds, featureId );
} }
if ( result != 0 ) if ( result != QgsGeometry::OperationResult::Success )
{ {
//try with all intersecting features //try with all intersecting features
result = utils.addRing( static_cast< QgsCurve * >( ring->clone() ), QgsFeatureIds(), featureId ); result = utils.addRing( static_cast< QgsCurve * >( ring->clone() ), QgsFeatureIds(), featureId );
@ -1177,80 +1179,80 @@ int QgsVectorLayer::addRing( QgsCurve *ring, QgsFeatureId *featureId )
return result; return result;
} }
int QgsVectorLayer::addPart( const QList<QgsPointXY> &points ) QgsGeometry::OperationResult QgsVectorLayer::addPart( const QList<QgsPointXY> &points )
{ {
if ( !mValid || !mEditBuffer || !mDataProvider ) if ( !mValid || !mEditBuffer || !mDataProvider )
return 7; return QgsGeometry::OperationResult::LayerNotEditable;
//number of selected features must be 1 //number of selected features must be 1
if ( mSelectedFeatureIds.empty() ) if ( mSelectedFeatureIds.empty() )
{ {
QgsDebugMsg( "Number of selected features <1" ); QgsDebugMsgLevel( "Number of selected features < 1", 3 );
return 4; return QgsGeometry::OperationResult::SelectionIsEmpty;
} }
else if ( mSelectedFeatureIds.size() > 1 ) else if ( mSelectedFeatureIds.size() > 1 )
{ {
QgsDebugMsg( "Number of selected features >1" ); QgsDebugMsgLevel( "Number of selected features > 1", 3 );
return 5; return QgsGeometry::OperationResult::SelectionIsGreaterThanOne;
} }
QgsVectorLayerEditUtils utils( this ); QgsVectorLayerEditUtils utils( this );
int result = utils.addPart( points, *mSelectedFeatureIds.constBegin() ); QgsGeometry::OperationResult result = utils.addPart( points, *mSelectedFeatureIds.constBegin() );
if ( result == 0 ) if ( result == QgsGeometry::OperationResult::Success )
updateExtents(); updateExtents();
return result; return result;
} }
int QgsVectorLayer::addPart( const QgsPointSequence &points ) QgsGeometry::OperationResult QgsVectorLayer::addPart( const QgsPointSequence &points )
{ {
if ( !mValid || !mEditBuffer || !mDataProvider ) if ( !mValid || !mEditBuffer || !mDataProvider )
return 7; return QgsGeometry::OperationResult::LayerNotEditable;
//number of selected features must be 1 //number of selected features must be 1
if ( mSelectedFeatureIds.empty() ) if ( mSelectedFeatureIds.empty() )
{ {
QgsDebugMsg( "Number of selected features <1" ); QgsDebugMsgLevel( "Number of selected features <1", 3 );
return 4; return QgsGeometry::OperationResult::SelectionIsEmpty;
} }
else if ( mSelectedFeatureIds.size() > 1 ) else if ( mSelectedFeatureIds.size() > 1 )
{ {
QgsDebugMsg( "Number of selected features >1" ); QgsDebugMsgLevel( "Number of selected features >1", 3 );
return 5; return QgsGeometry::OperationResult::SelectionIsGreaterThanOne;
} }
QgsVectorLayerEditUtils utils( this ); QgsVectorLayerEditUtils utils( this );
int result = utils.addPart( points, *mSelectedFeatureIds.constBegin() ); QgsGeometry::OperationResult result = utils.addPart( points, *mSelectedFeatureIds.constBegin() );
if ( result == 0 ) if ( result == QgsGeometry::OperationResult::Success )
updateExtents(); updateExtents();
return result; return result;
} }
int QgsVectorLayer::addPart( QgsCurve *ring ) QgsGeometry::OperationResult QgsVectorLayer::addPart( QgsCurve *ring )
{ {
if ( !mValid || !mEditBuffer || !mDataProvider ) if ( !mValid || !mEditBuffer || !mDataProvider )
return 7; return QgsGeometry::OperationResult::LayerNotEditable;
//number of selected features must be 1 //number of selected features must be 1
if ( mSelectedFeatureIds.empty() ) if ( mSelectedFeatureIds.empty() )
{ {
QgsDebugMsg( "Number of selected features <1" ); QgsDebugMsgLevel( "Number of selected features <1", 3 );
return 4; return QgsGeometry::OperationResult::SelectionIsEmpty;
} }
else if ( mSelectedFeatureIds.size() > 1 ) else if ( mSelectedFeatureIds.size() > 1 )
{ {
QgsDebugMsg( "Number of selected features >1" ); QgsDebugMsgLevel( "Number of selected features >1", 3 );
return 5; return QgsGeometry::OperationResult::SelectionIsGreaterThanOne;
} }
QgsVectorLayerEditUtils utils( this ); QgsVectorLayerEditUtils utils( this );
int result = utils.addPart( ring, *mSelectedFeatureIds.constBegin() ); QgsGeometry::OperationResult result = utils.addPart( ring, *mSelectedFeatureIds.constBegin() );
if ( result == 0 ) if ( result == QgsGeometry::OperationResult::Success )
updateExtents(); updateExtents();
return result; return result;
} }
@ -1258,29 +1260,29 @@ int QgsVectorLayer::addPart( QgsCurve *ring )
int QgsVectorLayer::translateFeature( QgsFeatureId featureId, double dx, double dy ) int QgsVectorLayer::translateFeature( QgsFeatureId featureId, double dx, double dy )
{ {
if ( !mValid || !mEditBuffer || !mDataProvider ) if ( !mValid || !mEditBuffer || !mDataProvider )
return -1; return QgsGeometry::OperationResult::LayerNotEditable;
QgsVectorLayerEditUtils utils( this ); QgsVectorLayerEditUtils utils( this );
int result = utils.translateFeature( featureId, dx, dy ); int result = utils.translateFeature( featureId, dx, dy );
if ( result == 0 ) if ( result == QgsGeometry::OperationResult::Success )
updateExtents(); updateExtents();
return result; return result;
} }
int QgsVectorLayer::splitParts( const QVector<QgsPointXY> &splitLine, bool topologicalEditing ) QgsGeometry::OperationResult QgsVectorLayer::splitParts( const QVector<QgsPointXY> &splitLine, bool topologicalEditing )
{ {
if ( !mValid || !mEditBuffer || !mDataProvider ) if ( !mValid || !mEditBuffer || !mDataProvider )
return -1; return QgsGeometry::OperationResult::LayerNotEditable;
QgsVectorLayerEditUtils utils( this ); QgsVectorLayerEditUtils utils( this );
return utils.splitParts( splitLine, topologicalEditing ); return utils.splitParts( splitLine, topologicalEditing );
} }
int QgsVectorLayer::splitFeatures( const QVector<QgsPointXY> &splitLine, bool topologicalEditing ) QgsGeometry::OperationResult QgsVectorLayer::splitFeatures( const QVector<QgsPointXY> &splitLine, bool topologicalEditing )
{ {
if ( !mValid || !mEditBuffer || !mDataProvider ) if ( !mValid || !mEditBuffer || !mDataProvider )
return -1; return QgsGeometry::OperationResult::LayerNotEditable;
QgsVectorLayerEditUtils utils( this ); QgsVectorLayerEditUtils utils( this );
return utils.splitFeatures( splitLine, topologicalEditing ); return utils.splitFeatures( splitLine, topologicalEditing );
@ -1377,7 +1379,7 @@ bool QgsVectorLayer::startEditing()
bool QgsVectorLayer::readXml( const QDomNode &layer_node, const QgsReadWriteContext &context ) bool QgsVectorLayer::readXml( const QDomNode &layer_node, const QgsReadWriteContext &context )
{ {
QgsDebugMsg( QString( "Datasource in QgsVectorLayer::readXml: " ) + mDataSource.toLocal8Bit().data() ); QgsDebugMsgLevel( QStringLiteral( "Datasource in QgsVectorLayer::readXml: %1" ).arg( mDataSource.toLocal8Bit().data() ), 3 );
//process provider key //process provider key
QDomNode pkeyNode = layer_node.namedItem( QStringLiteral( "provider" ) ); QDomNode pkeyNode = layer_node.namedItem( QStringLiteral( "provider" ) );
@ -1532,18 +1534,18 @@ bool QgsVectorLayer::setDataProvider( QString const &provider )
mDataProvider = qobject_cast<QgsVectorDataProvider *>( QgsProviderRegistry::instance()->createProvider( provider, dataSource ) ); mDataProvider = qobject_cast<QgsVectorDataProvider *>( QgsProviderRegistry::instance()->createProvider( provider, dataSource ) );
if ( !mDataProvider ) if ( !mDataProvider )
{ {
QgsDebugMsg( " unable to get data provider" ); QgsDebugMsgLevel( QStringLiteral( "Unable to get data provider" ), 2 );
return false; return false;
} }
connect( mDataProvider, &QgsVectorDataProvider::raiseError, this, &QgsVectorLayer::raiseError ); connect( mDataProvider, &QgsVectorDataProvider::raiseError, this, &QgsVectorLayer::raiseError );
QgsDebugMsgLevel( "Instantiated the data provider plugin", 4 ); QgsDebugMsgLevel( QStringLiteral( "Instantiated the data provider plugin" ), 2 );
mValid = mDataProvider->isValid(); mValid = mDataProvider->isValid();
if ( !mValid ) if ( !mValid )
{ {
QgsDebugMsg( "Invalid provider plugin " + QString( mDataSource.toUtf8() ) ); QgsDebugMsgLevel( QStringLiteral( "Invalid provider plugin %1" ).arg( QString( mDataSource.toUtf8() ) ), 2 );
return false; return false;
} }
@ -1558,7 +1560,7 @@ bool QgsVectorLayer::setDataProvider( QString const &provider )
if ( mProviderKey == QLatin1String( "postgres" ) ) if ( mProviderKey == QLatin1String( "postgres" ) )
{ {
QgsDebugMsg( "Beautifying layer name " + name() ); QgsDebugMsgLevel( QStringLiteral( "Beautifying layer name %1" ).arg( name() ), 3 );
// adjust the display name for postgres layers // adjust the display name for postgres layers
QRegExp reg( R"lit("[^"]+"\."([^"] + )"( \([^)]+\))?)lit" ); QRegExp reg( R"lit("[^"]+"\."([^"] + )"( \([^)]+\))?)lit" );
@ -1582,7 +1584,7 @@ bool QgsVectorLayer::setDataProvider( QString const &provider )
setName( lName ); setName( lName );
} }
QgsDebugMsg( "Beautified layer name " + name() ); QgsDebugMsgLevel( QStringLiteral( "Beautified layer name %1" ).arg( name() ), 3 );
// deal with unnecessary schema qualification to make v.in.ogr happy // deal with unnecessary schema qualification to make v.in.ogr happy
// and remove unnecessary key // and remove unnecessary key
@ -1629,7 +1631,7 @@ bool QgsVectorLayer::writeXml( QDomNode &layer_node,
if ( mapLayerNode.isNull() || ( "maplayer" != mapLayerNode.nodeName() ) ) if ( mapLayerNode.isNull() || ( "maplayer" != mapLayerNode.nodeName() ) )
{ {
QgsDebugMsg( "can't find <maplayer>" ); QgsDebugMsgLevel( QStringLiteral( "can't find <maplayer>" ), 2 );
return false; return false;
} }
@ -2520,7 +2522,7 @@ bool QgsVectorLayer::deleteFeatures( const QgsFeatureIds &fids )
{ {
if ( !mEditBuffer ) if ( !mEditBuffer )
{ {
QgsDebugMsg( "Cannot delete features (mEditBuffer==NULL)" ); QgsDebugMsgLevel( QStringLiteral( "Cannot delete features (mEditBuffer==NULL)" ), 1 );
return false; return false;
} }
@ -2717,12 +2719,7 @@ bool QgsVectorLayer::addFeatures( QgsFeatureList &features, Flags )
void QgsVectorLayer::setCoordinateSystem() void QgsVectorLayer::setCoordinateSystem()
{ {
QgsDebugMsgLevel( "----- Computing Coordinate System", 4 ); QgsDebugMsgLevel( QStringLiteral( "Computing Coordinate System" ), 4 );
//
// Get the layers project info and set up the QgsCoordinateTransform
// for this layer
//
if ( isSpatial() ) if ( isSpatial() )
{ {
@ -3708,14 +3705,14 @@ void QgsVectorLayer::readSldLabeling( const QDomNode &node )
QDomElement userStyleElem = element.firstChildElement( QStringLiteral( "UserStyle" ) ); QDomElement userStyleElem = element.firstChildElement( QStringLiteral( "UserStyle" ) );
if ( userStyleElem.isNull() ) if ( userStyleElem.isNull() )
{ {
QgsDebugMsg( "Info: UserStyle element not found." ); QgsDebugMsgLevel( QStringLiteral( "Info: UserStyle element not found." ), 4 );
return; return;
} }
QDomElement featureTypeStyleElem = userStyleElem.firstChildElement( QStringLiteral( "FeatureTypeStyle" ) ); QDomElement featureTypeStyleElem = userStyleElem.firstChildElement( QStringLiteral( "FeatureTypeStyle" ) );
if ( featureTypeStyleElem.isNull() ) if ( featureTypeStyleElem.isNull() )
{ {
QgsDebugMsg( "Info: FeatureTypeStyle element not found." ); QgsDebugMsgLevel( QStringLiteral( "Info: FeatureTypeStyle element not found." ), 4 );
return; return;
} }
@ -3723,7 +3720,7 @@ void QgsVectorLayer::readSldLabeling( const QDomNode &node )
QDomElement ruleElem = featureTypeStyleElem.lastChildElement( QStringLiteral( "Rule" ) ); QDomElement ruleElem = featureTypeStyleElem.lastChildElement( QStringLiteral( "Rule" ) );
if ( ruleElem.isNull() ) if ( ruleElem.isNull() )
{ {
QgsDebugMsg( "Info: Rule element not found." ); QgsDebugMsgLevel( QStringLiteral( "Info: Rule element not found." ), 4 );
return; return;
} }
@ -3731,7 +3728,7 @@ void QgsVectorLayer::readSldLabeling( const QDomNode &node )
QDomElement textSymbolizerElem = ruleElem.lastChildElement( QStringLiteral( "TextSymbolizer" ) ); QDomElement textSymbolizerElem = ruleElem.lastChildElement( QStringLiteral( "TextSymbolizer" ) );
if ( textSymbolizerElem.isNull() ) if ( textSymbolizerElem.isNull() )
{ {
QgsDebugMsg( "Info: TextSymbolizer element not found." ); QgsDebugMsgLevel( QStringLiteral( "Info: TextSymbolizer element not found." ), 4 );
return; return;
} }
@ -3762,19 +3759,19 @@ void QgsVectorLayer::readSldLabeling( const QDomNode &node )
} }
else else
{ {
QgsDebugMsg( "SLD label attribute error: " + exp.evalErrorString() ); QgsDebugMsgLevel( QStringLiteral( "SLD label attribute error: %1" ).arg( exp.evalErrorString() ), 3 );
} }
} }
} }
else else
{ {
QgsDebugMsg( "Info: PropertyName element not found." ); QgsDebugMsgLevel( QStringLiteral( "Info: PropertyName element not found." ), 4 );
return; return;
} }
} }
else else
{ {
QgsDebugMsg( "Info: Label element not found." ); QgsDebugMsgLevel( QStringLiteral( "Info: Label element not found." ), 4 );
return; return;
} }
@ -4013,7 +4010,7 @@ QString QgsVectorLayer::htmlMetadata() const
QgsWkbTypes::GeometryType type = geometryType(); QgsWkbTypes::GeometryType type = geometryType();
if ( type < 0 || type > QgsWkbTypes::NullGeometry ) if ( type < 0 || type > QgsWkbTypes::NullGeometry )
{ {
QgsDebugMsg( "Invalid vector type" ); QgsDebugMsgLevel( QStringLiteral( "Invalid vector type" ), 2 );
} }
else else
{ {

View File

@ -1049,65 +1049,34 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer, public QgsExpressionConte
* Adds a ring to polygon/multipolygon features * Adds a ring to polygon/multipolygon features
* \param ring ring to add * \param ring ring to add
* \param featureId if specified, feature ID for feature ring was added to will be stored in this parameter * \param featureId if specified, feature ID for feature ring was added to will be stored in this parameter
* \returns * \returns QgsGeometry::OperationResult
* 0 in case of success,
* 1 problem with feature type,
* 2 ring not closed,
* 3 ring not valid,
* 4 ring crosses existing rings,
* 5 no feature found where ring can be inserted
* 6 layer not editable
*/ */
// TODO QGIS 3.0 returns an enum instead of a magic constant QgsGeometry::OperationResult addRing( const QVector<QgsPointXY> &ring, QgsFeatureId *featureId = nullptr );
int addRing( const QVector<QgsPointXY> &ring, QgsFeatureId *featureId = nullptr );
/** /**
* Adds a ring to polygon/multipolygon features (takes ownership) * Adds a ring to polygon/multipolygon features (takes ownership)
* \param ring ring to add * \param ring ring to add
* \param featureId if specified, feature ID for feature ring was added to will be stored in this parameter * \param featureId if specified, feature ID for feature ring was added to will be stored in this parameter
* \returns * \returns QgsGeometry::OperationResult
* 0 in case of success
* 1 problem with feature type
* 2 ring not closed
* 6 layer not editable
* \note available in Python as addCurvedRing * \note available in Python as addCurvedRing
*/ */
// TODO QGIS 3.0 returns an enum instead of a magic constant QgsGeometry::OperationResult addRing( QgsCurve *ring SIP_TRANSFER, QgsFeatureId *featureId = nullptr ) SIP_PYNAME( addCurvedRing );
int addRing( QgsCurve *ring SIP_TRANSFER, QgsFeatureId *featureId = nullptr ) SIP_PYNAME( addCurvedRing );
/** /**
* Adds a new part polygon to a multipart feature * Adds a new part polygon to a multipart feature
* \returns * \returns QgsGeometry::OperationResult
* 0 in case of success,
* 1 if selected feature is not multipart,
* 2 if ring is not a valid geometry,
* 3 if new polygon ring not disjoint with existing rings,
* 4 if no feature was selected,
* 5 if several features are selected,
* 6 if selected geometry not found
* 7 layer not editable
*/ */
// TODO QGIS 3.0 returns an enum instead of a magic constant QgsGeometry::OperationResult addPart( const QList<QgsPointXY> &ring );
int addPart( const QList<QgsPointXY> &ring );
/** /**
* Adds a new part polygon to a multipart feature * Adds a new part polygon to a multipart feature
* \returns * \returns QgsGeometry::OperationResult
* 0 in case of success,
* 1 if selected feature is not multipart,
* 2 if ring is not a valid geometry,
* 3 if new polygon ring not disjoint with existing rings,
* 4 if no feature was selected,
* 5 if several features are selected,
* 6 if selected geometry not found
* 7 layer not editable
* \note available in Python bindings as addPartV2 * \note available in Python bindings as addPartV2
*/ */
// TODO QGIS 3.0 returns an enum instead of a magic constant QgsGeometry::OperationResult addPart( const QgsPointSequence &ring ) SIP_PYNAME( addPartV2 );
int addPart( const QgsPointSequence &ring ) SIP_PYNAME( addPartV2 );
//! \note available in Python as addCurvedPart //! \note available in Python as addCurvedPart
int addPart( QgsCurve *ring SIP_TRANSFER ) SIP_PYNAME( addCurvedPart ); QgsGeometry::OperationResult addPart( QgsCurve *ring SIP_TRANSFER ) SIP_PYNAME( addCurvedPart );
/** /**
* Translates feature by dx, dy * Translates feature by dx, dy
@ -1122,23 +1091,17 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer, public QgsExpressionConte
* Splits parts cut by the given line * Splits parts cut by the given line
* \param splitLine line that splits the layer features * \param splitLine line that splits the layer features
* \param topologicalEditing true if topological editing is enabled * \param topologicalEditing true if topological editing is enabled
* \returns * \returns QgsGeometry::OperationResult
* 0 in case of success,
* 4 if there is a selection but no feature split
*/ */
// TODO QGIS 3.0 returns an enum instead of a magic constant QgsGeometry::OperationResult splitParts( const QVector<QgsPointXY> &splitLine, bool topologicalEditing = false );
int splitParts( const QVector<QgsPointXY> &splitLine, bool topologicalEditing = false );
/** /**
* Splits features cut by the given line * Splits features cut by the given line
* \param splitLine line that splits the layer features * \param splitLine line that splits the layer features
* \param topologicalEditing true if topological editing is enabled * \param topologicalEditing true if topological editing is enabled
* \returns * \returns QgsGeometry::OperationResult
* 0 in case of success,
* 4 if there is a selection but no feature split
*/ */
// TODO QGIS 3.0 returns an enum instead of a magic constant QgsGeometry::OperationResult splitFeatures( const QVector<QgsPointXY> &splitLine, bool topologicalEditing = false );
int splitFeatures( const QVector<QgsPointXY> &splitLine, bool topologicalEditing = false );
/** /**
* Adds topological points for every vertex of the geometry. * Adds topological points for every vertex of the geometry.

View File

@ -301,7 +301,7 @@ QgsGeometry::OperationResult QgsVectorLayerEditUtils::splitFeatures( const QVect
} }
else else
{ {
return QgsGeometry::InvalidInput; return QgsGeometry::InvalidInputGeometryType;
} }
if ( bBox.isEmpty() ) if ( bBox.isEmpty() )
@ -410,7 +410,7 @@ QgsGeometry::OperationResult QgsVectorLayerEditUtils::splitParts( const QVector<
} }
else else
{ {
return QgsGeometry::InvalidInput; return QgsGeometry::InvalidInputGeometryType;
} }
if ( bBox.isEmpty() ) if ( bBox.isEmpty() )

Binary file not shown.