Skip to content

Commit 1b43de3

Browse files
Emilio Loijef-n
authored andcommitted
Ask for confirmation before overwrite a layer style
1 parent bfe2f9f commit 1b43de3

File tree

3 files changed

+347
-339
lines changed

3 files changed

+347
-339
lines changed

src/app/qgsvectorlayerproperties.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -728,6 +728,7 @@ void QgsVectorLayerProperties::saveStyleAs( StyleType styleType )
728728
apply();
729729

730730
layer->saveStyleToDatabase( styleName, styleDesc, isDefault, uiFileContent, msgError );
731+
731732
if( !msgError.isNull() )
732733
{
733734
QMessageBox::warning( this, infoWindowTitle, msgError );
@@ -736,6 +737,7 @@ void QgsVectorLayerProperties::saveStyleAs( StyleType styleType )
736737
{
737738
QMessageBox::information( this, infoWindowTitle, tr( "Style saved" ) );
738739
}
740+
739741
}
740742
else
741743
{

src/core/qgsvectorlayer.cpp

Lines changed: 128 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include <QString>
3333
#include <QDomNode>
3434
#include <QVector>
35+
#include <QMessageBox>
3536

3637
#include "qgsvectorlayer.h"
3738

@@ -73,40 +74,39 @@
7374
#include "qgsdiagramrendererv2.h"
7475
#include "qgsstylev2.h"
7576
#include "qgssymbologyv2conversion.h"
76-
#include "qgspallabeling.h"
7777

7878
#ifdef TESTPROVIDERLIB
7979
#include <dlfcn.h>
8080
#endif
8181

8282
typedef bool saveStyle_t(
83-
const QString& uri,
84-
const QString& qmlStyle,
85-
const QString& sldStyle,
86-
const QString& styleName,
87-
const QString& styleDescription,
88-
const QString& uiFileContent,
89-
bool useAsDefault,
90-
QString& errCause
83+
const QString& uri,
84+
const QString& qmlStyle,
85+
const QString& sldStyle,
86+
const QString& styleName,
87+
const QString& styleDescription,
88+
const QString& uiFileContent,
89+
bool useAsDefault,
90+
QString& errCause
9191
);
9292

9393
typedef QString loadStyle_t(
94-
const QString& uri,
95-
QString& errCause
94+
const QString& uri,
95+
QString& errCause
9696
);
9797

9898
typedef int listStyles_t(
99-
const QString& uri,
100-
QStringList &ids,
101-
QStringList &names,
102-
QStringList &descriptions,
103-
QString& errCause
99+
const QString& uri,
100+
QVector<QString> &ids,
101+
QVector<QString> &names,
102+
QVector<QString> &descriptions,
103+
QString& errCause
104104
);
105105

106106
typedef QString getStyleById_t(
107-
const QString& uri,
108-
QString styleID,
109-
QString& errCause
107+
const QString& uri,
108+
QString styleID,
109+
QString& errCause
110110
);
111111

112112

@@ -3731,87 +3731,86 @@ QDomElement QgsAttributeEditorField::toDomElement( QDomDocument& doc ) const
37313731
return elem;
37323732
}
37333733

