libosmscout 1.1.1
Loading...
Searching...
No Matches
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
34namespace 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#if defined(TYPE_BOOL)
69 // Probem under Mac OS X
70 #undef TYPE_BOOL
71#endif
72
98
105 {
106 private:
107 StyleAttributeType type;
108 std::string name;
109 int attribute;
110
111 protected:
113 const std::string& name,
114 int attribute);
115
116 public:
117 virtual ~StyleAttributeDescriptor() = default;
118
119 std::string GetName() const
120 {
121 return name;
122 }
123
125 {
126 return type;
127 }
128
129 int GetAttribute() const
130 {
131 return attribute;
132 }
133 };
134
140 class OSMSCOUT_MAP_API StyleVoidAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
141 {
142 public:
145 "",
146 -1)
147 {
148 // no code
149 }
150 };
151
157 class OSMSCOUT_MAP_API StyleBoolAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
158 {
159 public:
160 StyleBoolAttributeDescriptor(const std::string& name,
161 int attribute)
163 name,
164 attribute)
165 {
166 // no code
167 }
168 };
169
175 class OSMSCOUT_MAP_API StyleStringAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
176 {
177 public:
178 StyleStringAttributeDescriptor(const std::string& name,
179 int attribute)
181 name,
182 attribute)
183 {
184 // no code
185 }
186 };
187
193 class OSMSCOUT_MAP_API StyleColorAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
194 {
195 public:
196 StyleColorAttributeDescriptor(const std::string& name,
197 int attribute)
199 name,
200 attribute)
201 {
202 // no code
203 }
204 };
205
206
212 class OSMSCOUT_MAP_API StyleMagnificationAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
213 {
214 public:
216 int attribute)
218 name,
219 attribute)
220 {
221 // no code
222 }
223 };
224
232 {
233 public:
234 using EnumNameValueMap = std::unordered_map<std::string, int>;
235
236 protected:
238
239 protected:
240 StyleEnumAttributeDescriptor(const std::string& name,
241 int attribute)
243 name,
244 attribute)
245 {
246 // no code
247 }
248
249 public:
250 void AddEnumValue(const std::string& name,
251 int value)
252 {
253 enumMap.try_emplace(name,
254 value);
255 }
256
257 int GetEnumValue(const std::string& name) const
258 {
259 EnumNameValueMap::const_iterator entry=enumMap.find(name);
260
261 if (entry!=enumMap.end()) {
262 return entry->second;
263 }
264
265 return -1;
266 }
267 };
268
274 class OSMSCOUT_MAP_API StyleDisplayAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
275 {
276 public:
277 StyleDisplayAttributeDescriptor(const std::string& name,
278 int attribute)
280 name,
281 attribute)
282 {
283 // no code
284 }
285 };
286
292 class OSMSCOUT_MAP_API StyleUDisplayAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
293 {
294 public:
295 StyleUDisplayAttributeDescriptor(const std::string& name,
296 int attribute)
298 name,
299 attribute)
300 {
301 // no code
302 }
303 };
304
310 class OSMSCOUT_MAP_API StyleMapAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
311 {
312 public:
313 StyleMapAttributeDescriptor(const std::string& name,
314 int attribute)
316 name,
317 attribute)
318 {
319 // no code
320 }
321 };
322
328 class OSMSCOUT_MAP_API StyleUMapAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
329 {
330 public:
331 StyleUMapAttributeDescriptor(const std::string& name,
332 int attribute)
334 name,
335 attribute)
336 {
337 // no code
338 }
339 };
340
346 class OSMSCOUT_MAP_API StyleDoubleAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
347 {
348 public:
349 StyleDoubleAttributeDescriptor(const std::string& name,
350 int attribute)
352 name,
353 attribute)
354 {
355 // no code
356 }
357 };
358
364 class OSMSCOUT_MAP_API StyleUDoubleAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
365 {
366 public:
367 StyleUDoubleAttributeDescriptor(const std::string& name,
368 int attribute)
370 name,
371 attribute)
372 {
373 // no code
374 }
375 };
376
382 class OSMSCOUT_MAP_API StyleUDoubleArrayAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
383 {
384 public:
386 int attribute)
388 name,
389 attribute)
390 {
391 // no code
392 }
393 };
394
400 class OSMSCOUT_MAP_API StyleIntAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
401 {
402 public:
403 StyleIntAttributeDescriptor(const std::string& name,
404 int attribute)
406 name,
407 attribute)
408 {
409 // no code
410 }
411 };
412
418 class OSMSCOUT_MAP_API StyleUIntAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
419 {
420 public:
421 StyleUIntAttributeDescriptor(const std::string& name,
422 int attribute)
424 name,
425 attribute)
426 {
427 // no code
428 }
429 };
430
436 class OSMSCOUT_MAP_API StyleLabelAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
437 {
438 public:
439 StyleLabelAttributeDescriptor(const std::string& name,
440 int attribute)
442 name,
443 attribute)
444 {
445 // no code
446 }
447 };
448
454 class OSMSCOUT_MAP_API StyleSymbolAttributeDescriptor CLASS_FINAL : public StyleAttributeDescriptor
455 {
456 public:
457 StyleSymbolAttributeDescriptor(const std::string& name,
458 int attribute)
460 name,
461 attribute)
462 {
463 // no code
464 }
465 };
466
467
468 using StyleAttributeDescriptorRef = std::shared_ptr<StyleAttributeDescriptor>;
469
478 {
479 private:
480 std::unordered_map<std::string,StyleAttributeDescriptorRef> attributeMap;
481
482 protected:
484
485 public:
486 StyleAttributeDescriptorRef GetAttribute(const std::string& name) const
487 {
488 auto result=attributeMap.find(name);
489
490 if (result!=attributeMap.end()) {
491 return result->second;
492 }
493
494 return nullptr;
495 }
496 };
497
498 using StyleDescriptorRef = std::shared_ptr<StyleDescriptor>;
499}
500
501#endif
#define CLASS_FINAL
Definition Compiler.h:26
#define OSMSCOUT_MAP_API
Definition MapImportExport.h:45
StyleUDisplayAttributeDescriptor(const std::string &name, int attribute)
Definition StyleDescription.h:295
StyleVoidAttributeDescriptor()
Definition StyleDescription.h:143
StyleUIntAttributeDescriptor(const std::string &name, int attribute)
Definition StyleDescription.h:421
StyleBoolAttributeDescriptor(const std::string &name, int attribute)
Definition StyleDescription.h:160
StyleColorAttributeDescriptor(const std::string &name, int attribute)
Definition StyleDescription.h:196
StyleLabelAttributeDescriptor(const std::string &name, int attribute)
Definition StyleDescription.h:439
StyleStringAttributeDescriptor(const std::string &name, int attribute)
Definition StyleDescription.h:178
StyleUDoubleAttributeDescriptor(const std::string &name, int attribute)
Definition StyleDescription.h:367
StyleUMapAttributeDescriptor(const std::string &name, int attribute)
Definition StyleDescription.h:331
StyleUDoubleArrayAttributeDescriptor(const std::string &name, int attribute)
Definition StyleDescription.h:385
StyleMagnificationAttributeDescriptor(const std::string &name, int attribute)
Definition StyleDescription.h:215
StyleDisplayAttributeDescriptor(const std::string &name, int attribute)
Definition StyleDescription.h:277
StyleSymbolAttributeDescriptor(const std::string &name, int attribute)
Definition StyleDescription.h:457
StyleDoubleAttributeDescriptor(const std::string &name, int attribute)
Definition StyleDescription.h:349
StyleIntAttributeDescriptor(const std::string &name, int attribute)
Definition StyleDescription.h:403
StyleMapAttributeDescriptor(const std::string &name, int attribute)
Definition StyleDescription.h:313
Definition LabelProvider.h:39
StyleAttributeType GetType() const
Definition StyleDescription.h:124
int GetAttribute() const
Definition StyleDescription.h:129
std::string GetName() const
Definition StyleDescription.h:119
StyleAttributeDescriptor(StyleAttributeType type, const std::string &name, int attribute)
virtual ~StyleAttributeDescriptor()=default
Definition StyleDescription.h:478
void AddAttribute(const StyleAttributeDescriptorRef &attribute)
StyleAttributeDescriptorRef GetAttribute(const std::string &name) const
Definition StyleDescription.h:486
int GetEnumValue(const std::string &name) const
Definition StyleDescription.h:257
EnumNameValueMap enumMap
Definition StyleDescription.h:237
std::unordered_map< std::string, int > EnumNameValueMap
Definition StyleDescription.h:234
StyleEnumAttributeDescriptor(const std::string &name, int attribute)
Definition StyleDescription.h:240
void AddEnumValue(const std::string &name, int value)
Definition StyleDescription.h:250
Definition StyleDescription.h:52
virtual void SetBoolValue(int attribute, bool value)
virtual void SetUIntValue(int attribute, size_t value)
virtual void SetDoubleValue(int attribute, double value)
virtual void SetDoubleArrayValue(int attribute, const std::vector< double > &value)
virtual void SetMagnificationValue(int attribute, const Magnification &value)
virtual void SetColorValue(int attribute, const Color &value)
virtual void SetStringValue(int attribute, const std::string &value)
virtual void SetSymbolValue(int attribute, const SymbolRef &value)
virtual ~Style()=default
virtual void SetLabelValue(int attribute, const LabelProviderRef &value)
virtual void SetIntValue(int attribute, int value)
StyleAttributeType
Definition StyleDescription.h:79
@ TYPE_SYMBOL
Definition StyleDescription.h:96
@ TYPE_UMAP_SIZE
Definition StyleDescription.h:89
@ TYPE_VOID
Definition StyleDescription.h:80
@ TYPE_MAP_SIZE
Definition StyleDescription.h:88
@ TYPE_UDOUBLE_ARRAY
Definition StyleDescription.h:92
@ TYPE_ENUM
Definition StyleDescription.h:85
@ TYPE_DOUBLE
Definition StyleDescription.h:90
@ TYPE_UINT
Definition StyleDescription.h:94
@ TYPE_MAGNIFICATION
Definition StyleDescription.h:84
@ TYPE_COLOR
Definition StyleDescription.h:83
@ TYPE_UDOUBLE
Definition StyleDescription.h:91
@ TYPE_BOOL
Definition StyleDescription.h:81
@ TYPE_STRING
Definition StyleDescription.h:82
@ TYPE_UDISPLAY_SIZE
Definition StyleDescription.h:87
@ TYPE_DISPLAY_SIZE
Definition StyleDescription.h:86
@ TYPE_LABEL
Definition StyleDescription.h:95
@ TYPE_INT
Definition StyleDescription.h:93
Definition Area.h:39
std::shared_ptr< StyleDescriptor > StyleDescriptorRef
Definition StyleDescription.h:498
std::shared_ptr< Symbol > SymbolRef
Definition StyleDescription.h:37
std::shared_ptr< LabelProvider > LabelProviderRef
Definition LabelProvider.h:60
std::shared_ptr< StyleAttributeDescriptor > StyleAttributeDescriptorRef
Definition StyleDescription.h:468