-
-
Notifications
You must be signed in to change notification settings - Fork 3k
/
qgsgeopackagedataitems.h
205 lines (157 loc) · 5.87 KB
/
qgsgeopackagedataitems.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
/***************************************************************************
qgsgeopackagedataitems.h
---------------------
begin : August 2017
copyright : (C) 2017 by Alessandro Pasotti
email : apasotti at boundlessgeo dot com
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSGEOPACKAGEDATAITEMS_H
#define QGSGEOPACKAGEDATAITEMS_H
#include "qgsdataitem.h"
#include "qgsdataitemprovider.h"
#include "qgsdataprovider.h"
#include "qgstaskmanager.h"
/**
* \brief The QgsGeoPackageAbstractLayerItem class is the base class for GeoPackage raster and vector layers
*/
class QgsGeoPackageAbstractLayerItem : public QgsLayerItem
{
Q_OBJECT
//! Returns layer uri or empty string if layer cannot be created
QString uri() const { return mUri; }
protected:
QgsGeoPackageAbstractLayerItem( QgsDataItem *parent, const QString &name, const QString &path, const QString &uri, LayerType layerType, const QString &providerKey );
/**
* Subclasses need to implement this function with
* the real deletion implementation
*/
virtual bool executeDeleteLayer( QString &errCause );
#ifdef HAVE_GUI
QList<QAction *> actions( QWidget *menu ) override;
public slots:
virtual void deleteLayer( const QgsGeoPackageAbstractLayerItem *item );
#endif
};
class QgsGeoPackageRasterLayerItem : public QgsGeoPackageAbstractLayerItem
{
Q_OBJECT
public:
QgsGeoPackageRasterLayerItem( QgsDataItem *parent, const QString &name, const QString &path, const QString &uri );
protected:
bool executeDeleteLayer( QString &errCause ) override;
};
class QgsGeoPackageVectorLayerItem : public QgsGeoPackageAbstractLayerItem
{
Q_OBJECT
public:
QgsGeoPackageVectorLayerItem( QgsDataItem *parent, const QString &name, const QString &path, const QString &uri, LayerType layerType );
protected:
bool executeDeleteLayer( QString &errCause ) override;
};
/**
* \brief The QgsGeoPackageCollectionItem class is the base class for
* GeoPackage container
*/
class QgsGeoPackageCollectionItem : public QgsDataCollectionItem
{
Q_OBJECT
public:
QgsGeoPackageCollectionItem( QgsDataItem *parent, const QString &name, const QString &path );
QVector<QgsDataItem *> createChildren() override;
bool equal( const QgsDataItem *other ) override;
#ifdef HAVE_GUI
bool acceptDrop() override { return true; }
bool handleDrop( const QMimeData *data, Qt::DropAction action ) override;
QList<QAction *> actions( QWidget *parent ) override;
static void deleteGpkg( const QString &path, QPointer< QgsDataItem > parent );
#endif
//! Returns the layer type from \a geometryType
static QgsLayerItem::LayerType layerTypeFromDb( const QString &geometryType );
//! Deletes a geopackage raster layer
static bool deleteGeoPackageRasterLayer( const QString &uri, QString &errCause );
/**
* Compacts (VACUUM) a geopackage database
* \param path DB path
* \param name DB name
* \param errCause contains the error message
* \return true on success
*/
static bool vacuumGeoPackageDb( const QString &path, const QString &name, QString &errCause );
public slots:
#ifdef HAVE_GUI
void addTable();
void addConnection();
void deleteConnection();
//! Compacts (VACUUM) a geopackage database
void vacuumGeoPackageDbAction();
#endif
protected:
QString mPath;
};
/**
* \brief The QgsGeoPackageConnectionItem class adds the stored
* connection management to QgsGeoPackageCollectionItem
*/
class QgsGeoPackageConnectionItem : public QgsGeoPackageCollectionItem
{
Q_OBJECT
public:
QgsGeoPackageConnectionItem( QgsDataItem *parent, const QString &name, const QString &path );
bool equal( const QgsDataItem *other ) override;
#ifdef HAVE_GUI
QList<QAction *> actions( QWidget *parent ) override;
#endif
public slots:
#ifdef HAVE_GUI
void editConnection();
#endif
};
class QgsGeoPackageRootItem : public QgsDataCollectionItem
{
Q_OBJECT
public:
QgsGeoPackageRootItem( QgsDataItem *parent, const QString &name, const QString &path );
QVector<QgsDataItem *> createChildren() override;
QVariant sortKey() const override { return 1; }
#ifdef HAVE_GUI
QWidget *paramWidget() override;
QList<QAction *> actions( QWidget *parent ) override;
public slots:
void newConnection();
void onConnectionsChanged();
void createDatabase();
#endif
};
//! Provider for geopackage data item
class QgsGeoPackageDataItemProvider : public QgsDataItemProvider
{
public:
QString name() override { return QStringLiteral( "GPKG" ); }
int capabilities() override { return QgsDataProvider::Database; }
QgsDataItem *createDataItem( const QString &path, QgsDataItem *parentItem ) override;
};
/**
* \brief The QgsConcurrentFileWriterImportTask class is the parent task for
* importing layers from a drag and drop operation in the browser.
* Individual layers need to be added as individual substask.
*/
class QgsConcurrentFileWriterImportTask : public QgsTask
{
Q_OBJECT
public:
QgsConcurrentFileWriterImportTask( const QString &desc = QString() ) : QgsTask( desc ) {}
void emitProgressChanged( double progress ) { setProgress( progress ); }
protected:
bool run() override
{
return true;
}
};
#endif // QGSGEOPACKAGEDATAITEMS_H