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