Quantum GIS API Documentation
1.7.4
|
00001 00002 #include "qgssymbollayerv2registry.h" 00003 00004 #include "qgsmarkersymbollayerv2.h" 00005 #include "qgslinesymbollayerv2.h" 00006 #include "qgsfillsymbollayerv2.h" 00007 00008 QgsSymbolLayerV2Registry* QgsSymbolLayerV2Registry::mInstance = NULL; 00009 00010 QgsSymbolLayerV2Registry::QgsSymbolLayerV2Registry() 00011 { 00012 // init registry with known symbol layers 00013 addSymbolLayerType( new QgsSymbolLayerV2Metadata( "SimpleLine", QObject::tr( "Simple line" ), QgsSymbolV2::Line, 00014 QgsSimpleLineSymbolLayerV2::create ) ); 00015 addSymbolLayerType( new QgsSymbolLayerV2Metadata( "MarkerLine", QObject::tr( "Marker line" ), QgsSymbolV2::Line, 00016 QgsMarkerLineSymbolLayerV2::create ) ); 00017 addSymbolLayerType( new QgsSymbolLayerV2Metadata( "LineDecoration", QObject::tr( "Line decoration" ), QgsSymbolV2::Line, 00018 QgsLineDecorationSymbolLayerV2::create ) ); 00019 00020 addSymbolLayerType( new QgsSymbolLayerV2Metadata( "SimpleMarker", QObject::tr( "Simple marker" ), QgsSymbolV2::Marker, 00021 QgsSimpleMarkerSymbolLayerV2::create ) ); 00022 addSymbolLayerType( new QgsSymbolLayerV2Metadata( "SvgMarker", QObject::tr( "SVG marker" ), QgsSymbolV2::Marker, 00023 QgsSvgMarkerSymbolLayerV2::create ) ); 00024 addSymbolLayerType( new QgsSymbolLayerV2Metadata( "FontMarker", QObject::tr( "Font marker" ), QgsSymbolV2::Marker, 00025 QgsFontMarkerSymbolLayerV2::create ) ); 00026 00027 addSymbolLayerType( new QgsSymbolLayerV2Metadata( "SimpleFill", QObject::tr( "Simple fill" ), QgsSymbolV2::Fill, 00028 QgsSimpleFillSymbolLayerV2::create ) ); 00029 addSymbolLayerType( new QgsSymbolLayerV2Metadata( "SVGFill", QObject::tr( "SVG fill" ), QgsSymbolV2::Fill, 00030 QgsSVGFillSymbolLayer::create ) ); 00031 addSymbolLayerType( new QgsSymbolLayerV2Metadata( "CentroidFill", QObject::tr( "Centroid fill" ), QgsSymbolV2::Fill, 00032 QgsCentroidFillSymbolLayerV2::create ) ); 00033 } 00034 00035 QgsSymbolLayerV2Registry::~QgsSymbolLayerV2Registry() 00036 { 00037 foreach( QString name, mMetadata.keys() ) 00038 { 00039 delete mMetadata[name]; 00040 } 00041 mMetadata.clear(); 00042 } 00043 00044 bool QgsSymbolLayerV2Registry::addSymbolLayerType( QgsSymbolLayerV2AbstractMetadata* metadata ) 00045 { 00046 if ( metadata == NULL || mMetadata.contains( metadata->name() ) ) 00047 return false; 00048 00049 mMetadata[metadata->name()] = metadata; 00050 return true; 00051 } 00052 00053 00054 QgsSymbolLayerV2AbstractMetadata* QgsSymbolLayerV2Registry::symbolLayerMetadata( QString name ) const 00055 { 00056 if ( mMetadata.contains( name ) ) 00057 return mMetadata.value( name ); 00058 else 00059 return NULL; 00060 } 00061 00062 QgsSymbolLayerV2Registry* QgsSymbolLayerV2Registry::instance() 00063 { 00064 if ( !mInstance ) 00065 mInstance = new QgsSymbolLayerV2Registry(); 00066 return mInstance; 00067 } 00068 00069 QgsSymbolLayerV2* QgsSymbolLayerV2Registry::defaultSymbolLayer( QgsSymbolV2::SymbolType type ) 00070 { 00071 switch ( type ) 00072 { 00073 case QgsSymbolV2::Marker: 00074 return QgsSimpleMarkerSymbolLayerV2::create(); 00075 00076 case QgsSymbolV2::Line: 00077 return QgsSimpleLineSymbolLayerV2::create(); 00078 00079 case QgsSymbolV2::Fill: 00080 return QgsSimpleFillSymbolLayerV2::create(); 00081 } 00082 return NULL; 00083 } 00084 00085 00086 QgsSymbolLayerV2* QgsSymbolLayerV2Registry::createSymbolLayer( QString name, const QgsStringMap& properties ) const 00087 { 00088 if ( !mMetadata.contains( name ) ) 00089 return NULL; 00090 00091 return mMetadata[name]->createSymbolLayer( properties ); 00092 } 00093 00094 QStringList QgsSymbolLayerV2Registry::symbolLayersForType( QgsSymbolV2::SymbolType type ) 00095 { 00096 QStringList lst; 00097 QMap<QString, QgsSymbolLayerV2AbstractMetadata*>::ConstIterator it = mMetadata.begin(); 00098 for ( ; it != mMetadata.end(); ++it ) 00099 { 00100 if (( *it )->type() == type ) 00101 lst.append( it.key() ); 00102 } 00103 return lst; 00104 }