Skip to content

Commit 8be4178

Browse files
author
Arunmozhi
committed
improvements to style manager; tag&group support for colorramps
1 parent ae03158 commit 8be4178

File tree

5 files changed

+210
-80
lines changed

5 files changed

+210
-80
lines changed

src/core/symbology-ng/qgsstylev2.cpp

Lines changed: 98 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ bool QgsStyleV2::addColorRamp( QString name, QgsVectorColorRampV2* colorRamp )
195195
QTextStream stream( xmlArray );
196196
rampEl.save( stream, 4 );
197197
QByteArray nameArray = name.toUtf8();
198-
char *query = sqlite3_mprintf( "INSERT INTO colorramp VALUES (NULL, '%q', '%q');",
198+
char *query = sqlite3_mprintf( "INSERT INTO colorramp VALUES (NULL, '%q', '%q', NULL);",
199199
nameArray.constData(), xmlArray->constData() );
200200

201201
if ( !runEmptyQuery( query ) )
@@ -465,7 +465,7 @@ QgsSymbolGroupMap QgsStyleV2::childGroupNames( QString parent )
465465
return groupNames;
466466
}
467467

468-
QStringList QgsStyleV2::symbolsOfGroup( int groupid )
468+
QStringList QgsStyleV2::symbolsOfGroup( StyleEntity type, int groupid )
469469
{
470470
if( mCurrentDB == NULL )
471471
{
@@ -476,8 +476,22 @@ QStringList QgsStyleV2::symbolsOfGroup( int groupid )
476476
QStringList symbols;
477477
sqlite3_stmt *ppStmt;
478478
char *query;
479-
query = groupid ? sqlite3_mprintf( "SELECT name FROM symbol WHERE groupid=%d;", groupid ) :
479+
if ( type == SymbolEntity )
480+
{
481+
query = groupid ? sqlite3_mprintf( "SELECT name FROM symbol WHERE groupid=%d;", groupid ) :
480482
sqlite3_mprintf( "SELECT name FROM symbol WHERE groupid IS NULL;");
483+
}
484+
else if ( type == ColorrampEntity )
485+
{
486+
query = groupid ? sqlite3_mprintf( "SELECT name FROM colorramp WHERE groupid=%d;", groupid ) :
487+
sqlite3_mprintf( "SELECT name FROM colorramp WHERE groupid IS NULL;");
488+
}
489+
else
490+
{
491+
QgsDebugMsg( "No such style entity" );
492+
return QStringList();
493+
}
494+
481495
int nErr = sqlite3_prepare_v2( mCurrentDB, query, -1, &ppStmt, NULL );
482496
while ( nErr == SQLITE_OK && sqlite3_step( ppStmt ) == SQLITE_ROW )
483497
{
@@ -489,15 +503,28 @@ QStringList QgsStyleV2::symbolsOfGroup( int groupid )
489503
return symbols;
490504
}
491505

492-
QStringList QgsStyleV2::symbolsWithTag( int tagid )
506+
QStringList QgsStyleV2::symbolsWithTag( StyleEntity type, int tagid )
493507
{
494508
QStringList symbols;
495509
if ( mCurrentDB == NULL )
496510
{
497511
QgsDebugMsg( "Cannot open database to get symbols of tagid " + tagid );
498512
return QStringList();
499513
}
500-
char *subquery = sqlite3_mprintf( "SELECT symbol_id FROM tagmap WHERE tag_id=%d;", tagid );
514+
char *subquery;
515+
if ( type == SymbolEntity )
516+
{
517+
subquery = sqlite3_mprintf( "SELECT symbol_id FROM tagmap WHERE tag_id=%d;", tagid );
518+
}
519+
else if ( type == ColorrampEntity )
520+
{
521+
subquery = sqlite3_mprintf( "SELECT symbol_id FROM ctagmap WHERE tag_id=%d;", tagid );
522+
}
523+
else
524+
{
525+
QgsDebugMsg( "Unknow Entity" );
526+
return QStringList();
527+
}
501528
sqlite3_stmt *ppStmt;
502529
int nErr = sqlite3_prepare_v2( mCurrentDB, subquery, -1, &ppStmt, NULL );
503530

@@ -506,7 +533,15 @@ QStringList QgsStyleV2::symbolsWithTag( int tagid )
506533
{
507534
int symbolId = sqlite3_column_int( ppStmt, 0 );
508535
sqlite3_stmt *ppStmt2;
509-
char *query = sqlite3_mprintf( "SELECT name FROM symbol WHERE id=%d;", symbolId );
536+
char *query;
537+
if ( type == SymbolEntity )
538+
{
539+
query = sqlite3_mprintf( "SELECT name FROM symbol WHERE id=%d;", symbolId );
540+
}
541+
else
542+
{
543+
query = sqlite3_mprintf( "SELECT name FROM colorramp WHERE id=%d;", symbolId );
544+
}
510545
int sErr = sqlite3_prepare_v2( mCurrentDB, query, -1, &ppStmt2, NULL );
511546
while ( sErr == SQLITE_OK && sqlite3_step( ppStmt2 ) == SQLITE_ROW )
512547
{
@@ -644,13 +679,22 @@ bool QgsStyleV2::runEmptyQuery( char *query )
644679
return true;
645680
}
646681

647-
bool QgsStyleV2::regroup( QString symbolName, int groupid )
682+
bool QgsStyleV2::group( StyleEntity type, QString name, int groupid )
648683
{
649-
QByteArray array = symbolName.toUtf8();
684+
QByteArray array = name.toUtf8();
650685
char *query;
651-
query = groupid ? sqlite3_mprintf( "UPDATE symbol SET groupid=%d WHERE name='%q';", groupid, array.constData() )
652-
: sqlite3_mprintf( "UPDATE symbol SET groupid=NULL WHERE name='%q';", array.constData() );
653-
return runEmptyQuery( query );
686+
687+
switch ( type )
688+
{
689+
case SymbolEntity : query = groupid ? sqlite3_mprintf( "UPDATE symbol SET groupid=%d WHERE name='%q';", groupid, array.constData() ) : sqlite3_mprintf( "UPDATE symbol SET groupid=NULL WHERE name='%q';", array.constData() );
690+
break;
691+
case ColorrampEntity : query = groupid ? sqlite3_mprintf( "UPDATE colorramp SET groupid=%d WHERE name='%q';", groupid, array.constData() ) : sqlite3_mprintf( "UPDATE colorramp SET groupid=NULL WHERE name='%q';", array.constData() );
692+
break;
693+
default : QgsDebugMsg( "Wrong entity value. cannot apply group" );
694+
break;
695+
696+
}
697+
return runEmptyQuery( query );
654698
}
655699

656700
QStringList QgsStyleV2::findSymbols( QString qword )
@@ -712,15 +756,15 @@ QStringList QgsStyleV2::findSymbols( QString qword )
712756
return symbols;
713757
}
714758

715-
bool QgsStyleV2::tagSymbol( QString symbol, QStringList tags )
759+
bool QgsStyleV2::tagSymbol( StyleEntity type, QString symbol, QStringList tags )
716760
{
717761
if ( mCurrentDB == NULL )
718762
{
719763
QgsDebugMsg( "Sorry! Cannot open database to tag." );
720764
return false;
721765
}
722766

723-
int symbolid = symbolId( symbol );
767+
int symbolid = ( type == SymbolEntity ) ? symbolId( symbol ) : colorrampId( symbol );
724768
if ( !symbolid )
725769
{
726770
QgsDebugMsg( "No such symbol for tagging in database: " + symbol );
@@ -749,15 +793,15 @@ bool QgsStyleV2::tagSymbol( QString symbol, QStringList tags )
749793
}
750794
sqlite3_finalize( ppStmt );
751795
// Now map the tag to the symbol
752-
query = sqlite3_mprintf( "INSERT INTO tagmap VALUES (%d,%d);", tagid, symbolid );
796+
query = ( type == SymbolEntity ) ? sqlite3_mprintf( "INSERT INTO tagmap VALUES (%d,%d);", tagid, symbolid ) : sqlite3_mprintf( "INSERT INTO ctagmap VALUES (%d,%d);", tagid, symbolid );
753797
nErr = sqlite3_exec( mCurrentDB, query, NULL, NULL, &zErr );
754798
if ( nErr )
755799
QgsDebugMsg( zErr );
756800
}
757801
return true;
758802
}
759803

760-
bool QgsStyleV2::detagSymbol( QString symbol, QStringList tags )
804+
bool QgsStyleV2::detagSymbol( StyleEntity type, QString symbol, QStringList tags )
761805
{
762806
QByteArray array = symbol.toUtf8();
763807
char *query;
@@ -767,7 +811,7 @@ bool QgsStyleV2::detagSymbol( QString symbol, QStringList tags )
767811
QgsDebugMsg( "Sorry! Cannot open database for detgging." );
768812
return false;
769813
}
770-
query = sqlite3_mprintf( "SELECT id FROM symbol WHERE name='%q';", array.constData() );
814+
query = ( type == SymbolEntity) ? sqlite3_mprintf( "SELECT id FROM symbol WHERE name='%q';", array.constData() ) : sqlite3_mprintf( "SELECT id FROM colorramp WHERE name='%q';", array.constData() );
771815
sqlite3_stmt *ppStmt;
772816
int nErr = sqlite3_prepare_v2( mCurrentDB, query, -1, &ppStmt, NULL );
773817
if ( nErr == SQLITE_OK && sqlite3_step( ppStmt ) == SQLITE_ROW )
@@ -792,7 +836,7 @@ bool QgsStyleV2::detagSymbol( QString symbol, QStringList tags )
792836
if ( tagid )
793837
{
794838
// remove from the tagmap
795-
query = sqlite3_mprintf( "DELETE FROM tagmap WHERE tag_id=%d AND symbol_id=%d;", tagid, symbolid );
839+
query = ( type == SymbolEntity ) ? sqlite3_mprintf( "DELETE FROM tagmap WHERE tag_id=%d AND symbol_id=%d;", tagid, symbolid ) : sqlite3_mprintf( "DELETE FROM ctagmap WHERE tag_id=%d AND colorramp_id=%d;", tagid, symbolid );
796840
runEmptyQuery( query );
797841
}
798842
}
@@ -803,7 +847,7 @@ bool QgsStyleV2::detagSymbol( QString symbol, QStringList tags )
803847
return true;
804848
}
805849

