Quantum GIS API Documentation  1.7.4
src/core/symbology-ng/qgssymbollayerv2registry.cpp
Go to the documentation of this file.
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 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines