LCOV - code coverage report
Current view: top level - ogr - ogr_featurestyle.h (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 101 101 100.0 %
Date: 2024-11-21 22:18:42 Functions: 44 44 100.0 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  * $Id$
       3             :  *
       4             :  * Project:  OpenGIS Simple Features Reference Implementation
       5             :  * Purpose:  Define of Feature Representation
       6             :  * Author:   Stephane Villeneuve, stephane.v@videtron.ca
       7             :  *
       8             :  ******************************************************************************
       9             :  * Copyright (c) 1999, Frank Warmerdam
      10             :  *
      11             :  * SPDX-License-Identifier: MIT
      12             :  ****************************************************************************/
      13             : 
      14             : #ifndef OGR_FEATURESTYLE_INCLUDE
      15             : #define OGR_FEATURESTYLE_INCLUDE
      16             : 
      17             : #include "cpl_conv.h"
      18             : #include "cpl_string.h"
      19             : #include "ogr_core.h"
      20             : 
      21             : class OGRFeature;
      22             : 
      23             : /**
      24             :  * \file ogr_featurestyle.h
      25             :  *
      26             :  * Simple feature style classes.
      27             :  */
      28             : 
      29             : /*
      30             :  * All OGRStyleTool param lists are defined in ogr_core.h.
      31             :  */
      32             : 
      33             : /** OGR Style type */
      34             : typedef enum ogr_style_type
      35             : {
      36             :     OGRSTypeUnused = -1,
      37             :     OGRSTypeString,
      38             :     OGRSTypeDouble,
      39             :     OGRSTypeInteger,
      40             :     OGRSTypeBoolean
      41             : } OGRSType;
      42             : 
      43             : //! @cond Doxygen_Suppress
      44             : typedef struct ogr_style_param
      45             : {
      46             :     int eParam;
      47             :     const char *pszToken;
      48             :     GBool bGeoref;
      49             :     OGRSType eType;
      50             : } OGRStyleParamId;
      51             : 
      52             : typedef struct ogr_style_value
      53             : {
      54             :     char *pszValue;
      55             :     double dfValue;
      56             :     int nValue;  // Used for both integer and boolean types
      57             :     GBool bValid;
      58             :     OGRSTUnitId eUnit;
      59             : } OGRStyleValue;
      60             : 
      61             : //! @endcond
      62             : 
      63             : // Every time a pszStyleString given in parameter is NULL,
      64             : // the StyleString defined in the Mgr will be use.
      65             : 
      66             : /**
      67             :  * This class represents a style table
      68             :  */
      69             : class CPL_DLL OGRStyleTable
      70             : {
      71             :   private:
      72             :     char **m_papszStyleTable = nullptr;
      73             : 
      74             :     CPLString osLastRequestedStyleName{};
      75             :     int iNextStyle = 0;
      76             : 
      77             :     CPL_DISALLOW_COPY_ASSIGN(OGRStyleTable)
      78             : 
      79             :   public:
      80             :     OGRStyleTable();
      81             :     ~OGRStyleTable();
      82             :     GBool AddStyle(const char *pszName, const char *pszStyleString);
      83             :     GBool RemoveStyle(const char *pszName);
      84             :     GBool ModifyStyle(const char *pszName, const char *pszStyleString);
      85             : 
      86             :     GBool SaveStyleTable(const char *pszFilename);
      87             :     GBool LoadStyleTable(const char *pszFilename);
      88             :     const char *Find(const char *pszStyleString);
      89             :     GBool IsExist(const char *pszName);
      90             :     const char *GetStyleName(const char *pszName);
      91             :     void Print(FILE *fpOut);
      92             :     void Clear();
      93             :     OGRStyleTable *Clone();
      94             :     void ResetStyleStringReading();
      95             :     const char *GetNextStyle();
      96             :     const char *GetLastStyleName();
      97             : };
      98             : 
      99             : class OGRStyleTool;
     100             : 
     101             : /**
     102             :  * This class represents a style manager
     103             :  */
     104             : class CPL_DLL OGRStyleMgr
     105             : {
     106             :   private:
     107             :     OGRStyleTable *m_poDataSetStyleTable = nullptr;
     108             :     char *m_pszStyleString = nullptr;
     109             : 
     110             :     CPL_DISALLOW_COPY_ASSIGN(OGRStyleMgr)
     111             : 
     112             :   public:
     113             :     explicit OGRStyleMgr(OGRStyleTable *poDataSetStyleTable = nullptr);
     114             :     ~OGRStyleMgr();
     115             : 
     116             :     GBool SetFeatureStyleString(OGRFeature *,
     117             :                                 const char *pszStyleString = nullptr,
     118             :                                 GBool bNoMatching = FALSE);
     119             :     /* It will set in the given feature the pszStyleString with
     120             :             the style or will set the style name found in
     121             :             dataset StyleTable (if bNoMatching == FALSE). */
     122             : 
     123             :     const char *InitFromFeature(OGRFeature *);
     124             :     GBool InitStyleString(const char *pszStyleString = nullptr);
     125             : 
     126             :     const char *GetStyleName(const char *pszStyleString = nullptr);
     127             :     const char *GetStyleByName(const char *pszStyleName);
     128             : 
     129             :     GBool AddStyle(const char *pszStyleName,
     130             :                    const char *pszStyleString = nullptr);
     131             : 
     132             :     const char *GetStyleString(OGRFeature * = nullptr);
     133             : 
     134             :     GBool AddPart(OGRStyleTool *);
     135             :     GBool AddPart(const char *);
     136             : 
     137             :     int GetPartCount(const char *pszStyleString = nullptr);
     138             :     OGRStyleTool *GetPart(int hPartId, const char *pszStyleString = nullptr);
     139             : 
     140             :     /* It could have a reference counting process us for the OGRStyleTable, if
     141             :       needed. */
     142             :     //! @cond Doxygen_Suppress
     143             :     OGRStyleTable *GetDataSetStyleTable()
     144             :     {
     145             :         return m_poDataSetStyleTable;
     146             :     }
     147             : 
     148             :     static OGRStyleTool *
     149             :     CreateStyleToolFromStyleString(const char *pszStyleString);
     150             :     //! @endcond
     151             : };
     152             : 
     153             : /**
     154             :  * This class represents a style tool
     155             :  */
     156             : class CPL_DLL OGRStyleTool
     157             : {
     158             :   private:
     159             :     GBool m_bModified = false;
     160             :     GBool m_bParsed = false;
     161             :     double m_dfScale = 1.0;
     162             :     OGRSTUnitId m_eUnit = OGRSTUMM;
     163             :     OGRSTClassId m_eClassId = OGRSTCNone;
     164             :     char *m_pszStyleString = nullptr;
     165             : 
     166             :     virtual GBool Parse() = 0;
     167             : 
     168             :     CPL_DISALLOW_COPY_ASSIGN(OGRStyleTool)
     169             : 
     170             :   protected:
     171             : #ifndef DOXYGEN_SKIP
     172             :     GBool Parse(const OGRStyleParamId *pasStyle, OGRStyleValue *pasValue,
     173             :                 int nCount);
     174             : #endif
     175             : 
     176             :   public:
     177             :     OGRStyleTool()
     178             :         : m_bModified(FALSE), m_bParsed(FALSE), m_dfScale(0.0),
     179             :           m_eUnit(OGRSTUGround), m_eClassId(OGRSTCNone),
     180             :           m_pszStyleString(nullptr)
     181             :     {
     182             :     }
     183             : 
     184             :     explicit OGRStyleTool(OGRSTClassId eClassId);
     185             :     virtual ~OGRStyleTool();
     186             : 
     187             :     static GBool GetRGBFromString(const char *pszColor, int &nRed, int &nGreen,
     188             :                                   int &nBlue, int &nTransparence);
     189             :     static int GetSpecificId(const char *pszId, const char *pszWanted);
     190             : 
     191             : #ifndef DOXYGEN_SKIP
     192         686 :     GBool IsStyleModified()
     193             :     {
     194         686 :         return m_bModified;
     195             :     }
     196             : 
     197        1759 :     void StyleModified()
     198             :     {
     199        1759 :         m_bModified = TRUE;
     200        1759 :     }
     201             : 
     202        2920 :     GBool IsStyleParsed()
     203             :     {
     204        2920 :         return m_bParsed;
     205             :     }
     206             : 
     207         637 :     void StyleParsed()
     208             :     {
     209         637 :         m_bParsed = TRUE;
     210         637 :     }
     211             : #endif
     212             : 
     213             :     OGRSTClassId GetType();
     214             : 
     215             : #ifndef DOXYGEN_SKIP
     216             :     void SetInternalInputUnitFromParam(char *pszString);
     217             : #endif
     218             : 
     219             :     void SetUnit(OGRSTUnitId,
     220             :                  double dfScale = 1.0);  // the dfScale will be
     221             :                                          // used if we are working with Ground
     222             :                                          // Unit ( ground = paper * scale);
     223             : 
     224        2044 :     OGRSTUnitId GetUnit()
     225             :     {
     226        2044 :         return m_eUnit;
     227             :     }
     228             : 
     229             :     // There are two way to set the parameters in the Style, with generic
     230             :     // methods (using a defined enumeration) or with the reel method specific
     231             :     // for Each style tools.
     232             : 
     233             :     virtual const char *GetStyleString() = 0;
     234             :     void SetStyleString(const char *pszStyleString);
     235             :     const char *GetStyleString(const OGRStyleParamId *pasStyleParam,
     236             :                                OGRStyleValue *pasStyleValue, int nSize);
     237             : 
     238             :     const char *GetParamStr(const OGRStyleParamId &sStyleParam,
     239             :                             const OGRStyleValue &sStyleValue,
     240             :                             GBool &bValueIsNull);
     241             : 
     242             :     int GetParamNum(const OGRStyleParamId &sStyleParam,
     243             :                     const OGRStyleValue &sStyleValue, GBool &bValueIsNull);
     244             : 
     245             :     double GetParamDbl(const OGRStyleParamId &sStyleParam,
     246             :                        const OGRStyleValue &sStyleValue, GBool &bValueIsNull);
     247             : 
     248             :     void SetParamStr(const OGRStyleParamId &sStyleParam,
     249             :                      OGRStyleValue &sStyleValue, const char *pszParamString);
     250             : 
     251             :     void SetParamNum(const OGRStyleParamId &sStyleParam,
     252             :                      OGRStyleValue &sStyleValue, int nParam);
     253             : 
     254             :     void SetParamDbl(const OGRStyleParamId &sStyleParam,
     255             :                      OGRStyleValue &sStyleValue, double dfParam);
     256             : #ifndef DOXYGEN_SKIP
     257             :     double ComputeWithUnit(double, OGRSTUnitId);
     258             :     int ComputeWithUnit(int, OGRSTUnitId);
     259             : #endif
     260             : };
     261             : 
     262             : //! @cond Doxygen_Suppress
     263             : 
     264             : /**
     265             :  * This class represents a style pen
     266             :  */
     267             : class CPL_DLL OGRStylePen : public OGRStyleTool
     268             : {
     269             :   private:
     270             :     OGRStyleValue *m_pasStyleValue;
     271             : 
     272             :     GBool Parse() override;
     273             : 
     274             :     CPL_DISALLOW_COPY_ASSIGN(OGRStylePen)
     275             : 
     276             :   public:
     277             :     OGRStylePen();
     278             :     ~OGRStylePen() override;
     279             : 
     280             :     /**********************************************************************/
     281             :     /* Explicit fct for all parameters defined in the Drawing tools  Pen  */
     282             :     /**********************************************************************/
     283             : 
     284          46 :     const char *Color(GBool &bDefault)
     285             :     {
     286          46 :         return GetParamStr(OGRSTPenColor, bDefault);
     287             :     }
     288             : 
     289          53 :     void SetColor(const char *pszColor)
     290             :     {
     291          53 :         SetParamStr(OGRSTPenColor, pszColor);
     292          53 :     }
     293             : 
     294          68 :     double Width(GBool &bDefault)
     295             :     {
     296          68 :         return GetParamDbl(OGRSTPenWidth, bDefault);
     297             :     }
     298             : 
     299          83 :     void SetWidth(double dfWidth)
     300             :     {
     301          83 :         SetParamDbl(OGRSTPenWidth, dfWidth);
     302          83 :     }
     303             : 
     304           6 :     const char *Pattern(GBool &bDefault)
     305             :     {
     306           6 :         return GetParamStr(OGRSTPenPattern, bDefault);
     307             :     }
     308             : 
     309             :     void SetPattern(const char *pszPattern)
     310             :     {
     311             :         SetParamStr(OGRSTPenPattern, pszPattern);
     312             :     }
     313             : 
     314          30 :     const char *Id(GBool &bDefault)
     315             :     {
     316          30 :         return GetParamStr(OGRSTPenId, bDefault);
     317             :     }
     318             : 
     319             :     void SetId(const char *pszId)
     320             :     {
     321             :         SetParamStr(OGRSTPenId, pszId);
     322             :     }
     323             : 
     324             :     double PerpendicularOffset(GBool &bDefault)
     325             :     {
     326             :         return GetParamDbl(OGRSTPenPerOffset, bDefault);
     327             :     }
     328             : 
     329             :     void SetPerpendicularOffset(double dfPerp)
     330             :     {
     331             :         SetParamDbl(OGRSTPenPerOffset, dfPerp);
     332             :     }
     333             : 
     334             :     const char *Cap(GBool &bDefault)
     335             :     {
     336             :         return GetParamStr(OGRSTPenCap, bDefault);
     337             :     }
     338             : 
     339             :     void SetCap(const char *pszCap)
     340             :     {
     341             :         SetParamStr(OGRSTPenCap, pszCap);
     342             :     }
     343             : 
     344             :     const char *Join(GBool &bDefault)
     345             :     {
     346             :         return GetParamStr(OGRSTPenJoin, bDefault);
     347             :     }
     348             : 
     349             :     void SetJoin(const char *pszJoin)
     350             :     {
     351             :         SetParamStr(OGRSTPenJoin, pszJoin);
     352             :     }
     353             : 
     354             :     int Priority(GBool &bDefault)
     355             :     {
     356             :         return GetParamNum(OGRSTPenPriority, bDefault);
     357             :     }
     358             : 
     359             :     void SetPriority(int nPriority)
     360             :     {
     361             :         SetParamNum(OGRSTPenPriority, nPriority);
     362             :     }
     363             : 
     364             :     /*****************************************************************/
     365             : 
     366             :     const char *GetParamStr(OGRSTPenParam eParam, GBool &bValueIsNull);
     367             :     int GetParamNum(OGRSTPenParam eParam, GBool &bValueIsNull);
     368             :     double GetParamDbl(OGRSTPenParam eParam, GBool &bValueIsNull);
     369             :     void SetParamStr(OGRSTPenParam eParam, const char *pszParamString);
     370             :     void SetParamNum(OGRSTPenParam eParam, int nParam);
     371             :     void SetParamDbl(OGRSTPenParam eParam, double dfParam);
     372             :     const char *GetStyleString() override;
     373             : };
     374             : 
     375             : /**
     376             :  * This class represents a style brush
     377             :  */
     378             : class CPL_DLL OGRStyleBrush : public OGRStyleTool
     379             : {
     380             :   private:
     381             :     OGRStyleValue *m_pasStyleValue;
     382             : 
     383             :     GBool Parse() override;
     384             : 
     385             :     CPL_DISALLOW_COPY_ASSIGN(OGRStyleBrush)
     386             : 
     387             :   public:
     388             :     OGRStyleBrush();
     389             :     ~OGRStyleBrush() override;
     390             : 
     391             :     /* Explicit fct for all parameters defined in the Drawing tools Brush */
     392             : 
     393          26 :     const char *ForeColor(GBool &bDefault)
     394             :     {
     395          26 :         return GetParamStr(OGRSTBrushFColor, bDefault);
     396             :     }
     397             : 
     398          83 :     void SetForeColor(const char *pszColor)
     399             :     {
     400          83 :         SetParamStr(OGRSTBrushFColor, pszColor);
     401          83 :     }
     402             : 
     403          19 :     const char *BackColor(GBool &bDefault)
     404             :     {
     405          19 :         return GetParamStr(OGRSTBrushBColor, bDefault);
     406             :     }
     407             : 
     408             :     void SetBackColor(const char *pszColor)
     409             :     {
     410             :         SetParamStr(OGRSTBrushBColor, pszColor);
     411             :     }
     412             : 
     413          19 :     const char *Id(GBool &bDefault)
     414             :     {
     415          19 :         return GetParamStr(OGRSTBrushId, bDefault);
     416             :     }
     417             : 
     418             :     void SetId(const char *pszId)
     419             :     {
     420             :         SetParamStr(OGRSTBrushId, pszId);
     421             :     }
     422             : 
     423             :     double Angle(GBool &bDefault)
     424             :     {
     425             :         return GetParamDbl(OGRSTBrushAngle, bDefault);
     426             :     }
     427             : 
     428             :     void SetAngle(double dfAngle)
     429             :     {
     430             :         SetParamDbl(OGRSTBrushAngle, dfAngle);
     431             :     }
     432             : 
     433             :     double Size(GBool &bDefault)
     434             :     {
     435             :         return GetParamDbl(OGRSTBrushSize, bDefault);
     436             :     }
     437             : 
     438             :     void SetSize(double dfSize)
     439             :     {
     440             :         SetParamDbl(OGRSTBrushSize, dfSize);
     441             :     }
     442             : 
     443             :     double SpacingX(GBool &bDefault)
     444             :     {
     445             :         return GetParamDbl(OGRSTBrushDx, bDefault);
     446             :     }
     447             : 
     448             :     void SetSpacingX(double dfX)
     449             :     {
     450             :         SetParamDbl(OGRSTBrushDx, dfX);
     451             :     }
     452             : 
     453             :     double SpacingY(GBool &bDefault)
     454             :     {
     455             :         return GetParamDbl(OGRSTBrushDy, bDefault);
     456             :     }
     457             : 
     458             :     void SetSpacingY(double dfY)
     459             :     {
     460             :         SetParamDbl(OGRSTBrushDy, dfY);
     461             :     }
     462             : 
     463             :     int Priority(GBool &bDefault)
     464             :     {
     465             :         return GetParamNum(OGRSTBrushPriority, bDefault);
     466             :     }
     467             : 
     468             :     void SetPriority(int nPriority)
     469             :     {
     470             :         SetParamNum(OGRSTBrushPriority, nPriority);
     471             :     }
     472             : 
     473             :     /*****************************************************************/
     474             : 
     475             :     const char *GetParamStr(OGRSTBrushParam eParam, GBool &bValueIsNull);
     476             :     int GetParamNum(OGRSTBrushParam eParam, GBool &bValueIsNull);
     477             :     double GetParamDbl(OGRSTBrushParam eParam, GBool &bValueIsNull);
     478             :     void SetParamStr(OGRSTBrushParam eParam, const char *pszParamString);
     479             :     void SetParamNum(OGRSTBrushParam eParam, int nParam);
     480             :     void SetParamDbl(OGRSTBrushParam eParam, double dfParam);
     481             :     const char *GetStyleString() override;
     482             : };
     483             : 
     484             : /**
     485             :  * This class represents a style symbol
     486             :  */
     487             : class CPL_DLL OGRStyleSymbol : public OGRStyleTool
     488             : {
     489             :   private:
     490             :     OGRStyleValue *m_pasStyleValue;
     491             : 
     492             :     GBool Parse() override;
     493             : 
     494             :     CPL_DISALLOW_COPY_ASSIGN(OGRStyleSymbol)
     495             : 
     496             :   public:
     497             :     OGRStyleSymbol();
     498             :     ~OGRStyleSymbol() override;
     499             : 
     500             :     /*****************************************************************/
     501             :     /* Explicit fct for all parameters defined in the Drawing tools  */
     502             :     /*****************************************************************/
     503             : 
     504         230 :     const char *Id(GBool &bDefault)
     505             :     {
     506         230 :         return GetParamStr(OGRSTSymbolId, bDefault);
     507             :     }
     508             : 
     509          52 :     void SetId(const char *pszId)
     510             :     {
     511          52 :         SetParamStr(OGRSTSymbolId, pszId);
     512          52 :     }
     513             : 
     514           8 :     double Angle(GBool &bDefault)
     515             :     {
     516           8 :         return GetParamDbl(OGRSTSymbolAngle, bDefault);
     517             :     }
     518             : 
     519           3 :     void SetAngle(double dfAngle)
     520             :     {
     521           3 :         SetParamDbl(OGRSTSymbolAngle, dfAngle);
     522           3 :     }
     523             : 
     524         117 :     const char *Color(GBool &bDefault)
     525             :     {
     526         117 :         return GetParamStr(OGRSTSymbolColor, bDefault);
     527             :     }
     528             : 
     529          11 :     void SetColor(const char *pszColor)
     530             :     {
     531          11 :         SetParamStr(OGRSTSymbolColor, pszColor);
     532          11 :     }
     533             : 
     534         117 :     double Size(GBool &bDefault)
     535             :     {
     536         117 :         return GetParamDbl(OGRSTSymbolSize, bDefault);
     537             :     }
     538             : 
     539           3 :     void SetSize(double dfSize)
     540             :     {
     541           3 :         SetParamDbl(OGRSTSymbolSize, dfSize);
     542           3 :     }
     543             : 
     544           8 :     double SpacingX(GBool &bDefault)
     545             :     {
     546           8 :         return GetParamDbl(OGRSTSymbolDx, bDefault);
     547             :     }
     548             : 
     549           2 :     void SetSpacingX(double dfX)
     550             :     {
     551           2 :         SetParamDbl(OGRSTSymbolDx, dfX);
     552           2 :     }
     553             : 
     554           8 :     double SpacingY(GBool &bDefault)
     555             :     {
     556           8 :         return GetParamDbl(OGRSTSymbolDy, bDefault);
     557             :     }
     558             : 
     559           2 :     void SetSpacingY(double dfY)
     560             :     {
     561           2 :         SetParamDbl(OGRSTSymbolDy, dfY);
     562           2 :     }
     563             : 
     564             :     double Step(GBool &bDefault)
     565             :     {
     566             :         return GetParamDbl(OGRSTSymbolStep, bDefault);
     567             :     }
     568             : 
     569             :     void SetStep(double dfStep)
     570             :     {
     571             :         SetParamDbl(OGRSTSymbolStep, dfStep);
     572             :     }
     573             : 
     574             :     double Offset(GBool &bDefault)
     575             :     {
     576             :         return GetParamDbl(OGRSTSymbolOffset, bDefault);
     577             :     }
     578             : 
     579             :     void SetOffset(double dfOffset)
     580             :     {
     581             :         SetParamDbl(OGRSTSymbolOffset, dfOffset);
     582             :     }
     583             : 
     584             :     double Perp(GBool &bDefault)
     585             :     {
     586             :         return GetParamDbl(OGRSTSymbolPerp, bDefault);
     587             :     }
     588             : 
     589             :     void SetPerp(double dfPerp)
     590             :     {
     591             :         SetParamDbl(OGRSTSymbolPerp, dfPerp);
     592             :     }
     593             : 
     594             :     int Priority(GBool &bDefault)
     595             :     {
     596             :         return GetParamNum(OGRSTSymbolPriority, bDefault);
     597             :     }
     598             : 
     599             :     void SetPriority(int nPriority)
     600             :     {
     601             :         SetParamNum(OGRSTSymbolPriority, nPriority);
     602             :     }
     603             : 
     604           2 :     const char *FontName(GBool &bDefault)
     605             :     {
     606           2 :         return GetParamStr(OGRSTSymbolFontName, bDefault);
     607             :     }
     608             : 
     609             :     void SetFontName(const char *pszFontName)
     610             :     {
     611             :         SetParamStr(OGRSTSymbolFontName, pszFontName);
     612             :     }
     613             : 
     614             :     const char *OColor(GBool &bDefault)
     615             :     {
     616             :         return GetParamStr(OGRSTSymbolOColor, bDefault);
     617             :     }
     618             : 
     619             :     void SetOColor(const char *pszColor)
     620             :     {
     621             :         SetParamStr(OGRSTSymbolOColor, pszColor);
     622             :     }
     623             : 
     624             :     /*****************************************************************/
     625             : 
     626             :     const char *GetParamStr(OGRSTSymbolParam eParam, GBool &bValueIsNull);
     627             :     int GetParamNum(OGRSTSymbolParam eParam, GBool &bValueIsNull);
     628             :     double GetParamDbl(OGRSTSymbolParam eParam, GBool &bValueIsNull);
     629             :     void SetParamStr(OGRSTSymbolParam eParam, const char *pszParamString);
     630             :     void SetParamNum(OGRSTSymbolParam eParam, int nParam);
     631             :     void SetParamDbl(OGRSTSymbolParam eParam, double dfParam);
     632             :     const char *GetStyleString() override;
     633             : };
     634             : 
     635             : /**
     636             :  * This class represents a style label
     637             :  */
     638             : class CPL_DLL OGRStyleLabel : public OGRStyleTool
     639             : {
     640             :   private:
     641             :     OGRStyleValue *m_pasStyleValue;
     642             : 
     643             :     GBool Parse() override;
     644             : 
     645             :     CPL_DISALLOW_COPY_ASSIGN(OGRStyleLabel)
     646             : 
     647             :   public:
     648             :     OGRStyleLabel();
     649             :     ~OGRStyleLabel() override;
     650             : 
     651             :     /*****************************************************************/
     652             :     /* Explicit fct for all parameters defined in the Drawing tools  */
     653             :     /*****************************************************************/
     654             : 
     655           6 :     const char *FontName(GBool &bDefault)
     656             :     {
     657           6 :         return GetParamStr(OGRSTLabelFontName, bDefault);
     658             :     }
     659             : 
     660             :     void SetFontName(const char *pszFontName)
     661             :     {
     662             :         SetParamStr(OGRSTLabelFontName, pszFontName);
     663             :     }
     664             : 
     665           6 :     double Size(GBool &bDefault)
     666             :     {
     667           6 :         return GetParamDbl(OGRSTLabelSize, bDefault);
     668             :     }
     669             : 
     670             :     void SetSize(double dfSize)
     671             :     {
     672             :         SetParamDbl(OGRSTLabelSize, dfSize);
     673             :     }
     674             : 
     675          10 :     const char *TextString(GBool &bDefault)
     676             :     {
     677          10 :         return GetParamStr(OGRSTLabelTextString, bDefault);
     678             :     }
     679             : 
     680             :     void SetTextString(const char *pszTextString)
     681             :     {
     682             :         SetParamStr(OGRSTLabelTextString, pszTextString);
     683             :     }
     684             : 
     685           9 :     double Angle(GBool &bDefault)
     686             :     {
     687           9 :         return GetParamDbl(OGRSTLabelAngle, bDefault);
     688             :     }
     689             : 
     690             :     void SetAngle(double dfAngle)
     691             :     {
     692             :         SetParamDbl(OGRSTLabelAngle, dfAngle);
     693             :     }
     694             : 
     695           9 :     const char *ForeColor(GBool &bDefault)
     696             :     {
     697           9 :         return GetParamStr(OGRSTLabelFColor, bDefault);
     698             :     }
     699             : 
     700           5 :     void SetForColor(const char *pszForColor)
     701             :     {
     702           5 :         SetParamStr(OGRSTLabelFColor, pszForColor);
     703           5 :     }
     704             : 
     705           4 :     const char *BackColor(GBool &bDefault)
     706             :     {
     707           4 :         return GetParamStr(OGRSTLabelBColor, bDefault);
     708             :     }
     709             : 
     710             :     void SetBackColor(const char *pszBackColor)
     711             :     {
     712             :         SetParamStr(OGRSTLabelBColor, pszBackColor);
     713             :     }
     714             : 
     715             :     const char *Placement(GBool &bDefault)
     716             :     {
     717             :         return GetParamStr(OGRSTLabelPlacement, bDefault);
     718             :     }
     719             : 
     720             :     void SetPlacement(const char *pszPlacement)
     721             :     {
     722             :         SetParamStr(OGRSTLabelPlacement, pszPlacement);
     723             :     }
     724             : 
     725           5 :     int Anchor(GBool &bDefault)
     726             :     {
     727           5 :         return GetParamNum(OGRSTLabelAnchor, bDefault);
     728             :     }
     729             : 
     730             :     void SetAnchor(int nAnchor)
     731             :     {
     732             :         SetParamNum(OGRSTLabelAnchor, nAnchor);
     733             :     }
     734             : 
     735           4 :     double SpacingX(GBool &bDefault)
     736             :     {
     737           4 :         return GetParamDbl(OGRSTLabelDx, bDefault);
     738             :     }
     739             : 
     740             :     void SetSpacingX(double dfX)
     741             :     {
     742             :         SetParamDbl(OGRSTLabelDx, dfX);
     743             :     }
     744             : 
     745           4 :     double SpacingY(GBool &bDefault)
     746             :     {
     747           4 :         return GetParamDbl(OGRSTLabelDy, bDefault);
     748             :     }
     749             : 
     750             :     void SetSpacingY(double dfY)
     751             :     {
     752             :         SetParamDbl(OGRSTLabelDy, dfY);
     753             :     }
     754             : 
     755             :     double Perp(GBool &bDefault)
     756             :     {
     757             :         return GetParamDbl(OGRSTLabelPerp, bDefault);
     758             :     }
     759             : 
     760             :     void SetPerp(double dfPerp)
     761             :     {
     762             :         SetParamDbl(OGRSTLabelPerp, dfPerp);
     763             :     }
     764             : 
     765           5 :     GBool Bold(GBool &bDefault)
     766             :     {
     767           5 :         return GetParamNum(OGRSTLabelBold, bDefault);
     768             :     }
     769             : 
     770             :     void SetBold(GBool bBold)
     771             :     {
     772             :         SetParamNum(OGRSTLabelBold, bBold);
     773             :     }
     774             : 
     775           5 :     GBool Italic(GBool &bDefault)
     776             :     {
     777           5 :         return GetParamNum(OGRSTLabelItalic, bDefault);
     778             :     }
     779             : 
     780             :     void SetItalic(GBool bItalic)
     781             :     {
     782             :         SetParamNum(OGRSTLabelItalic, bItalic);
     783             :     }
     784             : 
     785           4 :     GBool Underline(GBool &bDefault)
     786             :     {
     787           4 :         return GetParamNum(OGRSTLabelUnderline, bDefault);
     788             :     }
     789             : 
     790             :     void SetUnderline(GBool bUnderline)
     791             :     {
     792             :         SetParamNum(OGRSTLabelUnderline, bUnderline);
     793             :     }
     794             : 
     795             :     int Priority(GBool &bDefault)
     796             :     {
     797             :         return GetParamNum(OGRSTLabelPriority, bDefault);
     798             :     }
     799             : 
     800             :     void SetPriority(int nPriority)
     801             :     {
     802             :         SetParamNum(OGRSTLabelPriority, nPriority);
     803             :     }
     804             : 
     805             :     GBool Strikeout(GBool &bDefault)
     806             :     {
     807             :         return GetParamNum(OGRSTLabelStrikeout, bDefault);
     808             :     }
     809             : 
     810             :     void SetStrikeout(GBool bStrikeout)
     811             :     {
     812             :         SetParamNum(OGRSTLabelStrikeout, bStrikeout);
     813             :     }
     814             : 
     815           4 :     double Stretch(GBool &bDefault)
     816             :     {
     817           4 :         return GetParamDbl(OGRSTLabelStretch, bDefault);
     818             :     }
     819             : 
     820           5 :     void SetStretch(double dfStretch)
     821             :     {
     822           5 :         SetParamDbl(OGRSTLabelStretch, dfStretch);
     823           5 :     }
     824             : 
     825             :     const char *ShadowColor(GBool &bDefault)
     826             :     {
     827             :         return GetParamStr(OGRSTLabelHColor, bDefault);
     828             :     }
     829             : 
     830             :     void SetShadowColor(const char *pszShadowColor)
     831             :     {
     832             :         SetParamStr(OGRSTLabelHColor, pszShadowColor);
     833             :     }
     834             : 
     835           4 :     const char *OutlineColor(GBool &bDefault)
     836             :     {
     837           4 :         return GetParamStr(OGRSTLabelOColor, bDefault);
     838             :     }
     839             : 
     840             :     void SetOutlineColor(const char *pszOutlineColor)
     841             :     {
     842             :         SetParamStr(OGRSTLabelOColor, pszOutlineColor);
     843             :     }
     844             : 
     845             :     /*****************************************************************/
     846             : 
     847             :     const char *GetParamStr(OGRSTLabelParam eParam, GBool &bValueIsNull);
     848             :     int GetParamNum(OGRSTLabelParam eParam, GBool &bValueIsNull);
     849             :     double GetParamDbl(OGRSTLabelParam eParam, GBool &bValueIsNull);
     850             :     void SetParamStr(OGRSTLabelParam eParam, const char *pszParamString);
     851             :     void SetParamNum(OGRSTLabelParam eParam, int nParam);
     852             :     void SetParamDbl(OGRSTLabelParam eParam, double dfParam);
     853             :     const char *GetStyleString() override;
     854             : };
     855             : 
     856             : //! @endcond
     857             : 
     858             : #endif /* OGR_FEATURESTYLE_INCLUDE */

Generated by: LCOV version 1.14