Quantum GIS API Documentation
1.8
|
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 }