Merge remote-tracking branch 'rldhont/filter_legend_displacement_point2'

Conflicts:
	src/core/qgsmaphittest.cpp
This commit is contained in:
Martin Dobias 2014-11-15 11:19:02 +07:00
commit fda637b314
3 changed files with 86 additions and 38 deletions

View File

@ -53,12 +53,6 @@ void QgsMapHitTest::run()
void QgsMapHitTest::runHitTestLayer( QgsVectorLayer* vl, SymbolV2Set& usedSymbols, QgsRenderContext& context )
{
QgsFeatureRendererV2* r = vl->rendererV2();
// Point displacement case
QgsPointDisplacementRenderer* pdr = dynamic_cast<QgsPointDisplacementRenderer*>( r );
if ( pdr )
r = pdr->embeddedRenderer();
bool moreSymbolsPerFeature = r->capabilities() & QgsFeatureRendererV2::MoreSymbolsPerFeature;
r->startRender( context, vl->pendingFields() );
QgsFeature f;

View File

@ -196,12 +196,80 @@ void QgsPointDisplacementRenderer::setEmbeddedRenderer( QgsFeatureRendererV2* r
mRenderer = r;
}
QList<QString> QgsPointDisplacementRenderer::usedAttributes()
{
QList<QString> attributeList;
if ( !mLabelAttributeName.isEmpty() )
{
attributeList.push_back( mLabelAttributeName );
}
if ( mRenderer )
{
attributeList += mRenderer->usedAttributes();
}
return attributeList;
}
int QgsPointDisplacementRenderer::capabilities()
{
if ( !mRenderer )
{
return 0;
}
return mRenderer->capabilities();
}
QgsSymbolV2List QgsPointDisplacementRenderer::symbols()
{
if ( !mRenderer )
{
return QgsSymbolV2List();
}
return mRenderer->symbols();
}
QgsSymbolV2* QgsPointDisplacementRenderer::symbolForFeature( QgsFeature& feature )
{
Q_UNUSED( feature );
return 0; //not used any more
if ( !mRenderer )
{
return 0;
}
return mRenderer->symbolForFeature( feature );
}
QgsSymbolV2* QgsPointDisplacementRenderer::originalSymbolForFeature( QgsFeature& feat )
{
if ( !mRenderer )
return 0;
return mRenderer->originalSymbolForFeature( feat );
}
QgsSymbolV2List QgsPointDisplacementRenderer::symbolsForFeature( QgsFeature& feature )
{
if ( !mRenderer )
{
return QgsSymbolV2List();
}
return mRenderer->symbolsForFeature( feature );
}
QgsSymbolV2List QgsPointDisplacementRenderer::originalSymbolsForFeature( QgsFeature& feat )
{
if ( !mRenderer )
return QgsSymbolV2List();
return mRenderer->originalSymbolsForFeature( feat );
}
bool QgsPointDisplacementRenderer::willRenderFeature( QgsFeature& feat )
{
if ( !mRenderer )
{
return false;
}
return mRenderer->willRenderFeature( feat );
}
void QgsPointDisplacementRenderer::startRender( QgsRenderContext& context, const QgsFields& fields )
{
mRenderer->startRender( context, fields );
@ -257,32 +325,6 @@ void QgsPointDisplacementRenderer::stopRender( QgsRenderContext& context )
}
}
QList<QString> QgsPointDisplacementRenderer::usedAttributes()
{
QList<QString> attributeList;
if ( !mLabelAttributeName.isEmpty() )
{
attributeList.push_back( mLabelAttributeName );
}
if ( mRenderer )
{
attributeList += mRenderer->usedAttributes();
}
return attributeList;
}
QgsSymbolV2List QgsPointDisplacementRenderer::symbols()
{
if ( mRenderer )
{
return mRenderer->symbols();
}
else
{
return QgsSymbolV2List();
}
}
QgsFeatureRendererV2* QgsPointDisplacementRenderer::create( QDomElement& symbologyElem )
{
QgsPointDisplacementRenderer* r = new QgsPointDisplacementRenderer();

View File

@ -41,15 +41,27 @@ class CORE_EXPORT QgsPointDisplacementRenderer: public QgsFeatureRendererV2
/**Reimplemented from QgsFeatureRendererV2*/
bool renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false );
QgsSymbolV2* symbolForFeature( QgsFeature& feature );
/** Partial proxy that will call this method on the embedded renderer. */
virtual QList<QString> usedAttributes();
/** Proxy that will call this method on the embedded renderer. */
virtual int capabilities();
/** Proxy that will call this method on the embedded renderer. */
virtual QgsSymbolV2List symbols();
/** Proxy that will call this method on the embedded renderer. */
virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature );
/** Proxy that will call this method on the embedded renderer. */
virtual QgsSymbolV2* originalSymbolForFeature( QgsFeature& feat );
/** Proxy that will call this method on the embedded renderer. */
virtual QgsSymbolV2List symbolsForFeature( QgsFeature& feat );
/** Proxy that will call this method on the embedded renderer. */
virtual QgsSymbolV2List originalSymbolsForFeature( QgsFeature& feat );
/** Proxy that will call this method on the embedded renderer. */
virtual bool willRenderFeature( QgsFeature& feat );
void startRender( QgsRenderContext& context, const QgsFields& fields );
void stopRender( QgsRenderContext& context );
QList<QString> usedAttributes();
QgsSymbolV2List symbols();
//! create a renderer from XML element
static QgsFeatureRendererV2* create( QDomElement& symbologyElem );
QDomElement save( QDomDocument& doc );