QGIS API Documentation  master-3f58142
src/core/symbology-ng/qgsstylev2.h
Go to the documentation of this file.
00001 /***************************************************************************
00002     qgsstylev2.h
00003     ---------------------
00004     begin                : November 2009
00005     copyright            : (C) 2009 by Martin Dobias
00006     email                : wonder dot sk at gmail dot com
00007  ***************************************************************************
00008  *                                                                         *
00009  *   This program is free software; you can redistribute it and/or modify  *
00010  *   it under the terms of the GNU General Public License as published by  *
00011  *   the Free Software Foundation; either version 2 of the License, or     *
00012  *   (at your option) any later version.                                   *
00013  *                                                                         *
00014  ***************************************************************************/
00015 
00016 #ifndef QGSSTYLEV2_H
00017 #define QGSSTYLEV2_H
00018 
00019 #include <QMap>
00020 #include <QMultiMap>
00021 #include <QString>
00022 
00023 #include <sqlite3.h>
00024 
00025 #include "qgssymbollayerv2utils.h" // QgsStringMap
00026 
00027 class QgsSymbolV2;
00028 class QgsSymbolLayerV2;
00029 class QgsVectorColorRampV2;
00030 
00031 class QDomDocument;
00032 class QDomElement;
00033 
00034 typedef QMap<QString, QgsVectorColorRampV2* > QgsVectorColorRampV2Map;
00035 typedef QMap<int, QString> QgsSymbolGroupMap;
00036 
00056 typedef QMultiMap<QString, QString> QgsSmartConditionMap;
00057 
00058 // enumerators representing sqlite DB columns
00059 enum SymbolTable { SymbolId, SymbolName, SymbolXML, SymbolGroupId };
00060 enum SymgroupTable { SymgroupId, SymgroupName, SymgroupParent };
00061 enum TagTable { TagId, TagName };
00062 enum TagmapTable { TagmapTagId, TagmapSymbolId };
00063 enum ColorrampTable { ColorrampId, ColorrampName, ColorrampXML, ColorrampGroupId };
00064 enum SmartgroupTable { SmartgroupId, SmartgroupName, SmartgroupXML };
00065 
00066 class CORE_EXPORT QgsStyleV2
00067 {
00068   public:
00069     QgsStyleV2();
00070     ~QgsStyleV2();
00071 
00073 
00078     enum StyleEntity { SymbolEntity, GroupEntity, TagEntity, ColorrampEntity, SmartgroupEntity };
00079 
00081 
00088     bool addColorRamp( QString name, QgsVectorColorRampV2* colorRamp, bool update = false );
00089 
00091 
00096     int addGroup( QString groupName, int parent = 0 );
00097 
00099 
00104     int addSmartgroup( QString name, QString op, QgsSmartConditionMap conditions );
00105 
00107 
00114     bool addSymbol( QString name, QgsSymbolV2* symbol, bool update = false );
00115 
00117 
00121     int addTag( QString tagName );
00122 
00124     QgsSymbolGroupMap childGroupNames( QString parent = "" );
00125 
00127     void clear();
00128 
00130     QgsVectorColorRampV2* colorRamp( QString name );
00131 
00133     int colorRampCount();
00134 
00136     QStringList colorRampNames();
00137 
00139     const QgsVectorColorRampV2* colorRampRef( QString name ) const;
00140 
00143     int colorrampId( QString name );
00144 
00146     static QgsStyleV2* defaultStyle();
00147 
00149 
00156     bool tagSymbol( StyleEntity type, QString symbol, QStringList tags );
00157 
00159 
00166     bool detagSymbol( StyleEntity type, QString symbol, QStringList tags );
00167 
00169     bool removeSymbol( QString name );
00170 
00173     bool renameSymbol( QString oldName, QString newName );
00174 
00176     QgsSymbolV2* symbol( QString name );
00177 
00179     const QgsSymbolV2* symbolRef( QString name ) const;
00180 
00182     int symbolCount();
00183 
00185     QStringList symbolNames();
00186 
00189     int symbolId( QString name );
00191     int groupId( QString group );
00193     int tagId( QString tag );
00195     int smartgroupId( QString smartgroup );
00196 
00198     QStringList groupNames();
00199 
00201 
00206     QStringList symbolsOfGroup( StyleEntity type, int groupid );
00207 
00209 
00214     QStringList symbolsWithTag( StyleEntity type, int tagid );
00215 
00217 
00223     bool group( StyleEntity type, QString name, int groupid );
00224 
00226 
00231     void rename( StyleEntity type, int id, QString newName );
00232 
00234 
00238     void remove( StyleEntity type, int id );
00239 
00241 
00248     bool saveSymbol( QString name, QgsSymbolV2* symbol, int groupid, QStringList tags );
00249 
00251 
00258     bool saveColorRamp( QString name, QgsVectorColorRampV2* ramp, int groupid, QStringList tags );
00259 
00261     bool removeColorRamp( QString name );
00262 
00265     bool renameColorRamp( QString oldName, QString newName );
00266 
00267 
00269     bool load( QString filename );
00270 
00272     bool save( QString filename = QString() );
00273 
00275     QString errorString() { return mErrorString; }
00276 
00278     QString fileName() { return mFileName; }
00279 
00281     QStringList findSymbols( QString qword );
00282 
00284 
00289     QStringList tagsOfSymbol( StyleEntity type, QString symbol );
00290 
00292     QgsSymbolGroupMap smartgroupsListMap();
00293 
00295     QStringList smartgroupNames();
00296 
00298     QgsSmartConditionMap smartgroup( int id );
00299 
00301     //clumsy implementation TODO create a class for smartgroups
00302     QString smartgroupOperator( int id );
00303 
00305     QStringList symbolsOfSmartgroup( StyleEntity type, int id );
00306 
00308     bool exportXML( QString filename );
00309 
00311     bool importXML( QString filename );
00312 
00313   protected:
00314 
00315     QgsSymbolV2Map mSymbols;
00316     QgsVectorColorRampV2Map mColorRamps;
00317 
00318     QString mErrorString;
00319     QString mFileName;
00320 
00321     sqlite3* mCurrentDB;
00322 
00323     static QgsStyleV2* mDefaultStyle;
00324 
00326     bool openDB( QString filename );
00327 
00332     bool runEmptyQuery( char* query, bool freeQuery = true );
00333 
00335     char* getGroupRemoveQuery( int id );
00336 
00338     int getId( QString table, QString name );
00339 
00341 
00347     bool updateSymbol( StyleEntity type, QString name );
00348 };
00349 
00350 
00351 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines