LCOV - code coverage report
Current view: top level - core/symbology - qgsstyle.h (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 1 31 3.2 %
Date: 2021-03-26 12:19:53 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /***************************************************************************
       2                 :            :     qgsstyle.h
       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                 :            : 
      16                 :            : #ifndef QGSSTYLE_H
      17                 :            : #define QGSSTYLE_H
      18                 :            : 
      19                 :            : #include "qgis_core.h"
      20                 :            : #include "qgis.h"
      21                 :            : #include <QMap>
      22                 :            : #include <QMultiMap>
      23                 :            : #include <QString>
      24                 :            : 
      25                 :            : #include <sqlite3.h>
      26                 :            : 
      27                 :            : #include "qgssqliteutils.h"
      28                 :            : #include "qgssymbollayerutils.h" // QgsStringMap
      29                 :            : #include "qgstextformat.h"
      30                 :            : #include "qgspallabeling.h"
      31                 :            : #include "layertree/qgslegendpatchshape.h"
      32                 :            : 
      33                 :            : class QgsSymbol;
      34                 :            : class QgsSymbolLayer;
      35                 :            : class QgsColorRamp;
      36                 :            : class QgsStyleEntityInterface;
      37                 :            : class QgsAbstract3DSymbol;
      38                 :            : class QDomDocument;
      39                 :            : class QDomElement;
      40                 :            : 
      41                 :            : typedef QMap<QString, QgsColorRamp * > QgsVectorColorRampMap;
      42                 :            : typedef QMap<int, QString> QgsSymbolGroupMap;
      43                 :            : 
      44                 :            : /**
      45                 :            :  * Map of name to text format.
      46                 :            :  * \since QGIS 3.10
      47                 :            :  */
      48                 :            : typedef QMap<QString, QgsTextFormat > QgsTextFormatMap;
      49                 :            : 
      50                 :            : /**
      51                 :            :  * Map of name to label settings.
      52                 :            :  * \since QGIS 3.10
      53                 :            :  */
      54                 :            : typedef QMap<QString, QgsPalLayerSettings > QgsLabelSettingsMap;
      55                 :            : 
      56                 :            : /*
      57                 :            :  * Constants used to describe copy-paste MIME types
      58                 :            :  */
      59                 :            : #define QGSCLIPBOARD_STYLE_MIME "application/qgis.style"
      60                 :            : 
      61                 :            : /**
      62                 :            :  * \ingroup core
      63                 :            :  *  A multimap to hold the smart group conditions as constraint and parameter pairs.
      64                 :            :  *  Both the key and the value of the map are QString. The key is the constraint of the condition and the value is the parameter which is applied for the constraint.
      65                 :            :  *
      66                 :            :  *  The supported constraints are:
      67                 :            :  *  tag -> symbol has the tag matching the parameter
      68                 :            :  *  !tag -> symbol doesn't have the tag matching the parameter
      69                 :            :  *  name -> symbol has a part of its name matching the parameter
      70                 :            :  *  !name -> symbol doesn't have any part of the name matching the parameter
      71                 :            :  *
      72                 :            :  *  Example Usage:
      73                 :            :  *  QgsSmartConditionMap conditions;
      74                 :            :  *  conditions.insert( "tag", "red" ); // adds the condition: Symbol has the tag red
      75                 :            :  *  conditions.insert( "!name", "way" ); // add the condition: Symbol doesn't have any part of its name matching `way`
      76                 :            :  *
      77                 :            :  *  \note This is a Multimap, which means it will contain multiple values for the same key.
      78                 :            :  */
      79                 :            : typedef QMultiMap<QString, QString> QgsSmartConditionMap;
      80                 :            : 
      81                 :            : // enumerators representing sqlite DB columns
      82                 :            : 
      83                 :            : /**
      84                 :            :  * Columns available in the Symbols table.
      85                 :            :  */
      86                 :            : enum SymbolTable
      87                 :            : {
      88                 :            :   SymbolId, //!< Symbol ID
      89                 :            :   SymbolName, //!< Symbol Name
      90                 :            :   SymbolXML, //!< Symbol definition (as XML)
      91                 :            :   SymbolFavoriteId, //!< Symbol is favorite flag
      92                 :            : };
      93                 :            : 
      94                 :            : /**
      95                 :            :  * Columns available in the Tags table.
      96                 :            :  */
      97                 :            : enum TagTable
      98                 :            : {
      99                 :            :   TagId, //!< Tag ID
     100                 :            :   TagName, //!< Tag name
     101                 :            : };
     102                 :            : 
     103                 :            : /**
     104                 :            :  * Columns available in the tag to symbol table.
     105                 :            :  */
     106                 :            : enum TagmapTable
     107                 :            : {
     108                 :            :   TagmapTagId, //!< Tag ID
     109                 :            :   TagmapSymbolId, //!< Symbol ID
     110                 :            : };
     111                 :            : 
     112                 :            : /**
     113                 :            :  * Columns available in the color ramp table.
     114                 :            :  */
     115                 :            : enum ColorrampTable
     116                 :            : {
     117                 :            :   ColorrampId, //!< Color ramp ID
     118                 :            :   ColorrampName, //!< Color ramp name
     119                 :            :   ColorrampXML, //!< Color ramp definition (as XML)
     120                 :            :   ColorrampFavoriteId, //!< Color ramp is favorite flag
     121                 :            : };
     122                 :            : 
     123                 :            : /**
     124                 :            :  * Columns available in the text format table.
     125                 :            :  */
     126                 :            : enum TextFormatTable
     127                 :            : {
     128                 :            :   TextFormatId, //!< Text format ID
     129                 :            :   TextFormatName, //!< Text format name
     130                 :            :   TextFormatXML, //!< Text format definition (as XML)
     131                 :            :   TextFormatFavoriteId, //!< Text format is favorite flag
     132                 :            : };
     133                 :            : 
     134                 :            : /**
     135                 :            :  * Columns available in the label settings table.
     136                 :            :  */
     137                 :            : enum LabelSettingsTable
     138                 :            : {
     139                 :            :   LabelSettingsId, //!< Label settings ID
     140                 :            :   LabelSettingsName, //!< Label settings name
     141                 :            :   LabelSettingsXML, //!< Label settings definition (as XML)
     142                 :            :   LabelSettingsFavoriteId, //!< Label settings is favorite flag
     143                 :            : };
     144                 :            : 
     145                 :            : /**
     146                 :            :  * Columns available in the smart group table.
     147                 :            :  */
     148                 :            : enum SmartgroupTable
     149                 :            : {
     150                 :            :   SmartgroupId, //!< Smart group ID
     151                 :            :   SmartgroupName, //!< Smart group name
     152                 :            :   SmartgroupXML, //!< Smart group definition (as XML)
     153                 :            : };
     154                 :            : 
     155                 :            : /**
     156                 :            :  * \ingroup core
     157                 :            :  * \class QgsStyle
     158                 :            :  */
     159                 :            : class CORE_EXPORT QgsStyle : public QObject
     160                 :            : {
     161                 :         35 :     Q_OBJECT
     162                 :            : 
     163                 :            :   public:
     164                 :            : 
     165                 :            :     /**
     166                 :            :      * Constructor for QgsStyle.
     167                 :            :      */
     168                 :            :     QgsStyle();
     169                 :            :     ~QgsStyle() override;
     170                 :            : 
     171                 :            :     /**
     172                 :            :      * Enum for Entities involved in a style
     173                 :            :      *
     174                 :            :      *  The enumerator is used for identifying the entity being operated on when generic
     175                 :            :      *  database functions are being run.
     176                 :            :      *  \sa rename(), remove(), symbolsOfFavorite(), symbolsWithTag(), symbolsOfSmartgroup()
     177                 :            :      */
     178                 :            :     enum StyleEntity
     179                 :            :     {
     180                 :            :       SymbolEntity, //!< Symbols
     181                 :            :       TagEntity, //!< Tags
     182                 :            :       ColorrampEntity, //!< Color ramps
     183                 :            :       SmartgroupEntity, //!< Smart groups
     184                 :            :       TextFormatEntity, //!< Text formats
     185                 :            :       LabelSettingsEntity, //!< Label settings
     186                 :            :       LegendPatchShapeEntity, //!< Legend patch shape (since QGIS 3.14)
     187                 :            :       Symbol3DEntity, //!< 3D symbol entity (since QGIS 3.14)
     188                 :            :     };
     189                 :            : 
     190                 :            :     /**
     191                 :            :      * Adds an \a entity to the style, with the specified \a name. Ownership is not transferred.
     192                 :            :      *
     193                 :            :      * If \a update is TRUE then the style database is updated automatically as a result.
     194                 :            :      *
     195                 :            :      * Returns TRUE if the add operation was successful.
     196                 :            :      *
     197                 :            :      * \note Adding an entity with the name of existing one replaces the existing one automatically.
     198                 :            :      *
     199                 :            :      * \since QGIS 3.10
     200                 :            :      */
     201                 :            :     bool addEntity( const QString &name, const QgsStyleEntityInterface *entity, bool update = false );
     202                 :            : 
     203                 :            :     /**
     204                 :            :      * Adds a symbol to style and takes symbol's ownership
     205                 :            :      *
     206                 :            :      *  \note Adding a symbol with the name of existing one replaces it.
     207                 :            :      *  \param name is the name of the symbol being added or updated
     208                 :            :      *  \param symbol is the Vector symbol
     209                 :            :      *  \param update set to TRUE when the style database has to be updated, by default it is FALSE
     210                 :            :      *  \returns success status of the operation
     211                 :            :      */
     212                 :            :     bool addSymbol( const QString &name, QgsSymbol *symbol SIP_TRANSFER, bool update = false );
     213                 :            : 
     214                 :            :     /**
     215                 :            :      * Adds a color ramp to the style. Calling this method takes the ramp's ownership.
     216                 :            :      *  \note Adding a color ramp with the name of existing one replaces it.
     217                 :            :      *  \param name is the name of the color ramp being added or updated
     218                 :            :      *  \param colorRamp is the color ramp. Ownership is transferred.
     219                 :            :      *  \param update set to TRUE when the style database has to be updated, by default it is FALSE
     220                 :            :      *  \returns success status of the operation
     221                 :            :      */
     222                 :            :     bool addColorRamp( const QString &name, QgsColorRamp *colorRamp SIP_TRANSFER, bool update = false );
     223                 :            : 
     224                 :            :     /**
     225                 :            :      * Adds a text \a format with the specified \a name to the style.
     226                 :            :      *
     227                 :            :      * If \a update is set to TRUE, the style database will be automatically updated with the new text format.
     228                 :            :      *
     229                 :            :      * Returns TRUE if the operation was successful.
     230                 :            :      *
     231                 :            :      * \note Adding a text format with the name of existing one replaces it.
     232                 :            :      * \since QGIS 3.10
     233                 :            :      */
     234                 :            :     bool addTextFormat( const QString &name, const QgsTextFormat &format, bool update = false );
     235                 :            : 
     236                 :            :     /**
     237                 :            :      * Adds label \a settings with the specified \a name to the style.
     238                 :            :      *
     239                 :            :      * If \a update is set to TRUE, the style database will be automatically updated with the new text format.
     240                 :            :      *
     241                 :            :      * Returns TRUE if the operation was successful.
     242                 :            :      *
     243                 :            :      * \note Adding label settings with the name of existing ones replaces them.
     244                 :            :      * \since QGIS 3.10
     245                 :            :      */
     246                 :            :     bool addLabelSettings( const QString &name, const QgsPalLayerSettings &settings, bool update = false );
     247                 :            : 
     248                 :            :     /**
     249                 :            :      * Adds a legend patch \a shape with the specified \a name to the style.
     250                 :            :      *
     251                 :            :      * If \a update is set to TRUE, the style database will be automatically updated with the new legend patch shape.
     252                 :            :      *
     253                 :            :      * Returns TRUE if the operation was successful.
     254                 :            :      *
     255                 :            :      * \note Adding legend patch shapes with the name of existing ones replaces them.
     256                 :            :      * \since QGIS 3.14
     257                 :            :      */
     258                 :            :     bool addLegendPatchShape( const QString &name, const QgsLegendPatchShape &shape, bool update = false );
     259                 :            : 
     260                 :            :     /**
     261                 :            :      * Adds a 3d \a symbol with the specified \a name to the style. Ownership of \a symbol is transferred.
     262                 :            :      *
     263                 :            :      * If \a update is set to TRUE, the style database will be automatically updated with the new legend patch shape.
     264                 :            :      *
     265                 :            :      * Returns TRUE if the operation was successful.
     266                 :            :      *
     267                 :            :      * \note Adding 3d symbols with the name of existing ones replaces them.
     268                 :            :      * \since QGIS 3.16
     269                 :            :      */
     270                 :            :     bool addSymbol3D( const QString &name, QgsAbstract3DSymbol *symbol SIP_TRANSFER, bool update = false );
     271                 :            : 
     272                 :            :     /**
     273                 :            :      * Adds a new tag and returns the tag's id
     274                 :            :      *
     275                 :            :      *  \param tagName the name of the new tag to be created
     276                 :            :      *  \returns returns an int, which is the database id of the new tag created, 0 if the tag couldn't be created
     277                 :            :      */
     278                 :            :     int addTag( const QString &tagName );
     279                 :            : 
     280                 :            :     /**
     281                 :            :      * Adds a new smartgroup to the database and returns the id
     282                 :            :      *
     283                 :            :      *  \param name is the name of the new Smart Group to be added
     284                 :            :      *  \param op is the operator between the conditions; AND/OR as QString
     285                 :            :      *  \param conditions are the smart group conditions
     286                 :            :      *
     287                 :            :      * \note Not available from Python bindings
     288                 :            :      */
     289                 :            :     int addSmartgroup( const QString &name, const QString &op, const QgsSmartConditionMap &conditions ) SIP_SKIP;
     290                 :            : 
     291                 :            :     /**
     292                 :            :      * Adds a new smartgroup to the database and returns the id.
     293                 :            :      *
     294                 :            :      * \param name is the name of the new Smart Group to be added
     295                 :            :      * \param op is the operator between the conditions; AND/OR as QString
     296                 :            :      * \param matchTag list of strings to match within tags
     297                 :            :      * \param noMatchTag list of strings to exclude matches from tags
     298                 :            :      * \param matchName list of string to match within names
     299                 :            :      * \param noMatchName list of strings to exclude matches from names
     300                 :            :      *
     301                 :            :      * \since QGIS 3.4
     302                 :            :      */
     303                 :            :     int addSmartgroup( const QString &name, const QString &op, const QStringList &matchTag, const QStringList &noMatchTag,
     304                 :            :                        const QStringList &matchName, const QStringList &noMatchName );
     305                 :            : 
     306                 :            :     /**
     307                 :            :      * Returns a list of all tags in the style database
     308                 :            :      *
     309                 :            :      * \see addTag()
     310                 :            :      * \since QGIS 2.16
     311                 :            :      */
     312                 :            :     QStringList tags() const;
     313                 :            : 
     314                 :            :     //! Removes all contents of the style
     315                 :            :     void clear();
     316                 :            : 
     317                 :            :     /**
     318                 :            :      * Returns a new copy of the specified color ramp. The caller
     319                 :            :      * takes responsibility for deleting the returned object.
     320                 :            :      */
     321                 :            :     QgsColorRamp *colorRamp( const QString &name ) const SIP_FACTORY;
     322                 :            : 
     323                 :            :     //! Returns count of color ramps
     324                 :            :     int colorRampCount();
     325                 :            : 
     326                 :            :     //! Returns a list of names of color ramps
     327                 :            :     QStringList colorRampNames() const;
     328                 :            : 
     329                 :            :     //! Returns a const pointer to a symbol (doesn't create new instance)
     330                 :            :     const QgsColorRamp *colorRampRef( const QString &name ) const;
     331                 :            : 
     332                 :            :     /**
     333                 :            :      * Returns the id in the style database for the given colorramp name
     334                 :            :      * returns 0 if not found
     335                 :            :      */
     336                 :            :     int colorrampId( const QString &name );
     337                 :            : 
     338                 :            :     /**
     339                 :            :      * Returns the text format with the specified \a name.
     340                 :            :      *
     341                 :            :      * \since QGIS 3.10
     342                 :            :      */
     343                 :            :     QgsTextFormat textFormat( const QString &name ) const;
     344                 :            : 
     345                 :            :     /**
     346                 :            :      * Returns count of text formats in the style.
     347                 :            :      * \since QGIS 3.10
     348                 :            :      */
     349                 :            :     int textFormatCount() const;
     350                 :            : 
     351                 :            :     /**
     352                 :            :      * Returns a list of names of text formats in the style.
     353                 :            :      * \since QGIS 3.10
     354                 :            :      */
     355                 :            :     QStringList textFormatNames() const;
     356                 :            : 
     357                 :            :     /**
     358                 :            :      * Returns the ID in the style database for the given text format by \a name.
     359                 :            :      * Returns 0 if the text format was not found.
     360                 :            :      *
     361                 :            :      * \since QGIS 3.10
     362                 :            :      */
     363                 :            :     int textFormatId( const QString &name );
     364                 :            : 
     365                 :            :     /**
     366                 :            :      * Returns the label settings with the specified \a name.
     367                 :            :      *
     368                 :            :      * \since QGIS 3.10
     369                 :            :      */
     370                 :            :     QgsPalLayerSettings labelSettings( const QString &name ) const;
     371                 :            : 
     372                 :            :     /**
     373                 :            :      * Returns the legend patch shape with the specified \a name.
     374                 :            :      *
     375                 :            :      * \since QGIS 3.14
     376                 :            :      */
     377                 :            :     QgsLegendPatchShape legendPatchShape( const QString &name ) const;
     378                 :            : 
     379                 :            :     /**
     380                 :            :      * Returns count of legend patch shapes in the style.
     381                 :            :      * \since QGIS 3.14
     382                 :            :      */
     383                 :            :     int legendPatchShapesCount() const;
     384                 :            : 
     385                 :            :     /**
     386                 :            :      * Returns the symbol type corresponding to the legend patch shape
     387                 :            :      * with the specified \a name, or QgsSymbol::Hybrid
     388                 :            :      * if a matching legend patch shape is not present.
     389                 :            :      *
     390                 :            :      * \since QGIS 3.14
     391                 :            :      */
     392                 :            :     QgsSymbol::SymbolType legendPatchShapeSymbolType( const QString &name ) const;
     393                 :            : 
     394                 :            :     /**
     395                 :            :      * Returns a new copy of the 3D symbol with the specified \a name.
     396                 :            :      *
     397                 :            :      * \since QGIS 3.16
     398                 :            :      */
     399                 :            :     QgsAbstract3DSymbol *symbol3D( const QString &name ) const SIP_FACTORY;
     400                 :            : 
     401                 :            :     /**
     402                 :            :      * Returns count of 3D symbols in the style.
     403                 :            :      * \since QGIS 3.16
     404                 :            :      */
     405                 :            :     int symbol3DCount() const;
     406                 :            : 
     407                 :            :     /**
     408                 :            :      * Returns the list of the vector layer geometry types which are compatible with the 3D symbol
     409                 :            :      * with the specified \a name, or an empty list if a matching 3d symbol is not present.
     410                 :            :      *
     411                 :            :      * \since QGIS 3.16
     412                 :            :      */
     413                 :            :     QList< QgsWkbTypes::GeometryType > symbol3DCompatibleGeometryTypes( const QString &name ) const;
     414                 :            : 
     415                 :            :     /**
     416                 :            :      * Returns the layer geometry type corresponding to the label settings
     417                 :            :      * with the specified \a name, or QgsWkbTypes::UnknownGeometry
     418                 :            :      * if matching label settings are not present.
     419                 :            :      *
     420                 :            :      * \since QGIS 3.10
     421                 :            :      */
     422                 :            :     QgsWkbTypes::GeometryType labelSettingsLayerType( const QString &name ) const;
     423                 :            : 
     424                 :            :     /**
     425                 :            :      * Returns count of label settings in the style.
     426                 :            :      * \since QGIS 3.10
     427                 :            :      */
     428                 :            :     int labelSettingsCount() const;
     429                 :            : 
     430                 :            :     /**
     431                 :            :      * Returns a list of names of label settings in the style.
     432                 :            :      * \since QGIS 3.10
     433                 :            :      */
     434                 :            :     QStringList labelSettingsNames() const;
     435                 :            : 
     436                 :            :     /**
     437                 :            :      * Returns the ID in the style database for the given label settings by \a name.
     438                 :            :      * Returns 0 if the label settings were not found.
     439                 :            :      *
     440                 :            :      * \since QGIS 3.10
     441                 :            :      */
     442                 :            :     int labelSettingsId( const QString &name );
     443                 :            : 
     444                 :            :     //! Returns default application-wide style
     445                 :            :     static QgsStyle *defaultStyle();
     446                 :            : 
     447                 :            :     //! Deletes the default style. Only to be used by QgsApplication::exitQgis()
     448                 :            :     static void cleanDefaultStyle() SIP_SKIP;
     449                 :            : 
     450                 :            :     /**
     451                 :            :      * Tags the symbol with the tags in the list
     452                 :            :      *
     453                 :            :      *  Applies the given tags to the given symbol or colorramp
     454                 :            :      *  \param type is either SymbolEntity or ColorrampEntity
     455                 :            :      *  \param symbol is the name of the symbol or colorramp as QString
     456                 :            :      *  \param tags is the list of the tags that are to be applied as QStringList
     457                 :            :      *  \returns returns the success state of the operation
     458                 :            :      */
     459                 :            :     bool tagSymbol( StyleEntity type, const QString &symbol, const QStringList &tags );
     460                 :            : 
     461                 :            :     /**
     462                 :            :      * Detags the symbol with the given list
     463                 :            :      *
     464                 :            :      *  Removes the given tags for the specified symbol or colorramp
     465                 :            :      *  \param type is either SymbolEntity or ColorrampEntity
     466                 :            :      *  \param symbol is the name of the symbol or colorramp
     467                 :            :      *  \param tags is the list of tags that are to be removed as QStringList
     468                 :            :      *  \returns returns the success state of the operation
     469                 :            :      */
     470                 :            :     bool detagSymbol( StyleEntity type, const QString &symbol, const QStringList &tags );
     471                 :            : 
     472                 :            :     /**
     473                 :            :      * Clears the symbol from all attached tags
     474                 :            :      *
     475                 :            :      *  Removes all tags for the specified symbol or colorramp
     476                 :            :      *  \param type is either SymbolEntity or ColorrampEntity
     477                 :            :      *  \param symbol is the name of the symbol or colorramp
     478                 :            :      *  \returns returns the success state of the operation
     479                 :            :      */
     480                 :            :     bool detagSymbol( StyleEntity type, const QString &symbol );
     481                 :            : 
     482                 :            :     //! Removes symbol from style (and delete it)
     483                 :            :     bool removeSymbol( const QString &name );
     484                 :            : 
     485                 :            :     /**
     486                 :            :      * Renames an entity of the specified \a type from \a oldName to \a newName.
     487                 :            :      *
     488                 :            :      * Returns TRUE if the entity was successfully renamed.
     489                 :            :      *
     490                 :            :      * \since QGIS 3.14
     491                 :            :      */
     492                 :            :     bool renameEntity( StyleEntity type, const QString &oldName, const QString &newName );
     493                 :            : 
     494                 :            :     /**
     495                 :            :      * Renames a symbol from \a oldName to \a newName.
     496                 :            :      *
     497                 :            :      * Returns TRUE if symbol was successfully renamed.
     498                 :            :      */
     499                 :            :     bool renameSymbol( const QString &oldName, const QString &newName );
     500                 :            : 
     501                 :            :     //! Returns a NEW copy of symbol
     502                 :            :     QgsSymbol *symbol( const QString &name ) SIP_FACTORY;
     503                 :            : 
     504                 :            :     //! Returns a const pointer to a symbol (doesn't create new instance)
     505                 :            :     const QgsSymbol *symbolRef( const QString &name ) const;
     506                 :            : 
     507                 :            :     //! Returns count of symbols in style
     508                 :            :     int symbolCount();
     509                 :            : 
     510                 :            :     //! Returns a list of names of symbols
     511                 :            :     QStringList symbolNames() const;
     512                 :            : 
     513                 :            :     /**
     514                 :            :      * Returns the id in the style database for the given symbol name
     515                 :            :      * returns 0 if not found
     516                 :            :      */
     517                 :            :     int symbolId( const QString &name );
     518                 :            : 
     519                 :            :     /**
     520                 :            :      * Returns the id in the style database for the given \a name of the specified entity \a type.
     521                 :            :      * Returns 0 if not found.
     522                 :            :      */
     523                 :            :     int entityId( StyleEntity type, const QString &name );
     524                 :            : 
     525                 :            :     //! Returns the database id for the given tag name
     526                 :            :     int tagId( const QString &tag );
     527                 :            :     //! Returns the database id for the given smartgroup name
     528                 :            :     int smartgroupId( const QString &smartgroup );
     529                 :            : 
     530                 :            :     /**
     531                 :            :      * Returns a list of the names of all existing entities of the specified \a type.
     532                 :            :      * \since QGIS 3.10
     533                 :            :      */
     534                 :            :     QStringList allNames( StyleEntity type ) const;
     535                 :            : 
     536                 :            :     /**
     537                 :            :      * Returns the symbol names which are flagged as favorite
     538                 :            :      *
     539                 :            :      *  \param type is either SymbolEntity or ColorampEntity
     540                 :            :      *  \returns A QStringList of the symbol or colorramp names flagged as favorite
     541                 :            :      */
     542                 :            :     QStringList symbolsOfFavorite( StyleEntity type ) const;
     543                 :            : 
     544                 :            :     /**
     545                 :            :      * Returns the symbol names with which have the given tag
     546                 :            :      *
     547                 :            :      *  \param type is either SymbolEntity or ColorampEntity
     548                 :            :      *  \param tagid is id of the tag which has been applied over the symbol as int
     549                 :            :      *  \returns A QStringList of the symbol or colorramp names for the given tag id
     550                 :            :      */
     551                 :            :     QStringList symbolsWithTag( StyleEntity type, int tagid ) const;
     552                 :            : 
     553                 :            :     /**
     554                 :            :      * Adds the specified symbol to favorites
     555                 :            :      *
     556                 :            :      *  \param type is either SymbolEntity of ColorrampEntity
     557                 :            :      *  \param name is the name of the symbol or coloramp whose is to be added to favorites
     558                 :            :      *  \returns returns the success state as bool
     559                 :            :      */
     560                 :            :     bool addFavorite( StyleEntity type, const QString &name );
     561                 :            : 
     562                 :            :     /**
     563                 :            :      * Removes the specified symbol from favorites
     564                 :            :      *
     565                 :            :      *  \param type is either SymbolEntity of ColorrampEntity
     566                 :            :      *  \param name is the name of the symbol or coloramp whose is to be removed from favorites
     567                 :            :      *  \returns returns the success state as bool
     568                 :            :      */
     569                 :            :     bool removeFavorite( StyleEntity type, const QString &name );
     570                 :            : 
     571                 :            :     /**
     572                 :            :      * Renames the given entity with the specified id
     573                 :            :      *
     574                 :            :      *  \param type is any of the style entities. Refer enum StyleEntity.
     575                 :            :      *  \param id is the database id of the entity which is to be renamed
     576                 :            :      *  \param newName is the new name of the entity
     577                 :            :      */
     578                 :            :     bool rename( StyleEntity type, int id, const QString &newName );
     579                 :            : 
     580                 :            :     /**
     581                 :            :      * Removes the specified entity from the database.
     582                 :            :      *
     583                 :            :      *  \param type is any of the style entities. Refer enum StyleEntity.
     584                 :            :      *  \param id is the database id of the entity to be removed
     585                 :            :      *
     586                 :            :      * \see removeEntityByName()
     587                 :            :      */
     588                 :            :     bool remove( StyleEntity type, int id );
     589                 :            : 
     590                 :            :     /**
     591                 :            :      * Removes the entry of the specified \a type with matching \a name from the database.
     592                 :            :      *
     593                 :            :      * \see remove()
     594                 :            :      * \since QGIS 3.14
     595                 :            :      */
     596                 :            :     bool removeEntityByName( StyleEntity type, const QString &name );
     597                 :            : 
     598                 :            :     /**
     599                 :            :      * Adds the symbol to the database with tags.
     600                 :            :      *
     601                 :            :      *  \param name is the name of the symbol as QString
     602                 :            :      *  \param symbol is the pointer to the new QgsSymbol being saved
     603                 :            :      *  \param favorite is a boolean value to specify whether the symbol should be added to favorites
     604                 :            :      *  \param tags is a list of tags that are associated with the symbol as a QStringList.
     605                 :            :      *  \returns returns the success state of the save operation
     606                 :            :      */
     607                 :            :     bool saveSymbol( const QString &name, QgsSymbol *symbol, bool favorite, const QStringList &tags );
     608                 :            : 
     609                 :            :     /**
     610                 :            :      * Adds the colorramp to the database.
     611                 :            :      *
     612                 :            :      *  \param name is the name of the colorramp as QString
     613                 :            :      *  \param ramp is the pointer to the new QgsColorRamp being saved
     614                 :            :      *  \param favorite is a boolean value to specify whether the colorramp should be added to favorites
     615                 :            :      *  \param tags is a list of tags that are associated with the color ramp as a QStringList.
     616                 :            :      *  \returns returns the success state of the save operation
     617                 :            :      */
     618                 :            :     bool saveColorRamp( const QString &name, QgsColorRamp *ramp, bool favorite, const QStringList &tags );
     619                 :            : 
     620                 :            :     //! Removes color ramp from style (and delete it)
     621                 :            :     bool removeColorRamp( const QString &name );
     622                 :            : 
     623                 :            :     //! Changes ramp's name
     624                 :            :     bool renameColorRamp( const QString &oldName, const QString &newName );
     625                 :            : 
     626                 :            :     /**
     627                 :            :      * Adds a text \a format to the database.
     628                 :            :      *
     629                 :            :      *  \param name is the name of the text format
     630                 :            :      *  \param format text format to save
     631                 :            :      *  \param favorite is a boolean value to specify whether the text format should be added to favorites
     632                 :            :      *  \param tags is a list of tags that are associated with the text format
     633                 :            :      *  \returns returns the success state of the save operation
     634                 :            :      */
     635                 :            :     bool saveTextFormat( const QString &name, const QgsTextFormat &format, bool favorite, const QStringList &tags );
     636                 :            : 
     637                 :            :     /**
     638                 :            :      * Removes a text format from the style.
     639                 :            :      * \since QGIS 3.10
     640                 :            :      */
     641                 :            :     bool removeTextFormat( const QString &name );
     642                 :            : 
     643                 :            :     /**
     644                 :            :      * Changes a text format's name.
     645                 :            :      *
     646                 :            :      * \since QGIS 3.10
     647                 :            :      */
     648                 :            :     bool renameTextFormat( const QString &oldName, const QString &newName );
     649                 :            : 
     650                 :            :     /**
     651                 :            :      * Adds label \a settings to the database.
     652                 :            :      *
     653                 :            :      *  \param name is the name of the label settings
     654                 :            :      *  \param settings label settings to save
     655                 :            :      *  \param favorite is a boolean value to specify whether the label settings should be added to favorites
     656                 :            :      *  \param tags is a list of tags that are associated with the label settings
     657                 :            :      *  \returns returns the success state of the save operation
     658                 :            :      */
     659                 :            :     bool saveLabelSettings( const QString &name, const QgsPalLayerSettings &settings, bool favorite, const QStringList &tags );
     660                 :            : 
     661                 :            :     /**
     662                 :            :      * Removes label settings from the style.
     663                 :            :      * \since QGIS 3.10
     664                 :            :      */
     665                 :            :     bool removeLabelSettings( const QString &name );
     666                 :            : 
     667                 :            :     /**
     668                 :            :      * Changes a label setting's name.
     669                 :            :      *
     670                 :            :      * \since QGIS 3.10
     671                 :            :      */
     672                 :            :     bool renameLabelSettings( const QString &oldName, const QString &newName );
     673                 :            : 
     674                 :            :     /**
     675                 :            :      * Adds a legend patch \a shape to the database.
     676                 :            :      *
     677                 :            :      * \param name is the name of the legend patch shape
     678                 :            :      * \param shape legend patch shape to save
     679                 :            :      * \param favorite is a boolean value to specify whether the legend patch shape should be added to favorites
     680                 :            :      * \param tags is a list of tags that are associated with the legend patch shape
     681                 :            :      * \returns returns the success state of the save operation
     682                 :            :      *
     683                 :            :      * \since QGIS 3.14
     684                 :            :      */
     685                 :            :     bool saveLegendPatchShape( const QString &name, const QgsLegendPatchShape &shape, bool favorite, const QStringList &tags );
     686                 :            : 
     687                 :            :     /**
     688                 :            :      * Changes a legend patch shape's name.
     689                 :            :      *
     690                 :            :      * \since QGIS 3.14
     691                 :            :      */
     692                 :            :     bool renameLegendPatchShape( const QString &oldName, const QString &newName );
     693                 :            : 
     694                 :            :     /**
     695                 :            :      * Returns a list of names of legend patch shapes in the style.
     696                 :            :      * \since QGIS 3.14
     697                 :            :      */
     698                 :            :     QStringList legendPatchShapeNames() const;
     699                 :            : 
     700                 :            :     /**
     701                 :            :      * Returns a symbol to use for rendering preview icons for a patch \a shape.
     702                 :            :      *
     703                 :            :      * Ownership of the symbol is not transferred.
     704                 :            :      *
     705                 :            :      * \since QGIS 3.14
     706                 :            :      */
     707                 :            :     const QgsSymbol *previewSymbolForPatchShape( const QgsLegendPatchShape &shape ) const;
     708                 :            : 
     709                 :            :     /**
     710                 :            :      * Returns the default legend patch shape for the given symbol \a type.
     711                 :            :      *
     712                 :            :      * \see defaultPatchAsQPolygonF()
     713                 :            :      * \since QGIS 3.14
     714                 :            :      */
     715                 :            :     QgsLegendPatchShape defaultPatch( QgsSymbol::SymbolType type, QSizeF size ) const;
     716                 :            : 
     717                 :            :     /**
     718                 :            :      * Returns the default patch geometry for the given symbol \a type and \a size as a set of QPolygonF objects (parts and rings).
     719                 :            :      *
     720                 :            :      * \see defaultPatch()
     721                 :            :      * \since QGIS 3.14
     722                 :            :      */
     723                 :            :     QList< QList< QPolygonF > > defaultPatchAsQPolygonF( QgsSymbol::SymbolType type, QSizeF size ) const;
     724                 :            : 
     725                 :            :     /**
     726                 :            :      * Adds a 3d \a symbol to the database.
     727                 :            :      *
     728                 :            :      * \param name is the name of the 3d symbol
     729                 :            :      * \param symbol 3d symbol to save. Ownership is transferred.
     730                 :            :      * \param favorite is a boolean value to specify whether the 3d symbol should be added to favorites
     731                 :            :      * \param tags is a list of tags that are associated with the 3d symbol
     732                 :            :      * \returns returns the success state of the save operation
     733                 :            :      *
     734                 :            :      * \since QGIS 3.16
     735                 :            :      */
     736                 :            :     bool saveSymbol3D( const QString &name, QgsAbstract3DSymbol *symbol SIP_TRANSFER, bool favorite, const QStringList &tags );
     737                 :            : 
     738                 :            :     /**
     739                 :            :      * Changes a 3d symbol's name.
     740                 :            :      *
     741                 :            :      * \since QGIS 3.16
     742                 :            :      */
     743                 :            :     bool renameSymbol3D( const QString &oldName, const QString &newName );
     744                 :            : 
     745                 :            :     /**
     746                 :            :      * Returns a list of names of 3d symbols in the style.
     747                 :            :      * \since QGIS 3.16
     748                 :            :      */
     749                 :            :     QStringList symbol3DNames() const;
     750                 :            : 
     751                 :            :     /**
     752                 :            :      * Creates an on-disk database
     753                 :            :      *
     754                 :            :      *  This function creates a new on-disk permanent style database.
     755                 :            :      *  \returns returns the success state of the database creation
     756                 :            :      *  \see createMemoryDatabase()
     757                 :            :      *  \since QGIS 3.0
     758                 :            :      */
     759                 :            :     bool createDatabase( const QString &filename );
     760                 :            : 
     761                 :            :     /**
     762                 :            :      * Creates a temporary memory database
     763                 :            :      *
     764                 :            :      *  This function is used to create a temporary style database in case a permanent on-disk database is not needed.
     765                 :            :      *  \returns returns the success state of the temporary memory database creation
     766                 :            :      *  \see createDatabase()
     767                 :            :      *  \since QGIS 3.0
     768                 :            :      */
     769                 :            :     bool createMemoryDatabase();
     770                 :            : 
     771                 :            :     /**
     772                 :            :      * Creates tables structure for new database
     773                 :            :      *
     774                 :            :      *  This function is used to create the tables structure in a newly-created database.
     775                 :            :      *  \returns returns the success state of the temporary memory database creation
     776                 :            :      *  \see createDatabase()
     777                 :            :      *  \see createMemoryDatabase()
     778                 :            :      *  \since QGIS 3.0
     779                 :            :      */
     780                 :            :     void createTables();
     781                 :            : 
     782                 :            :     /**
     783                 :            :      * Loads a file into the style
     784                 :            :      *
     785                 :            :      *  This function will load an on-disk database and populate styles.
     786                 :            :      *  \param filename location of the database to load styles from
     787                 :            :      *  \returns returns the success state of the database being loaded
     788                 :            :      */
     789                 :            :     bool load( const QString &filename );
     790                 :            : 
     791                 :            :     //! Saves style into a file (will use current filename if empty string is passed)
     792                 :            :     bool save( QString filename = QString() );
     793                 :            : 
     794                 :            :     //! Returns last error from load/save operation
     795                 :          0 :     QString errorString() { return mErrorString; }
     796                 :            : 
     797                 :            :     //! Returns current file name of the style
     798                 :            :     QString fileName() { return mFileName; }
     799                 :            : 
     800                 :            :     /**
     801                 :            :      * Returns the names of the symbols which have a matching 'substring' in its definition
     802                 :            :      *
     803                 :            :      *  \param type is either SymbolEntity or ColorrampEntity
     804                 :            :      *  \param qword is the query string to search the symbols or colorramps.
     805                 :            :      *  \returns A QStringList of the matched symbols or colorramps
     806                 :            :      */
     807                 :            :     QStringList findSymbols( StyleEntity type, const QString &qword );
     808                 :            : 
     809                 :            :     /**
     810                 :            :      * Returns the tags associated with the symbol
     811                 :            :      *
     812                 :            :      *  \param type is either SymbolEntity or ColorrampEntity
     813                 :            :      *  \param symbol is the name of the symbol or color ramp
     814                 :            :      *  \returns A QStringList of the tags that have been applied to that symbol/colorramp
     815                 :            :      */
     816                 :            :     QStringList tagsOfSymbol( StyleEntity type, const QString &symbol );
     817                 :            : 
     818                 :            :     /**
     819                 :            :      * Returns TRUE if the symbol with matching \a type and \a name is
     820                 :            :      * marked as a favorite.
     821                 :            :      *
     822                 :            :      * \since QGIS 3.10
     823                 :            :      */
     824                 :            :     bool isFavorite( StyleEntity type, const QString &name );
     825                 :            : 
     826                 :            :     /**
     827                 :            :      * Returns whether a given tag is associated with the symbol
     828                 :            :      *
     829                 :            :      *  \param type is either SymbolEntity or ColorrampEntity
     830                 :            :      *  \param symbol is the name of the symbol or color ramp
     831                 :            :      *  \param tag the name of the tag to look for
     832                 :            :      *  \returns A boolean value identicating whether a tag was found attached to the symbol
     833                 :            :      */
     834                 :            :     bool symbolHasTag( StyleEntity type, const QString &symbol, const QString &tag );
     835                 :            : 
     836                 :            :     //! Returns the tag name for the given id
     837                 :            :     QString tag( int id ) const;
     838                 :            : 
     839                 :            :     //! Returns the smart groups map with id as key and name as value
     840                 :            :     QgsSymbolGroupMap smartgroupsListMap();
     841                 :            : 
     842                 :            :     //! Returns the smart groups list
     843                 :            :     QStringList smartgroupNames() const;
     844                 :            : 
     845                 :            :     //! Returns the QgsSmartConditionMap for the given id
     846                 :            :     QgsSmartConditionMap smartgroup( int id );
     847                 :            : 
     848                 :            :     /**
     849                 :            :      * Returns the operator for the smartgroup.
     850                 :            :      */
     851                 :            :     QString smartgroupOperator( int id );
     852                 :            : 
     853                 :            :     //! Returns the symbols for the smartgroup
     854                 :            :     QStringList symbolsOfSmartgroup( StyleEntity type, int id );
     855                 :            : 
     856                 :            :     //! Exports the style as a XML file
     857                 :            :     bool exportXml( const QString &filename );
     858                 :            : 
     859                 :            :     //! Imports the symbols and colorramps into the default style database from the given XML file
     860                 :            :     bool importXml( const QString &filename );
     861                 :            : 
     862                 :            :     /**
     863                 :            :      * Tests if the file at \a path is a QGIS style XML file.
     864                 :            :      *
     865                 :            :      * This method samples only the first line in the file, so is safe to call on
     866                 :            :      * large xml files.
     867                 :            :      *
     868                 :            :      * \since QGIS 3.6
     869                 :            :      */
     870                 :            :     static bool isXmlStyleFile( const QString &path );
     871                 :            : 
     872                 :            :   signals:
     873                 :            : 
     874                 :            :     /**
     875                 :            :      * Emitted every time a new symbol has been added to the database.
     876                 :            :      * Emitted whenever a symbol has been added to the style and the database
     877                 :            :      * has been updated as a result.
     878                 :            :      * \see symbolRemoved()
     879                 :            :      * \see rampAdded()
     880                 :            :      * \see symbolChanged()
     881                 :            :      */
     882                 :            :     void symbolSaved( const QString &name, QgsSymbol *symbol );
     883                 :            : 
     884                 :            :     /**
     885                 :            :      * Emitted whenever a symbol's definition is changed. This does not include
     886                 :            :      * name or tag changes.
     887                 :            :      *
     888                 :            :      * \see symbolSaved()
     889                 :            :      *
     890                 :            :      * \since QGIS 3.4
     891                 :            :      */
     892                 :            :     void symbolChanged( const QString &name );
     893                 :            : 
     894                 :            :     //! Emitted every time a tag or smartgroup has been added, removed, or renamed
     895                 :            :     void groupsModified();
     896                 :            : 
     897                 :            :     /**
     898                 :            :      * Emitted whenever an \a entity's tags are changed.
     899                 :            :      *
     900                 :            :      * \since QGIS 3.4
     901                 :            :      */
     902                 :            :     void entityTagsChanged( QgsStyle::StyleEntity entity, const QString &name, const QStringList &newTags );
     903                 :            : 
     904                 :            :     /**
     905                 :            :      * Emitted whenever an \a entity is either favorited or un-favorited.
     906                 :            :      *
     907                 :            :      * \since QGIS 3.4
     908                 :            :      */
     909                 :            :     void favoritedChanged( QgsStyle::StyleEntity entity, const QString &name, bool isFavorite );
     910                 :            : 
     911                 :            :     /**
     912                 :            :      * Emitted every time a new entity has been added to the database.
     913                 :            :      *
     914                 :            :      * \since QGIS 3.14
     915                 :            :      */
     916                 :            :     void entityAdded( QgsStyle::StyleEntity entity, const QString &name );
     917                 :            : 
     918                 :            :     /**
     919                 :            :      * Emitted whenever an entity of the specified type is removed from the style and the database
     920                 :            :      * has been updated as a result.
     921                 :            :      *
     922                 :            :      * \since QGIS 3.14
     923                 :            :      */
     924                 :            :     void entityRemoved( QgsStyle::StyleEntity entity, const QString &name );
     925                 :            : 
     926                 :            :     /**
     927                 :            :      * Emitted whenever a entity of the specified type has been renamed from \a oldName to \a newName
     928                 :            :      * \since QGIS 3.14
     929                 :            :      */
     930                 :            :     void entityRenamed( QgsStyle::StyleEntity entity, const QString &oldName, const QString &newName );
     931                 :            : 
     932                 :            :     /**
     933                 :            :      * Emitted whenever an entity's definition is changed. This does not include
     934                 :            :      * name or tag changes.
     935                 :            :      *
     936                 :            :      * \since QGIS 3.14
     937                 :            :      */
     938                 :            :     void entityChanged( QgsStyle::StyleEntity entity, const QString &name );
     939                 :            : 
     940                 :            :     /**
     941                 :            :      * Emitted whenever a symbol has been removed from the style and the database
     942                 :            :      * has been updated as a result.
     943                 :            :      * \see symbolSaved()
     944                 :            :      * \see rampRemoved()
     945                 :            :      * \since QGIS 3.4
     946                 :            :      */
     947                 :            :     void symbolRemoved( const QString &name );
     948                 :            : 
     949                 :            :     /**
     950                 :            :      * Emitted whenever a symbol has been renamed from \a oldName to \a newName
     951                 :            :      * \see rampRenamed()
     952                 :            :      * \since QGIS 3.4
     953                 :            :      */
     954                 :            :     void symbolRenamed( const QString &oldName, const QString &newName );
     955                 :            : 
     956                 :            :     /**
     957                 :            :      * Emitted whenever a color ramp has been renamed from \a oldName to \a newName
     958                 :            :      * \see symbolRenamed()
     959                 :            :      * \since QGIS 3.4
     960                 :            :      */
     961                 :            :     void rampRenamed( const QString &oldName, const QString &newName );
     962                 :            : 
     963                 :            :     /**
     964                 :            :      * Emitted whenever a color ramp has been added to the style and the database
     965                 :            :      * has been updated as a result.
     966                 :            :      * \see rampRemoved()
     967                 :            :      * \see symbolSaved()
     968                 :            :      * \since QGIS 3.4
     969                 :            :      */
     970                 :            :     void rampAdded( const QString &name );
     971                 :            : 
     972                 :            :     /**
     973                 :            :      * Emitted whenever a color ramp has been removed from the style and the database
     974                 :            :      * has been updated as a result.
     975                 :            :      * \see rampAdded()
     976                 :            :      * \see symbolRemoved()
     977                 :            :      * \since QGIS 3.4
     978                 :            :      */
     979                 :            :     void rampRemoved( const QString &name );
     980                 :            : 
     981                 :            :     /**
     982                 :            :      * Emitted whenever a color ramp's definition is changed. This does not include
     983                 :            :      * name or tag changes.
     984                 :            :      *
     985                 :            :      * \see rampAdded()
     986                 :            :      *
     987                 :            :      * \since QGIS 3.4
     988                 :            :      */
     989                 :            :     void rampChanged( const QString &name );
     990                 :            : 
     991                 :            : 
     992                 :            :     /**
     993                 :            :      * Emitted whenever a text format has been renamed from \a oldName to \a newName
     994                 :            :      * \see symbolRenamed()
     995                 :            :      * \since QGIS 3.10
     996                 :            :      */
     997                 :            :     void textFormatRenamed( const QString &oldName, const QString &newName );
     998                 :            : 
     999                 :            :     /**
    1000                 :            :      * Emitted whenever a text format has been added to the style and the database
    1001                 :            :      * has been updated as a result.
    1002                 :            :      * \see textFormatRemoved()
    1003                 :            :      * \see symbolSaved()
    1004                 :            :      * \since QGIS 3.10
    1005                 :            :      */
    1006                 :            :     void textFormatAdded( const QString &name );
    1007                 :            : 
    1008                 :            :     /**
    1009                 :            :      * Emitted whenever a text format has been removed from the style and the database
    1010                 :            :      * has been updated as a result.
    1011                 :            :      * \see textFormatAdded()
    1012                 :            :      * \see symbolRemoved()
    1013                 :            :      * \since QGIS 3.10
    1014                 :            :      */
    1015                 :            :     void textFormatRemoved( const QString &name );
    1016                 :            : 
    1017                 :            :     /**
    1018                 :            :      * Emitted whenever a text format's definition is changed. This does not include
    1019                 :            :      * name or tag changes.
    1020                 :            :      *
    1021                 :            :      * \see textFormatAdded()
    1022                 :            :      *
    1023                 :            :      * \since QGIS 3.10
    1024                 :            :      */
    1025                 :            :     void textFormatChanged( const QString &name );
    1026                 :            : 
    1027                 :            :     /**
    1028                 :            :      * Emitted whenever label settings have been renamed from \a oldName to \a newName
    1029                 :            :      * \see symbolRenamed()
    1030                 :            :      * \since QGIS 3.10
    1031                 :            :      */
    1032                 :            :     void labelSettingsRenamed( const QString &oldName, const QString &newName );
    1033                 :            : 
    1034                 :            :     /**
    1035                 :            :      * Emitted whenever label settings have been added to the style and the database
    1036                 :            :      * has been updated as a result.
    1037                 :            :      * \see labelSettingsRemoved()
    1038                 :            :      * \see symbolSaved()
    1039                 :            :      * \since QGIS 3.10
    1040                 :            :      */
    1041                 :            :     void labelSettingsAdded( const QString &name );
    1042                 :            : 
    1043                 :            :     /**
    1044                 :            :      * Emitted whenever label settings have been removed from the style and the database
    1045                 :            :      * has been updated as a result.
    1046                 :            :      * \see labelSettingsAdded()
    1047                 :            :      * \see symbolRemoved()
    1048                 :            :      * \since QGIS 3.10
    1049                 :            :      */
    1050                 :            :     void labelSettingsRemoved( const QString &name );
    1051                 :            : 
    1052                 :            :     /**
    1053                 :            :      * Emitted whenever a label setting's definition is changed. This does not include
    1054                 :            :      * name or tag changes.
    1055                 :            :      *
    1056                 :            :      * \see labelSettingsAdded()
    1057                 :            :      *
    1058                 :            :      * \since QGIS 3.10
    1059                 :            :      */
    1060                 :            :     void labelSettingsChanged( const QString &name );
    1061                 :            : 
    1062                 :            :   private:
    1063                 :            : 
    1064                 :            :     QgsSymbolMap mSymbols;
    1065                 :            :     QgsVectorColorRampMap mColorRamps;
    1066                 :            :     QgsTextFormatMap mTextFormats;
    1067                 :            :     QgsLabelSettingsMap mLabelSettings;
    1068                 :            :     QMap<QString, QgsLegendPatchShape > mLegendPatchShapes;
    1069                 :            :     QMap<QString, QgsAbstract3DSymbol * > m3dSymbols;
    1070                 :            : 
    1071                 :            :     QHash< QgsStyle::StyleEntity, QHash< QString, QStringList > > mCachedTags;
    1072                 :            :     QHash< QgsStyle::StyleEntity, QHash< QString, bool > > mCachedFavorites;
    1073                 :            : 
    1074                 :            :     QString mErrorString;
    1075                 :            :     QString mFileName;
    1076                 :            : 
    1077                 :            :     sqlite3_database_unique_ptr mCurrentDB;
    1078                 :            : 
    1079                 :            :     std::unique_ptr< QgsSymbol > mPatchMarkerSymbol;
    1080                 :            :     std::unique_ptr< QgsSymbol > mPatchLineSymbol;
    1081                 :            :     std::unique_ptr< QgsSymbol > mPatchFillSymbol;
    1082                 :            : 
    1083                 :            :     mutable QHash< QgsSymbol::SymbolType, QHash< QSizeF, QgsLegendPatchShape > > mDefaultPatchCache;
    1084                 :            :     mutable QHash< QgsSymbol::SymbolType, QHash< QSizeF, QList< QList< QPolygonF > > > > mDefaultPatchQPolygonFCache;
    1085                 :            : 
    1086                 :            :     QMap< QString, QDomElement > mDeferred3DsymbolElements;
    1087                 :            :     void handleDeferred3DSymbolCreation();
    1088                 :            : 
    1089                 :            :     static QgsStyle *sDefaultStyle;
    1090                 :            : 
    1091                 :            :     //! Convenience function to open the DB and return a sqlite3 object
    1092                 :            :     bool openDatabase( const QString &filename );
    1093                 :            : 
    1094                 :            :     //! Imports the symbols and colorramps into the default style database from the given XML file
    1095                 :            :     bool importXml( const QString &filename, int sinceVersion );
    1096                 :            : 
    1097                 :            :     /**
    1098                 :            :      * Convenience function that would run queries which don't generate return values
    1099                 :            :      *
    1100                 :            :      *  \param query query to run
    1101                 :            :      *  \returns success TRUE on success
    1102                 :            :      */
    1103                 :            :     bool runEmptyQuery( const QString &query );
    1104                 :            : 
    1105                 :            :     //! Gets the id from the table for the given name from the database, 0 if not found
    1106                 :            :     int getId( const QString &table, const QString &name );
    1107                 :            : 
    1108                 :            :     //! Gets the name from the table for the given id from the database, empty if not found
    1109                 :            :     QString getName( const QString &table, int id ) const;
    1110                 :            : 
    1111                 :            :     /**
    1112                 :            :      * Updates the properties of an existing symbol/colorramp
    1113                 :            :      *
    1114                 :            :      *  \note This should not be called separately, only called through addSymbol or addColorRamp
    1115                 :            :      *  \param type is either SymbolEntity or ColorrampEntity
    1116                 :            :      *  \param name is the name of an existing symbol or a color ramp
    1117                 :            :      *  \returns Success state of the update operation
    1118                 :            :      */
    1119                 :            :     bool updateSymbol( StyleEntity type, const QString &name );
    1120                 :            : 
    1121                 :            :     void clearCachedTags( StyleEntity type, const QString &name );
    1122                 :            : 
    1123                 :            : 
    1124                 :            :     void upgradeIfRequired();
    1125                 :            : 
    1126                 :            :     /**
    1127                 :            :      * Returns the table name for the specified entity \a type.
    1128                 :            :      */
    1129                 :            :     static QString entityTableName( StyleEntity type );
    1130                 :            : 
    1131                 :            :     /**
    1132                 :            :      * Returns the tag map table name for the specified entity \a type.
    1133                 :            :      */
    1134                 :            :     static QString tagmapTableName( StyleEntity type );
    1135                 :            : 
    1136                 :            :     /**
    1137                 :            :      * Returns the entity ID field name for for the tag map table for the specified entity \a type.
    1138                 :            :      */
    1139                 :            :     static QString tagmapEntityIdFieldName( StyleEntity type );
    1140                 :            : 
    1141                 :            :     friend class Qgs3D;
    1142                 :            : 
    1143                 :            :     Q_DISABLE_COPY( QgsStyle )
    1144                 :            : };
    1145                 :            : 
    1146                 :            : /**
    1147                 :            :  * \class QgsStyleEntityInterface
    1148                 :            :  * \ingroup core
    1149                 :            :  * \brief An interface for entities which can be placed in a QgsStyle database.
    1150                 :            :  * \since QGIS 3.10
    1151                 :            :  */
    1152                 :          0 : class CORE_EXPORT QgsStyleEntityInterface
    1153                 :            : {
    1154                 :            : 
    1155                 :            : #ifdef SIP_RUN
    1156                 :            :     SIP_CONVERT_TO_SUBCLASS_CODE
    1157                 :            :     switch ( sipCpp->type() )
    1158                 :            :     {
    1159                 :            :       case QgsStyle::SymbolEntity:
    1160                 :            :         sipType = sipType_QgsStyleSymbolEntity;
    1161                 :            :         break;
    1162                 :            : 
    1163                 :            :       case QgsStyle::ColorrampEntity:
    1164                 :            :         sipType = sipType_QgsStyleColorRampEntity;
    1165                 :            :         break;
    1166                 :            : 
    1167                 :            :       case QgsStyle::TextFormatEntity:
    1168                 :            :         sipType = sipType_QgsStyleTextFormatEntity;
    1169                 :            :         break;
    1170                 :            : 
    1171                 :            :       case QgsStyle::LabelSettingsEntity:
    1172                 :            :         sipType = sipType_QgsStyleLabelSettingsEntity;
    1173                 :            :         break;
    1174                 :            : 
    1175                 :            :       case QgsStyle::SmartgroupEntity:
    1176                 :            :       case QgsStyle::TagEntity:
    1177                 :            :         sipType = 0;
    1178                 :            :         break;
    1179                 :            :     }
    1180                 :            :     SIP_END
    1181                 :            : #endif
    1182                 :            : 
    1183                 :            :   public:
    1184                 :            : 
    1185                 :          0 :     virtual ~QgsStyleEntityInterface() = default;
    1186                 :            : 
    1187                 :            :     /**
    1188                 :            :      * Returns the type of style entity.
    1189                 :            :      */
    1190                 :            :     virtual QgsStyle::StyleEntity type() const = 0;
    1191                 :            : 
    1192                 :            : };
    1193                 :            : 
    1194                 :            : /**
    1195                 :            :  * \class QgsStyleSymbolEntity
    1196                 :            :  * \ingroup core
    1197                 :            :  * \brief A symbol entity for QgsStyle databases.
    1198                 :            :  * \since QGIS 3.10
    1199                 :            :  */
    1200                 :          0 : class CORE_EXPORT QgsStyleSymbolEntity : public QgsStyleEntityInterface
    1201                 :            : {
    1202                 :            :   public:
    1203                 :            : 
    1204                 :            :     /**
    1205                 :            :      * Constructor for QgsStyleSymbolEntity, with the specified \a symbol.
    1206                 :            :      *
    1207                 :            :      * Ownership of \a symbol is NOT transferred.
    1208                 :            :      */
    1209                 :          0 :     QgsStyleSymbolEntity( QgsSymbol *symbol )
    1210                 :          0 :       : mSymbol( symbol )
    1211                 :          0 :     {}
    1212                 :            : 
    1213                 :            :     QgsStyle::StyleEntity type() const override;
    1214                 :            : 
    1215                 :            :     /**
    1216                 :            :      * Returns the entity's symbol.
    1217                 :            :      */
    1218                 :          0 :     QgsSymbol *symbol() const { return mSymbol; }
    1219                 :            : 
    1220                 :            :   private:
    1221                 :            : 
    1222                 :            :     QgsSymbol *mSymbol = nullptr;
    1223                 :            : 
    1224                 :            : };
    1225                 :            : 
    1226                 :            : /**
    1227                 :            :  * \class QgsStyleColorRampEntity
    1228                 :            :  * \ingroup core
    1229                 :            :  * \brief A color ramp entity for QgsStyle databases.
    1230                 :            :  * \since QGIS 3.10
    1231                 :            :  */
    1232                 :          0 : class CORE_EXPORT QgsStyleColorRampEntity : public QgsStyleEntityInterface
    1233                 :            : {
    1234                 :            :   public:
    1235                 :            : 
    1236                 :            :     /**
    1237                 :            :      * Constructor for QgsStyleColorRampEntity, with the specified color \a ramp.
    1238                 :            :      *
    1239                 :            :      * Ownership of \a ramp is NOT transferred.
    1240                 :            :      */
    1241                 :          0 :     QgsStyleColorRampEntity( QgsColorRamp *ramp )
    1242                 :          0 :       : mRamp( ramp )
    1243                 :          0 :     {}
    1244                 :            : 
    1245                 :            :     QgsStyle::StyleEntity type() const override;
    1246                 :            : 
    1247                 :            :     /**
    1248                 :            :      * Returns the entity's color ramp.
    1249                 :            :      */
    1250                 :          0 :     QgsColorRamp *ramp() const { return mRamp; }
    1251                 :            : 
    1252                 :            :   private:
    1253                 :            : 
    1254                 :            :     QgsColorRamp *mRamp = nullptr;
    1255                 :            : };
    1256                 :            : 
    1257                 :            : /**
    1258                 :            :  * \class QgsStyleTextFormatEntity
    1259                 :            :  * \ingroup core
    1260                 :            :  * \brief A text format entity for QgsStyle databases.
    1261                 :            :  * \since QGIS 3.10
    1262                 :            :  */
    1263                 :          0 : class CORE_EXPORT QgsStyleTextFormatEntity : public QgsStyleEntityInterface
    1264                 :            : {
    1265                 :            :   public:
    1266                 :            : 
    1267                 :            :     /**
    1268                 :            :      * Constructor for QgsStyleTextFormatEntity, with the specified text \a format.
    1269                 :            :      */
    1270                 :          0 :     QgsStyleTextFormatEntity( const QgsTextFormat &format )
    1271                 :          0 :       : mFormat( format )
    1272                 :          0 :     {}
    1273                 :            : 
    1274                 :            :     QgsStyle::StyleEntity type() const override;
    1275                 :            : 
    1276                 :            :     /**
    1277                 :            :      * Returns the entity's text format.
    1278                 :            :      */
    1279                 :          0 :     QgsTextFormat format() const { return mFormat; }
    1280                 :            : 
    1281                 :            :   private:
    1282                 :            : 
    1283                 :            :     QgsTextFormat mFormat;
    1284                 :            : 
    1285                 :            : };
    1286                 :            : 
    1287                 :            : /**
    1288                 :            :  * \class QgsStyleLabelSettingsEntity
    1289                 :            :  * \ingroup core
    1290                 :            :  * \brief A label settings entity for QgsStyle databases.
    1291                 :            :  * \since QGIS 3.10
    1292                 :            :  */
    1293                 :          0 : class CORE_EXPORT QgsStyleLabelSettingsEntity : public QgsStyleEntityInterface
    1294                 :            : {
    1295                 :            :   public:
    1296                 :            : 
    1297                 :            :     /**
    1298                 :            :      * Constructor for QgsStyleLabelSettingsEntity, with the specified label \a settings.
    1299                 :            :      */
    1300                 :          0 :     QgsStyleLabelSettingsEntity( const QgsPalLayerSettings &settings )
    1301                 :          0 :       : mSettings( settings )
    1302                 :          0 :     {}
    1303                 :            : 
    1304                 :            :     QgsStyle::StyleEntity type() const override;
    1305                 :            : 
    1306                 :            : 
    1307                 :            :     /**
    1308                 :            :      * Returns the entity's label settings.
    1309                 :            :      */
    1310                 :          0 :     const QgsPalLayerSettings &settings() const { return mSettings; }
    1311                 :            : 
    1312                 :            :   private:
    1313                 :            : 
    1314                 :            :     QgsPalLayerSettings mSettings;
    1315                 :            : };
    1316                 :            : 
    1317                 :            : /**
    1318                 :            :  * \class QgsStyleLegendPatchShapeEntity
    1319                 :            :  * \ingroup core
    1320                 :            :  * \brief A legend patch shape entity for QgsStyle databases.
    1321                 :            :  * \since QGIS 3.14
    1322                 :            :  */
    1323                 :          0 : class CORE_EXPORT QgsStyleLegendPatchShapeEntity : public QgsStyleEntityInterface
    1324                 :            : {
    1325                 :            :   public:
    1326                 :            : 
    1327                 :            :     /**
    1328                 :            :      * Constructor for QgsStyleLegendPatchShapeEntity, with the specified legend patch \a shape.
    1329                 :            :      */
    1330                 :          0 :     QgsStyleLegendPatchShapeEntity( const QgsLegendPatchShape &shape )
    1331                 :          0 :       : mShape( shape )
    1332                 :          0 :     {}
    1333                 :            : 
    1334                 :            :     QgsStyle::StyleEntity type() const override;
    1335                 :            : 
    1336                 :            : 
    1337                 :            :     /**
    1338                 :            :      * Returns the entity's legend patch shape.
    1339                 :            :      */
    1340                 :          0 :     const QgsLegendPatchShape &shape() const { return mShape; }
    1341                 :            : 
    1342                 :            :   private:
    1343                 :            : 
    1344                 :            :     QgsLegendPatchShape mShape;
    1345                 :            : };
    1346                 :            : 
    1347                 :            : /**
    1348                 :            :  * \class QgsStyleSymbol3DEntity
    1349                 :            :  * \ingroup core
    1350                 :            :  * \brief A 3d symbol entity for QgsStyle databases.
    1351                 :            :  * \since QGIS 3.16
    1352                 :            :  */
    1353                 :          0 : class CORE_EXPORT QgsStyleSymbol3DEntity : public QgsStyleEntityInterface
    1354                 :            : {
    1355                 :            :   public:
    1356                 :            : 
    1357                 :            :     /**
    1358                 :            :      * Constructor for QgsStyleSymbol3DEntity, with the specified \a symbol.
    1359                 :            :      *
    1360                 :            :      * Ownership of \a symbol is NOT transferred.
    1361                 :            :      */
    1362                 :            :     QgsStyleSymbol3DEntity( const QgsAbstract3DSymbol *symbol )
    1363                 :            :       : mSymbol( symbol )
    1364                 :            :     {}
    1365                 :            : 
    1366                 :            :     QgsStyle::StyleEntity type() const override;
    1367                 :            : 
    1368                 :            :     /**
    1369                 :            :      * Returns the entity's symbol.
    1370                 :            :      */
    1371                 :          0 :     const QgsAbstract3DSymbol *symbol() const { return mSymbol; }
    1372                 :            : 
    1373                 :            :   private:
    1374                 :            : 
    1375                 :            :     const QgsAbstract3DSymbol *mSymbol = nullptr;
    1376                 :            : };
    1377                 :            : 
    1378                 :            : #endif

Generated by: LCOV version 1.14