QGIS API Documentation  3.27.0-Master (aef1b1ec20)
qgsvectorfilewritertask.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsvectorfilewritertask.cpp
3  ---------------------------
4  begin : Feb 2017
5  copyright : (C) 2017 by Nyall Dawson
6  email : nyall dot dawson at gmail dot com
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
19 #include "qgsvectorlayer.h"
20 
22  : QgsTask( tr( "Saving %1" ).arg( fileName ), QgsTask::CanCancel )
23  , mDestFileName( fileName )
24  , mOptions( options )
25 {
26  if ( mOptions.fieldValueConverter )
27  {
28  // fieldValueConverter is not owned - so we need to clone it here
29  // to ensure it exists for lifetime of task
30  mFieldValueConverter.reset( mOptions.fieldValueConverter->clone() );
31  mOptions.fieldValueConverter = mFieldValueConverter.get();
32  }
33  if ( !mOptions.feedback )
34  {
35  mOwnedFeedback.reset( new QgsFeedback() );
36  mOptions.feedback = mOwnedFeedback.get();
37  }
38 
39  if ( layer )
40  {
41  mTransformContext = layer->transformContext();
42  }
43 
44  mError = QgsVectorFileWriter::prepareWriteAsVectorFormat( layer, mOptions, mWriterDetails );
45 }
46 
48 {
49  mOptions.feedback->cancel();
51 }
52 
54 {
55  if ( mError != QgsVectorFileWriter::NoError )
56  return false;
57 
59 
60 
62  mWriterDetails, mDestFileName, mTransformContext, mOptions, &mNewFilename, &mNewLayer, &mErrorMessage );
63  return mError == QgsVectorFileWriter::NoError;
64 }
65 
67 {
68  if ( result )
69  {
70  emit writeComplete( mNewFilename );
71  emit completed( mNewFilename, mNewLayer );
72  }
73  else
74  {
75  emit errorOccurred( mError, mErrorMessage );
76  }
77 }
Base class for feedback objects to be used for cancellation of something running in a worker thread.
Definition: qgsfeedback.h:45
void progressChanged(double progress)
Emitted when the feedback object reports a progress change.
void cancel()
Tells the internal routines that the current operation should be canceled. This should be run by the ...
Definition: qgsfeedback.h:108
QgsCoordinateTransformContext transformContext() const
Returns the layer data provider coordinate transform context or a default transform context if the la...
Abstract base class for long running background tasks.
virtual void cancel()
Notifies the task that it should terminate.
void setProgress(double progress)
Sets the task's current progress.
QgsVectorFileWriterTask(QgsVectorLayer *layer, const QString &fileName, const QgsVectorFileWriter::SaveVectorOptions &options)
Constructor for QgsVectorFileWriterTask.
void errorOccurred(int error, const QString &errorMessage)
Emitted when an error occurs which prevented the file being written (or if the task is canceled).
bool run() override
Performs the task's operation.
void completed(const QString &newFilename, const QString &newLayer)
Emitted when writing the layer is successfully completed.
void writeComplete(const QString &newFilename)
Emitted when writing the layer is successfully completed.
void finished(bool result) override
If the task is managed by a QgsTaskManager, this will be called after the task has finished (whether ...
void cancel() override
Notifies the task that it should terminate.
virtual QgsVectorFileWriter::FieldValueConverter * clone() const
Creates a clone of the FieldValueConverter.
Options to pass to writeAsVectorFormat()
QgsVectorFileWriter::FieldValueConverter * fieldValueConverter
Field value converter.
QgsFeedback * feedback
Optional feedback object allowing cancellation of layer save.
static Q_DECL_DEPRECATED QgsVectorFileWriter::WriterError writeAsVectorFormatV2(QgsVectorLayer *layer, const QString &fileName, const QgsCoordinateTransformContext &transformContext, const QgsVectorFileWriter::SaveVectorOptions &options, QString *newFilename=nullptr, QString *newLayer=nullptr, QString *errorMessage=nullptr)
Writes a layer out to a vector file.
Represents a vector layer which manages a vector based data sets.