Skip to content

Commit 948841b

Browse files
author
wonder
committed
Vector layer properties dialog can convert layer to new/old symbology.
(there's no transfer of settings between old/new symbology) git-svn-id: http://svn.osgeo.org/qgis/trunk@12191 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent dc159b3 commit 948841b

6 files changed

+179
-92
lines changed

src/app/qgsvectorlayerproperties.cpp

+98-49
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@
5656

5757
#include "qgsrendererv2propertiesdialog.h"
5858
#include "qgsstylev2.h"
59+
#include "qgssinglesymbolrenderer.h"
60+
#include "qgssinglesymbolrendererv2.h"
5961

6062
#if QT_VERSION < 0x040300
6163
#define toPlainText() text()
@@ -95,6 +97,7 @@ QgsVectorLayerProperties::QgsVectorLayerProperties(
9597
mToggleEditingButton->setIcon( QgisApp::getThemeIcon( "/mActionToggleEditing.png" ) );
9698
mCalculateFieldButton->setIcon( QgisApp::getThemeIcon( "/mActionCalculateField.png" ) );
9799

100+
connect( btnUseNewSymbology, SIGNAL( clicked() ), this, SLOT( useNewSymbology() ) );
98101

99102
// Create the Label dialog tab
100103
QVBoxLayout *layout = new QVBoxLayout( labelOptionsFrame );
@@ -479,55 +482,8 @@ void QgsVectorLayerProperties::reset( void )
479482
}
480483
}
481484

482-
//find out the type of renderer in the vectorlayer, create a dialog with these settings and add it to the form
483-
delete mRendererDialog;
484-
mRendererDialog = 0;
485-
486-
if ( layer->isUsingRendererV2() )
487-
{
488-
mRendererDialog = new QgsRendererV2PropertiesDialog( layer, QgsStyleV2::defaultStyle(), true );
489-
490-
// hide unused widgets
491-
legendtypecombobox->hide();
492-
legendtypelabel->hide();
493-
lblTransparencyPercent->hide();
494-
sliderTransparency->hide();
495-
}
496-
else
497-
{
498-
499-
QString rtype = layer->renderer()->name();
500-
if ( rtype == "Single Symbol" )
501-
{
502-
mRendererDialog = new QgsSingleSymbolDialog( layer );
503-
legendtypecombobox->setCurrentIndex( 0 );
504-
}
505-
else if ( rtype == "Graduated Symbol" )
506-
{
507-
mRendererDialog = new QgsGraduatedSymbolDialog( layer );
508-
legendtypecombobox->setCurrentIndex( 1 );
509-
}
510-
else if ( rtype == "Continuous Color" )
511-
{
512-
mRendererDialog = new QgsContinuousColorDialog( layer );
513-
legendtypecombobox->setCurrentIndex( 2 );
514-
}
515-
else if ( rtype == "Unique Value" )
516-
{
517-
mRendererDialog = new QgsUniqueValueDialog( layer );
518-
legendtypecombobox->setCurrentIndex( 3 );
519-
}
520-
521-
QObject::connect( legendtypecombobox, SIGNAL( activated( const QString & ) ), this,
522-
SLOT( alterLayerDialog( const QString & ) ) );
523-
524-
}
525-
526-
if ( mRendererDialog )
527-
{
528-
widgetStackRenderers->addWidget( mRendererDialog );
529-
widgetStackRenderers->setCurrentWidget( mRendererDialog );
530-
}
485+
// load appropriate symbology page (V1 or V2)
486+
updateSymbologyPage();
531487

532488
// reset fields in label dialog
533489
layer->label()->setFields( layer->pendingFields() );
@@ -1136,3 +1092,96 @@ QList<QgsVectorOverlayPlugin*> QgsVectorLayerProperties::overlayPlugins() const
11361092

