@@ -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
656700QStringList 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+
858918int 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 ) )
0 commit comments