libosmscout  1.1.1
StyleDescription.h
Go to the documentation of this file.
1 #ifndef OSMSCOUT_STYLEDESCRIPTION_H
2 #define OSMSCOUT_STYLEDESCRIPTION_H
3 
4 /*
5  This source is part of the libosmscout library
6  Copyright (C) 2017 Tim Teulings
7 
8  This library is free software; you can redistribute it and/or
9  modify it under the terms of the GNU Lesser General Public
10  License as published by the Free Software Foundation; either
11  version 2.1 of the License, or (at your option) any later version.
12 
13  This library is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  Lesser General Public License for more details.
17 
18  You should have received a copy of the GNU Lesser General Public
19  License along with this library; if not, write to the Free Software
20  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 */
22 
23 #include <memory>
24 #include <unordered_map>
25 #include <vector>
26 
28 
30 
31 #include <osmscout/util/Color.h>
33 
34 namespace osmscout {
35 
36  class Symbol;
37  using SymbolRef = std::shared_ptr<Symbol>;
38 
39  class LabelProvider;
40  using LabelProviderRef = std::shared_ptr<LabelProvider>;
41 
52  {
53  public:
54  virtual ~Style() = default;
55 
56  virtual void SetBoolValue(int attribute, bool value);
57  virtual void SetStringValue(int attribute, const std::string& value);
58  virtual void SetColorValue(int attribute, const Color& value);
59  virtual void SetMagnificationValue(int attribute, const Magnification& value);
60  virtual void SetDoubleValue(int attribute, double value);
61  virtual void SetDoubleArrayValue(int attribute, const std::vector<double>& value);
62  virtual void SetSymbolValue(int attribute, const SymbolRef& value);
63  virtual void SetIntValue(int attribute, int value);
64  virtual void SetUIntValue(int attribute, size_t value);
65  virtual void SetLabelValue(int attribute, const LabelProviderRef& value);
66  };
67 
68  // Probem under Mac OS X
69  #undef TYPE_BOOL
70 
76  enum class StyleAttributeType
77  {
78  TYPE_VOID,
79  TYPE_BOOL,
81  TYPE_COLOR,
83  TYPE_ENUM,
91  TYPE_INT,
92  TYPE_UINT,
93  TYPE_LABEL,
95  };
96 
103  {
104  private:
105  StyleAttributeType type;
106  std::string name;
107  int attribute;
108 
109  protected:
111  const std::string& name,
112  int attribute);
113 
114  public:
115  virtual ~StyleAttributeDescriptor() = default;
116 
117  inline std::string GetName() const
118  {
119  return name;
120  }
121 
123  {
124  return type;
125  }
126 
127  inline int GetAttribute() const
128  {
129  return attribute;
130  }
131  };
132 
138  class OSMSCOUT_MAP_API StyleVoidAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
139  {
140  public:
143  "",
144  -1)
145  {
146  // no code
147  }
148  };
149 
155  class OSMSCOUT_MAP_API StyleBoolAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
156  {
157  public:
158  StyleBoolAttributeDescriptor(const std::string& name,
159  int attribute)
161  name,
162  attribute)
163  {
164  // no code
165  }
166  };
167 
173  class OSMSCOUT_MAP_API StyleStringAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
174  {
175  public:
176  StyleStringAttributeDescriptor(const std::string& name,
177  int attribute)
179  name,
180  attribute)
181  {
182  // no code
183  }
184  };
185 
191  class OSMSCOUT_MAP_API StyleColorAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
192  {
193  public:
194  StyleColorAttributeDescriptor(const std::string& name,
195  int attribute)
197  name,
198  attribute)
199  {
200  // no code
201  }
202  };
203 
204 
210  class OSMSCOUT_MAP_API StyleMagnificationAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
211  {
212  public:
213  StyleMagnificationAttributeDescriptor(const std::string& name,
214  int attribute)
216  name,
217  attribute)
218  {
219  // no code
220  }
221  };
222 
230  {
231  public:
232  using EnumNameValueMap = std::unordered_map<std::string, int>;
233 
234  protected:
236 
237  protected:
238  StyleEnumAttributeDescriptor(const std::string& name,
239  int attribute)
241  name,
242  attribute)
243  {
244  // no code
245  }
246 
247  public:
248  void AddEnumValue(const std::string& name,
249  int value)
250  {
251  enumMap.insert(std::make_pair(name,value));
252  }
253 
254  int GetEnumValue(const std::string& name) const
255  {
256  EnumNameValueMap::const_iterator entry=enumMap.find(name);
257 
258  if (entry!=enumMap.end()) {
259  return entry->second;
260  }
261 
262  return -1;
263  }
264  };
265 
271  class OSMSCOUT_MAP_API StyleDisplayAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
272  {
273  public:
274  StyleDisplayAttributeDescriptor(const std::string& name,
275  int attribute)
277  name,
278  attribute)
279  {
280  // no code
281  }
282  };
283 
289  class OSMSCOUT_MAP_API StyleUDisplayAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
290  {
291  public:
292  StyleUDisplayAttributeDescriptor(const std::string& name,
293  int attribute)
295  name,
296  attribute)
297  {
298  // no code
299  }
300  };
301 
307  class OSMSCOUT_MAP_API StyleMapAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
308  {
309  public:
310  StyleMapAttributeDescriptor(const std::string& name,
311  int attribute)
313  name,
314  attribute)
315  {
316  // no code
317  }
318  };
319 
325  class OSMSCOUT_MAP_API StyleUMapAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
326  {
327  public:
328  StyleUMapAttributeDescriptor(const std::string& name,
329  int attribute)
331  name,
332  attribute)
333  {
334  // no code
335  }
336  };
337 
343  class OSMSCOUT_MAP_API StyleDoubleAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
344  {
345  public:
346  StyleDoubleAttributeDescriptor(const std::string& name,
347  int attribute)
349  name,
350  attribute)
351  {
352  // no code
353  }
354  };
355 
361  class OSMSCOUT_MAP_API StyleUDoubleAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
362  {
363  public:
364  StyleUDoubleAttributeDescriptor(const std::string& name,
365  int attribute)
367  name,
368  attribute)
369  {
370  // no code
371  }
372  };
373 
379  class OSMSCOUT_MAP_API StyleUDoubleArrayAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
380  {
381  public:
382  StyleUDoubleArrayAttributeDescriptor(const std::string& name,
383  int attribute)
385  name,
386  attribute)
387  {
388  // no code
389  }
390  };
391 
397  class OSMSCOUT_MAP_API StyleIntAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
398  {
399  public:
400  StyleIntAttributeDescriptor(const std::string& name,
401  int attribute)
403  name,
404  attribute)
405  {
406  // no code
407  }
408  };
409 
415  class OSMSCOUT_MAP_API StyleUIntAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
416  {
417  public:
418  StyleUIntAttributeDescriptor(const std::string& name,
419  int attribute)
421  name,
422  attribute)
423  {
424  // no code
425  }
426  };
427 
433  class OSMSCOUT_MAP_API StyleLabelAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
434  {
435  public:
436  StyleLabelAttributeDescriptor(const std::string& name,
437  int attribute)
439  name,
440  attribute)
441  {
442  // no code
443  }
444  };
445 
451  class OSMSCOUT_MAP_API StyleSymbolAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
452  {
453  public:
454  StyleSymbolAttributeDescriptor(const std::string& name,
455  int attribute)
457  name,
458  attribute)
459  {
460  // no code
461  }
462  };
463 
464 
465  using StyleAttributeDescriptorRef = std::shared_ptr<StyleAttributeDescriptor>;
466 
475  {
476  private:
477  std::unordered_map<std::string,StyleAttributeDescriptorRef> attributeMap;
478 
479  protected:
480  void AddAttribute(const StyleAttributeDescriptorRef& attribute);
481 
482  public:
483  StyleAttributeDescriptorRef GetAttribute(const std::string& name) const
484  {
485  auto result=attributeMap.find(name);
486 
487  if (result!=attributeMap.end()) {
488  return result->second;
489  }
490 
491  return nullptr;
492  }
493  };
494 
495  using StyleDescriptorRef = std::shared_ptr<StyleDescriptor>;
496 }
497 
498 #endif
StyleVoidAttributeDescriptor()
Definition: StyleDescription.h:141
StyleDisplayAttributeDescriptor(const std::string &name, int attribute)
Definition: StyleDescription.h:274
Definition: StyleDescription.h:229
StyleUDoubleArrayAttributeDescriptor(const std::string &name, int attribute)
Definition: StyleDescription.h:382
StyleIntAttributeDescriptor(const std::string &name, int attribute)
Definition: StyleDescription.h:400
StyleColorAttributeDescriptor(const std::string &name, int attribute)
Definition: StyleDescription.h:194
StyleSymbolAttributeDescriptor(const std::string &name, int attribute)
Definition: StyleDescription.h:454
StyleUIntAttributeDescriptor(const std::string &name, int attribute)
Definition: StyleDescription.h:418
StyleEnumAttributeDescriptor(const std::string &name, int attribute)
Definition: StyleDescription.h:238
StyleDoubleAttributeDescriptor(const std::string &name, int attribute)
Definition: StyleDescription.h:346
std::shared_ptr< LabelProvider > LabelProviderRef
Definition: LabelProvider.h:61
int GetEnumValue(const std::string &name) const
Definition: StyleDescription.h:254
Definition: StyleDescription.h:102
EnumNameValueMap enumMap
Definition: StyleDescription.h:235
StyleAttributeType
Definition: StyleDescription.h:76
Definition: Area.h:38
std::string GetName() const
Definition: StyleDescription.h:117
StyleMagnificationAttributeDescriptor(const std::string &name, int attribute)
Definition: StyleDescription.h:213
Definition: StyleDescription.h:474
std::shared_ptr< StyleAttributeDescriptor > StyleAttributeDescriptorRef
Definition: StyleDescription.h:465
#define CLASS_FINAL
Definition: Compiler.h:26
#define OSMSCOUT_MAP_API
Definition: MapImportExport.h:45
Definition: LabelProvider.h:39
void AddEnumValue(const std::string &name, int value)
Definition: StyleDescription.h:248
StyleUDoubleAttributeDescriptor(const std::string &name, int attribute)
Definition: StyleDescription.h:364
Definition: StyleDescription.h:51
StyleBoolAttributeDescriptor(const std::string &name, int attribute)
Definition: StyleDescription.h:158
StyleStringAttributeDescriptor(const std::string &name, int attribute)
Definition: StyleDescription.h:176
StyleLabelAttributeDescriptor(const std::string &name, int attribute)
Definition: StyleDescription.h:436
std::shared_ptr< Symbol > SymbolRef
Definition: StyleDescription.h:37
StyleAttributeDescriptorRef GetAttribute(const std::string &name) const
Definition: StyleDescription.h:483
StyleMapAttributeDescriptor(const std::string &name, int attribute)
Definition: StyleDescription.h:310
StyleAttributeType GetType() const
Definition: StyleDescription.h:122
std::shared_ptr< StyleDescriptor > StyleDescriptorRef
Definition: StyleDescription.h:495
StyleUDisplayAttributeDescriptor(const std::string &name, int attribute)
Definition: StyleDescription.h:292
std::unordered_map< std::string, int > EnumNameValueMap
Definition: StyleDescription.h:232
StyleUMapAttributeDescriptor(const std::string &name, int attribute)
Definition: StyleDescription.h:328
int GetAttribute() const
Definition: StyleDescription.h:127