QGIS API Documentation 3.99.0-Master (2fe06baccd8)
Loading...
Searching...
No Matches
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
20#include <memory>
21
22#include "qgsvectorlayer.h"
23
24#include "moc_qgsvectorfilewritertask.cpp"
25
27 : QgsTask( tr( "Saving %1" ).arg( fileName ), QgsTask::CanCancel )
28 , mDestFileName( fileName )
29 , mSinkFlags( sinkFlags )
30 , mOptions( options )
31{
32 if ( mOptions.fieldValueConverter )
33 {
34 // fieldValueConverter is not owned - so we need to clone it here
35 // to ensure it exists for lifetime of task
36 mFieldValueConverter.reset( mOptions.fieldValueConverter->clone() );
37 mOptions.fieldValueConverter = mFieldValueConverter.get();
38 }
39 if ( !mOptions.feedback )
40 {
41 mOwnedFeedback = std::make_unique<QgsFeedback>( );
42 mOptions.feedback = mOwnedFeedback.get();
43 }
44
45 if ( layer )
46 {
47 mTransformContext = layer->transformContext();
48 }
49
50 mError = QgsVectorFileWriter::prepareWriteAsVectorFormat( layer, mOptions, mWriterDetails );
51}
52
54{
55 mOptions.feedback->cancel();
57}
58
60{
61 if ( mError != QgsVectorFileWriter::NoError )
62 return false;
63
64 connect( mOptions.feedback, &QgsFeedback::progressChanged, this, &QgsVectorFileWriterTask::setProgress );
65
66
68 mWriterDetails, mDestFileName, mTransformContext, mOptions, &mNewFilename, &mNewLayer, &mErrorMessage, mSinkFlags );
69 return mError == QgsVectorFileWriter::NoError;
70}
71
73{
74 if ( result )
75 {
76 emit writeComplete( mNewFilename );
77 emit completed( mNewFilename, mNewLayer );
78 }
79 else
80 {
81 emit errorOccurred( mError, mErrorMessage );
82 }
83}
QFlags< SinkFlag > SinkFlags
void progressChanged(double progress)
Emitted when the feedback object reports a progress change.
QgsCoordinateTransformContext transformContext() const
Returns the layer data provider coordinate transform context or a default transform context if the la...
virtual void cancel()
Notifies the task that it should terminate.
QgsTask(const QString &description=QString(), QgsTask::Flags flags=AllFlags)
Constructor for QgsTask.
@ CanCancel
Task can be canceled.
void setProgress(double progress)
Sets the task's current progress.
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 ...
QgsVectorFileWriterTask(QgsVectorLayer *layer, const QString &fileName, const QgsVectorFileWriter::SaveVectorOptions &options, QgsFeatureSink::SinkFlags sinkFlags=QgsFeatureSink::SinkFlags())
Constructor for QgsVectorFileWriterTask.
void cancel() override
Notifies the task that it should terminate.
Options to pass to QgsVectorFileWriter::writeAsVectorFormat().
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 dataset.