Index: src/providers/osm/osmprovider.h =================================================================== --- src/providers/osm/osmprovider.h (Revision 15229) +++ src/providers/osm/osmprovider.h (Arbeitskopie) @@ -193,13 +193,6 @@ virtual void rewind(); /** - * Changes attribute values of existing features. - * @param attr_map a map containing changed attributes - * @return true in case of success and false in case of failure - */ - virtual bool changeAttributeValues( const QgsChangedAttributesMap & attr_map ); - - /** * Returns a bitmask containing the supported capabilities * Note, some capabilities may change depending on whether * a spatial filter is active on this provider, so it may @@ -235,6 +228,8 @@ */ virtual QgsCoordinateReferenceSystem crs(); + public slots: + virtual void setRenderer( QgsVectorLayer *layer ); private: /** Index: src/providers/osm/osmprovider.cpp =================================================================== --- src/providers/osm/osmprovider.cpp (Revision 15229) +++ src/providers/osm/osmprovider.cpp (Arbeitskopie) @@ -981,23 +981,6 @@ } -bool QgsOSMDataProvider::changeAttributeValues( const QgsChangedAttributesMap & attr_map ) -{ - QgsDebugMsg( QString( "In changeAttributeValues(...)." ) ); - - // VERY VERY ugly hack to assign custom renderer for OSM layer - // but probably there's no simple way how to set our custom renderer from python plugin - if ( attr_map.contains( 0x12345678 ) ) - { - const QgsAttributeMap& x = attr_map.value( 0x12345678 ); - QgsVectorLayer* layer = ( QgsVectorLayer* ) x.value( 0 ).toUInt(); - QgsDebugMsg( "SETTING CUSTOM RENDERER!" ); - layer->setRenderer( new OsmRenderer( layer->geometryType(), mStyleFileName ) ); - } - return true; -} - - int QgsOSMDataProvider::capabilities() const { return QgsVectorDataProvider::SelectAtId | QgsVectorDataProvider::SelectGeometryAtId; @@ -1682,4 +1665,7 @@ return true; }; - +void QgsOSMDataProvider::setRenderer( QgsVectorLayer *layer ) +{ + layer->setRenderer( new OsmRenderer( layer->geometryType(), mStyleFileName ) ); +} \ No newline at end of file Index: python/plugins/osm/OsmLoadDlg.py =================================================================== --- python/plugins/osm/OsmLoadDlg.py (Revision 15229) +++ python/plugins/osm/OsmLoadDlg.py (Arbeitskopie) @@ -224,17 +224,15 @@ def setCustomRenderer(self, layer): """Function provides a way how to set custom renderer. - - For more check changeAttributeValues() implementation of OSM provider. - - @param layer point to QGIS vector layer + @param layer pointer to QGIS vector layer """ - import sip - layerAddr = sip.unwrapinstance(layer) - layer.dataProvider().changeAttributeValues( { 0x12345678 : { 0 : QVariant(layerAddr) } } ) + if QObject.connect( self, SIGNAL( "setRenderer(QgsVectorLayer *)" ), layer.dataProvider(), SLOT( "setRenderer( QgsVectorLayer * )" ) ): + self.emit( SIGNAL( "setRenderer(QgsVectorLayer *)" ), layer ) + QObject.disconnect( self, SIGNAL( "setRenderer(QgsVectorLayer *)" ), layer.dataProvider(), SLOT( "setRenderer( QgsVectorLayer * )" ) ) + else: + QMessageBox.information(self, "OSM Load", QString("Could not connect to setRenderer signal.")) - def filesLoaded(self): """Function returns list of keys of all currently loaded vector layers. Note that names are not absolute and not unique.