3734-
int QgsVectorLayer::listStylesInDatabase( QStringList &ids, QStringList &names, QStringList &descriptions, QString &msgError )
3734+
int QgsVectorLayer::listStylesInDatabase( QVector<QString> &ids, QVector<QString> &names, QVector<QString> &descriptions, QString &msgError )
37353735
{
3736-
QgsProviderRegistry * pReg = QgsProviderRegistry::instance();
3737-
QLibrary *myLib = pReg->providerLibrary( mProviderKey );
3738-
if ( !myLib )
3739-
{
3740-
msgError = QObject::tr( "Unable to load %1 provider" ).arg( mProviderKey );
3741-
return -1;
3742-
}
3743-
listStyles_t* listStylesExternalMethod = ( listStyles_t * ) cast_to_fptr( myLib->resolve( "listStyles" ) );
3736+
QgsProviderRegistry * pReg = QgsProviderRegistry::instance();
3737+
QLibrary *myLib = pReg->providerLibrary( mProviderKey );
3738+
if ( !myLib )
3739+
{
3740+
msgError = QObject::tr( "Unable to load %1 provider" ).arg( mProviderKey );
3741+
return -1;
3742+
}
3743+
listStyles_t* listStylesExternalMethod = ( listStyles_t * ) cast_to_fptr(myLib->resolve("listStyles"));
37443744

3745-
if ( !listStylesExternalMethod )
3746-
{
3747-
delete myLib;
3748-
msgError = QObject::tr( "Provider %1 has no %2 method" ).arg( mProviderKey ).arg( "listStyles" );
3749-
return -1;
3750-
}
3745+
if ( !listStylesExternalMethod )
3746+
{
3747+
delete myLib;
3748+
msgError = QObject::tr( "Provider %1 has no listStyles method" ).arg( mProviderKey );
3749+
return -1;
3750+
}
37513751

3752-
return listStylesExternalMethod( mDataSource, ids, names, descriptions, msgError );
3752+
return listStylesExternalMethod(mDataSource, ids, names, descriptions, msgError);
37533753
}
37543754

3755-
QString QgsVectorLayer::getStyleFromDatabase( QString styleId, QString &msgError )
3755+
QString QgsVectorLayer::getStyleFromDatabase(QString styleId, QString &msgError)
37563756
{
3757-
QgsProviderRegistry * pReg = QgsProviderRegistry::instance();
3758-
QLibrary *myLib = pReg->providerLibrary( mProviderKey );
3759-
if ( !myLib )
3760-
{
3761-
msgError = QObject::tr( "Unable to load %1 provider" ).arg( mProviderKey );
3762-
return QObject::tr( "" );
3763-
}
3764-
getStyleById_t* getStyleByIdMethod = ( getStyleById_t * ) cast_to_fptr( myLib->resolve( "getStyleById" ) );
3757+
QgsProviderRegistry * pReg = QgsProviderRegistry::instance();
3758+
QLibrary *myLib = pReg->providerLibrary( mProviderKey );
3759+
if ( !myLib )
3760+
{
3761+
msgError = QObject::tr( "Unable to load %1 provider" ).arg( mProviderKey );
3762+
return QObject::tr( "" );
3763+
}
3764+
getStyleById_t* getStyleByIdMethod = ( getStyleById_t * ) cast_to_fptr(myLib->resolve("getStyleById"));
37653765

3766-
if ( !getStyleByIdMethod )
3767-
{
3768-
delete myLib;
3769-
msgError = QObject::tr( "Provider %1 has no %2 method" ).arg( mProviderKey ).arg( "getStyleById" );
3770-
return QObject::tr( "" );
3771-
}
3766+
if ( !getStyleByIdMethod )
3767+
{
3768+
delete myLib;
3769+
msgError = QObject::tr( "Provider %1 has no getStyleById method" ).arg( mProviderKey );
3770+
return QObject::tr( "" );
3771+
}
37723772

3773-
return getStyleByIdMethod( mDataSource, styleId, msgError );
3773+
return getStyleByIdMethod( mDataSource, styleId, msgError );
37743774
}
37753775

37763776

