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
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, QgsSVGFillSymbolLayer::create ) );
00030 }
00031
00032 QgsSymbolLayerV2Registry::~QgsSymbolLayerV2Registry()
00033 {
00034 foreach( QString name, mMetadata.keys() )
00035 {
00036 delete mMetadata[name];
00037 }
00038 mMetadata.clear();
00039 }
00040
00041 bool QgsSymbolLayerV2Registry::addSymbolLayerType( QgsSymbolLayerV2AbstractMetadata* metadata )
00042 {
00043 if ( metadata == NULL || mMetadata.contains( metadata->name() ) )
00044 return false;
00045
00046 mMetadata[metadata->name()] = metadata;
00047 return true;
00048 }
00049
00050
00051 QgsSymbolLayerV2AbstractMetadata* QgsSymbolLayerV2Registry::symbolLayerMetadata( QString name ) const
00052 {
00053 if ( mMetadata.contains( name ) )
00054 return mMetadata.value( name );
00055 else
00056 return NULL;
00057 }
00058
00059 QgsSymbolLayerV2Registry* QgsSymbolLayerV2Registry::instance()
00060 {
00061 if ( !mInstance )
00062 mInstance = new QgsSymbolLayerV2Registry();
00063 return mInstance;
00064 }
00065
00066 QgsSymbolLayerV2* QgsSymbolLayerV2Registry::defaultSymbolLayer( QgsSymbolV2::SymbolType type )
00067 {
00068 switch ( type )
00069 {
00070 case QgsSymbolV2::Marker:
00071 return QgsSimpleMarkerSymbolLayerV2::create();
00072
00073 case QgsSymbolV2::Line:
00074 return QgsSimpleLineSymbolLayerV2::create();
00075
00076 case QgsSymbolV2::Fill:
00077 return QgsSimpleFillSymbolLayerV2::create();
00078 }
00079 return NULL;
00080 }
00081
00082
00083 QgsSymbolLayerV2* QgsSymbolLayerV2Registry::createSymbolLayer( QString name, const QgsStringMap& properties ) const
00084 {
00085 if ( !mMetadata.contains( name ) )
00086 return NULL;
00087
00088 return mMetadata[name]->createSymbolLayer( properties );
00089 }
00090
00091 QStringList QgsSymbolLayerV2Registry::symbolLayersForType( QgsSymbolV2::SymbolType type )
00092 {
00093 QStringList lst;
00094 QMap<QString, QgsSymbolLayerV2AbstractMetadata*>::ConstIterator it = mMetadata.begin();
00095 for ( ; it != mMetadata.end(); ++it )
00096 {
00097 if (( *it )->type() == type )
00098 lst.append( it.key() );
00099 }
00100 return lst;
00101 }