bugfix_2996.diff
src/providers/osm/osmprovider.h (Arbeitskopie) | ||
---|---|---|
193 | 193 |
virtual void rewind(); |
194 | 194 | |
195 | 195 |
/** |
196 |
* Changes attribute values of existing features. |
|
197 |
* @param attr_map a map containing changed attributes |
|
198 |
* @return true in case of success and false in case of failure |
|
199 |
*/ |
|
200 |
virtual bool changeAttributeValues( const QgsChangedAttributesMap & attr_map ); |
|
201 | ||
202 |
/** |
|
203 | 196 |
* Returns a bitmask containing the supported capabilities |
204 | 197 |
* Note, some capabilities may change depending on whether |
205 | 198 |
* a spatial filter is active on this provider, so it may |
... | ... | |
235 | 228 |
*/ |
236 | 229 |
virtual QgsCoordinateReferenceSystem crs(); |
237 | 230 | |
231 |
public slots: |
|
232 |
virtual void setRenderer( QgsVectorLayer *layer ); |
|
238 | 233 | |
239 | 234 |
private: |
240 | 235 |
/** |
src/providers/osm/osmprovider.cpp (Arbeitskopie) | ||
---|---|---|
981 | 981 |
} |
982 | 982 | |
983 | 983 | |
984 |
bool QgsOSMDataProvider::changeAttributeValues( const QgsChangedAttributesMap & attr_map ) |
|
985 |
{ |
|
986 |
QgsDebugMsg( QString( "In changeAttributeValues(...)." ) ); |
|
987 | ||
988 |
// VERY VERY ugly hack to assign custom renderer for OSM layer |
|
989 |
// but probably there's no simple way how to set our custom renderer from python plugin |
|
990 |
if ( attr_map.contains( 0x12345678 ) ) |
|
991 |
{ |
|
992 |
const QgsAttributeMap& x = attr_map.value( 0x12345678 ); |
|
993 |
QgsVectorLayer* layer = ( QgsVectorLayer* ) x.value( 0 ).toUInt(); |
|
994 |
QgsDebugMsg( "SETTING CUSTOM RENDERER!" ); |
|
995 |
layer->setRenderer( new OsmRenderer( layer->geometryType(), mStyleFileName ) ); |
|
996 |
} |
|
997 |
return true; |
|
998 |
} |
|
999 | ||
1000 | ||
1001 | 984 |
int QgsOSMDataProvider::capabilities() const |
1002 | 985 |
{ |
1003 | 986 |
return QgsVectorDataProvider::SelectAtId | QgsVectorDataProvider::SelectGeometryAtId; |
... | ... | |
1682 | 1665 |
return true; |
1683 | 1666 |
}; |
1684 | 1667 | |
1685 | ||
1668 |
void QgsOSMDataProvider::setRenderer( QgsVectorLayer *layer ) |
|
1669 |
{ |
|
1670 |
layer->setRenderer( new OsmRenderer( layer->geometryType(), mStyleFileName ) ); |
|
1671 |
} |
python/plugins/osm/OsmLoadDlg.py (Arbeitskopie) | ||
---|---|---|
224 | 224 | |
225 | 225 |
def setCustomRenderer(self, layer): |
226 | 226 |
"""Function provides a way how to set custom renderer. |
227 | ||
228 |
For more check changeAttributeValues() implementation of OSM provider. |
|
229 | ||
230 |
@param layer point to QGIS vector layer |
|
227 |
@param layer pointer to QGIS vector layer |
|
231 | 228 |
""" |
232 | 229 | |
233 |
import sip |
|
234 |
layerAddr = sip.unwrapinstance(layer) |
|
235 |
layer.dataProvider().changeAttributeValues( { 0x12345678 : { 0 : QVariant(layerAddr) } } ) |
|
230 |
if QObject.connect( self, SIGNAL( "setRenderer(QgsVectorLayer *)" ), layer.dataProvider(), SLOT( "setRenderer( QgsVectorLayer * )" ) ): |
|
231 |
self.emit( SIGNAL( "setRenderer(QgsVectorLayer *)" ), layer ) |
|
232 |
QObject.disconnect( self, SIGNAL( "setRenderer(QgsVectorLayer *)" ), layer.dataProvider(), SLOT( "setRenderer( QgsVectorLayer * )" ) ) |
|
233 |
else: |
|
234 |
QMessageBox.information(self, "OSM Load", QString("Could not connect to setRenderer signal.")) |
|
236 | 235 | |
237 | ||
238 | 236 |
def filesLoaded(self): |
239 | 237 |
"""Function returns list of keys of all currently loaded vector layers. |
240 | 238 |
Note that names are not absolute and not unique. |