Skip to content

Commit 6196fd3

Browse files
authored
[vector writer] Return actual layer name used
This is needed as some OGR drivers will modify the provided layer name (e.g. the KML driver replaces dashes with underscores).
1 parent 64e8174 commit 6196fd3

8 files changed

+176
-29
lines changed

python/core/auto_generated/qgsvectorfilewriter.sip.in

+6-6
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ Creates a clone of the FieldValueConverter.
229229
AppendToLayerAddFields
230230
};
231231

232+
232233
static QgsVectorFileWriter::WriterError writeAsVectorFormat( QgsVectorLayer *layer,
233234
const QString &fileName,
234235
const QString &fileEncoding,
@@ -250,7 +251,7 @@ Creates a clone of the FieldValueConverter.
250251
QgsVectorFileWriter::FieldValueConverter *fieldValueConverter = 0
251252
);
252253
%Docstring
253-
Write contents of vector layer to an (OGR supported) vector formt
254+
Write contents of vector layer to an (OGR supported) vector format
254255

255256
:param layer: layer to write
256257
:param fileName: file name to write to
@@ -274,6 +275,7 @@ Write contents of vector layer to an (OGR supported) vector formt
274275
:param fieldValueConverter: field value converter (added in QGIS 2.16)
275276
%End
276277

278+
277279
static QgsVectorFileWriter::WriterError writeAsVectorFormat( QgsVectorLayer *layer,
278280
const QString &fileName,
279281
const QString &fileEncoding,
@@ -322,7 +324,6 @@ Writes a layer out to a vector file.
322324
.. versionadded:: 2.2
323325
%End
324326

325-
326327
class SaveVectorOptions
327328
{
328329
%Docstring
@@ -379,11 +380,13 @@ Constructor
379380
QgsFeedback *feedback;
380381
};
381382

383+
382384
static QgsVectorFileWriter::WriterError writeAsVectorFormat( QgsVectorLayer *layer,
383385
const QString &fileName,
384386
const QgsVectorFileWriter::SaveVectorOptions &options,
385387
QString *newFilename = 0,
386-
QString *errorMessage /Out/ = 0 );
388+
QString *errorMessage /Out/ = 0
389+
);
387390
%Docstring
388391
Writes a layer out to a vector file.
389392

@@ -407,9 +410,6 @@ Writes a layer out to a vector file.
407410
QString *newFilename = 0,
408411
QgsVectorFileWriter::SymbologyExport symbologyExport = QgsVectorFileWriter::NoSymbology
409412
);
410-
%Docstring
411-
Create a new vector file writer
412-
%End
413413

414414

415415

python/core/auto_generated/qgsvectorfilewritertask.sip.in

+5
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,13 @@ and save ``options``.
4545
%Docstring
4646
Emitted when writing the layer is successfully completed. The ``newFilename``
4747
parameter indicates the file path for the written file.
48+
49+
.. note::
50+
51+
this signal is deprecated in favor of completed().
4852
%End
4953

