bugfix_2996.diff

set renderer via signal - Jürgen Fischer, 2011-02-21 05:13 AM

Download (3.48 KB)

View differences:

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.