bool QgsStyleV2::renameSymbol( QString oldName, QString newName ) { QgsSymbolV2 *symbol = mSymbols.take( oldName ); if ( !symbol ) return false; mSymbols.insert( newName, symbol ); if ( !mCurrentDB ) { QgsDebugMsg( "Sorry! Cannot open database to tag." ); return false; } int symbolid = symbolId( oldName ); if ( !symbolid ) { QgsDebugMsg( "No such symbol for tagging in database: " + oldName ); return false; } rename( SymbolEntity, symbolid, newName ); return true; }
bool QgsStyle::renameSymbol( const QString& oldName, const QString& newName ) { if ( mSymbols.contains( newName ) ) { QgsDebugMsg( "Symbol of new name already exists" ); return false; } QgsSymbol *symbol = mSymbols.take( oldName ); if ( !symbol ) return false; mSymbols.insert( newName, symbol ); if ( !mCurrentDB ) { QgsDebugMsg( "Sorry! Cannot open database to tag." ); return false; } int symbolid = symbolId( oldName ); if ( !symbolid ) { QgsDebugMsg( "No such symbol for tagging in database: " + oldName ); return false; } rename( SymbolEntity, symbolid, newName ); return true; }
bool QgsStyleV2::removeSymbol( QString name ) { QgsSymbolV2 *symbol = mSymbols.take( name ); if ( !symbol ) return false; // remove from map and delete delete symbol; // TODO // Simplify this work here, its STUPID to run two DB queries for the sake of remove() if ( !mCurrentDB ) { QgsDebugMsg( "Sorry! Cannot open database to tag." ); return false; } int symbolid = symbolId( name ); if ( !symbolid ) { QgsDebugMsg( "No such symbol for deleting in database: " + name + ". Cheers." ); } remove( SymbolEntity, symbolid ); return true; }
bool QgsStyle::tagSymbol( StyleEntity type, const QString& symbol, const QStringList& tags ) { if ( !mCurrentDB ) { QgsDebugMsg( "Sorry! Cannot open database to tag." ); return false; } int symbolid = type == SymbolEntity ? symbolId( symbol ) : colorrampId( symbol ); if ( !symbolid ) { QgsDebugMsg( "No such symbol for tagging in database: " + symbol ); return false; } QString tag; Q_FOREACH ( const QString &t, tags ) { tag = t.trimmed(); if ( tag != "" ) { // sql: gets the id of the tag if present or insert the tag and get the id of the tag char *query = sqlite3_mprintf( "SELECT id FROM tag WHERE LOWER(name)='%q'", tag.toUtf8().toLower().constData() ); sqlite3_stmt *ppStmt; int nErr = sqlite3_prepare_v2( mCurrentDB, query, -1, &ppStmt, nullptr ); int tagid; if ( nErr == SQLITE_OK && sqlite3_step( ppStmt ) == SQLITE_ROW ) { tagid = sqlite3_column_int( ppStmt, 0 ); } else { tagid = addTag( tag ); } sqlite3_finalize( ppStmt ); // Now map the tag to the symbol if it's not already tagged if ( !symbolHasTag( type, symbol, tag ) ) { query = type == SymbolEntity ? sqlite3_mprintf( "INSERT INTO tagmap VALUES (%d,%d)", tagid, symbolid ) : sqlite3_mprintf( "INSERT INTO ctagmap VALUES (%d,%d)", tagid, symbolid ); char *zErr = nullptr; nErr = sqlite3_exec( mCurrentDB, query, nullptr, nullptr, &zErr ); if ( nErr ) { QgsDebugMsg( zErr ); } } } }
bool QgsStyleV2::tagSymbol( StyleEntity type, QString symbol, QStringList tags ) { if ( !mCurrentDB ) { QgsDebugMsg( "Sorry! Cannot open database to tag." ); return false; } int symbolid = type == SymbolEntity ? symbolId( symbol ) : colorrampId( symbol ); if ( !symbolid ) { QgsDebugMsg( "No such symbol for tagging in database: " + symbol ); return false; } foreach ( const QString &tag, tags ) { // sql: gets the id of the tag if present or insert the tag and get the id of the tag char *query = sqlite3_mprintf( "SELECT id FROM tag WHERE name='%q'", tag.toUtf8().constData() ); sqlite3_stmt *ppStmt; int nErr = sqlite3_prepare_v2( mCurrentDB, query, -1, &ppStmt, NULL ); int tagid; if ( nErr == SQLITE_OK && sqlite3_step( ppStmt ) == SQLITE_ROW ) { tagid = sqlite3_column_int( ppStmt, 0 ); } else { tagid = addTag( tag ); } sqlite3_finalize( ppStmt ); // Now map the tag to the symbol query = type == SymbolEntity ? sqlite3_mprintf( "INSERT INTO tagmap VALUES (%d,%d)", tagid, symbolid ) : sqlite3_mprintf( "INSERT INTO ctagmap VALUES (%d,%d)", tagid, symbolid ); char *zErr = 0; nErr = sqlite3_exec( mCurrentDB, query, NULL, NULL, &zErr ); if ( nErr ) { QgsDebugMsg( zErr ); } }