[API] Removed old renderer support from QgsVectorLayer

This commit is contained in:
Martin Dobias 2013-04-07 19:48:03 +02:00
parent 37da713c7e
commit c2f00caedf
25 changed files with 358 additions and 1592 deletions

View File

@ -171,7 +171,6 @@
%Include symbology-ng/qgsstylev2.sip
%Include symbology-ng/qgssvgcache.sip
%Include symbology-ng/qgssymbologyv2conversion.sip
%Include symbology-ng/qgssymbolv2.sip
%Include symbology-ng/qgscolorbrewerpalette.sip
%Include symbology-ng/qgscptcityarchive.sip

View File

@ -242,12 +242,6 @@ class QgsVectorLayer : QgsMapLayer
/** Returns the bounding box of the selected features. If there is no selection, QgsRectangle(0,0,0,0) is returned */
QgsRectangle boundingBoxOfSelected();
/** Returns a pointer to the renderer */
const QgsRenderer* renderer() const;
/** Sets the renderer. If a renderer is already present, it is deleted */
void setRenderer( QgsRenderer * r /Transfer/ );
/** Sets diagram rendering object (takes ownership) */
void setDiagramRenderer( QgsDiagramRendererV2* r /Transfer/ );
const QgsDiagramRendererV2* diagramRenderer() const;
@ -262,14 +256,6 @@ class QgsVectorLayer : QgsMapLayer
* @note added in 1.4
*/
void setRendererV2( QgsFeatureRendererV2* r /Transfer/ );
/** Return whether using renderer V2.
* @note added in 1.4
*/
bool isUsingRendererV2();
/** set whether to use renderer V2 for drawing.
* @note added in 1.4
*/
void setUsingRendererV2( bool usingRendererV2 );
/** Draw layer with renderer V2.
* @note added in 1.4

View File

@ -1,24 +0,0 @@
class QgsSymbologyV2Conversion
{
%TypeHeaderCode
#include <qgssymbologyv2conversion.h>
%End
public:
//! return a symbol in new symbology as close as possible to old symbol
//! @note not all properties will be preserved
static QgsSymbolV2* symbolV1toV2( const QgsSymbol* s ) /Factory/;
//! return a symbol in old symbology as close as possible to new symbol
//! @note not all properties will be preserved
static QgsSymbol* symbolV2toV1( QgsSymbolV2* s ) /Factory/;
//! convert layer from old symbology to new symbology
//! @note not all properties will be preserved
static void rendererV1toV2( QgsVectorLayer* layer );
//! convert layer from new symbology to old symbology
//! @note not all properties will be preserved
static void rendererV2toV1( QgsVectorLayer* layer );
};

View File

@ -137,10 +137,7 @@ void QgsLegendLayer::refreshSymbology( const QString& key, double widthScale )
if ( theMapLayer->type() == QgsMapLayer::VectorLayer ) // VECTOR
{
QgsVectorLayer* vlayer = qobject_cast<QgsVectorLayer *>( theMapLayer );
if ( vlayer->isUsingRendererV2() )
vectorLayerSymbologyV2( vlayer );
else
vectorLayerSymbology( vlayer, widthScale ); // get and change symbology
vectorLayerSymbologyV2( vlayer );
}
else if ( theMapLayer->type() == QgsMapLayer::RasterLayer ) // RASTER
{
@ -187,106 +184,6 @@ void QgsLegendLayer::changeSymbologySettings( const QgsMapLayer* theMapLayer,
void QgsLegendLayer::vectorLayerSymbology( QgsVectorLayer* layer, double widthScale )
{
if ( !layer )
{
return;
}
SymbologyList itemList;
if ( layer->hasGeometryType() )
{
//add the new items
QString lw, uv, label;
const QgsRenderer* renderer = layer->renderer();
const QList<QgsSymbol*> sym = renderer->symbols();
//create an item for each classification field (only one for most renderers)
QSettings settings;
if ( settings.value( "/qgis/showLegendClassifiers", false ).toBool() )
{
if ( renderer->needsAttributes() )
{
QgsAttributeList classfieldlist = renderer->classificationAttributes();
const QgsFields& fields = layer->pendingFields();
for ( QgsAttributeList::iterator it = classfieldlist.begin(); it != classfieldlist.end(); ++it )
{
int idx = *it;
if ( idx < 0 || idx >= fields.count() )
continue;
QString classfieldname = layer->attributeAlias( idx );
if ( classfieldname.isEmpty() )
{
classfieldname = fields[idx].name();
}
itemList.append( qMakePair( classfieldname, QPixmap() ) );
}
}
}
QMap< QgsSymbol*, int > featureCountMap;
if ( mShowFeatureCount )
{
updateItemListCount( layer, sym, featureCountMap );
}
for ( QList<QgsSymbol*>::const_iterator it = sym.begin(); it != sym.end(); ++it )
{
QImage img;
if (( *it )->type() == QGis::Point )
{
img = ( *it )->getPointSymbolAsImage( widthScale );
}
else if (( *it )->type() == QGis::Line )
{
img = ( *it )->getLineSymbolAsImage();
}
else if (( *it )->type() == QGis::Polygon )
{
img = ( *it )->getPolygonSymbolAsImage();
}
else
{
// must be a layer without geometry then
}
QString values;
lw = ( *it )->lowerValue();
if ( !lw.isEmpty() )
{
values += lw;
}
uv = ( *it )->upperValue();
if ( !uv.isEmpty() && lw != uv )
{
values += " - ";
values += uv;
}
label = ( *it )->label();
if ( !label.isEmpty() )
{
values += " ";
values += label;
}
if ( mShowFeatureCount )
{
int fCount = featureCountMap[*it];
if ( fCount >= 0 )
{
values += ( " [" + QString::number( fCount ) + "]" );
}
}
QPixmap pix = QPixmap::fromImage( img ); // convert to pixmap
itemList.append( qMakePair( values, pix ) );
}
}
changeSymbologySettings( layer, itemList );
}
void QgsLegendLayer::vectorLayerSymbologyV2( QgsVectorLayer* layer )
{
QSize iconSize( 16, 16 );
@ -666,60 +563,6 @@ void QgsLegendLayer::updateItemListCountV2( SymbologyList& itemList, QgsVectorLa
}
}
void QgsLegendLayer::updateItemListCount( QgsVectorLayer* layer, const QList<QgsSymbol*>& sym, QMap< QgsSymbol*, int >& featureCountMap )
{
featureCountMap.clear();
QList<QgsSymbol*>::const_iterator symbolIt = sym.constBegin();
for ( ; symbolIt != sym.constEnd(); ++symbolIt )
{
featureCountMap.insert( *symbolIt, 0 );
}
QgsRenderer* renderer = const_cast<QgsRenderer*>( layer->renderer() );
if ( !renderer )
{
return;
}
//go through all features and count the number of occurrences
int nFeatures = layer->pendingFeatureCount();
QProgressDialog p( tr( "Updating feature count for layer %1" ).arg( layer->name() ), tr( "Abort" ), 0, nFeatures );
p.setWindowModality( Qt::WindowModal );
int featuresCounted = 0;
QgsFeatureIterator fit = layer->getFeatures( QgsFeatureRequest().setFlags( QgsFeatureRequest::NoGeometry ) );
QgsFeature f;
QgsSymbol* currentSymbol = 0;
while ( fit.nextFeature( f ) )
{
currentSymbol = renderer->symbolForFeature( &f );
if ( currentSymbol )
{
featureCountMap[currentSymbol] += 1;
}
++featuresCounted;
if ( featuresCounted % 50 == 0 )
{
if ( featuresCounted > nFeatures ) //sometimes the feature count is not correct
{
p.setMaximum( 0 );
}
p.setValue( featuresCounted );
if ( p.wasCanceled() ) //set all entries to -1 (= invalid)
{
QMap< QgsSymbol*, int >::iterator cIt = featureCountMap.begin();
for ( ; cIt != featureCountMap.end(); ++cIt )
{
cIt.value() = -1;
}
return;
}
}
}
p.setValue( nFeatures );
}
void QgsLegendLayer::setShowFeatureCount( bool show, bool update )
{

View File

@ -110,8 +110,6 @@ class QgsLegendLayer : public QgsLegendItem
protected:
/** Prepare and change symbology for vector layer */
void vectorLayerSymbology( QgsVectorLayer* mapLayer, double widthScale = 1.0 );
void vectorLayerSymbologyV2( QgsVectorLayer* vlayer );
/** Prepare and change symbology for raster layer */
@ -122,8 +120,6 @@ class QgsLegendLayer : public QgsLegendItem
/**Adds feature counts to the symbology items (for symbology v2)*/
void updateItemListCountV2( SymbologyList& itemList, QgsVectorLayer* layer );
/**Calculates feature count for the individual symbols (old symbology)*/
void updateItemListCount( QgsVectorLayer* layer, const QList<QgsSymbol*>& sym, QMap< QgsSymbol*, int >& featureCountMap );
QPixmap getOriginalPixmap();

