@@ -227,16 +227,29 @@ static void _createCategories( QgsCategoryList& cats, QList<QVariant>& values, Q
227227
228228 int num = values.count ();
229229
230+ bool hasNull = false ;
231+
230232 for ( int i = 0 ; i < num; i++ )
231233 {
232234 QVariant value = values[i];
235+ if ( value.toString ().isNull () )
236+ {
237+ hasNull = true ;
238+ }
233239 double x = i / ( double ) num;
234240 QgsSymbolV2* newSymbol = symbol->clone ();
235241 newSymbol->setColor ( ramp->color ( x ) );
236242
237243 cats.append ( QgsRendererCategoryV2 ( value, newSymbol, value.toString () ) );
238244 }
239245
246+ // add null (default) value if not exists
247+ if ( !hasNull )
248+ {
249+ QgsSymbolV2* newSymbol = symbol->clone ();
250+ newSymbol->setColor ( ramp->color ( 1 ) );
251+ cats.append ( QgsRendererCategoryV2 ( QVariant ( " " ), newSymbol, QString () ) );
252+ }
240253}
241254
242255void QgsCategorizedSymbolRendererV2Widget::addCategories ()
@@ -264,6 +277,8 @@ void QgsCategorizedSymbolRendererV2Widget::addCategories()
264277 QgsCategoryList cats;
265278 _createCategories ( cats, unique_vals, mCategorizedSymbol , ramp );
266279
280+ bool deleteExisting = false ;
281+
267282 if ( !mOldClassificationAttribute .isEmpty () &&
268283 attrName != mOldClassificationAttribute &&
269284 mRenderer ->categories ().count () > 0 )
@@ -275,28 +290,33 @@ void QgsCategorizedSymbolRendererV2Widget::addCategories()
275290 .arg ( mOldClassificationAttribute ).arg ( attrName ),
276291 QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel );
277292 if ( res == QMessageBox::Cancel )
293+ {
278294 return ;
295+ }
296+
297+ deleteExisting = ( res == QMessageBox::Yes );
298+ }
279299
280- bool deleteExisting = ( res == QMessageBox::Yes );
281- if ( !deleteExisting )
300+ if ( !deleteExisting )
301+ {
302+ QgsCategoryList prevCats = mRenderer ->categories ();
303+ for ( int i = 0 ; i < cats.size (); ++i )
282304 {
283- QgsCategoryList prevCats = mRenderer ->categories ();
284- for ( int i = 0 ; i < cats.size (); ++i )
305+ bool contains = false ;
306+ QVariant value = cats.at ( i ).value ();
307+ for ( int j = 0 ; j < prevCats.size () && !contains; ++j )
285308 {
286- bool contains = false ;
287- QVariant value = cats.at ( i ).value ();
288- for ( int j = 0 ; j < prevCats.size () && !contains; ++j )
309+ if ( prevCats.at ( j ).value () == value )
289310 {
290- if ( prevCats. at ( j ). value () == value )
291- contains = true ;
311+ contains = true ;
312+ break ;
292313 }
293-
294- if ( !contains )
295- prevCats.append ( cats.at ( i ) );
296314 }
297- cats = prevCats;
298- }
299315
316+ if ( !contains )
317+ prevCats.append ( cats.at ( i ) );
318+ }
319+ cats = prevCats;
300320 }
301321
302322 mOldClassificationAttribute = attrName;
0 commit comments