806-
QStringList QgsStyleV2::tagsOfSymbol( QString symbol )
850+
QStringList QgsStyleV2::tagsOfSymbol( StyleEntity type, QString symbol )
807851
{
808852
if ( mCurrentDB == NULL )
809853
{
@@ -813,12 +857,12 @@ QStringList QgsStyleV2::tagsOfSymbol( QString symbol )
813857
QStringList tagList;
814858
char *query;
815859
sqlite3_stmt *ppStmt;
816-
int symbolid = symbolId( symbol );
860+
int symbolid = ( type == SymbolEntity ) ? symbolId( symbol ) : colorrampId( symbol );
817861
if ( !symbolid )
818862
return QStringList();
819863

820864
// get the ids of tags for the symbol
821-
query = sqlite3_mprintf( "SELECT tag_id FROM tagmap WHERE symbol_id=%d;", symbolid );
865+
query = ( type == SymbolEntity ) ? sqlite3_mprintf( "SELECT tag_id FROM tagmap WHERE symbol_id=%d;", symbolid ) : sqlite3_mprintf( "SELECT tag_id FROM ctagmap WHERE colorramp_id=%d;", symbolid );
822866
int nErr = sqlite3_prepare_v2( mCurrentDB, query, -1, &ppStmt, NULL );
823867
while ( nErr == SQLITE_OK && sqlite3_step( ppStmt ) == SQLITE_ROW )
824868
{
@@ -855,6 +899,22 @@ int QgsStyleV2::symbolId( QString name )
855899
return symbolid;
856900
}
857901

902+
int QgsStyleV2::colorrampId( QString name )
903+
{
904+
int symbolid = 0;
905+
char *query;
906+
sqlite3_stmt *ppStmt;
907+
QByteArray array = name.toUtf8();
908+
query = sqlite3_mprintf( "SELECT id FROM colorramp WHERE name='%q';", array.constData() );
909+
int nErr = sqlite3_prepare_v2( mCurrentDB, query, -1, &ppStmt, NULL );
910+
if ( nErr == SQLITE_OK && sqlite3_step( ppStmt ) == SQLITE_ROW )
911+
{
912+
symbolid = sqlite3_column_int( ppStmt, 0 );
913+
}
914+
sqlite3_finalize( ppStmt );
915+
return symbolid;
916+
}
917+
858918
int QgsStyleV2::groupId( QString name )
859919
{
860920
int groupid = 0;
@@ -979,7 +1039,7 @@ QStringList QgsStyleV2::smartgroupNames()
9791039
return groups;
9801040
}
9811041

982-
QStringList QgsStyleV2::symbolsOfSmartgroup( int id )
1042+
QStringList QgsStyleV2::symbolsOfSmartgroup( StyleEntity type, int id )
9831043
{
9841044
char *query;
9851045
int nErr;
@@ -1017,38 +1077,45 @@ QStringList QgsStyleV2::symbolsOfSmartgroup( int id )
10171077
// perform suitable action for the given constraint
10181078
if ( constraint == "tag" )
10191079
{
1020-
resultNames = symbolsWithTag( tagId( param ) );
1080+
resultNames = symbolsWithTag( type, tagId( param ) );
10211081
}
10221082
else if ( constraint == "group" )
10231083
{
10241084
// XXX Validating group id might be a good idea here
1025-
resultNames = symbolsOfGroup( groupId( param ) );
1085+
resultNames = symbolsOfGroup( type, groupId( param ) );
10261086
}
10271087
else if ( constraint == "name" )
10281088
{
1029-
resultNames = symbolNames().filter( param, Qt::CaseInsensitive );
1089+
if ( type == SymbolEntity )
1090+
{
1091+
resultNames = symbolNames().filter( param, Qt::CaseInsensitive );
1092+
}
1093+
else
1094+
{
1095+
resultNames = colorRampNames().filter( param, Qt::CaseInsensitive );
1096+
}
10301097
}
10311098
else if ( constraint == "!tag" )
10321099
{
1033-
resultNames = symbolNames();
1034-
QStringList unwanted = symbolsWithTag( tagId( param ) );
1100+
resultNames = ( type == SymbolEntity ) ? symbolNames() : colorRampNames();
1101+
QStringList unwanted = symbolsWithTag( type, tagId( param ) );
10351102
foreach( QString name, unwanted )
10361103
{
1037-
resultNames.removeOne( name );
1104+
resultNames.removeAll( name );
10381105
}
10391106
}
10401107
else if ( constraint == "!group" )
10411108
{
1042-
resultNames = symbolNames();
1043-
QStringList unwanted = symbolsOfGroup( groupId( param ) );
1109+
resultNames = ( type == SymbolEntity ) ? symbolNames() : colorRampNames();
1110+
QStringList unwanted = symbolsOfGroup( type, groupId( param ) );
10441111
foreach( QString name, unwanted )
10451112
{
1046-
resultNames.removeOne( name );
1113+
resultNames.removeAll( name );
10471114
}
10481115
}
10491116
else if ( constraint == "!name" )
10501117
{
1051-
QStringList all = symbolNames();
1118+
QStringList all = ( type == SymbolEntity ) ? symbolNames() : colorRampNames() ;
10521119
foreach ( const QString &str, all )
10531120
{
10541121
if ( !str.contains( param, Qt::CaseInsensitive ) )

src/core/symbology-ng/qgsstylev2.h

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ enum SymbolTable { SymbolId, SymbolName, SymbolXML, SymbolGroupId };
4040
enum SymgroupTable { SymgroupId, SymgroupName, SymgroupParent };
4141
enum TagTable { TagId, TagName };
4242
enum TagmapTable { TagmapTagId, TagmapSymbolId };
43-
enum ColorrampTable { ColorrampId, ColorrampName, ColorrampXML };
43+
enum ColorrampTable { ColorrampId, ColorrampName, ColorrampXML, ColorrampGroupId };
4444
enum SmartgroupTable { SmartgroupId, SmartgroupName, SmartgroupXML };
4545

4646
// Enums for types
@@ -84,6 +84,7 @@ class CORE_EXPORT QgsStyleV2
8484
//! return the id in the style database for the given symbol name
8585
//! returns 0 if not found
8686
int symbolId( QString name );
87+
int colorrampId( QString name );
8788

8889
//! return the id in the style database for the given group name
8990
int groupId( QString group );
@@ -96,16 +97,16 @@ class CORE_EXPORT QgsStyleV2
9697
QgsSymbolGroupMap childGroupNames( QString parent = "" );
9798

9899
//! returns the symbolnames of a given groupid
99-
QStringList symbolsOfGroup( int groupid );
100+
QStringList symbolsOfGroup( StyleEntity type, int groupid );
100101
//! returns the symbol names with which have the given tag
101-
QStringList symbolsWithTag( int tagid );
102+
QStringList symbolsWithTag( StyleEntity type, int tagid );
102103
//! adds a new group and returns the group's id
103104
int addGroup( QString groupName, int parent = 0 );
104105
//! adds a new tag and returns the tag's id
105106
int addTag( QString tagName );
106107

107-
//! regroup the symbol to specifed group
108-
bool regroup( QString symbolName, int groupid );
108+
//! applies the specifed group to the symbol or colorramp specified by StyleEntity
109+
bool group( StyleEntity type, QString name, int groupid );
109110

110111
//! rename the given entity with the specified id
111112
void rename( StyleEntity type, int id, QString newName );
@@ -154,13 +155,13 @@ class CORE_EXPORT QgsStyleV2
154155
QStringList findSymbols( QString qword );
155156

156157
//! tags the symbol with the tags in the list, the remove flag DE-TAGS
157-
bool tagSymbol( QString symbol, QStringList tags );
158+
bool tagSymbol( StyleEntity type, QString symbol, QStringList tags );
158159

159160
//! detags the symbol with the given list
160-
bool detagSymbol( QString symbol, QStringList tags );
161+
bool detagSymbol( StyleEntity type, QString symbol, QStringList tags );
161162

162163
//! return the tags associated with the symbol
163-
QStringList tagsOfSymbol( QString symbol );
164+
QStringList tagsOfSymbol( StyleEntity type, QString symbol );
164165

165166
//! adds the smartgroup to the database and returns the id
166167
int addSmartgroup( QString name, QString op, QgsSmartConditionMap conditions );
@@ -179,7 +180,7 @@ class CORE_EXPORT QgsStyleV2
179180
QString smartgroupOperator( int id );
180181

181182
//! returns the symbols for the smartgroup
182-
QStringList symbolsOfSmartgroup( int id );
183+
QStringList symbolsOfSmartgroup( StyleEntity type, int id );
183184

184185
protected:
185186

0 commit comments

Comments
 (0)