QGIS API Documentation  2.8.2-Wien
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
qgssymbollayerv2registry.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgssymbollayerv2registry.cpp
3  ---------------------
4  begin : November 2009
5  copyright : (C) 2009 by Martin Dobias
6  email : wonder dot sk at gmail dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 
17 
19 #include "qgsmarkersymbollayerv2.h"
20 #include "qgslinesymbollayerv2.h"
21 #include "qgsfillsymbollayerv2.h"
23 
25 {
26  // init registry with known symbol layers
27  addSymbolLayerType( new QgsSymbolLayerV2Metadata( "SimpleLine", QObject::tr( "Simple line" ), QgsSymbolV2::Line,
29  addSymbolLayerType( new QgsSymbolLayerV2Metadata( "MarkerLine", QObject::tr( "Marker line" ), QgsSymbolV2::Line,
31 
32  addSymbolLayerType( new QgsSymbolLayerV2Metadata( "SimpleMarker", QObject::tr( "Simple marker" ), QgsSymbolV2::Marker,
36  addSymbolLayerType( new QgsSymbolLayerV2Metadata( "FontMarker", QObject::tr( "Font marker" ), QgsSymbolV2::Marker,
38  addSymbolLayerType( new QgsSymbolLayerV2Metadata( "EllipseMarker", QObject::tr( "Ellipse marker" ), QgsSymbolV2::Marker,
40  addSymbolLayerType( new QgsSymbolLayerV2Metadata( "VectorField", QObject::tr( "Vector Field marker" ), QgsSymbolV2::Marker,
42 
43  addSymbolLayerType( new QgsSymbolLayerV2Metadata( "SimpleFill", QObject::tr( "Simple fill" ), QgsSymbolV2::Fill,
45  addSymbolLayerType( new QgsSymbolLayerV2Metadata( "GradientFill", QObject::tr( "Gradient fill" ), QgsSymbolV2::Fill,
47  addSymbolLayerType( new QgsSymbolLayerV2Metadata( "ShapeburstFill", QObject::tr( "Shapeburst fill" ), QgsSymbolV2::Fill,
49  addSymbolLayerType( new QgsSymbolLayerV2Metadata( "RasterFill", QObject::tr( "Raster image fill" ), QgsSymbolV2::Fill,
53  addSymbolLayerType( new QgsSymbolLayerV2Metadata( "CentroidFill", QObject::tr( "Centroid fill" ), QgsSymbolV2::Fill,
55  addSymbolLayerType( new QgsSymbolLayerV2Metadata( "LinePatternFill", QObject::tr( "Line pattern fill" ), QgsSymbolV2::Fill,
57  addSymbolLayerType( new QgsSymbolLayerV2Metadata( "PointPatternFill", QObject::tr( "Point pattern fill" ), QgsSymbolV2::Fill,
59 }
60 
62 {
63  foreach ( QString name, mMetadata.keys() )
64  {
65  delete mMetadata[name];
66  }
67  mMetadata.clear();
68 }
69 
71 {
72  if ( metadata == NULL || mMetadata.contains( metadata->name() ) )
73  return false;
74 
75  mMetadata[metadata->name()] = metadata;
76  return true;
77 }
78 
79 
81 {
82  if ( mMetadata.contains( name ) )
83  return mMetadata.value( name );
84  else
85  return NULL;
86 }
87 
89 {
90  static QgsSymbolLayerV2Registry mInstance;
91  return &mInstance;
92 }
93 
95 {
96  switch ( type )
97  {
100 
101  case QgsSymbolV2::Line:
103 
104  case QgsSymbolV2::Fill:
106  }
107  return NULL;
108 }
109 
110 
112 {
113  if ( !mMetadata.contains( name ) )
114  return NULL;
115 
116  return mMetadata[name]->createSymbolLayer( properties );
117 }
118 
119 QgsSymbolLayerV2* QgsSymbolLayerV2Registry::createSymbolLayerFromSld( QString name, QDomElement& element ) const
120 {
121  if ( !mMetadata.contains( name ) )
122  return NULL;
123 
124  return mMetadata[name]->createSymbolLayerFromSld( element );
125 }
126 
128 {
129  QStringList lst;
130  QMap<QString, QgsSymbolLayerV2AbstractMetadata*>::ConstIterator it = mMetadata.begin();
131  for ( ; it != mMetadata.end(); ++it )
132  {
133  if (( *it )->type() == type )
134  lst.append( it.key() );
135  }
136  return lst;
137 }