[QGIS Commit] r13434 - in trunk/qgis: python/core src/app
src/app/attributetable src/core
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Fri May 7 05:15:10 EDT 2010
Author: wonder
Date: 2010-05-07 05:15:08 -0400 (Fri, 07 May 2010)
New Revision: 13434
Modified:
trunk/qgis/python/core/qgssearchtreenode.sip
trunk/qgis/src/app/attributetable/qgsattributetabledialog.cpp
trunk/qgis/src/app/qgssearchquerybuilder.cpp
trunk/qgis/src/core/qgssearchtreenode.cpp
trunk/qgis/src/core/qgssearchtreenode.h
Log:
Added the possibility to use $area, $length when searching in attribute table.
Modified: trunk/qgis/python/core/qgssearchtreenode.sip
===================================================================
--- trunk/qgis/python/core/qgssearchtreenode.sip 2010-05-07 08:39:37 UTC (rev 13433)
+++ trunk/qgis/python/core/qgssearchtreenode.sip 2010-05-07 09:15:08 UTC (rev 13434)
@@ -68,8 +68,7 @@
Type type();
//! node value getters
- // TODO: for some reason this function is not found by dynamic linker
- //Operator op();
+ Operator op();
double number();
QString columnRef();
QString string();
@@ -108,6 +107,10 @@
//! @note added in 1.5
QStringList referencedColumns();
+ //! check whether there are any operators that need geometry (for area, length)
+ //! @note added in 1.5
+ bool needsGeometry();
+
protected:
Modified: trunk/qgis/src/app/attributetable/qgsattributetabledialog.cpp
===================================================================
--- trunk/qgis/src/app/attributetable/qgsattributetabledialog.cpp 2010-05-07 08:39:37 UTC (rev 13433)
+++ trunk/qgis/src/app/attributetable/qgsattributetabledialog.cpp 2010-05-07 09:15:08 UTC (rev 13434)
@@ -533,15 +533,19 @@
return;
}
+ // TODO: fetch only necessary columns
+ // QStringList columns = searchTree->referencedColumns();
+ bool fetchGeom = searchTree->needsGeometry();
+
QApplication::setOverrideCursor( Qt::WaitCursor );
mSelectedFeatures.clear();
if ( cbxSearchSelectedOnly->isChecked() )
{
QgsFeatureList selectedFeatures = mLayer->selectedFeatures();
- for ( QgsFeatureList::ConstIterator it = selectedFeatures.begin(); it != selectedFeatures.end(); ++it )
+ for ( QgsFeatureList::Iterator it = selectedFeatures.begin(); it != selectedFeatures.end(); ++it )
{
- if ( searchTree->checkAgainst( mLayer->pendingFields(), it->attributeMap() ) )
+ if ( searchTree->checkAgainst( mLayer->pendingFields(), it->attributeMap(), it->geometry() ) )
mSelectedFeatures << it->id();
// check if there were errors during evaluating
@@ -551,12 +555,12 @@
}
else
{
- mLayer->select( mLayer->pendingAllAttributesList(), QgsRectangle(), false );
+ mLayer->select( mLayer->pendingAllAttributesList(), QgsRectangle(), fetchGeom );
QgsFeature f;
while ( mLayer->nextFeature( f ) )
{
- if ( searchTree->checkAgainst( mLayer->pendingFields(), f.attributeMap() ) )
+ if ( searchTree->checkAgainst( mLayer->pendingFields(), f.attributeMap(), f.geometry() ) )
mSelectedFeatures << f.id();
// check if there were errors during evaluating
Modified: trunk/qgis/src/app/qgssearchquerybuilder.cpp
===================================================================
--- trunk/qgis/src/app/qgssearchquerybuilder.cpp 2010-05-07 08:39:37 UTC (rev 13433)
+++ trunk/qgis/src/app/qgssearchquerybuilder.cpp 2010-05-07 09:15:08 UTC (rev 13434)
@@ -190,6 +190,8 @@
return mLayer->featureCount();
}
+ bool fetchGeom = searchTree->needsGeometry();
+
QApplication::setOverrideCursor( Qt::WaitCursor );
int count = 0;
@@ -198,11 +200,11 @@
const QgsFieldMap& fields = provider->fields();
QgsAttributeList allAttributes = provider->attributeIndexes();
- provider->select( allAttributes, QgsRectangle(), false );
+ provider->select( allAttributes, QgsRectangle(), fetchGeom );
while ( provider->nextFeature( feat ) )
{
- if ( searchTree->checkAgainst( fields, feat.attributeMap() ) )
+ if ( searchTree->checkAgainst( fields, feat.attributeMap(), feat.geometry() ) )
{
count++;
}
Modified: trunk/qgis/src/core/qgssearchtreenode.cpp
===================================================================
--- trunk/qgis/src/core/qgssearchtreenode.cpp 2010-05-07 08:39:37 UTC (rev 13433)
+++ trunk/qgis/src/core/qgssearchtreenode.cpp 2010-05-07 09:15:08 UTC (rev 13434)
@@ -249,7 +249,26 @@
}
+bool QgsSearchTreeNode::needsGeometry()
+{
+ if ( mType == tOperator )
+ {
+ if ( mOp == opLENGTH || mOp == opAREA )
+ return true;
+ if ( mLeft && mLeft->needsGeometry() )
+ return true;
+ if ( mRight && mRight->needsGeometry() )
+ return true;
+ return false;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+
bool QgsSearchTreeNode::checkAgainst( const QgsFieldMap& fields, const QgsAttributeMap& attributes, QgsGeometry* geom )
{
QgsDebugMsgLevel( "checkAgainst: " + makeSearchString(), 2 );
Modified: trunk/qgis/src/core/qgssearchtreenode.h
===================================================================
--- trunk/qgis/src/core/qgssearchtreenode.h 2010-05-07 08:39:37 UTC (rev 13433)
+++ trunk/qgis/src/core/qgssearchtreenode.h 2010-05-07 09:15:08 UTC (rev 13434)
@@ -106,7 +106,7 @@
Type type() { return mType; }
//! node value getters
- Operator op();
+ Operator op() { return mOp; }
double number() { return mNumber; }
QString columnRef() { return mText; }
QString string() { return mText; }
@@ -145,6 +145,10 @@
//! @note added in 1.5
QStringList referencedColumns();
+ //! check whether there are any operators that need geometry (for area, length)
+ //! @note added in 1.5
+ bool needsGeometry();
+
protected:
More information about the QGIS-commit
mailing list