@@ -228,16 +228,29 @@ static void _createCategories( QgsCategoryList& cats, QList<QVariant>& values, Q
228
228
229
229
int num = values.count ();
230
230
231
+ bool hasNull = false ;
232
+
231
233
for ( int i = 0 ; i < num; i++ )
232
234
{
233
235
QVariant value = values[i];
236
+ if ( value.toString ().isNull () )
237
+ {
238
+ hasNull = true ;
239
+ }
234
240
double x = i / ( double ) num;
235
241
QgsSymbolV2* newSymbol = symbol->clone ();
236
242
newSymbol->setColor ( ramp->color ( x ) );
237
243
238
244
cats.append ( QgsRendererCategoryV2 ( value, newSymbol, value.toString () ) );
239
245
}
240
246
247
+ // add null (default) value if not exists
248
+ if ( !hasNull )
249
+ {
250
+ QgsSymbolV2* newSymbol = symbol->clone ();
251
+ newSymbol->setColor ( ramp->color ( 1 ) );
252
+ cats.append ( QgsRendererCategoryV2 ( QVariant ( " " ), newSymbol, QString () ) );
253
+ }
241
254
}
242
255
243
256
void QgsCategorizedSymbolRendererV2Widget::addCategories ()
@@ -265,6 +278,8 @@ void QgsCategorizedSymbolRendererV2Widget::addCategories()
265
278
QgsCategoryList cats;
266
279
_createCategories ( cats, unique_vals, mCategorizedSymbol , ramp );
267
280
281
+ bool deleteExisting = false ;
282
+
268
283
if ( !mOldClassificationAttribute .isEmpty () &&
269
284
attrName != mOldClassificationAttribute &&
270
285
mRenderer ->categories ().count () > 0 )
@@ -276,28 +291,33 @@ void QgsCategorizedSymbolRendererV2Widget::addCategories()
276
291
.arg ( mOldClassificationAttribute ).arg ( attrName ),
277
292
QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel );
278
293
if ( res == QMessageBox::Cancel )
294
+ {
279
295
return ;
296
+ }
297
+
298
+ deleteExisting = ( res == QMessageBox::Yes );
299
+ }
280
300
281
- bool deleteExisting = ( res == QMessageBox::Yes );
282
- if ( !deleteExisting )
301
+ if ( !deleteExisting )
302
+ {
303
+ QgsCategoryList prevCats = mRenderer ->categories ();
304
+ for ( int i = 0 ; i < cats.size (); ++i )
283
305
{
284
- QgsCategoryList prevCats = mRenderer ->categories ();
285
- for ( int i = 0 ; i < cats.size (); ++i )
306
+ bool contains = false ;
307
+ QVariant value = cats.at ( i ).value ();
308
+ for ( int j = 0 ; j < prevCats.size () && !contains; ++j )
286
309
{
287
- bool contains = false ;
288
- QVariant value = cats.at ( i ).value ();
289
- for ( int j = 0 ; j < prevCats.size () && !contains; ++j )
310
+ if ( prevCats.at ( j ).value () == value )
290
311
{
291
- if ( prevCats. at ( j ). value () == value )
292
- contains = true ;
312
+ contains = true ;
313
+ break ;
293
314
}
294
-
295
- if ( !contains )
296
- prevCats.append ( cats.at ( i ) );
297
315
}
298
- cats = prevCats;
299
- }
300
316
317
+ if ( !contains )
318
+ prevCats.append ( cats.at ( i ) );
319
+ }
320
+ cats = prevCats;
301
321
}
302
322
303
323
mOldClassificationAttribute = attrName;
0 commit comments