Alias without pending prefix for QgsVectorLayer methods

* pendingAllAttributesList -> attributeList
 * pendingPkAttributesList -> pkAttributeList
 * pendingFeatureCount -> featureCount

featureCount will now always return the features on the layer and NOT the
committed features count as before.
This changes its behavior but this way it is coherent with the other methods
which work on the layer.
This commit is contained in:
Matthias Kuhn 2015-08-02 09:09:01 +02:00
parent e832b2a28a
commit cf2f6b17fa
16 changed files with 89 additions and 75 deletions

View File

@ -568,15 +568,6 @@ class QgsVectorLayer : QgsMapLayer
bool writeSld( QDomNode& node, QDomDocument& doc, QString& errorMessage ) const;
bool readSld( const QDomNode& node, QString& errorMessage );
/**
* Number of features in the layer. This is necessary if features are
* added/deleted or the layer has been subsetted. If the data provider
* chooses not to support this feature, the total number of features
* can be returned.
* @return long containing number of features
*/
virtual long featureCount() const;
/**
* Update the data source of the layer. The layer's renderer and legend will be preserved only
* if the geometry type of the new data source matches the current geometry type of the layer.
@ -816,16 +807,40 @@ class QgsVectorLayer : QgsMapLayer
*
* @return A list of fields
*/
const QgsFields pendingFields() const;
QgsFields pendingFields() const;
/** Returns list of attributes */
QList<int> pendingAllAttributesList();
/**
* Returns list of attribute indexes. i.e. a list from 0 ... fieldCount()
* Alias for {@link attributeList()}
*/
QgsAttributeList pendingAllAttributesList() const;
/** Returns list of attribute making up the primary key */
QList<int> pendingPkAttributesList();
/**
* Returns list of attribute indexes. i.e. a list from 0 ... fieldCount()
* Alias for {@link attributeList()}
*/
QgsAttributeList attributeList() const;
/** Returns feature count after commit */
int pendingFeatureCount();
/**
* Returns list of attributes making up the primary key
* Alias for {@link pkAttributeList()}
*/
QgsAttributeList pendingPkAttributesList() const;
/** Returns list of attributes making up the primary key */
QgsAttributeList pkAttributeList() const;
/**
* Returns feature count including changes which have not yet been committed
* Alias for {@link featureCount()}
*/
long pendingFeatureCount() const;
/**
* Returns feature count including changes which have not yet been committed
* If you need only the count of committed features call this method on this layer's provider.
*/
long featureCount() const;
/** Make layer read-only (editing disabled) or not
* @return false if the layer is in editing yet

View File

@ -961,7 +961,7 @@ bool QgsGeometryAnalyzer::eventLayer( QgsVectorLayer* lineLayer, QgsVectorLayer*
QgsGeometry* lrsGeom = 0;
double measure1, measure2 = 0.0;
int nEventFeatures = eventLayer->pendingFeatureCount();
int nEventFeatures = eventLayer->featureCount();
int featureCounter = 0;
int nOutputFeatures = 0; //number of output features for the current event feature
if ( p )

View File

@ -6285,7 +6285,7 @@ void QgisApp::editPaste( QgsMapLayer *destinationLayer )
QHash<int, int> remap;
const QgsFields &fields = clipboard()->fields();
QgsAttributeList pkAttrList = pasteVectorLayer->pendingPkAttributesList();
QgsAttributeList pkAttrList = pasteVectorLayer->pkAttributeList();
for ( int idx = 0; idx < fields.count(); ++idx )
{
int dst = pasteVectorLayer->fieldNameIndex( fields[idx].name() );

View File

@ -88,7 +88,7 @@ void QgsMergeAttributesDialog::createTableWidgetContents()
//create combo boxes and insert attribute names
const QgsFields& fields = mVectorLayer->fields();
QSet<int> pkAttrList = mVectorLayer->pendingPkAttributesList().toSet();
QSet<int> pkAttrList = mVectorLayer->pkAttributeList().toSet();
int col = 0;
for ( int idx = 0; idx < fields.count(); ++idx )
@ -487,7 +487,7 @@ void QgsMergeAttributesDialog::on_mFromSelectedPushButton_clicked()
return;
}
QSet<int> pkAttributes = mVectorLayer->pendingPkAttributesList().toSet();
QSet<int> pkAttributes = mVectorLayer->pkAttributeList().toSet();
for ( int i = 0; i < mTableWidget->columnCount(); ++i )
{
if ( pkAttributes.contains( i ) )

View File

@ -602,8 +602,8 @@ QVariant QgsLegendModelV2::data( const QModelIndex& index, int role ) const
if ( nodeLayer->customProperty( "showFeatureCount", 0 ).toInt() && role == Qt::DisplayRole )
{
QgsVectorLayer* vlayer = qobject_cast<QgsVectorLayer*>( nodeLayer->layer() );
if ( vlayer && vlayer->pendingFeatureCount() >= 0 )
name += QString( " [%1]" ).arg( vlayer->pendingFeatureCount() );
if ( vlayer && vlayer->featureCount() >= 0 )
name += QString( " [%1]" ).arg( vlayer->featureCount() );
}
return name;
}

View File

@ -168,8 +168,8 @@ QVariant QgsLayerTreeModel::data( const QModelIndex &index, int role ) const
if ( nodeLayer->customProperty( "showFeatureCount", 0 ).toInt() && role == Qt::DisplayRole )
{
QgsVectorLayer* vlayer = qobject_cast<QgsVectorLayer*>( nodeLayer->layer() );
if ( vlayer && vlayer->pendingFeatureCount() >= 0 )
name += QString( " [%1]" ).arg( vlayer->pendingFeatureCount() );
if ( vlayer && vlayer->featureCount() >= 0 )
name += QString( " [%1]" ).arg( vlayer->featureCount() );
}
return name;
}

View File

@ -413,8 +413,8 @@ void QgsSymbolV2LegendNode::updateLabel()
layerName = mLayerNode->customProperty( "legend/title-label" ).toString();
mLabel = mUserLabel.isEmpty() ? layerName : mUserLabel;
if ( showFeatureCount && vl && vl->pendingFeatureCount() >= 0 )
mLabel += QString( " [%1]" ).arg( vl->pendingFeatureCount() );
if ( showFeatureCount && vl && vl->featureCount() >= 0 )
mLabel += QString( " [%1]" ).arg( vl->featureCount() );
}
else
{

View File

@ -883,8 +883,8 @@ void QgsOfflineEditing::copySymbology( QgsVectorLayer* sourceLayer, QgsVectorLay
// NOTE: use this to map column indices in case the remote geometry column is not last
QMap<int, int> QgsOfflineEditing::attributeLookup( QgsVectorLayer* offlineLayer, QgsVectorLayer* remoteLayer )
{
const QgsAttributeList& offlineAttrs = offlineLayer->pendingAllAttributesList();
const QgsAttributeList& remoteAttrs = remoteLayer->pendingAllAttributesList();
const QgsAttributeList& offlineAttrs = offlineLayer->attributeList();
const QgsAttributeList& remoteAttrs = remoteLayer->attributeList();
QMap < int /*offline attr*/, int /*remote attr*/ > attrLookup;
// NOTE: use size of remoteAttrs, as offlineAttrs can have new attributes not yet synced