54+
5055
void errorOccurred( int error, const QString &errorMessage );
5156
%Docstring
5257
Emitted when an error occurs which prevented the file being written (or if

src/app/qgisapp.cpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -7446,13 +7446,12 @@ void QgisApp::saveAsVectorFileGeneral( QgsVectorLayer *vlayer, bool symbologyOpt
74467446
options.fieldValueConverter = converterPtr;
74477447

74487448
bool addToCanvas = dialog->addToCanvas();
7449-
QString layerName = dialog->layername();
74507449
QgsVectorFileWriterTask *writerTask = new QgsVectorFileWriterTask( vlayer, vectorFilename, options );
74517450

74527451
// when writer is successful:
7453-
connect( writerTask, &QgsVectorFileWriterTask::writeComplete, this, [onSuccess, addToCanvas, layerName, encoding, vectorFilename]( const QString & newFilename )
7452+
connect( writerTask, &QgsVectorFileWriterTask::completed, this, [onSuccess, addToCanvas, encoding, vectorFilename]( const QString & newFilename, const QString & newLayer )
74547453
{
7455-
onSuccess( newFilename, addToCanvas, layerName, encoding, vectorFilename );
7454+
onSuccess( newFilename, addToCanvas, newLayer, encoding, vectorFilename );
74567455
} );
74577456

74587457
// when an error occurs:

src/core/qgsvectorfilewriter.cpp

+22-13
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,8 @@ QgsVectorFileWriter::QgsVectorFileWriter(
101101
const QStringList &datasourceOptions,
102102
const QStringList &layerOptions,
103103
QString *newFilename,
104-
SymbologyExport symbologyExport
104+
SymbologyExport symbologyExport,
105+
QString *newLayer
105106
)
106107
: mError( NoError )
107108
, mWkbType( geometryType )
@@ -110,7 +111,7 @@ QgsVectorFileWriter::QgsVectorFileWriter(
110111
{
111112
init( vectorFileName, fileEncoding, fields, geometryType,
112113
srs, driverName, datasourceOptions, layerOptions, newFilename, nullptr,
113-
QString(), CreateOrOverwriteFile );
114+
QString(), CreateOrOverwriteFile, newLayer );
114115
}
115116

116117
QgsVectorFileWriter::QgsVectorFileWriter( const QString &vectorFileName,
@@ -125,15 +126,16 @@ QgsVectorFileWriter::QgsVectorFileWriter( const QString &vectorFileName,
125126
QgsVectorFileWriter::SymbologyExport symbologyExport,
126127
FieldValueConverter *fieldValueConverter,
127128
const QString &layerName,
128-
ActionOnExistingFile action )
129+
ActionOnExistingFile action,
130+
QString *newLayer )
129131
: mError( NoError )
130132
, mWkbType( geometryType )
131133
, mSymbologyExport( symbologyExport )
132134
, mSymbologyScale( 1.0 )
133135
{
134136
init( vectorFileName, fileEncoding, fields, geometryType, srs, driverName,
135137
datasourceOptions, layerOptions, newFilename, fieldValueConverter,
136-
layerName, action );
138+
layerName, action, newLayer );
137139
}
138140

139141
bool QgsVectorFileWriter::supportsFeatureStyles( const QString &driverName )
@@ -164,7 +166,8 @@ void QgsVectorFileWriter::init( QString vectorFileName,
164166
QString *newFilename,
165167
FieldValueConverter *fieldValueConverter,
166168
const QString &layerNameIn,
167-
ActionOnExistingFile action )
169+
ActionOnExistingFile action,
170+
QString *newLayer )
168171
{
169172
mRenderContext.setRendererScale( mSymbologyScale );
170173

@@ -419,6 +422,8 @@ void QgsVectorFileWriter::init( QString vectorFileName,
419422
else if ( action == CreateOrOverwriteFile || action == CreateOrOverwriteLayer )
420423
{
421424
mLayer = OGR_DS_CreateLayer( mDS.get(), layerName.toUtf8().constData(), mOgrRef, wkbType, options );
425+
if ( newLayer )
426+
*newLayer = OGR_L_GetName( mLayer );
422427
}
423428
else
424429
{
@@ -2338,7 +2343,8 @@ QgsVectorFileWriter::writeAsVectorFormat( QgsVectorLayer *layer,
23382343
bool forceMulti,
23392344
bool includeZ,
23402345
const QgsAttributeList &attributes,
2341-
FieldValueConverter *fieldValueConverter )
2346+
FieldValueConverter *fieldValueConverter,
2347+
QString *newLayer )
23422348
{
23432349
QgsCoordinateTransform ct;
23442350
if ( destCRS.isValid() && layer )
@@ -2352,7 +2358,7 @@ QgsVectorFileWriter::writeAsVectorFormat( QgsVectorLayer *layer,
23522358
errorMessage, datasourceOptions, layerOptions, skipAttributeCreation,
23532359
newFilename, symbologyExport, symbologyScale, filterExtent,
23542360
overrideGeometryType, forceMulti, includeZ, attributes,
2355-
fieldValueConverter );
2361+
fieldValueConverter, newLayer );
23562362
return error;
23572363
}
23582364

@@ -2374,7 +2380,8 @@ QgsVectorFileWriter::WriterError QgsVectorFileWriter::writeAsVectorFormat( QgsVe
23742380
bool forceMulti,
23752381
bool includeZ,
23762382
const QgsAttributeList &attributes,
2377-
FieldValueConverter *fieldValueConverter )
2383+
FieldValueConverter *fieldValueConverter,
2384+
QString *newLayer )
23782385
{
23792386
SaveVectorOptions options;
23802387
options.fileEncoding = fileEncoding;
@@ -2393,7 +2400,7 @@ QgsVectorFileWriter::WriterError QgsVectorFileWriter::writeAsVectorFormat( QgsVe
23932400
options.includeZ = includeZ;
23942401
options.attributes = attributes;
23952402
options.fieldValueConverter = fieldValueConverter;
2396-
return writeAsVectorFormat( layer, fileName, options, newFilename, errorMessage );
2403+
return writeAsVectorFormat( layer, fileName, options, newFilename, errorMessage, newLayer );
23972404
}
23982405

23992406

@@ -2544,7 +2551,7 @@ QgsVectorFileWriter::WriterError QgsVectorFileWriter::prepareWriteAsVectorFormat
25442551
return NoError;
25452552
}
25462553

2547-
QgsVectorFileWriter::WriterError QgsVectorFileWriter::writeAsVectorFormat( PreparedWriterDetails &details, const QString &fileName, const QgsVectorFileWriter::SaveVectorOptions &options, QString *newFilename, QString *errorMessage )
2554+
QgsVectorFileWriter::WriterError QgsVectorFileWriter::writeAsVectorFormat( PreparedWriterDetails &details, const QString &fileName, const QgsVectorFileWriter::SaveVectorOptions &options, QString *newFilename, QString *errorMessage, QString *newLayer )
25482555
{
25492556

25502557
QgsWkbTypes::Type destWkbType = details.destWkbType;
@@ -2614,7 +2621,8 @@ QgsVectorFileWriter::WriterError QgsVectorFileWriter::writeAsVectorFormat( Prepa
26142621
options.symbologyExport,
26152622
options.fieldValueConverter,
26162623
options.layerName,
2617-
options.actionOnExistingFile );
2624+
options.actionOnExistingFile,
2625+
newLayer );
26182626
writer->setSymbologyScale( options.symbologyScale );
26192627

26202628
if ( newFilename )
@@ -2765,14 +2773,15 @@ QgsVectorFileWriter::writeAsVectorFormat( QgsVectorLayer *layer,
27652773
const QString &fileName,
27662774
const SaveVectorOptions &options,
27672775
QString *newFilename,
2768-
QString *errorMessage )
2776+
QString *errorMessage,
2777+
QString *newLayer )
27692778
{
27702779
QgsVectorFileWriter::PreparedWriterDetails details;
27712780
WriterError err = prepareWriteAsVectorFormat( layer, options, details );
27722781
if ( err != NoError )
27732782
return err;
27742783

2775-
return writeAsVectorFormat( details, fileName, options, newFilename, errorMessage );
2784+
return writeAsVectorFormat( details, fileName, options, newFilename, errorMessage, newLayer );
27762785
}
27772786

27782787

0 commit comments

Comments
 (0)