[QGIS Commit] r12146 - trunk/qgis/src/gui/symbology-ng
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Mon Nov 16 14:00:30 EST 2009
Author: jef
Date: 2009-11-16 14:00:30 -0500 (Mon, 16 Nov 2009)
New Revision: 12146
Modified:
trunk/qgis/src/gui/symbology-ng/qgscategorizedsymbolrendererv2widget.cpp
Log:
fix crash when removing category
Modified: trunk/qgis/src/gui/symbology-ng/qgscategorizedsymbolrendererv2widget.cpp
===================================================================
--- trunk/qgis/src/gui/symbology-ng/qgscategorizedsymbolrendererv2widget.cpp 2009-11-16 17:06:30 UTC (rev 12145)
+++ trunk/qgis/src/gui/symbology-ng/qgscategorizedsymbolrendererv2widget.cpp 2009-11-16 19:00:30 UTC (rev 12146)
@@ -16,50 +16,50 @@
#include <QStandardItem>
-QgsRendererV2Widget* QgsCategorizedSymbolRendererV2Widget::create(QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer)
+QgsRendererV2Widget* QgsCategorizedSymbolRendererV2Widget::create( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer )
{
- return new QgsCategorizedSymbolRendererV2Widget(layer, style, renderer);
+ return new QgsCategorizedSymbolRendererV2Widget( layer, style, renderer );
}
-QgsCategorizedSymbolRendererV2Widget::QgsCategorizedSymbolRendererV2Widget(QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer)
- : QgsRendererV2Widget(layer, style)
+QgsCategorizedSymbolRendererV2Widget::QgsCategorizedSymbolRendererV2Widget( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer )
+ : QgsRendererV2Widget( layer, style )
{
// try to recognize the previous renderer
// (null renderer means "no previous renderer")
- if (!renderer || renderer->type() != "categorizedSymbol")
+ if ( !renderer || renderer->type() != "categorizedSymbol" )
{
// we're not going to use it - so let's delete the renderer
delete renderer;
- mRenderer = new QgsCategorizedSymbolRendererV2("", QgsCategoryList());
+ mRenderer = new QgsCategorizedSymbolRendererV2( "", QgsCategoryList() );
}
else
{
- mRenderer = static_cast<QgsCategorizedSymbolRendererV2*>(renderer);
+ mRenderer = static_cast<QgsCategorizedSymbolRendererV2*>( renderer );
}
// setup user interface
- setupUi(this);
+ setupUi( this );
populateColumns();
populateColorRamps();
- QStandardItemModel* m = new QStandardItemModel(this);
+ QStandardItemModel* m = new QStandardItemModel( this );
QStringList labels;
labels << "Value" << "Label";
- m->setHorizontalHeaderLabels(labels);
- viewCategories->setModel(m);
+ m->setHorizontalHeaderLabels( labels );
+ viewCategories->setModel( m );
- mCategorizedSymbol = QgsSymbolV2::defaultSymbol(mLayer->geometryType());
+ mCategorizedSymbol = QgsSymbolV2::defaultSymbol( mLayer->geometryType() );
- connect(cboCategorizedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(categoryColumnChanged()));
+ connect( cboCategorizedColumn, SIGNAL( currentIndexChanged( int ) ), this, SLOT( categoryColumnChanged() ) );
- connect(viewCategories, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(categoriesDoubleClicked(const QModelIndex &)));
+ connect( viewCategories, SIGNAL( doubleClicked( const QModelIndex & ) ), this, SLOT( categoriesDoubleClicked( const QModelIndex & ) ) );
- connect(btnChangeCategorizedSymbol, SIGNAL(clicked()), this, SLOT(changeCategorizedSymbol()));
- connect(btnAddCategories, SIGNAL(clicked()), this, SLOT(addCategories()));
- connect(btnDeleteCategory, SIGNAL(clicked()), this, SLOT(deleteCategory()));
- connect(btnDeleteAllCategories, SIGNAL(clicked()), this, SLOT(deleteAllCategories()));
+ connect( btnChangeCategorizedSymbol, SIGNAL( clicked() ), this, SLOT( changeCategorizedSymbol() ) );
+ connect( btnAddCategories, SIGNAL( clicked() ), this, SLOT( addCategories() ) );
+ connect( btnDeleteCategory, SIGNAL( clicked() ), this, SLOT( deleteCategory() ) );
+ connect( btnDeleteAllCategories, SIGNAL( clicked() ), this, SLOT( deleteAllCategories() ) );
// update GUI from renderer
updateUiFromRenderer();
@@ -77,14 +77,14 @@
populateCategories();
// set column
- disconnect(cboCategorizedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(categoryColumnChanged()));
+ disconnect( cboCategorizedColumn, SIGNAL( currentIndexChanged( int ) ), this, SLOT( categoryColumnChanged() ) );
QString attrName = mRenderer->classAttribute();
- int idx = cboCategorizedColumn->findText(attrName, Qt::MatchExactly);
- cboCategorizedColumn->setCurrentIndex(idx >= 0 ? idx : 0);
- connect(cboCategorizedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(categoryColumnChanged()));
+ int idx = cboCategorizedColumn->findText( attrName, Qt::MatchExactly );
+ cboCategorizedColumn->setCurrentIndex( idx >= 0 ? idx : 0 );
+ connect( cboCategorizedColumn, SIGNAL( currentIndexChanged( int ) ), this, SLOT( categoryColumnChanged() ) );
// set source symbol
- if (mRenderer->sourceSymbol())
+ if ( mRenderer->sourceSymbol() )
{
delete mCategorizedSymbol;
mCategorizedSymbol = mRenderer->sourceSymbol()->clone();
@@ -92,15 +92,15 @@
}
// set source color ramp
- if (mRenderer->sourceColorRamp())
+ if ( mRenderer->sourceColorRamp() )
{
- QSize rampIconSize(50,16);
- QIcon icon = QgsSymbolLayerV2Utils::colorRampPreviewIcon(mRenderer->sourceColorRamp(), rampIconSize);
- if (cboCategorizedColorRamp->itemText(0) == "[source]")
- cboCategorizedColorRamp->setItemIcon(0, icon);
+ QSize rampIconSize( 50, 16 );
+ QIcon icon = QgsSymbolLayerV2Utils::colorRampPreviewIcon( mRenderer->sourceColorRamp(), rampIconSize );
+ if ( cboCategorizedColorRamp->itemText( 0 ) == "[source]" )
+ cboCategorizedColorRamp->setItemIcon( 0, icon );
else
- cboCategorizedColorRamp->insertItem(0, icon, "[source]");
- cboCategorizedColorRamp->setCurrentIndex(0);
+ cboCategorizedColorRamp->insertItem( 0, icon, "[source]" );
+ cboCategorizedColorRamp->setCurrentIndex( 0 );
}
}
@@ -112,8 +112,8 @@
void QgsCategorizedSymbolRendererV2Widget::changeCategorizedSymbol()
{
- QgsSymbolV2SelectorDialog dlg(mCategorizedSymbol, mStyle, this);
- if (!dlg.exec())
+ QgsSymbolV2SelectorDialog dlg( mCategorizedSymbol, mStyle, this );
+ if ( !dlg.exec() )
return;
updateCategorizedSymbolIcon();
@@ -121,38 +121,38 @@
void QgsCategorizedSymbolRendererV2Widget::updateCategorizedSymbolIcon()
{
- QIcon icon = QgsSymbolLayerV2Utils::symbolPreviewIcon(mCategorizedSymbol, btnChangeCategorizedSymbol->iconSize());
- btnChangeCategorizedSymbol->setIcon(icon);
+ QIcon icon = QgsSymbolLayerV2Utils::symbolPreviewIcon( mCategorizedSymbol, btnChangeCategorizedSymbol->iconSize() );
+ btnChangeCategorizedSymbol->setIcon( icon );
}
void QgsCategorizedSymbolRendererV2Widget::populateCategories()
{
- QStandardItemModel* m = qobject_cast<QStandardItemModel*>(viewCategories->model());
+ QStandardItemModel* m = qobject_cast<QStandardItemModel*>( viewCategories->model() );
m->clear();
QStringList labels;
labels << "Value" << "Label";
- m->setHorizontalHeaderLabels(labels);
+ m->setHorizontalHeaderLabels( labels );
- QSize iconSize(16,16);
+ QSize iconSize( 16, 16 );
int i, count = mRenderer->categories().count();
// TODO: sort?? utils.sortVariantList(keys);
- for (i = 0; i < count; i++)
+ for ( i = 0; i < count; i++ )
{
const QgsRendererCategoryV2& cat = mRenderer->categories()[i];
QVariant k = cat.value();
- QIcon icon = QgsSymbolLayerV2Utils::symbolPreviewIcon(cat.symbol(), iconSize);
- QStandardItem* item = new QStandardItem(icon, k.toString());
- item->setData(k); // set attribute value as user role
- item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+ QIcon icon = QgsSymbolLayerV2Utils::symbolPreviewIcon( cat.symbol(), iconSize );
+ QStandardItem* item = new QStandardItem( icon, k.toString() );
+ item->setData( k ); // set attribute value as user role
+ item->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled );
QList<QStandardItem *> list;
- list << item << new QStandardItem(cat.label());
+ list << item << new QStandardItem( cat.label() );
m->appendRow( list );
}
}
@@ -162,23 +162,23 @@
cboCategorizedColumn->clear();
const QgsFieldMap& flds = mLayer->pendingFields();
QgsFieldMap::ConstIterator it = flds.begin();
- for ( ; it != flds.end(); ++it)
+ for ( ; it != flds.end(); ++it )
{
- cboCategorizedColumn->addItem(it->name());
+ cboCategorizedColumn->addItem( it->name() );
}
}
void QgsCategorizedSymbolRendererV2Widget::populateColorRamps()
{
- QSize rampIconSize(50,16);
- cboCategorizedColorRamp->setIconSize(rampIconSize);
+ QSize rampIconSize( 50, 16 );
+ cboCategorizedColorRamp->setIconSize( rampIconSize );
QStringList rampNames = mStyle->colorRampNames();
- for (QStringList::iterator it = rampNames.begin(); it != rampNames.end(); ++it)
+ for ( QStringList::iterator it = rampNames.begin(); it != rampNames.end(); ++it )
{
- QgsVectorColorRampV2* ramp = mStyle->colorRamp(*it);
- QIcon icon = QgsSymbolLayerV2Utils::colorRampPreviewIcon(ramp, rampIconSize);
- cboCategorizedColorRamp->addItem(icon, *it);
+ QgsVectorColorRampV2* ramp = mStyle->colorRamp( *it );
+ QIcon icon = QgsSymbolLayerV2Utils::colorRampPreviewIcon( ramp, rampIconSize );
+ cboCategorizedColorRamp->addItem( icon, *it );
delete ramp;
}
}
@@ -189,29 +189,29 @@
deleteAllCategories();
}
-void QgsCategorizedSymbolRendererV2Widget::categoriesDoubleClicked(const QModelIndex & idx)
+void QgsCategorizedSymbolRendererV2Widget::categoriesDoubleClicked( const QModelIndex & idx )
{
- if (idx.isValid() && idx.column() == 0)
+ if ( idx.isValid() && idx.column() == 0 )
changeCategorySymbol();
}
void QgsCategorizedSymbolRendererV2Widget::changeCategorySymbol()
{
QVariant k = currentCategory();
- if (!k.isValid())
+ if ( !k.isValid() )
return;
- int catIdx = mRenderer->categoryIndexForValue(k);
+ int catIdx = mRenderer->categoryIndexForValue( k );
QgsSymbolV2* newSymbol = mRenderer->categories()[catIdx].symbol()->clone();
- QgsSymbolV2SelectorDialog dlg(newSymbol, mStyle, this);
- if (!dlg.exec())
+ QgsSymbolV2SelectorDialog dlg( newSymbol, mStyle, this );
+ if ( !dlg.exec() )
{
delete newSymbol;
return;
}
- mRenderer->updateCategorySymbol(catIdx, newSymbol);
+ mRenderer->updateCategorySymbol( catIdx, newSymbol );
populateCategories();
}
@@ -219,21 +219,21 @@
-static void _createCategories(QgsCategoryList& cats, QList<QVariant>& values, QgsSymbolV2* symbol, QgsVectorColorRampV2* ramp)
+static void _createCategories( QgsCategoryList& cats, QList<QVariant>& values, QgsSymbolV2* symbol, QgsVectorColorRampV2* ramp )
{
// sort the categories first
// TODO: sortVariantList(values);
int num = values.count();
- for (int i = 0; i < num; i++)
+ for ( int i = 0; i < num; i++ )
{
QVariant value = values[i];
- double x = i / (double) num;
+ double x = i / ( double ) num;
QgsSymbolV2* newSymbol = symbol->clone();
- newSymbol->setColor( ramp->color(x) );
+ newSymbol->setColor( ramp->color( x ) );
- cats.append( QgsRendererCategoryV2(value, newSymbol, value.toString()) );
+ cats.append( QgsRendererCategoryV2( value, newSymbol, value.toString() ) );
}
}
@@ -241,9 +241,9 @@
void QgsCategorizedSymbolRendererV2Widget::addCategories()
{
QString attrName = cboCategorizedColumn->currentText();
- int idx = QgsFeatureRendererV2::fieldNameIndex(mLayer->pendingFields(), attrName);
+ int idx = QgsFeatureRendererV2::fieldNameIndex( mLayer->pendingFields(), attrName );
QList<QVariant> unique_vals;
- mLayer->dataProvider()->uniqueValues(idx, unique_vals);
+ mLayer->dataProvider()->uniqueValues( idx, unique_vals );
//DlgAddCategories dlg(mStyle, createDefaultSymbol(), unique_vals, this);
//if (!dlg.exec())
@@ -251,13 +251,13 @@
QgsVectorColorRampV2* ramp = NULL;
QString rampName = cboCategorizedColorRamp->currentText();
- if (rampName == "[source]")
+ if ( rampName == "[source]" )
ramp = mRenderer->sourceColorRamp()->clone();
else
ramp = mStyle->colorRamp( rampName );
QgsCategoryList cats;
- _createCategories(cats, unique_vals, mCategorizedSymbol, ramp );
+ _createCategories( cats, unique_vals, mCategorizedSymbol, ramp );
// TODO: if not all categories are desired, delete some!
/*
@@ -275,9 +275,9 @@
// recreate renderer
delete mRenderer;
- mRenderer = new QgsCategorizedSymbolRendererV2(attrName, cats);
- mRenderer->setSourceSymbol(mCategorizedSymbol->clone());
- mRenderer->setSourceColorRamp(ramp->clone());
+ mRenderer = new QgsCategorizedSymbolRendererV2( attrName, cats );
+ mRenderer->setSourceSymbol( mCategorizedSymbol->clone() );
+ mRenderer->setSourceColorRamp( ramp->clone() );
populateCategories();
}
@@ -285,7 +285,7 @@
int QgsCategorizedSymbolRendererV2Widget::currentCategoryRow()
{
QModelIndex idx = viewCategories->selectionModel()->currentIndex();
- if (!idx.isValid())
+ if ( !idx.isValid() )
return -1;
return idx.row();
}
@@ -293,29 +293,23 @@
QVariant QgsCategorizedSymbolRendererV2Widget::currentCategory()
{
int row = currentCategoryRow();
- if (row == -1)
+ if ( row == -1 )
return QVariant();
- QStandardItemModel* m = qobject_cast<QStandardItemModel*>(viewCategories->model());
- return m->item(row)->data();
+ QStandardItemModel* m = qobject_cast<QStandardItemModel*>( viewCategories->model() );
+ return m->item( row )->data();
}
void QgsCategorizedSymbolRendererV2Widget::deleteCategory()
{
QVariant k = currentCategory();
- if (!k.isValid())
+ if ( !k.isValid() )
return;
- const QgsCategoryList& cats = mRenderer->categories();
- QgsCategoryList::ConstIterator it = cats.begin();
+ int idx = mRenderer->categoryIndexForValue( k );
+ if ( idx < 0 )
+ return;
- for ( ; it != cats.end(); ++it)
- {
- if (k.toString() == it->value().toString())
- {
- int idx = mRenderer->categoryIndexForValue(k);
- mRenderer->deleteCategory(idx);
- }
- }
+ mRenderer->deleteCategory( idx );
populateCategories();
}
More information about the QGIS-commit
mailing list