3777-
void QgsVectorLayer::saveStyleToDatabase( QString name, QString description,
3778-
bool useAsDefault, QString uiFileContent, QString &msgError )
3779-
{
3777+
void QgsVectorLayer::saveStyleToDatabase(QString name, QString description,
3778+
bool useAsDefault, QString uiFileContent, QString &msgError){
37803779

3781-
QString sldStyle, qmlStyle;
3782-
QgsProviderRegistry * pReg = QgsProviderRegistry::instance();
3783-
QLibrary *myLib = pReg->providerLibrary( mProviderKey );
3784-
if ( !myLib )
3785-
{
3786-
msgError = QObject::tr( "Unable to load %1 provider" ).arg( mProviderKey );
3787-
return;
3788-
}
3789-
saveStyle_t* saveStyleExternalMethod = ( saveStyle_t * ) cast_to_fptr( myLib->resolve( "saveStyle" ) );
3780+
QString sldStyle, qmlStyle;
3781+
QgsProviderRegistry * pReg = QgsProviderRegistry::instance();
3782+
QLibrary *myLib = pReg->providerLibrary( mProviderKey );
3783+
if ( !myLib )
3784+
{
3785+
msgError = QObject::tr( "Unable to load %1 provider" ).arg( mProviderKey );
3786+
return;
3787+
}
3788+
saveStyle_t* saveStyleExternalMethod = ( saveStyle_t * ) cast_to_fptr(myLib->resolve("saveStyle"));
37903789

3791-
if ( !saveStyleExternalMethod )
3792-
{
3793-
delete myLib;
3794-
msgError = QObject::tr( "Provider %1 has no %2 method" ).arg( mProviderKey ).arg( "saveStyle" );
3795-
return;
3796-
}
3790+
if ( !saveStyleExternalMethod )
3791+
{
3792+
delete myLib;
3793+
msgError = QObject::tr( "Provider %1 has no saveStyle method" ).arg( mProviderKey );
3794+
return;
3795+
}
37973796

3798-
QDomDocument qmlDocument, sldDocument;
3799-
this->exportNamedStyle( qmlDocument, msgError );
3800-
if ( !msgError.isNull() )
3801-
{
3802-
return;
3803-
}
3804-
qmlStyle = qmlDocument.toString();
3797+
QDomDocument qmlDocument, sldDocument;
3798+
this->exportNamedStyle(qmlDocument, msgError);
3799+
if( !msgError.isNull() )
3800+
{
3801+
return;
3802+
}
3803+
qmlStyle = qmlDocument.toString();
38053804

3806-
this->exportSldStyle( sldDocument, msgError );
3807-
if ( !msgError.isNull() )
3808-
{
3809-
return;
3810-
}
3811-
sldStyle = sldDocument.toString();
3805+
this->exportSldStyle(sldDocument, msgError);
3806+
if( !msgError.isNull() )
3807+
{
3808+
return;
3809+
}
3810+
sldStyle = sldDocument.toString();
38123811

3813-
saveStyleExternalMethod( mDataSource, qmlStyle, sldStyle, name,
3814-
description, uiFileContent, useAsDefault, msgError );
3812+
saveStyleExternalMethod( mDataSource, qmlStyle, sldStyle, name,
3813+
description, uiFileContent, useAsDefault, msgError );
38153814
}
38163815

38173816

@@ -3823,60 +3822,60 @@ QString QgsVectorLayer::loadNamedStyle( const QString theURI, bool &theResultFla
38233822

38243823
QString QgsVectorLayer::loadNamedStyle( const QString theURI, bool &theResultFlag , bool loadFromLocalDB )
38253824
{
3826-
QgsDataSourceURI dsUri( theURI );
3827-
if ( !loadFromLocalDB && !dsUri.database().isEmpty() )
3828-
{
3829-
QgsProviderRegistry * pReg = QgsProviderRegistry::instance();
3830-
QLibrary *myLib = pReg->providerLibrary( mProviderKey );
3831-
if ( myLib )
3825+
QgsDataSourceURI dsUri( theURI );
3826+
if ( !loadFromLocalDB && !dsUri.database().isEmpty() )
38323827
{
3833-
loadStyle_t* loadStyleExternalMethod = ( loadStyle_t * ) cast_to_fptr( myLib->resolve( "loadStyle" ) );
3834-
if ( loadStyleExternalMethod )
3835-
{
3836-
QString qml, errorMsg;
3837-
qml = loadStyleExternalMethod( mDataSource, errorMsg );
3838-
if ( !qml.isEmpty() )
3828+
QgsProviderRegistry * pReg = QgsProviderRegistry::instance();
3829+
QLibrary *myLib = pReg->providerLibrary( mProviderKey );
3830+
if ( myLib )
38393831
{
3840-
theResultFlag = this->applyNamedStyle( qml, errorMsg );
3832+
loadStyle_t* loadStyleExternalMethod = ( loadStyle_t * ) cast_to_fptr( myLib->resolve( "loadStyle" ) );
3833+
if ( loadStyleExternalMethod )
3834+
{
3835+
QString qml, errorMsg;
3836+
qml = loadStyleExternalMethod( mDataSource, errorMsg );
3837+
if( !qml.isEmpty() )
3838+
{
3839+
theResultFlag = this->applyNamedStyle( qml, errorMsg );
3840+
}
3841+
}
38413842
}
3842-
}
3843-
}
38443843

3845-
}
3846-
if ( !theResultFlag )
3847-
{
3848-
return QgsMapLayer::loadNamedStyle( theURI, theResultFlag );
3849-
}
3850-
return QObject::tr( "Loaded from Provider" );
3844+
}
3845+
if( !theResultFlag )
3846+
{
3847+
return QgsMapLayer::loadNamedStyle( theURI, theResultFlag );
3848+
}
3849+
return QObject::tr( "Loaded from Provider" );
38513850
}
38523851

3853-
bool QgsVectorLayer::applyNamedStyle( QString namedStyle, QString errorMsg )
3852+
bool QgsVectorLayer::applyNamedStyle(QString namedStyle, QString errorMsg )
38543853
{
3855-
QDomDocument myDocument( "qgis" );
3856-
myDocument.setContent( namedStyle );
3854+
QDomDocument myDocument( "qgis" );
3855+
myDocument.setContent( namedStyle );
38573856

3858-
QDomElement myRoot = myDocument.firstChildElement( "qgis" );
3857+
QDomElement myRoot = myDocument.firstChildElement( "qgis" );
38593858

3860-
if ( myRoot.isNull() )
3861-
{
3862-
errorMsg = tr( "Error: qgis element could not be found" );
3863-
return false;
3864-
}
3865-
toggleScaleBasedVisibility( myRoot.attribute( "hasScaleBasedVisibilityFlag" ).toInt() == 1 );
3866-
setMinimumScale( myRoot.attribute( "minimumScale" ).toFloat() );
3867-
setMaximumScale( myRoot.attribute( "maximumScale" ).toFloat() );
3859+
if( myRoot.isNull() )
3860+
{
3861+
errorMsg = tr( "Error: qgis element could not be found" );
3862+
return false;
3863+
}
3864+
toggleScaleBasedVisibility( myRoot.attribute( "hasScaleBasedVisibilityFlag" ).toInt() == 1 );
3865+
setMinimumScale( myRoot.attribute( "minimumScale" ).toFloat() );
3866+
setMaximumScale( myRoot.attribute( "maximumScale" ).toFloat() );
38683867

3869-
#if 0
3870-
//read transparency level
3871-
QDomNode transparencyNode = myRoot.namedItem( "transparencyLevelInt" );
3872-
if ( ! transparencyNode.isNull() )
3873-
{
3874-
// set transparency level only if it's in project
3875-
// (otherwise it sets the layer transparent)
3876-
QDomElement myElement = transparencyNode.toElement();
3877-
setTransparency( myElement.text().toInt() );
3878-
}
3879-
#endif
3868+
#if 0
3869+
//read transparency level
3870+
QDomNode transparencyNode = myRoot.namedItem( "transparencyLevelInt" );
3871+
if ( ! transparencyNode.isNull() )
3872+
{
3873+
// set transparency level only if it's in project
3874+
// (otherwise it sets the layer transparent)
3875+
QDomElement myElement = transparencyNode.toElement();
3876+
setTransparency( myElement.text().toInt() );
3877+
}
3878+
#endif
38803879

3881-
return readSymbology( myRoot, errorMsg );
3880+
return readSymbology( myRoot, errorMsg );
38823881
}

0 commit comments

Comments
 (0)