View File

@ -238,26 +238,6 @@ int QgsMapToolRotatePointSymbols::layerRotationAttributes( QgsVectorLayer* vl, Q
return 1;
}
//old symbology
const QgsRenderer* layerRenderer = vl->renderer();
if ( layerRenderer )
{
//get renderer symbols
const QList<QgsSymbol*> rendererSymbols = layerRenderer->symbols();
int currentRotationAttribute;
QList<QgsSymbol*>::const_iterator symbolIt = rendererSymbols.constBegin();
for ( ; symbolIt != rendererSymbols.constEnd(); ++symbolIt )
{
currentRotationAttribute = ( *symbolIt )->rotationClassificationField();
if ( currentRotationAttribute >= 0 )
{
attList.push_back( currentRotationAttribute );
}
}
return 0;
}
//new symbology
const QgsFeatureRendererV2* symbologyNgRenderer = vl->rendererV2();
if ( symbologyNgRenderer )
@ -306,27 +286,10 @@ void QgsMapToolRotatePointSymbols::createPixmapItem( QgsFeature& f )
//get the image that is used for that symbol, but without point rotation
QImage pointImage;
QgsRenderer* r = 0;
QgsFeatureRendererV2* rv2 = 0;
if ( mActiveLayer && mActiveLayer->renderer() ) //old symbology
if ( mActiveLayer && mActiveLayer->rendererV2() ) //symbology-ng
{
//copy renderer
QgsRenderer* r = mActiveLayer->renderer()->clone();
//set all symbol fields of the cloned renderer to -1. Very ugly but necessary
QList<QgsSymbol*> symbolList( r->symbols() );
QList<QgsSymbol*>::iterator it = symbolList.begin();
for ( ; it != symbolList.end(); ++it )
{
( *it )->setRotationClassificationField( -1 );
}
r->renderFeature( *renderContext, f, &pointImage, false );
}
else if ( mActiveLayer && mActiveLayer->rendererV2() ) //symbology-ng
{
rv2 = mActiveLayer->rendererV2()->clone();
QgsFeatureRendererV2* rv2 = mActiveLayer->rendererV2()->clone();
rv2->setRotationField( "" );
rv2->startRender( *renderContext, mActiveLayer );
@ -336,12 +299,11 @@ void QgsMapToolRotatePointSymbols::createPixmapItem( QgsFeature& f )
pointImage = symbolV2->bigSymbolPreviewImage();
}
rv2->stopRender( *renderContext );
delete rv2;
}
mRotationItem = new QgsPointRotationItem( mCanvas );
mRotationItem->setSymbol( pointImage );
delete r;
delete rv2;
}
void QgsMapToolRotatePointSymbols::setPixmapItemRotation( double rotation )

View File

@ -500,15 +500,6 @@ QgsOptions::QgsOptions( QWidget *parent, Qt::WFlags fl ) :
chkAntiAliasing->setChecked( settings.value( "/qgis/enable_anti_aliasing", true ).toBool() );
chkUseRenderCaching->setChecked( settings.value( "/qgis/enable_render_caching", false ).toBool() );
//Changed to default to true as of QGIS 1.7
//TODO: remove hack when http://hub.qgis.org/issues/5170 is fixed
#ifdef ANDROID
bool use_symbology_ng_default = false;
#else
bool use_symbology_ng_default = true;
#endif
chkUseSymbologyNG->setChecked( settings.value( "/qgis/use_symbology_ng", use_symbology_ng_default ).toBool() );
// Slightly awkard here at the settings value is true to use QImage,
// but the checkbox is true to use QPixmap
chkUseQPixmap->setChecked( !( settings.value( "/qgis/use_qimage_to_render", true ).toBool() ) );
@ -1031,7 +1022,6 @@ void QgsOptions::saveOptions()
settings.setValue( "/qgis/enable_anti_aliasing", chkAntiAliasing->isChecked() );
settings.setValue( "/qgis/enable_render_caching", chkUseRenderCaching->isChecked() );
settings.setValue( "/qgis/use_qimage_to_render", !( chkUseQPixmap->isChecked() ) );
settings.setValue( "/qgis/use_symbology_ng", chkUseSymbologyNG->isChecked() );
settings.setValue( "/qgis/legendDoubleClickAction", cmbLegendDoubleClickAction->currentIndex() );
bool legendLayersCapitalise = settings.value( "/qgis/capitaliseLayerName", false ).toBool();
settings.setValue( "/qgis/capitaliseLayerName", capitaliseCheckBox->isChecked() );

View File