11371093
return pluginList;
11381094
}
1095+
1096+
void QgsVectorLayerProperties::setUsingNewSymbology( bool useNewSymbology )
1097+
{
1098+
if ( useNewSymbology )
1099+
{
1100+
layer->setUsingRendererV2( true );
1101+
layer->setRendererV2( QgsFeatureRendererV2::defaultRenderer( layer->geometryType() ) );
1102+
layer->setRenderer( NULL );
1103+
}
1104+
else
1105+
{
1106+
layer->setUsingRendererV2( false );
1107+
layer->setRendererV2( NULL );
1108+
layer->setRenderer( new QgsSingleSymbolRenderer( layer->geometryType() ) );
1109+
}
1110+
1111+
// update GUI!
1112+
updateSymbologyPage();
1113+
}
1114+
1115+
void QgsVectorLayerProperties::useNewSymbology()
1116+
{
1117+
int res = QMessageBox::question( this, tr( "Symbology" ),
1118+
tr( "Do you wish to use original symbology implementation for this layer?" ),
1119+
QMessageBox::Yes | QMessageBox::No );
1120+
1121+
if ( res != QMessageBox::Yes )
1122+
return;
1123+
1124+
setUsingNewSymbology( true );
1125+
}
1126+
1127+
void QgsVectorLayerProperties::updateSymbologyPage()
1128+
{
1129+
1130+
//find out the type of renderer in the vectorlayer, create a dialog with these settings and add it to the form
1131+
delete mRendererDialog;
1132+
mRendererDialog = 0;
1133+
1134+
bool v2 = layer->isUsingRendererV2();
1135+
1136+
// hide unused widgets
1137+
legendtypecombobox->setVisible( !v2 );
1138+
legendtypelabel->setVisible( !v2 );
1139+
lblTransparencyPercent->setVisible( !v2 );
1140+
sliderTransparency->setVisible( !v2 );
1141+
btnUseNewSymbology->setVisible( !v2 );
1142+
1143+
if ( v2 )
1144+
{
1145+
mRendererDialog = new QgsRendererV2PropertiesDialog( layer, QgsStyleV2::defaultStyle(), true );
1146+
1147+
connect( mRendererDialog, SIGNAL( useNewSymbology( bool ) ), this, SLOT( setUsingNewSymbology( bool ) ) );
1148+
1149+
}
1150+
else
1151+
{
1152+
1153+
QString rtype = layer->renderer()->name();
1154+
if ( rtype == "Single Symbol" )
1155+
{
1156+
mRendererDialog = new QgsSingleSymbolDialog( layer );
1157+
legendtypecombobox->setCurrentIndex( 0 );
1158+
}
1159+
else if ( rtype == "Graduated Symbol" )
1160+
{
1161+
mRendererDialog = new QgsGraduatedSymbolDialog( layer );
1162+
legendtypecombobox->setCurrentIndex( 1 );
1163+
}
1164+
else if ( rtype == "Continuous Color" )
1165+
{
1166+
mRendererDialog = new QgsContinuousColorDialog( layer );
1167+
legendtypecombobox->setCurrentIndex( 2 );
1168+
}
1169+
else if ( rtype == "Unique Value" )
1170+
{
1171+
mRendererDialog = new QgsUniqueValueDialog( layer );
1172+
legendtypecombobox->setCurrentIndex( 3 );
1173+
}
1174+
1175+
QObject::connect( legendtypecombobox, SIGNAL( activated( const QString & ) ), this,
1176+
SLOT( alterLayerDialog( const QString & ) ) );
1177+
1178+
}
1179+
1180+
if ( mRendererDialog )
1181+
{
1182+
widgetStackRenderers->addWidget( mRendererDialog );
1183+
widgetStackRenderers->setCurrentWidget( mRendererDialog );
1184+
}
1185+
1186+
1187+
}

src/app/qgsvectorlayerproperties.h

+6
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,9 @@ class QgsVectorLayerProperties : public QDialog, private Ui::QgsVectorLayerPrope
112112
void attributeAdded( int idx );
113113
void attributeDeleted( int idx );
114114

115+
void useNewSymbology();
116+
void setUsingNewSymbology( bool useNewSymbology );
117+
115118
signals:
116119

117120
/** emitted when changes to layer were saved to update legend */
@@ -120,6 +123,9 @@ class QgsVectorLayerProperties : public QDialog, private Ui::QgsVectorLayerPrope
120123
void toggleEditing( QgsMapLayer * );
121124