View File

@ -1945,7 +1945,7 @@ QgsVectorFileWriter::WriterError QgsVectorFileWriter::writeAsVectorFormat( QgsVe
errorMessage->clear();
}
QgsAttributeList allAttr = skipAttributeCreation ? QgsAttributeList() : layer->pendingAllAttributesList();
QgsAttributeList allAttr = skipAttributeCreation ? QgsAttributeList() : layer->attributeList();
QgsFeature fet;
//add possible attributes needed by renderer

View File

@ -675,17 +675,6 @@ bool QgsVectorLayer::diagramsEnabled() const
return false;
}
long QgsVectorLayer::featureCount() const
{
if ( !mDataProvider )
{
QgsDebugMsg( "invoked with null mDataProvider" );
return 0;
}
return mDataProvider->featureCount();
}
long QgsVectorLayer::featureCount( QgsSymbolV2* symbol )
{
if ( !mSymbolFeatureCounted ) return -1;
@ -716,7 +705,7 @@ bool QgsVectorLayer::countSymbolFeatures( bool showProgress )
mSymbolFeatureCountMap.insert( symbolIt->second, 0 );
}
long nFeatures = pendingFeatureCount();
long nFeatures = featureCount();
QProgressDialog progressDialog( tr( "Updating feature count for layer %1" ).arg( name() ), tr( "Abort" ), 0, nFeatures );
progressDialog.setWindowTitle( tr( "QGIS" ) );
progressDialog.setWindowModality( Qt::WindowModal );
@ -2218,12 +2207,7 @@ bool QgsVectorLayer::deleteFeature( QgsFeatureId fid )
return res;
}
QgsAttributeList QgsVectorLayer::pendingAllAttributesList()
{
return mUpdatedFields.allAttributesList();
}
QgsAttributeList QgsVectorLayer::pendingPkAttributesList()
QgsAttributeList QgsVectorLayer::pkAttributeList() const
{
QgsAttributeList pkAttributesList;
@ -2238,7 +2222,7 @@ QgsAttributeList QgsVectorLayer::pendingPkAttributesList()
return pkAttributesList;
}
int QgsVectorLayer::pendingFeatureCount()
long QgsVectorLayer::featureCount() const
{
return mDataProvider->featureCount() +
( mEditBuffer ? mEditBuffer->mAddedFeatures.size() - mEditBuffer->mDeletedFeatureIds.size() : 0 );
@ -3563,7 +3547,7 @@ QString QgsVectorLayer::metadata()
myMetadata += "</p>\n";
}
QgsAttributeList pkAttrList = pendingPkAttributesList();
QgsAttributeList pkAttrList = pkAttributeList();
if ( !pkAttrList.isEmpty() )
{
myMetadata += "<p class=\"glossy\">" + tr( "Primary key attributes" ) + "</p>\n";

View File

@ -1061,15 +1061,6 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer
bool writeSld( QDomNode& node, QDomDocument& doc, QString& errorMessage ) const;
bool readSld( const QDomNode& node, QString& errorMessage ) override;
/**
* Number of features in the layer. This is necessary if features are
* added/deleted or the layer has been subsetted. If the data provider
* chooses not to support this feature, the total number of features
* can be returned.
* @return long containing number of features
*/
virtual long featureCount() const;
/**
* Number of features rendered with specified symbol. Features must be first
* calculated by countSymbolFeatures()
@ -1306,7 +1297,7 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer
*
* @return A list of fields
*/
const inline QgsFields fields() const { return mUpdatedFields; }
inline QgsFields fields() const { return mUpdatedFields; }
/**
* Returns the list of fields of this layer.
@ -1315,16 +1306,40 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer
*
* @return A list of fields
*/
const inline QgsFields pendingFields() const { return mUpdatedFields; }
inline QgsFields pendingFields() const { return mUpdatedFields; }
/** Returns list of attributes */
QgsAttributeList pendingAllAttributesList();
/**
* Returns list of attribute indexes. i.e. a list from 0 ... fieldCount()
* Alias for {@link attributeList()}
*/
inline QgsAttributeList pendingAllAttributesList() const { return mUpdatedFields.allAttributesList(); }
/** Returns list of attribute making up the primary key */
QgsAttributeList pendingPkAttributesList();
/**
* Returns list of attribute indexes. i.e. a list from 0 ... fieldCount()
* Alias for {@link attributeList()}
*/
inline QgsAttributeList attributeList() const { return mUpdatedFields.allAttributesList(); }
/** Returns feature count after commit */
int pendingFeatureCount();
/**
* Returns list of attributes making up the primary key
* Alias for {@link pkAttributeList()}
*/
inline QgsAttributeList pendingPkAttributesList() const { return pkAttributeList(); }
/** Returns list of attributes making up the primary key */
QgsAttributeList pkAttributeList() const;
/**
* Returns feature count including changes which have not yet been committed
* Alias for {@link featureCount()}
*/
inline long pendingFeatureCount() const { return featureCount(); }
/**
* Returns feature count including changes which have not yet been committed
* If you need only the count of committed features call this method on this layer's provider.
*/
long featureCount() const;
/** Make layer read-only (editing disabled) or not
* @return false if the layer is in editing yet

View File

@ -31,7 +31,7 @@ QgsVectorLayerCache::QgsVectorLayerCache( QgsVectorLayer* layer, int cacheSize,
connect( mLayer, SIGNAL( layerDeleted() ), SLOT( layerDeleted() ) );
setCacheGeometry( true );
setCacheSubsetOfAttributes( mLayer->pendingAllAttributesList() );
setCacheSubsetOfAttributes( mLayer->attributeList() );
setCacheAddedAttributes( true );
connect( mLayer, SIGNAL( attributeDeleted( int ) ), SLOT( attributeDeleted( int ) ) );
@ -330,7 +330,7 @@ bool QgsVectorLayerCache::checkInformationCovered( const QgsFeatureRequest& feat
if ( !featureRequest.flags().testFlag( QgsFeatureRequest::SubsetOfAttributes ) )
{
requestedAttributes = mLayer->pendingAllAttributesList();
requestedAttributes = mLayer->attributeList();
}
else
{

View File

@ -302,7 +302,7 @@ QgsVectorLayerImport::importLayer( QgsVectorLayer* layer,
errorMessage->clear();
}
QgsAttributeList allAttr = skipAttributeCreation ? QgsAttributeList() : layer->pendingAllAttributesList();
QgsAttributeList allAttr = skipAttributeCreation ? QgsAttributeList() : layer->attributeList();
QgsFeature fet;
QgsFeatureRequest req;

View File

@ -111,7 +111,7 @@ void QgsDualView::columnBoxInit()
// if neither diaplay expression nor display field is saved...
if ( displayExpression == "" )
{
QgsAttributeList pkAttrs = mLayerCache->layer()->pendingPkAttributesList();
QgsAttributeList pkAttrs = mLayerCache->layer()->pkAttributeList();
if ( pkAttrs.size() > 0 )
{

View File

@ -506,7 +506,7 @@ void QgsRuleBasedRendererV2Widget::countFeatures()
renderContext.setRendererScale( 0 ); // ignore scale
mRenderer->startRender( renderContext, mLayer->fields() );
int nFeatures = mLayer->pendingFeatureCount();
int nFeatures = mLayer->featureCount();
QProgressDialog p( tr( "Calculating feature count." ), tr( "Abort" ), 0, nFeatures );
p.setWindowModality( Qt::WindowModal );
int featuresCounted = 0;

View File

@ -77,7 +77,7 @@ void TestVectorLayerJoinBuffer::initTestCase()
QgsFeature fA2( mLayerA->dataProvider()->fields(), 2 );
fA2.setAttribute( "id_a", 2 );
mLayerA->dataProvider()->addFeatures( QgsFeatureList() << fA1 << fA2 );
QVERIFY( mLayerA->pendingFeatureCount() == 2 );
QVERIFY( mLayerA->featureCount() == 2 );
// LAYER B //
@ -92,7 +92,7 @@ void TestVectorLayerJoinBuffer::initTestCase()
fB2.setAttribute( "id_b", 2 );
fB2.setAttribute( "value_b", 12 );
mLayerB->dataProvider()->addFeatures( QgsFeatureList() << fB1 << fB2 );
QVERIFY( mLayerB->pendingFeatureCount() == 2 );
QVERIFY( mLayerB->featureCount() == 2 );
// LAYER C //
@ -104,7 +104,7 @@ void TestVectorLayerJoinBuffer::initTestCase()
fC1.setAttribute( "id_c", 1 );
fC1.setAttribute( "value_c", 101 );
mLayerC->dataProvider()->addFeatures( QgsFeatureList() << fC1 );
QVERIFY( mLayerC->pendingFeatureCount() == 1 );
QVERIFY( mLayerC->featureCount() == 1 );
QgsMapLayerRegistry::instance()->addMapLayer( mLayerA );
QgsMapLayerRegistry::instance()->addMapLayer( mLayerB );
@ -259,7 +259,7 @@ void TestVectorLayerJoinBuffer::testJoinSubset()
fX1.setAttribute( "value_x1", 111 );
fX1.setAttribute( "value_x2", 222 );
layerX->dataProvider()->addFeatures( QgsFeatureList() << fX1 );
QVERIFY( layerX->pendingFeatureCount() == 1 );
QVERIFY( layerX->featureCount() == 1 );
QgsMapLayerRegistry::instance()->addMapLayer( layerX );