@ -413,12 +413,8 @@ void QgsVectorLayerProperties::apply()
// Apply fields settings
mFieldsPropertiesDialog->apply();
if ( layer->isUsingRendererV2() )
{
QgsRendererV2PropertiesDialog* dlg =
static_cast<QgsRendererV2PropertiesDialog*>( widgetStackRenderers->currentWidget() );
dlg->apply();
}
QgsRendererV2PropertiesDialog* dlg = static_cast<QgsRendererV2PropertiesDialog*>( widgetStackRenderers->currentWidget() );
dlg->apply();
//apply diagram settings
diagramPropertiesDialog->apply();
@ -778,19 +774,12 @@ void QgsVectorLayerProperties::updateSymbologyPage()
delete mRendererDialog;
mRendererDialog = 0;
if ( layer->isUsingRendererV2() )
{
mRendererDialog = new QgsRendererV2PropertiesDialog( layer, QgsStyleV2::defaultStyle(), true );
mRendererDialog = new QgsRendererV2PropertiesDialog( layer, QgsStyleV2::defaultStyle(), true );
// display the menu to choose the output format (fix #5136)
pbnSaveStyleAs->setText( tr( "Save Style" ) );
pbnSaveStyleAs->setMenu( mSaveAsMenu );
QObject::disconnect( pbnSaveStyleAs, SIGNAL( clicked() ), this, SLOT( on_pbnSaveStyleAs_clicked() ) );
}
else
{
tabWidget->setTabEnabled( 0, false ); // hide symbology item
}
// display the menu to choose the output format (fix #5136)
pbnSaveStyleAs->setText( tr( "Save Style" ) );
pbnSaveStyleAs->setMenu( mSaveAsMenu );
QObject::disconnect( pbnSaveStyleAs, SIGNAL( clicked() ), this, SLOT( on_pbnSaveStyleAs_clicked() ) );
if ( mRendererDialog )
{

View File

@ -190,64 +190,7 @@ int QgsLegendModel::addVectorLayerItemsV2( QStandardItem* layerItem, QgsVectorLa
return 0;
}
int QgsLegendModel::addVectorLayerItems( QStandardItem* layerItem, QgsVectorLayer* vlayer )
{
if ( !layerItem || !vlayer )
{
return 1;
}
int opacity = vlayer->getTransparency();
const QgsRenderer* vectorRenderer = vlayer->renderer();
if ( !vectorRenderer )
{
return 3;
}
//text field that describes classification attribute?
QSettings settings;
if ( settings.value( "/qgis/showLegendClassifiers", false ).toBool() )
{
const QgsFields& layerFields = vlayer->pendingFields();
QgsAttributeList attributes = vectorRenderer->classificationAttributes();
QgsAttributeList::const_iterator att_it = attributes.constBegin();
for ( ; att_it != attributes.constEnd(); ++att_it )
{
int idx = *att_it;
if ( idx >= 0 && idx < layerFields.count() )
{
QString attributeName = vlayer->attributeDisplayName( idx );
QStandardItem* attributeItem = new QStandardItem( attributeName );
attributeItem->setData( QgsLegendModel::ClassificationItem, Qt::UserRole + 1 ); //first user data stores the item type
attributeItem->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable );
layerItem->setChild( layerItem->rowCount(), 0, attributeItem );
}
}
}
const QList<QgsSymbol*> vectorSymbols = vectorRenderer->symbols();
QList<QgsSymbol*>::const_iterator symbolIt = vectorSymbols.constBegin();
for ( ; symbolIt != vectorSymbols.constEnd(); ++symbolIt )
{
if ( !( *symbolIt ) )
{
continue;
}
QStandardItem* currentSymbolItem = itemFromSymbol( *symbolIt, opacity, vlayer->id() );
if ( !currentSymbolItem )
{
continue;
}
layerItem->setChild( layerItem->rowCount(), 0, currentSymbolItem );
}
return 0;
}
int QgsLegendModel::addRasterLayerItems( QStandardItem* layerItem, QgsMapLayer* rlayer )
{
@ -331,14 +274,7 @@ void QgsLegendModel::updateLayer( QStandardItem* layerItem )
if ( vLayer )
{
if ( vLayer->isUsingRendererV2() )
{
addVectorLayerItemsV2( lItem, vLayer );
}
else
{
addVectorLayerItems( lItem, vLayer );
}
addVectorLayerItemsV2( lItem, vLayer );
}
QgsRasterLayer* rLayer = qobject_cast<QgsRasterLayer*>( mapLayer );
@ -393,14 +329,7 @@ void QgsLegendModel::addLayer( QgsMapLayer* theMapLayer )
QgsVectorLayer* vl = dynamic_cast<QgsVectorLayer*>( theMapLayer );
if ( vl )
{
if ( vl->isUsingRendererV2() )
{
addVectorLayerItemsV2( layerItem, vl );
}
else
{
addVectorLayerItems( layerItem, vl );
}
addVectorLayerItemsV2( layerItem, vl );
}
break;
}

View File

@ -102,10 +102,6 @@ class CORE_EXPORT QgsLegendModel: public QStandardItemModel
void layersChanged();
private:
/**Adds classification items of vector layers
@return 0 in case of success*/
int addVectorLayerItems( QStandardItem* layerItem, QgsVectorLayer* vlayer );
/**Adds classification items of vector layers using new symbology*/
int addVectorLayerItemsV2( QStandardItem* layerItem, QgsVectorLayer* vlayer );

View File

