Quantum GIS API Documentation  1.8
src/core/symbology-ng/qgssymbollayerv2registry.cpp
Go to the documentation of this file.
00001 /***************************************************************************
00002     qgssymbollayerv2registry.cpp
00003     ---------------------
00004     begin                : November 2009
00005     copyright            : (C) 2009 by Martin Dobias
00006     email                : wonder.sk at gmail.com
00007  ***************************************************************************
00008  *                                                                         *
00009  *   This program is free software; you can redistribute it and/or modify  *
00010  *   it under the terms of the GNU General Public License as published by  *
00011  *   the Free Software Foundation; either version 2 of the License, or     *
00012  *   (at your option) any later version.                                   *
00013  *                                                                         *
00014  ***************************************************************************/
00015 
00016 #include "qgssymbollayerv2registry.h"
00017 
00018 #include "qgsellipsesymbollayerv2.h"
00019 #include "qgsmarkersymbollayerv2.h"
00020 #include "qgslinesymbollayerv2.h"
00021 #include "qgsfillsymbollayerv2.h"
00022 #include "qgsvectorfieldsymbollayer.h"
00023 
00024 QgsSymbolLayerV2Registry* QgsSymbolLayerV2Registry::mInstance = NULL;
00025 
00026 QgsSymbolLayerV2Registry::QgsSymbolLayerV2Registry()
00027 {
00028   // init registry with known symbol layers
00029   addSymbolLayerType( new QgsSymbolLayerV2Metadata( "SimpleLine", QObject::tr( "Simple line" ), QgsSymbolV2::Line,
00030                       QgsSimpleLineSymbolLayerV2::create, QgsSimpleLineSymbolLayerV2::createFromSld ) );
00031   addSymbolLayerType( new QgsSymbolLayerV2Metadata( "MarkerLine", QObject::tr( "Marker line" ), QgsSymbolV2::Line,
00032                       QgsMarkerLineSymbolLayerV2::create, QgsMarkerLineSymbolLayerV2::createFromSld ) );
00033   addSymbolLayerType( new QgsSymbolLayerV2Metadata( "LineDecoration", QObject::tr( "Line decoration" ), QgsSymbolV2::Line,
00034                       QgsLineDecorationSymbolLayerV2::create ) );
00035 
00036   addSymbolLayerType( new QgsSymbolLayerV2Metadata( "SimpleMarker", QObject::tr( "Simple marker" ), QgsSymbolV2::Marker,
00037                       QgsSimpleMarkerSymbolLayerV2::create, QgsSimpleMarkerSymbolLayerV2::createFromSld ) );
00038   addSymbolLayerType( new QgsSymbolLayerV2Metadata( "SvgMarker", QObject::tr( "SVG marker" ), QgsSymbolV2::Marker,
00039                       QgsSvgMarkerSymbolLayerV2::create, QgsSvgMarkerSymbolLayerV2::createFromSld ) );
00040   addSymbolLayerType( new QgsSymbolLayerV2Metadata( "FontMarker", QObject::tr( "Font marker" ), QgsSymbolV2::Marker,
00041                       QgsFontMarkerSymbolLayerV2::create, QgsFontMarkerSymbolLayerV2::createFromSld ) );
00042   addSymbolLayerType( new QgsSymbolLayerV2Metadata( "EllipseMarker", QObject::tr( "Ellipse marker" ), QgsSymbolV2::Marker,
00043                       QgsEllipseSymbolLayerV2::create, QgsEllipseSymbolLayerV2::createFromSld ) );
00044   addSymbolLayerType( new QgsSymbolLayerV2Metadata( "VectorField", QObject::tr( "Vector Field marker" ), QgsSymbolV2::Marker,
00045                       QgsVectorFieldSymbolLayer::create ) );
00046 
00047   addSymbolLayerType( new QgsSymbolLayerV2Metadata( "SimpleFill", QObject::tr( "Simple fill" ), QgsSymbolV2::Fill,
00048                       QgsSimpleFillSymbolLayerV2::create, QgsSimpleFillSymbolLayerV2::createFromSld ) );
00049   addSymbolLayerType( new QgsSymbolLayerV2Metadata( "SVGFill", QObject::tr( "SVG fill" ), QgsSymbolV2::Fill,
00050                       QgsSVGFillSymbolLayer::create, QgsSVGFillSymbolLayer::createFromSld ) );
00051   addSymbolLayerType( new QgsSymbolLayerV2Metadata( "CentroidFill", QObject::tr( "Centroid fill" ), QgsSymbolV2::Fill,
00052                       QgsCentroidFillSymbolLayerV2::create, QgsCentroidFillSymbolLayerV2::createFromSld ) );
00053   addSymbolLayerType( new QgsSymbolLayerV2Metadata( "LinePatternFill", QObject::tr( "Line pattern fill" ), QgsSymbolV2::Fill,
00054                       QgsLinePatternFillSymbolLayer::create, QgsLinePatternFillSymbolLayer::createFromSld ) );
00055   addSymbolLayerType( new QgsSymbolLayerV2Metadata( "PointPatternFill", QObject::tr( "Point pattern fill" ), QgsSymbolV2::Fill,
00056                       QgsPointPatternFillSymbolLayer::create, QgsPointPatternFillSymbolLayer::createFromSld ) );
00057 }
00058 
00059 QgsSymbolLayerV2Registry::~QgsSymbolLayerV2Registry()
00060 {
00061   foreach( QString name, mMetadata.keys() )
00062   {
00063     delete mMetadata[name];
00064   }
00065   mMetadata.clear();
00066 }
00067 
00068 bool QgsSymbolLayerV2Registry::addSymbolLayerType( QgsSymbolLayerV2AbstractMetadata* metadata )
00069 {
00070   if ( metadata == NULL || mMetadata.contains( metadata->name() ) )
00071     return false;
00072 
00073   mMetadata[metadata->name()] = metadata;
00074   return true;
00075 }
00076 
00077 
00078 QgsSymbolLayerV2AbstractMetadata* QgsSymbolLayerV2Registry::symbolLayerMetadata( QString name ) const
00079 {
00080   if ( mMetadata.contains( name ) )
00081     return mMetadata.value( name );
00082   else
00083     return NULL;
00084 }
00085 
00086 QgsSymbolLayerV2Registry* QgsSymbolLayerV2Registry::instance()
00087 {
00088   if ( !mInstance )
00089     mInstance = new QgsSymbolLayerV2Registry();
00090   return mInstance;
00091 }
00092 
00093 QgsSymbolLayerV2* QgsSymbolLayerV2Registry::defaultSymbolLayer( QgsSymbolV2::SymbolType type )
00094 {
00095   switch ( type )
00096   {
00097     case QgsSymbolV2::Marker:
00098       return QgsSimpleMarkerSymbolLayerV2::create();
00099 
00100     case QgsSymbolV2::Line:
00101       return QgsSimpleLineSymbolLayerV2::create();
00102 
00103     case QgsSymbolV2::Fill:
00104       return QgsSimpleFillSymbolLayerV2::create();
00105   }
00106   return NULL;
00107 }
00108 
00109 
00110 QgsSymbolLayerV2* QgsSymbolLayerV2Registry::createSymbolLayer( QString name, const QgsStringMap& properties ) const
00111 {
00112   if ( !mMetadata.contains( name ) )
00113     return NULL;
00114 
00115   return mMetadata[name]->createSymbolLayer( properties );
00116 }
00117 
00118 QgsSymbolLayerV2* QgsSymbolLayerV2Registry::createSymbolLayerFromSld( QString name, QDomElement& element ) const
00119 {
00120   if ( !mMetadata.contains( name ) )
00121     return NULL;
00122 
00123   return mMetadata[name]->createSymbolLayerFromSld( element );
00124 }
00125 
00126 QStringList QgsSymbolLayerV2Registry::symbolLayersForType( QgsSymbolV2::SymbolType type )
00127 {
00128   QStringList lst;
00129   QMap<QString, QgsSymbolLayerV2AbstractMetadata*>::ConstIterator it = mMetadata.begin();
00130   for ( ; it != mMetadata.end(); ++it )
00131   {
00132     if (( *it )->type() == type )
00133       lst.append( it.key() );
00134   }
00135   return lst;
00136 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines