Skip to content

Commit ca1026d

Browse files
author
Arunmozhi
committed
Added support for creating nested symbol XML and save symbol to DB
1 parent 16a6909 commit ca1026d

5 files changed

Lines changed: 44 additions & 20 deletions

File tree

‎python/core/symbology-ng-core.sip‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1265,7 +1265,7 @@ class QgsSymbolLayerV2Utils
12651265

12661266
static QgsSymbolV2* loadSymbol( QDomElement& element ) /Factory/;
12671267
static QgsSymbolLayerV2* loadSymbolLayer( QDomElement& element ) /Factory/;
1268-
static QDomElement saveSymbol( QString name, QgsSymbolV2* symbol, QDomDocument& doc, QgsSymbolV2Map* subSymbols = NULL );
1268+
static QDomElement saveSymbol( QString name, QgsSymbolV2* symbol, QDomDocument& doc );
12691269

12701270
static QgsStringMap parseProperties( QDomElement& element );
12711271
static void saveProperties( QgsStringMap props, QDomDocument& doc, QDomElement& element );

‎src/core/symbology-ng/qgsstylev2.cpp‎

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,42 @@ bool QgsStyleV2::addSymbol( QString name, QgsSymbolV2* symbol )
8080
if ( !symbol || name.count() == 0 )
8181
return false;
8282

83-
// delete previous symbol (if any)
8483
if ( mSymbols.contains( name ) )
8584
delete mSymbols.value( name );
8685

8786
mSymbols.insert( name, symbol );
8887
return true;
8988
}
9089

90+
bool QgsStyleV2::saveSymbol( QString name, QgsSymbolV2* symbol, int groupid, QStringList tags )
91+
{
92+
// TODO add support for tags and groups
93+
Q_UNUSED( groupid );
94+
Q_UNUSED( tags );
95+
96+
QDomDocument doc( "dummy" );
97+
QDomElement symEl = QgsSymbolLayerV2Utils::saveSymbol( name, symbol, doc );
98+
if ( symEl.isNull() )
99+
{
100+
QgsDebugMsg( "Couldnot convert symbol to valid XML!" );
101+
return false;
102+
}
103+
104+
QByteArray *xmlArray = new QByteArray();
105+
QTextStream stream( xmlArray );
106+
symEl.save( stream, 4 );
107+
QByteArray nameArray = name.toUtf8();
108+
char *query = sqlite3_mprintf( "INSERT INTO symbol VALUES (NULL, '%q', '%q', NULL);",
109+
nameArray.constData(), xmlArray->constData() );
110+
111+
if ( !runEmptyQuery( query ) )
112+
{
113+
QgsDebugMsg( "Couldnot insert symbol into the Database!" );
114+
return false;
115+
}
116+
return true;
117+
}
118+
91119
bool QgsStyleV2::removeSymbol( QString name )
92120
{
93121
if ( !mSymbols.contains( name ) )
@@ -543,7 +571,10 @@ bool QgsStyleV2::runEmptyQuery( char *query )
543571
return false;
544572
int nErr = sqlite3_exec( db, query, NULL, NULL, &zErr );
545573
if ( nErr )
574+
{
575+
QgsDebugMsg( zErr );
546576
return false;
577+
}
547578
sqlite3_close( db );
548579
return true;
549580
}

‎src/core/symbology-ng/qgsstylev2.h‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,9 @@ class CORE_EXPORT QgsStyleV2
9898
//! remove the specified entity from the db
9999
void remove( StyleEntity type, int id );
100100

101+
//! add the symbol to the DB with the tags
102+
bool saveSymbol( QString name, QgsSymbolV2* symbol, int groupid, QStringList tags );
103+
101104
//! add color ramp to style. takes ramp's ownership
102105
bool addColorRamp( QString name, QgsVectorColorRampV2* colorRamp );
103106

‎src/core/symbology-ng/qgssymbollayerv2utils.cpp‎

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -717,16 +717,16 @@ static QString _nameForSymbolType( QgsSymbolV2::SymbolType type )
717717
}
718718
}
719719

720-
QDomElement QgsSymbolLayerV2Utils::saveSymbol( QString name, QgsSymbolV2* symbol, QDomDocument& doc, QgsSymbolV2Map* subSymbols )
720+
QDomElement QgsSymbolLayerV2Utils::saveSymbol( QString name, QgsSymbolV2* symbol, QDomDocument& doc )
721721
{
722722
Q_ASSERT( symbol );
723-
724723
QDomElement symEl = doc.createElement( "symbol" );
725724
symEl.setAttribute( "type", _nameForSymbolType( symbol->type() ) );
726725
symEl.setAttribute( "name", name );
727726
symEl.setAttribute( "outputUnit", encodeOutputUnit( symbol->outputUnit() ) );
728727
symEl.setAttribute( "alpha", QString::number( symbol->alpha() ) );
729728
QgsDebugMsg( "num layers " + QString::number( symbol->symbolLayerCount() ) );
729+
730730
for ( int i = 0; i < symbol->symbolLayerCount(); i++ )
731731
{
732732
QgsSymbolLayerV2* layer = symbol->symbolLayer( i );
@@ -735,14 +735,13 @@ QDomElement QgsSymbolLayerV2Utils::saveSymbol( QString name, QgsSymbolV2* symbol
735735
layerEl.setAttribute( "class", layer->layerType() );
736736
layerEl.setAttribute( "locked", layer->isLocked() );
737737
layerEl.setAttribute( "pass", layer->renderingPass() );
738-
739-
if ( subSymbols != NULL && layer->subSymbol() != NULL )
738+
saveProperties( layer->properties(), doc, layerEl );
739+
if ( layer->subSymbol() != NULL )
740740
{
741741
QString subname = QString( "@%1@%2" ).arg( name ).arg( i );
742-
subSymbols->insert( subname, layer->subSymbol() );
742+
QDomElement subEl = saveSymbol( subname, layer->subSymbol(), doc );
743+
layerEl.appendChild( subEl );
743744
}
744-
745-
saveProperties( layer->properties(), doc, layerEl );
746745
symEl.appendChild( layerEl );
747746
}
748747

@@ -2270,22 +2269,13 @@ QDomElement QgsSymbolLayerV2Utils::saveSymbols( QgsSymbolV2Map& symbols, QString
22702269
{
22712270
QDomElement symbolsElem = doc.createElement( tagName );
22722271

2273-
QMap<QString, QgsSymbolV2*> subSymbols;
2274-
22752272
// save symbols
22762273
for ( QMap<QString, QgsSymbolV2*>::iterator its = symbols.begin(); its != symbols.end(); ++its )
22772274
{
2278-
QDomElement symEl = saveSymbol( its.key(), its.value(), doc, &subSymbols );
2275+
QDomElement symEl = saveSymbol( its.key(), its.value(), doc );
22792276
symbolsElem.appendChild( symEl );
22802277
}
22812278

2282-
// add subsymbols, don't allow subsymbols for them (to keep things simple)
2283-
for ( QMap<QString, QgsSymbolV2*>::iterator itsub = subSymbols.begin(); itsub != subSymbols.end(); ++itsub )
2284-
{
2285-
QDomElement subsymEl = saveSymbol( itsub.key(), itsub.value(), doc );
2286-
symbolsElem.appendChild( subsymEl );
2287-
}
2288-
22892279
return symbolsElem;
22902280
}
22912281

‎src/core/symbology-ng/qgssymbollayerv2utils.h‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ class CORE_EXPORT QgsSymbolLayerV2Utils
9999

100100
static QgsSymbolV2* loadSymbol( QDomElement& element );
101101
static QgsSymbolLayerV2* loadSymbolLayer( QDomElement& element );
102-
static QDomElement saveSymbol( QString name, QgsSymbolV2* symbol, QDomDocument& doc, QgsSymbolV2Map* subSymbols = NULL );
102+
static QDomElement saveSymbol( QString symbolName, QgsSymbolV2* symbol, QDomDocument& doc );
103103

104104
static bool createSymbolLayerV2ListFromSld( QDomElement& element, QGis::GeometryType geomType, QgsSymbolLayerV2List &layers );
105105

0 commit comments

Comments
 (0)