@ -702,17 +702,11 @@ QPair< bool, QList<QDomNode> > QgsProject::_getMapLayers( QDomDocument const &do
//Update field map of layers with joins and create join caches if necessary
//Needs to be done here once all dependent layers are loaded
QString errorMessage;
QList< QPair< QgsVectorLayer*, QDomElement > >::iterator vIt = vLayerList.begin();
for ( ; vIt != vLayerList.end(); ++vIt )
{
vIt->first->createJoinCaches();
vIt->first->updateFields();
//for old symbology, it is necessary to read the symbology again after having the complete field map
if ( !vIt->first->isUsingRendererV2() )
{
vIt->first->readSymbology( vIt->second, errorMessage );
}
}
return qMakePair( returnStatus, brokenNodes );

View File

@ -770,7 +770,7 @@ QgsVectorFileWriter::writeAsVectorFormat( QgsVectorLayer* layer,
//writer->createSymbolLayerTable( layer, writer->mDS );
}
if ( writer->symbologyExport() == SymbolLayerSymbology && layer->isUsingRendererV2() )
if ( writer->symbologyExport() == SymbolLayerSymbology )
{
QgsFeatureRendererV2* r = layer->rendererV2();
if ( r->capabilities() & QgsFeatureRendererV2::SymbolLevels
@ -1198,11 +1198,6 @@ void QgsVectorFileWriter::createSymbolLayerTable( QgsVectorLayer* vl, const Qgs
return;
}
if ( !vl->isUsingRendererV2() )
{
return;
}
QgsFeatureRendererV2* renderer = vl->rendererV2();
if ( !renderer )
{
@ -1246,7 +1241,7 @@ void QgsVectorFileWriter::createSymbolLayerTable( QgsVectorLayer* vl, const Qgs
QgsVectorFileWriter::WriterError QgsVectorFileWriter::exportFeaturesSymbolLevels( QgsVectorLayer* layer, QgsFeatureIterator& fit,
const QgsCoordinateTransform* ct, QString* errorMessage )
{
if ( !layer || !layer->isUsingRendererV2() )
if ( !layer )
{
//return error
}
@ -1454,7 +1449,7 @@ QgsFeatureRendererV2* QgsVectorFileWriter::symbologyRenderer( QgsVectorLayer* vl
{
return 0;
}
if ( !vl || !vl->isUsingRendererV2() )
if ( !vl )
{
return 0;
}

File diff suppressed because it is too large Load Diff

View File

@ -315,12 +315,6 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer
/** Returns the bounding box of the selected features. If there is no selection, QgsRectangle(0,0,0,0) is returned */
QgsRectangle boundingBoxOfSelected();
/** Returns a pointer to the renderer */
const QgsRenderer* renderer() const;
/** Sets the renderer. If a renderer is already present, it is deleted */
void setRenderer( QgsRenderer * r );
/** Sets diagram rendering object (takes ownership) */
void setDiagramRenderer( QgsDiagramRendererV2* r );
const QgsDiagramRendererV2* diagramRenderer() const { return mDiagramRenderer; }
@ -335,14 +329,6 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer
* @note added in 1.4
*/
void setRendererV2( QgsFeatureRendererV2* r );
/** Return whether using renderer V2.
* @note added in 1.4
*/
bool isUsingRendererV2();
/** set whether to use renderer V2 for drawing.
* @note added in 1.4
*/
void setUsingRendererV2( bool usingRendererV2 );
/** Draw layer with renderer V2.
* @note added in 1.4
@ -931,28 +917,6 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer
*/
bool setDataProvider( QString const & provider );
/** Draws features. May cause projections exceptions to be generated
* (i.e., code that calls this function needs to catch them) */
void drawFeature( QgsRenderContext &renderContext,
QgsFeature& fet,
QImage* marker );
/** Convenience function to transform the given point */
void transformPoint( double& x, double& y,
const QgsMapToPixel* mtp, const QgsCoordinateTransform* ct );
void transformPoints( QVector<double>& x, QVector<double>& y, QVector<double>& z, QgsRenderContext &renderContext );
/** Draw the linestring as given in the WKB format. Returns a pointer
* to the byte after the end of the line string binary data stream (WKB).
*/
unsigned char *drawLineString( unsigned char *WKBlinestring, QgsRenderContext &renderContext );
/** Draw the polygon as given in the WKB format. Returns a pointer to
* the byte after the end of the polygon binary data stream (WKB).
*/
unsigned char *drawPolygon( unsigned char *WKBpolygon, QgsRenderContext &renderContext );
/** Goes through all features and finds a free id (e.g. to give it temporarily to a not-commited feature) */
QgsFeatureId findFreeId();
@ -1046,14 +1010,8 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer
int mWkbType;
/** Renderer object which holds the information about how to display the features */
QgsRenderer *mRenderer;
/** Renderer V2 */
QgsFeatureRendererV2 *mRendererV2;
/** whether to use V1 or V2 renderer */
bool mUsingRendererV2;
/** Label */
QgsLabel *mLabel;

View File

@ -237,7 +237,6 @@ int QgsContinuousColorRenderer::readXML( const QDomNode& rnode, QgsVectorLayer&
usy->readXML( usymbolnode, &vl );
setMaximumSymbol( usy );
}
vl.setRenderer( this );
return 0;
}

View File

@ -282,7 +282,6 @@ int QgsGraduatedSymbolRenderer::readXML( const QDomNode& rnode, QgsVectorLayer&
symbolnode = symbolnode.nextSibling();
}
updateSymbolAttributes();
vl.setRenderer( this );
return 0;
}

View File

@ -215,7 +215,6 @@ int QgsSingleSymbolRenderer::readXML( const QDomNode& rnode, QgsVectorLayer& vl
//create a renderer and add it to the vector layer
addSymbol( sy );
vl.setRenderer( this );
return 0;
}

View File

@ -236,7 +236,6 @@ int QgsUniqueValueRenderer::readXML( const QDomNode& rnode, QgsVectorLayer& vl )
symbolnode = symbolnode.nextSibling();
}
updateSymbolAttributes();
vl.setRenderer( this );
return 0;
}

View File

@ -14,13 +14,8 @@
***************************************************************************/
#include "qgssymbologyv2conversion.h"
#include "qgssinglesymbolrenderer.h"
#include "qgsgraduatedsymbolrenderer.h"
#include "qgsuniquevaluerenderer.h"
#include "qgssymbol.h"
#include "qgsvectorlayer.h"
#include "qgslogger.h"
#include "qgssymbologyutils.h"
#include "qgsmarkersymbollayerv2.h"
#include "qgslinesymbollayerv2.h"
@ -30,21 +25,122 @@
#include "qgscategorizedsymbolrendererv2.h"
QgsSymbolV2* QgsSymbologyV2Conversion::symbolV1toV2( const QgsSymbol* s )
struct QgsOldSymbolMeta
{
switch ( s->type() )
QString lowerValue;
QString upperValue;
QString label;
};
static QgsOldSymbolMeta readSymbolMeta( const QDomNode& synode )
{
QgsOldSymbolMeta meta;
QDomNode lvalnode = synode.namedItem( "lowervalue" );
if ( ! lvalnode.isNull() )
{
QDomElement lvalelement = lvalnode.toElement();
if ( lvalelement.attribute( "null" ).toInt() == 1 )
{
meta.lowerValue = QString::null;
}
else
{
meta.lowerValue = lvalelement.text();
}
}
QDomNode uvalnode = synode.namedItem( "uppervalue" );
if ( ! uvalnode.isNull() )
{
QDomElement uvalelement = uvalnode.toElement();
meta.upperValue = uvalelement.text();
}
QDomNode labelnode = synode.namedItem( "label" );
if ( ! labelnode.isNull() )
{
QDomElement labelelement = labelnode.toElement();
meta.label = labelelement.text();
}
return meta;
}
static QColor readSymbolColor( const QDomNode& synode, bool fillColor )
{
QDomNode cnode = synode.namedItem( fillColor ? "fillcolor" : "outlinecolor" );
QDomElement celement = cnode.toElement();
int red = celement.attribute( "red" ).toInt();
int green = celement.attribute( "green" ).toInt();
int blue = celement.attribute( "blue" ).toInt();
return QColor( red, green, blue );
}
static double readOutlineWidth( const QDomNode& synode )
{
QDomNode outlwnode = synode.namedItem( "outlinewidth" );
QDomElement outlwelement = outlwnode.toElement();
return outlwelement.text().toDouble();
}
static Qt::PenStyle readOutlineStyle( const QDomNode& synode )
{
QDomNode outlstnode = synode.namedItem( "outlinestyle" );
QDomElement outlstelement = outlstnode.toElement();
return QgsSymbologyUtils::qString2PenStyle( outlstelement.text() );
}
static Qt::BrushStyle readBrushStyle( const QDomNode& synode )
{
QDomNode fillpnode = synode.namedItem( "fillpattern" );
QDomElement fillpelement = fillpnode.toElement();
return QgsSymbologyUtils::qString2BrushStyle( fillpelement.text() );
}
static QString readMarkerSymbolName( const QDomNode& synode )
{
QDomNode psymbnode = synode.namedItem( "pointsymbol" );
if ( ! psymbnode.isNull() )
{
QDomElement psymbelement = psymbnode.toElement();
return psymbelement.text();
}
return QString("hard:circle");
}
static float readMarkerSymbolSize( const QDomNode& synode )
{
QDomNode psizenode = synode.namedItem( "pointsize" );
if ( ! psizenode.isNull() )
{
QDomElement psizeelement = psizenode.toElement();
return psizeelement.text().toFloat();
}
return DEFAULT_POINT_SIZE;
}
static QgsSymbolV2* readOldSymbol( const QDomNode& synode, QGis::GeometryType geomType )
{
switch ( geomType )
{
case QGis::Point:
{
QgsMarkerSymbolLayerV2* sl = NULL;
double size = s->pointSize();
double size = readMarkerSymbolSize( synode );
double angle = 0; // rotation only from classification field
QString symbolName = s->pointSymbolName();
QString symbolName = readMarkerSymbolName( synode );
if ( symbolName.startsWith( "hard:" ) )
{
// simple symbol marker
QColor color = s->fillColor();
QColor borderColor = s->color();
QColor color = readSymbolColor( synode, true );
QColor borderColor = readSymbolColor( synode, false );
QString name = symbolName.mid( 5 );
sl = new QgsSimpleMarkerSymbolLayerV2( name, color, borderColor, size, angle );
}
@ -61,9 +157,9 @@ QgsSymbolV2* QgsSymbologyV2Conversion::symbolV1toV2( const QgsSymbol* s )
case QGis::Line:
{
QColor color = s->color();
double width = s->lineWidth();
Qt::PenStyle penStyle = s->pen().style();
QColor color = readSymbolColor( synode, false );
double width = readOutlineWidth( synode );
Qt::PenStyle penStyle = readOutlineStyle( synode );
QgsLineSymbolLayerV2* sl = new QgsSimpleLineSymbolLayerV2( color, width, penStyle );
QgsSymbolLayerV2List layers;
@ -73,11 +169,11 @@ QgsSymbolV2* QgsSymbologyV2Conversion::symbolV1toV2( const QgsSymbol* s )
case QGis::Polygon:
{
QColor color = s->fillColor();
QColor borderColor = s->color();
Qt::BrushStyle brushStyle = s->brush().style();
Qt::PenStyle borderStyle = s->pen().style();
double borderWidth = s->lineWidth();
QColor color = readSymbolColor( synode, true );
QColor borderColor = readSymbolColor( synode, false );
Qt::BrushStyle brushStyle = readBrushStyle( synode );
Qt::PenStyle borderStyle = readOutlineStyle( synode );
double borderWidth = readOutlineWidth( synode );
QgsFillSymbolLayerV2* sl = new QgsSimpleFillSymbolLayerV2( color, brushStyle, borderColor, borderStyle, borderWidth );
QgsSymbolLayerV2List layers;
@ -90,253 +186,163 @@ QgsSymbolV2* QgsSymbologyV2Conversion::symbolV1toV2( const QgsSymbol* s )
}
}
QgsSymbol* QgsSymbologyV2Conversion::symbolV2toV1( QgsSymbolV2* s )
static QgsFeatureRendererV2* readOldSingleSymbolRenderer( const QDomNode& rnode, QGis::GeometryType geomType )
{
if ( s == NULL || s->symbolLayerCount() == 0 )
return NULL;
QDomNode synode = rnode.namedItem( "symbol" );
if ( synode.isNull() )
return 0;
// we will use only the first symbol layer
QgsSymbolLayerV2* sl = s->symbolLayer( 0 );
switch ( sl->type() )
{
case QgsSymbolV2::Marker:
{
QgsMarkerSymbolLayerV2* msl = static_cast<QgsMarkerSymbolLayerV2*>( sl );
QgsSymbol* sOld = new QgsSymbol( QGis::Point );
sOld->setFillColor( sl->color() );
sOld->setFillStyle( Qt::SolidPattern );
sOld->setPointSize( msl->size() );
if ( sl->layerType() == "SimpleMarker" )
{
QgsSimpleMarkerSymbolLayerV2* smsl = static_cast<QgsSimpleMarkerSymbolLayerV2*>( sl );
sOld->setColor( smsl->borderColor() );
sOld->setNamedPointSymbol( "hard:" + smsl->name() );
}
else if ( sl->layerType() == "SvgMarker" )
{
QgsSvgMarkerSymbolLayerV2* smsl = static_cast<QgsSvgMarkerSymbolLayerV2*>( sl );
sOld->setNamedPointSymbol( "svg:" + smsl->path() );
}
return sOld;
}
break;
case QgsSymbolV2::Line:
{
QgsLineSymbolLayerV2* lsl = static_cast<QgsLineSymbolLayerV2*>( sl );
QgsSymbol* sOld = new QgsSymbol( QGis::Line );
sOld->setColor( sl->color() );
sOld->setLineWidth( lsl->width() );
if ( sl->layerType() == "SimpleLine" )
{
// add specific settings
QgsSimpleLineSymbolLayerV2* slsl = static_cast<QgsSimpleLineSymbolLayerV2*>( sl );
sOld->setLineStyle( slsl->penStyle() );
}
return sOld;
}
case QgsSymbolV2::Fill:
{
QgsSymbol* sOld = new QgsSymbol( QGis::Polygon );
sOld->setFillColor( sl->color() );
if ( sl->layerType() == "SimpleFill" )
{
// add specifc settings
QgsSimpleFillSymbolLayerV2* sfsl = static_cast<QgsSimpleFillSymbolLayerV2*>( sl );
sOld->setColor( sfsl->borderColor() );
sOld->setLineWidth( sfsl->borderWidth() );
sOld->setLineStyle( sfsl->borderStyle() );
sOld->setFillStyle( sfsl->brushStyle() );
}
return sOld;
}
}
return NULL; // should never get here
QgsSymbolV2* sy2 = readOldSymbol( synode, geomType );
QgsSingleSymbolRendererV2* r = new QgsSingleSymbolRendererV2( sy2 );
return r;
}
void QgsSymbologyV2Conversion::rendererV1toV2( QgsVectorLayer* layer )
static QgsFeatureRendererV2* readOldGraduatedSymbolRenderer( const QDomNode& rnode, QGis::GeometryType geomType )
{
if ( layer->isUsingRendererV2() )
return;
QDomNode modeNode = rnode.namedItem( "mode" );
QString modeValue = modeNode.toElement().text();
QDomNode classnode = rnode.namedItem( "classificationfield" );
QString classificationField = classnode.toElement().text();
const QgsRenderer* r = layer->renderer();
if ( r == NULL )
return;
QgsFeatureRendererV2* r2final = NULL;
QString rtype = r->name();
if ( rtype == "Single Symbol" )
QgsGraduatedSymbolRendererV2::Mode m = QgsGraduatedSymbolRendererV2::Custom;
if ( modeValue == "Empty" )
{
const QgsSingleSymbolRenderer* ssr = dynamic_cast<const QgsSingleSymbolRenderer*>( r );
if ( ssr == NULL )
return;
QgsSymbolV2* symbol = symbolV1toV2( ssr->symbol() );
QgsSingleSymbolRendererV2* r2 = new QgsSingleSymbolRendererV2( symbol );
r2final = r2;
m = QgsGraduatedSymbolRendererV2::Custom;
}
else if ( rtype == "Graduated Symbol" )
else if ( modeValue == "Quantile" )
{
const QgsGraduatedSymbolRenderer* gsr = dynamic_cast<const QgsGraduatedSymbolRenderer*>( r );
if ( gsr == NULL )
return;
m = QgsGraduatedSymbolRendererV2::Quantile;
}
else //default
{
m = QgsGraduatedSymbolRendererV2::EqualInterval;
}
QString attrName;
const QgsFields& fields = layer->pendingFields();
int fldIdx = gsr->classificationField();
if ( fldIdx >= 0 && fldIdx < fields.count() )
// load ranges and symbols
QgsRangeList ranges;
QDomNode symbolnode = rnode.namedItem( "symbol" );
while ( !symbolnode.isNull() )
{
QgsSymbolV2* symbolv2 = readOldSymbol( symbolnode, geomType );
if ( symbolv2 )
{
attrName = fields[fldIdx].name();
}
QgsRangeList ranges;
foreach ( const QgsSymbol* sym, gsr->symbols() )
{
double lowerValue = sym->lowerValue().toDouble();
double upperValue = sym->upperValue().toDouble();
QString label = sym->label();
QgsOldSymbolMeta meta = readSymbolMeta( symbolnode );
double lowerValue = meta.lowerValue.toDouble();
double upperValue = meta.upperValue.toDouble();
QString label = meta.label;
if ( label.isEmpty() )
label = QString( "%1 - %2" ).arg( lowerValue, -1, 'f', 3 ).arg( upperValue, -1, 'f', 3 );
QgsSymbolV2* symbolv2 = symbolV1toV2( sym );
ranges.append( QgsRendererRangeV2( lowerValue, upperValue, symbolv2, label ) );
}
QgsGraduatedSymbolRendererV2* r2 = new QgsGraduatedSymbolRendererV2( attrName, ranges );
// find out mode
QgsGraduatedSymbolRendererV2::Mode m = QgsGraduatedSymbolRendererV2::Custom;
switch ( gsr->mode() )
{
case QgsGraduatedSymbolRenderer::EqualInterval: m = QgsGraduatedSymbolRendererV2::EqualInterval; break;
case QgsGraduatedSymbolRenderer::Quantile: m = QgsGraduatedSymbolRendererV2::Quantile; break;
case QgsGraduatedSymbolRenderer::Empty: m = QgsGraduatedSymbolRendererV2::Custom; break;
}
r2->setMode( m );
// source symbol, color ramp not set (unknown)
r2final = r2;
symbolnode = symbolnode.nextSibling();
}
else if ( rtype == "Continuous Color" )
{
// TODO
}
else if ( rtype == "Unique Value" )
{
const QgsUniqueValueRenderer* uvr = dynamic_cast<const QgsUniqueValueRenderer*>( r );
if ( uvr == NULL )
return;
QString attrName;
const QgsFields& fields = layer->pendingFields();
int fldIdx = uvr->classificationField();
if ( fldIdx >= 0 && fldIdx < fields.count() )
{
attrName = fields[fldIdx].name();
}
// create renderer
QgsGraduatedSymbolRendererV2* r = new QgsGraduatedSymbolRendererV2( classificationField, ranges );
r->setMode( m );
return r;
}
QgsCategoryList cats;
foreach ( QgsSymbol* sym, uvr->symbols() )
static QgsFeatureRendererV2* readOldUniqueValueRenderer( const QDomNode& rnode, QGis::GeometryType geomType )
{
QDomNode classnode = rnode.namedItem( "classificationfield" );
QString classificationField = classnode.toElement().text();
// read categories and symbols
QgsCategoryList cats;
QDomNode symbolnode = rnode.namedItem( "symbol" );
while ( !symbolnode.isNull() )
{
QgsSymbolV2* symbolv2 = readOldSymbol( symbolnode, geomType );
if ( symbolv2 )
{
QVariant value = QVariant( sym->lowerValue() );
QString label = sym->label();
QgsOldSymbolMeta meta = readSymbolMeta( symbolnode );
QVariant value = QVariant( meta.lowerValue );
QString label = meta.label;
if ( label.isEmpty() )
label = value.toString();
QgsSymbolV2* symbolv2 = symbolV1toV2( sym );
cats.append( QgsRendererCategoryV2( value, symbolv2, label ) );
}
QgsCategorizedSymbolRendererV2* r2 = new QgsCategorizedSymbolRendererV2( attrName, cats );
// source symbol and color ramp are not set (unknown)
r2final = r2;
symbolnode = symbolnode.nextSibling();
}
if ( r2final == NULL )
{
r2final = QgsFeatureRendererV2::defaultRenderer( layer->geometryType() );
}
// change of renderers
layer->setUsingRendererV2( true );
layer->setRendererV2( r2final );
layer->setRenderer( NULL );
QgsCategorizedSymbolRendererV2* r = new QgsCategorizedSymbolRendererV2( classificationField, cats );
// source symbol and color ramp are not set (unknown)
return r;
}
void QgsSymbologyV2Conversion::rendererV2toV1( QgsVectorLayer* layer )
QgsFeatureRendererV2* QgsSymbologyV2Conversion::readOldRenderer( const QDomNode& layerNode, QGis::GeometryType geomType )
{
if ( !layer->isUsingRendererV2() )
return;
QDomNode singlenode = layerNode.namedItem( "singlesymbol" );
QDomNode graduatednode = layerNode.namedItem( "graduatedsymbol" );
QDomNode continuousnode = layerNode.namedItem( "continuoussymbol" );
QDomNode uniquevaluenode = layerNode.namedItem( "uniquevalue" );
QgsFeatureRendererV2* r2 = layer->rendererV2();
if ( r2 == NULL )
return;
QgsRenderer* rfinal = NULL;
QString r2type = r2->type();
if ( r2type == "singleSymbol" )
if ( !singlenode.isNull() )
{
QgsSingleSymbolRendererV2* ssr2 = static_cast<QgsSingleSymbolRendererV2*>( r2 );
QgsSingleSymbolRenderer* r = new QgsSingleSymbolRenderer( layer->geometryType() );
r->addSymbol( symbolV2toV1( ssr2->symbol() ) );
rfinal = r;
return readOldSingleSymbolRenderer( singlenode, geomType );
}
else if ( r2type == "graduatedSymbol" )
else if ( !graduatednode.isNull() )
{
QgsGraduatedSymbolRendererV2* gsr2 = static_cast<QgsGraduatedSymbolRendererV2*>( r2 );
QgsGraduatedSymbolRenderer::Mode m;
switch ( gsr2->mode() )
{
case QgsGraduatedSymbolRendererV2::EqualInterval: m = QgsGraduatedSymbolRenderer::EqualInterval; break;
case QgsGraduatedSymbolRendererV2::Quantile: m = QgsGraduatedSymbolRenderer::Quantile; break;
default: m = QgsGraduatedSymbolRenderer::Empty; break;
}
QgsGraduatedSymbolRenderer* r = new QgsGraduatedSymbolRenderer( layer->geometryType(), m );
r->setClassificationField( layer->fieldNameIndex( gsr2->classAttribute() ) );
foreach ( QgsRendererRangeV2 range, gsr2->ranges() )
{
QgsSymbol* s = symbolV2toV1( range.symbol() );
s->setLowerValue( QString::number( range.lowerValue(), 'f', 5 ) );
s->setUpperValue( QString::number( range.upperValue(), 'f', 5 ) );
s->setLabel( range.label() );
r->addSymbol( s );
}
rfinal = r;
return readOldGraduatedSymbolRenderer( graduatednode, geomType );
}
else if ( r2type == "categorizedSymbol" )
else if ( !continuousnode.isNull() )
{
QgsCategorizedSymbolRendererV2* csr2 = static_cast<QgsCategorizedSymbolRendererV2*>( r2 );
QgsUniqueValueRenderer* r = new QgsUniqueValueRenderer( layer->geometryType() );
r->setClassificationField( layer->fieldNameIndex( csr2->classAttribute() ) );
foreach ( QgsRendererCategoryV2 cat, csr2->categories() )
{
QgsSymbol* s = symbolV2toV1( cat.symbol() );
QString val = cat.value().toString();
s->setLowerValue( val );
s->setUpperValue( val );
r->insertValue( val, s );
}
rfinal = r;
return 0;
}
else if ( !uniquevaluenode.isNull() )
{
return readOldUniqueValueRenderer( uniquevaluenode, geomType );
}
if ( rfinal == NULL )
{
rfinal = new QgsSingleSymbolRenderer( layer->geometryType() );
}
layer->setUsingRendererV2( false );
layer->setRendererV2( NULL );
layer->setRenderer( rfinal );
return 0;
}
/*
UNSUPPORTED RENDERER: continuous color
QDomNode classnode = rnode.namedItem( "classificationfield" );
QDomNode polyoutlinenode = rnode.namedItem( "polygonoutline" );
QString polyoutline = polyoutlinenode.toElement().text();
if ( polyoutline == "0" )
drawPolygonOutline = false;
else if ( polyoutline == "1" )
drawPolygonOutline = true;
QDomNode lowernode = rnode.namedItem( "lowestsymbol" );
lowSymbol = readOldSymbol( lowernode.namedItem( "symbol" ), geomType );
QDomNode uppernode = rnode.namedItem( "highestsymbol" );
highSymbol = readOldSymbol( uppernode.namedItem( "symbol" ), geomType );
UNSUPPORTED SYMBOL PROPERTY: point size units
QDomNode psizeunitnodes = synode.namedItem( "pointsizeunits" );
if ( ! psizeunitnodes.isNull() )
{
QDomElement psizeunitelement = psizeunitnodes.toElement();
QgsDebugMsg( QString( "psizeunitelement:%1" ).arg( psizeunitelement.text() ) );
setPointSizeUnits( psizeunitelement.text().compare( "mapunits", Qt::CaseInsensitive ) == 0 );
}
UNSUPPORTED SYMBOL PROPERTY: data-defined rotation / scale / symbol name
rotationClassificationFieldName = synode.namedItem( "rotationclassificationfieldname" ).toElement().text();
scaleClassificationFieldName = synode.namedItem( "scaleclassificationfield" ).toElement().text();
symbolFieldName = synode.namedItem( "symbolfieldname" ).toElement().text();
UNSUPPORTED SYMBOL PROPERTY: texture
QDomNode texturepathnode = synode.namedItem( "texturepath" );
QDomElement texturepathelement = texturepathnode.toElement();
setCustomTexture( QgsProject::instance()->readPath( texturepathelement.text() ) );
*/

View File

@ -15,30 +15,19 @@
#ifndef QGSSYMBOLOGYV2CONVERSION_H
#define QGSSYMBOLOGYV2CONVERSION_H
class QgsSymbol;
class QgsSymbolV2;
class QgsVectorLayer;
class QDomNode;
class QgsFeatureRendererV2;
#include "qgis.h"
/** This class is not a part of public API, it is intended only for compatibility with older versions of QGIS (1.x) */
class CORE_EXPORT QgsSymbologyV2Conversion
{
public:
//! return a symbol in new symbology as close as possible to old symbol
//! @note not all properties will be preserved
static QgsSymbolV2* symbolV1toV2( const QgsSymbol* s );
//! return a symbol in old symbology as close as possible to new symbol
//! @note not all properties will be preserved
static QgsSymbol* symbolV2toV1( QgsSymbolV2* s );
//! convert layer from old symbology to new symbology
//! @note not all properties will be preserved
static void rendererV1toV2( QgsVectorLayer* layer );
//! convert layer from new symbology to old symbology
//! @note not all properties will be preserved
static void rendererV2toV1( QgsVectorLayer* layer );
/** Read old renderer definition from XML and create matching new renderer */
static QgsFeatureRendererV2* readOldRenderer( const QDomNode& layerNode, QGis::GeometryType geomType );
};
#endif // QGSSYMBOLOGYV2CONVERSION_H

View File

@ -432,23 +432,6 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed
{
QMap<QString, QString> classes;
const QgsUniqueValueRenderer *uvr = dynamic_cast<const QgsUniqueValueRenderer *>( vl->renderer() );
if ( uvr )
{
const QList<QgsSymbol *> symbols = uvr->symbols();
for ( int i = 0; i < symbols.size(); i++ )
{
QString label = symbols[i]->label();
QString name = symbols[i]->lowerValue();
if ( label == "" )
label = name;
classes.insert( name, label );
}
}
const QgsCategorizedSymbolRendererV2 *csr = dynamic_cast<const QgsCategorizedSymbolRendererV2 *>( vl->rendererV2() );
if ( csr )
{

View File

@ -100,13 +100,6 @@ QgsRendererV2PropertiesDialog::QgsRendererV2PropertiesDialog( QgsVectorLayer* la
cboRenderers->setCurrentIndex( -1 ); // set no current renderer
// if the layer doesn't use renderer V2, let's start using it!
if ( !mLayer->isUsingRendererV2() )
{
mLayer->setRendererV2( QgsFeatureRendererV2::defaultRenderer( mLayer->geometryType() ) );
mLayer->setUsingRendererV2( true );
}
// setup slot rendererChanged()
connect( cboRenderers, SIGNAL( currentIndexChanged( int ) ), this, SLOT( rendererChanged() ) );

View File

@ -277,7 +277,6 @@ QList<QgsMapLayer*> QgsSLDParser::mapLayerFromStyle( const QString& layerName, c
{
QgsFeatureRendererV2* r = rendererFromUserStyle( userStyleElement, v );
v->setRendererV2( r );
v->setUsingRendererV2( true );
labelSettingsFromUserStyle( userStyleElement, v );
#ifdef DIAGRAMSERVER
overlaysFromUserStyle( userStyleElement, v );
@ -394,7 +393,6 @@ QList<QgsMapLayer*> QgsSLDParser::mapLayerFromStyle( const QString& layerName, c
return resultList;
}
theVectorLayer->setRendererV2( theRenderer );
theVectorLayer->setUsingRendererV2( true );
QgsDebugMsg( "Returning the vectorlayer" );
setOpacityForLayer( userLayerElement, theVectorLayer );
resultList.push_back( theVectorLayer );
@ -1389,7 +1387,6 @@ QgsVectorLayer* QgsSLDParser::contourLayerFromRaster( const QDomElement& userSty
//create renderer
QgsFeatureRendererV2* theRenderer = rendererFromUserStyle( userStyleElem, contourLayer );
contourLayer->setRendererV2( theRenderer );
contourLayer->setUsingRendererV2( true );
//add labelling if requested
labelSettingsFromUserStyle( userStyleElem, contourLayer );

View File

@ -1291,30 +1291,19 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
break;
}
//check if feature is rendered at all
if ( layer->isUsingRendererV2() )
QgsFeatureRendererV2* r2 = layer->rendererV2();
if ( !r2 )
{
QgsFeatureRendererV2* r2 = layer->rendererV2();
if ( !r2 )
{
continue;
}
r2->startRender( renderContext, layer );
bool renderV2 = r2->willRenderFeature( feature );
r2->stopRender( renderContext );
if ( !renderV2 )
{
continue;
}
continue;
}
else
//check if feature is rendered at all
r2->startRender( renderContext, layer );
bool renderV2 = r2->willRenderFeature( feature );
r2->stopRender( renderContext );
if ( !renderV2 )
{
QgsRenderer* r = const_cast<QgsRenderer*>( layer->renderer() ); //bad, 'willRenderFeature' should be const
if ( !r || !r->willRenderFeature( &feature ) )
{
continue;
}
continue;
}
QDomElement featureElement = infoDocument.createElement( "Feature" );
@ -2114,23 +2103,16 @@ void QgsWMSServer::applyOpacities( const QStringList& layerList, QList< QPair< Q
if ( ml->type() == QgsMapLayer::VectorLayer )
{
QgsVectorLayer* vl = qobject_cast<QgsVectorLayer*>( ml );
if ( vl && vl->isUsingRendererV2() )
QgsFeatureRendererV2* rendererV2 = vl->rendererV2();
//backup old renderer
vectorRenderers.push_back( qMakePair( vl, rendererV2->clone() ) );
//modify symbols of current renderer
QgsSymbolV2List symbolList = rendererV2->symbols();
QgsSymbolV2List::iterator symbolIt = symbolList.begin();
for ( ; symbolIt != symbolList.end(); ++symbolIt )
{
QgsFeatureRendererV2* rendererV2 = vl->rendererV2();
//backup old renderer
vectorRenderers.push_back( qMakePair( vl, rendererV2->clone() ) );
//modify symbols of current renderer
QgsSymbolV2List symbolList = rendererV2->symbols();
QgsSymbolV2List::iterator symbolIt = symbolList.begin();
for ( ; symbolIt != symbolList.end(); ++symbolIt )
{
( *symbolIt )->setAlpha(( *symbolIt )->alpha() * opacityRatio );
}
}
else //old symbology
{
vectorOld.push_back( qMakePair( vl, vl->getTransparency() ) );
vl->setTransparency( opacity );
( *symbolIt )->setAlpha(( *symbolIt )->alpha() * opacityRatio );
}
//labeling

View File

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>850</width>
<height>580</height>
<width>848</width>
<height>578</height>
</rect>
</property>
<property name="minimumSize">
@ -266,8 +266,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>654</width>
<height>642</height>
<width>663</width>
<height>564</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_28">
@ -912,8 +912,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>611</width>
<height>808</height>
<width>663</width>
<height>757</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_22">
@ -1248,8 +1248,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>559</width>
<height>417</height>
<width>680</width>
<height>511</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_27">
@ -1567,8 +1567,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>615</width>
<height>781</height>
<width>663</width>
<height>635</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_29">
@ -1668,22 +1668,6 @@
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_3">
<property name="title">
<string>Compatibility</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_9">
<item>
<widget class="QCheckBox" name="chkUseSymbologyNG">
<property name="text">
<string>Use new generation symbology for rendering</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_14">
<property name="title">
@ -2098,8 +2082,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>474</width>
<height>390</height>
<width>452</width>
<height>357</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_25">
@ -2433,8 +2417,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>556</width>
<height>712</height>
<width>491</width>
<height>636</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_30">
@ -2825,8 +2809,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>517</width>
<height>642</height>
<width>442</width>
<height>574</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_31">
@ -3326,8 +3310,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>537</width>
<height>361</height>
<width>426</width>
<height>336</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_6">
@ -3466,8 +3450,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>614</width>
<height>393</height>
<width>582</width>
<height>352</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout_15">
@ -3647,8 +3631,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>300</width>
<height>248</height>
<width>268</width>
<height>207</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_32">
@ -3747,8 +3731,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>521</width>
<height>650</height>
<width>663</width>
<height>553</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_33">