122125
protected:
126+
127+
void updateSymbologyPage();
128+
123129
enum attrColumns
124130
{
125131
attrIdCol = 0,

src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp

+53-40
Original file line numberDiff line numberDiff line change
@@ -16,64 +16,65 @@
1616
#include "qgsvectorlayer.h"
1717

1818
#include <QKeyEvent>
19+
#include <QMessageBox>
1920

20-
21-
QgsRendererV2PropertiesDialog::QgsRendererV2PropertiesDialog(QgsVectorLayer* layer, QgsStyleV2* style, bool embedded)
22-
: mLayer(layer), mStyle(style), mActiveWidget(NULL)
21+
QgsRendererV2PropertiesDialog::QgsRendererV2PropertiesDialog( QgsVectorLayer* layer, QgsStyleV2* style, bool embedded )
22+
: mLayer( layer ), mStyle( style ), mActiveWidget( NULL )
2323
{
24-
setupUi(this);
24+
setupUi( this );
2525

2626
// can be embedded in vector layer properties
27-
if (embedded)
27+
if ( embedded )
2828
{
2929
buttonBox->hide();
30-
layout()->setContentsMargins(0,0,0,0);
30+
layout()->setContentsMargins( 0, 0, 0, 0 );
3131
}
3232

33-
connect(buttonBox, SIGNAL(accepted()), this, SLOT(onOK()));
34-
connect(btnSymbolLevels, SIGNAL(clicked()), this, SLOT(showSymbolLevels()));
33+
connect( buttonBox, SIGNAL( accepted() ), this, SLOT( onOK() ) );
34+
connect( btnSymbolLevels, SIGNAL( clicked() ), this, SLOT( showSymbolLevels() ) );
35+
connect( btnOldSymbology, SIGNAL( clicked() ), this, SLOT( useOldSymbology() ) );
3536

3637
// initialize registry's widget functions
3738
QgsRendererV2Registry* reg = QgsRendererV2Registry::instance();
38-
if (reg->rendererMetadata("singleSymbol").widgetFunction() == NULL)
39+
if ( reg->rendererMetadata( "singleSymbol" ).widgetFunction() == NULL )
3940
{
40-
reg->setRendererWidgetFunction("singleSymbol", QgsSingleSymbolRendererV2Widget::create);
41-
reg->setRendererWidgetFunction("categorizedSymbol", QgsCategorizedSymbolRendererV2Widget::create);
42-
reg->setRendererWidgetFunction("graduatedSymbol", QgsGraduatedSymbolRendererV2Widget::create);
41+
reg->setRendererWidgetFunction( "singleSymbol", QgsSingleSymbolRendererV2Widget::create );
42+
reg->setRendererWidgetFunction( "categorizedSymbol", QgsCategorizedSymbolRendererV2Widget::create );
43+
reg->setRendererWidgetFunction( "graduatedSymbol", QgsGraduatedSymbolRendererV2Widget::create );
4344
}
4445

4546
QPixmap pix;
4647
QStringList renderers = reg->renderersList();
47-
foreach (QString name, renderers)
48+
foreach( QString name, renderers )
4849
{
49-
QgsRendererV2Metadata m = reg->rendererMetadata(name);
50+
QgsRendererV2Metadata m = reg->rendererMetadata( name );
5051

5152
QString iconPath = QgsApplication::defaultThemePath() + m.iconName();
52-
if (!pix.load(iconPath, "png"))
53+
if ( !pix.load( iconPath, "png" ) )
5354
pix = QPixmap();
5455

55-
cboRenderers->addItem(QIcon(pix), m.visibleName(), name);
56+
cboRenderers->addItem( QIcon( pix ), m.visibleName(), name );
5657
}
5758

58-
cboRenderers->setCurrentIndex(-1); // set no current renderer
59+
cboRenderers->setCurrentIndex( -1 ); // set no current renderer
5960

6061
// if the layer doesn't use renderer V2, let's start using it!
61-
if (!mLayer->isUsingRendererV2())
62+
if ( !mLayer->isUsingRendererV2() )
6263
{
63-
mLayer->setRendererV2( QgsFeatureRendererV2::defaultRenderer(mLayer->geometryType()) );
64-
mLayer->setUsingRendererV2(true);
64+
mLayer->setRendererV2( QgsFeatureRendererV2::defaultRenderer( mLayer->geometryType() ) );
65+
mLayer->setUsingRendererV2( true );
6566
}
6667

6768
// setup slot rendererChanged()
68-
connect(cboRenderers, SIGNAL(currentIndexChanged(int)), this, SLOT(rendererChanged()));
69+
connect( cboRenderers, SIGNAL( currentIndexChanged( int ) ), this, SLOT( rendererChanged() ) );
6970

7071
// set current renderer from layer
7172
QString rendererName = mLayer->rendererV2()->type();
72-
for (int i = 0; i < cboRenderers->count(); i++)
73+
for ( int i = 0; i < cboRenderers->count(); i++ )
7374
{
74-
if (cboRenderers->itemData(i).toString() == rendererName)
75+
if ( cboRenderers->itemData( i ).toString() == rendererName )
7576
{
76-
cboRenderers->setCurrentIndex(i);
77+
cboRenderers->setCurrentIndex( i );
7778
return;
7879
}
7980
}
@@ -87,47 +88,47 @@ QgsRendererV2PropertiesDialog::QgsRendererV2PropertiesDialog(QgsVectorLayer* lay
8788
void QgsRendererV2PropertiesDialog::rendererChanged()
8889
{
8990

90-
if (cboRenderers->currentIndex() == -1)
91+
if ( cboRenderers->currentIndex() == -1 )
9192
{
92-
QgsDebugMsg("No current item -- this should never happen!");
93+
QgsDebugMsg( "No current item -- this should never happen!" );
9394
return;
9495
}
9596

9697
QString rendererName = cboRenderers->itemData( cboRenderers->currentIndex() ).toString();
9798

9899
// get rid of old active widget (if any)
99-
if (mActiveWidget)
100+
if ( mActiveWidget )
100101
{
101102
stackedWidget->removeWidget( mActiveWidget );
102103

103104
delete mActiveWidget;
104105
mActiveWidget = NULL;
105106
}
106107

107-
QgsRendererV2Metadata m = QgsRendererV2Registry::instance()->rendererMetadata(rendererName);
108+
QgsRendererV2Metadata m = QgsRendererV2Registry::instance()->rendererMetadata( rendererName );
108109
QgsRendererV2WidgetFunc fWidget = m.widgetFunction();
109-
if (fWidget != NULL)
110+
if ( fWidget != NULL )
110111
{
111112
// instantiate the widget and set as active
112-
mActiveWidget = fWidget(mLayer, mStyle, mLayer->rendererV2()->clone());
113-
stackedWidget->addWidget(mActiveWidget);
114-
stackedWidget->setCurrentWidget(mActiveWidget);
113+
mActiveWidget = fWidget( mLayer, mStyle, mLayer->rendererV2()->clone() );
114+
stackedWidget->addWidget( mActiveWidget );
115+
stackedWidget->setCurrentWidget( mActiveWidget );
115116

116-
btnSymbolLevels->setEnabled(true);
117+
btnSymbolLevels->setEnabled( true );
117118
}
118119
else
119120
{
120121
// set default "no edit widget available" page
121-
stackedWidget->setCurrentWidget(pageNoWidget);
122+
stackedWidget->setCurrentWidget( pageNoWidget );
122123

123-
btnSymbolLevels->setEnabled(false);
124+
btnSymbolLevels->setEnabled( false );
124125
}
125126

126127
}
127128

128129
void QgsRendererV2PropertiesDialog::apply()
129130
{
130-
if (mActiveWidget != NULL)
131+
if ( mActiveWidget != NULL )
131132
{
132133
mLayer->setRendererV2( mActiveWidget->renderer()->clone() );
133134
}
@@ -149,22 +150,34 @@ void QgsRendererV2PropertiesDialog::keyPressEvent( QKeyEvent * e )
149150
}
150151
else
151152
{
152-
QDialog::keyPressEvent(e);
153+
QDialog::keyPressEvent( e );
153154
}
154155
}
155156

156157

157158
void QgsRendererV2PropertiesDialog::showSymbolLevels()
158159
{
159-
if (!mActiveWidget)
160+
if ( !mActiveWidget )
160161
return;
161162

162163
QgsFeatureRendererV2* r = mActiveWidget->renderer();
163164
QgsSymbolV2List symbols = r->symbols();
164165

165-
QgsSymbolLevelsV2Dialog dlg(symbols, r->usingSymbolLevels(), this);
166-
if (dlg.exec())
166+
QgsSymbolLevelsV2Dialog dlg( symbols, r->usingSymbolLevels(), this );
167+
if ( dlg.exec() )
167168
{
168169
r->setUsingSymbolLevels( dlg.usingLevels() );
169170
}
170171
}
172+
173+
void QgsRendererV2PropertiesDialog::useOldSymbology()
174+
{
175+
int res = QMessageBox::question( this, tr( "Symbology" ),
176+
tr( "Do you wish to use original symbology implementation for this layer?" ),
177+
QMessageBox::Yes | QMessageBox::No );
178+
179+
if ( res != QMessageBox::Yes )
180+
return;
181+
182+
emit useNewSymbology( false );
183+
}

src/gui/symbology-ng/qgsrendererv2propertiesdialog.h

+5
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ class GUI_EXPORT QgsRendererV2PropertiesDialog : public QDialog, private Ui::Qgs
3030

3131
void showSymbolLevels();
3232

33+
void useOldSymbology();
34+
35+
signals:
36+
void useNewSymbology( bool );
37+
3338
protected:
3439

3540
//! Reimplements dialog keyPress event so we can ignore it

0 commit comments

Comments
 (0)