QGIS API Documentation 3.29.0-Master (ade4f0cf0f)
qgsofflineediting.h
Go to the documentation of this file.
1/***************************************************************************
2 offline_editing.h
3
4 Offline Editing Plugin
5 a QGIS plugin
6 --------------------------------------
7 Date : 22-Jul-2010
8 Copyright : (C) 2010 by Sourcepole
9 Email : info at sourcepole.ch
10 ***************************************************************************
11 * *
12 * This program is free software; you can redistribute it and/or modify *
13 * it under the terms of the GNU General Public License as published by *
14 * the Free Software Foundation; either version 2 of the License, or *
15 * (at your option) any later version. *
16 * *
17 ***************************************************************************/
18
19#ifndef QGS_OFFLINE_EDITING_H
20#define QGS_OFFLINE_EDITING_H
21
22#include "qgis_core.h"
23#include "qgsfeature.h"
24#include "qgssqliteutils.h"
25
26#include <QObject>
27#include <QString>
28
29class QgsMapLayer;
30class QgsVectorLayer;
31
35class CORE_EXPORT QgsOfflineEditing : public QObject
36{
37 Q_OBJECT
38
39 public:
41 {
42 CopyFeatures = 0,
48 UpdateGeometries
49 };
50
53 {
55 GPKG
56 };
57
59
69 bool convertToOfflineProject( const QString &offlineDataPath, const QString &offlineDbFile, const QStringList &layerIds, bool onlySelected = false, ContainerType containerType = SpatiaLite, const QString &layerNameSuffix = QStringLiteral( " (offline)" ) );
70
72 bool isOfflineProject() const;
73
74
79 void synchronize( bool useTransaction = false );
80
81 signals:
82
87
94 void layerProgressUpdated( int layer, int numLayers );
95
102 void progressModeSet( QgsOfflineEditing::ProgressMode mode, long long maximum );
103
108 void progressUpdated( long long progress );
109
112
118 void warning( const QString &title, const QString &message );
119
120 private:
121 void initializeSpatialMetadata( sqlite3 *sqlite_handle );
122 bool createOfflineDb( const QString &offlineDbPath, ContainerType containerType = SpatiaLite );
123 void createLoggingTables( sqlite3 *db );
124
125 void convertToOfflineLayer( QgsVectorLayer *layer, sqlite3 *db, const QString &offlineDbPath, bool onlySelected, ContainerType containerType = SpatiaLite, const QString &layerNameSuffix = QStringLiteral( " (offline)" ) );
126
127 void applyAttributesAdded( QgsVectorLayer *remoteLayer, sqlite3 *db, int layerId, int commitNo );
128 void applyFeaturesAdded( QgsVectorLayer *offlineLayer, QgsVectorLayer *remoteLayer, sqlite3 *db, int layerId );
129 void applyFeaturesRemoved( QgsVectorLayer *remoteLayer, sqlite3 *db, int layerId );
130 void applyAttributeValueChanges( QgsVectorLayer *offlineLayer, QgsVectorLayer *remoteLayer, sqlite3 *db, int layerId, int commitNo );
131 void applyGeometryChanges( QgsVectorLayer *remoteLayer, sqlite3 *db, int layerId, int commitNo );
132 void updateFidLookup( QgsVectorLayer *remoteLayer, sqlite3 *db, int layerId );
133
137 int getLayerPkIdx( const QgsVectorLayer *layer ) const;
138
139 QMap<int, int> attributeLookup( QgsVectorLayer *offlineLayer, QgsVectorLayer *remoteLayer );
140
141 void showWarning( const QString &message );
142
143 sqlite3_database_unique_ptr openLoggingDb();
144 int getOrCreateLayerId( sqlite3 *db, const QString &qgisLayerId );
145 int getCommitNo( sqlite3 *db );
146 void increaseCommitNo( sqlite3 *db );
147 void addFidLookup( sqlite3 *db, int layerId, QgsFeatureId offlineFid, QgsFeatureId remoteFid, const QString &remotePk );
148 QgsFeatureId remoteFid( sqlite3 *db, int layerId, QgsFeatureId offlineFid, QgsVectorLayer *remoteLayer );
149 QgsFeatureId offlineFid( sqlite3 *db, int layerId, QgsFeatureId remoteFid );
150 bool isAddedFeature( sqlite3 *db, int layerId, QgsFeatureId fid );
151
152 int sqlExec( sqlite3 *db, const QString &sql );
153 int sqlQueryInt( sqlite3 *db, const QString &sql, int defaultValue );
154 QString sqlQueryStr( sqlite3 *db, const QString &sql, QString &defaultValue );
155 QList<int> sqlQueryInts( sqlite3 *db, const QString &sql );
156 QString sqlEscape( QString value ) const;
157
158 QList<QgsField> sqlQueryAttributesAdded( sqlite3 *db, const QString &sql );
159 QgsFeatureIds sqlQueryFeaturesRemoved( sqlite3 *db, const QString &sql );
160
161 struct AttributeValueChange
162 {
163 QgsFeatureId fid;
164 int attr;
165 QString value;
166 };
167 typedef QList<AttributeValueChange> AttributeValueChanges;
168 AttributeValueChanges sqlQueryAttributeValueChanges( sqlite3 *db, const QString &sql );
169
170 struct GeometryChange
171 {
172 QgsFeatureId fid;
173 QString geom_wkt;
174 };
175 typedef QList<GeometryChange> GeometryChanges;
176 GeometryChanges sqlQueryGeometryChanges( sqlite3 *db, const QString &sql );
177
178 private slots:
179 void setupLayer( QgsMapLayer *layer );
180 void committedAttributesAdded( const QString &qgisLayerId, const QList<QgsField> &addedAttributes );
181 void committedFeaturesAdded( const QString &qgisLayerId, const QgsFeatureList &addedFeatures );
182 void committedFeaturesRemoved( const QString &qgisLayerId, const QgsFeatureIds &deletedFeatureIds );
183 void committedAttributeValuesChanges( const QString &qgisLayerId, const QgsChangedAttributesMap &changedAttrsMap );
184 void committedGeometriesChanges( const QString &qgisLayerId, const QgsGeometryMap &changedGeometries );
185 void startListenFeatureChanges();
186 void stopListenFeatureChanges();
187};
188
189#endif // QGS_OFFLINE_EDITING_H
Base class for all map layer types.
Definition: qgsmaplayer.h:73
void progressModeSet(QgsOfflineEditing::ProgressMode mode, long long maximum)
Emitted when the mode for the progress of the current operation is set.
void progressUpdated(long long progress)
Emitted with the progress of the current mode.
void layerProgressUpdated(int layer, int numLayers)
Emitted whenever a new layer is being processed.
void warning(const QString &title, const QString &message)
Emitted when a warning needs to be displayed.
void progressStopped()
Emitted when the processing of all layers has finished.
ContainerType
Type of offline database container file.
void progressStarted()
Emitted when the process has started.
Represents a vector layer which manages a vector based data sets.
Unique pointer for sqlite3 databases, which automatically closes the database when the pointer goes o...
struct sqlite3 sqlite3
QMap< QgsFeatureId, QgsGeometry > QgsGeometryMap
Definition: qgsfeature.h:917
QMap< QgsFeatureId, QgsAttributeMap > QgsChangedAttributesMap
Definition: qgsfeature.h:908
QList< QgsFeature > QgsFeatureList
Definition: qgsfeature.h:922
QSet< QgsFeatureId > QgsFeatureIds
Definition: qgsfeatureid.h:37
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features
Definition: qgsfeatureid.h:28