|
6 | 6 | #include "qgslogger.h"
|
7 | 7 | #include "qgsdatasourceuri.h"
|
8 | 8 |
|
| 9 | +#include <QMessageBox> |
| 10 | + |
9 | 11 | // ---------------------------------------------------------------------------
|
10 | 12 | QgsPGConnectionItem::QgsPGConnectionItem( QgsDataItem* parent, QString name, QString path )
|
11 | 13 | : QgsDataCollectionItem( parent, name, path )
|
@@ -157,6 +159,70 @@ void QgsPGConnectionItem::deleteConnection()
|
157 | 159 | mParent->refresh();
|
158 | 160 | }
|
159 | 161 |
|
| 162 | +bool QgsPGConnectionItem::handleDrop( const QMimeData * data, Qt::DropAction ) |
| 163 | +{ |
| 164 | + if ( !QgsMimeDataUtils::isUriList( data ) ) |
| 165 | + return false; |
| 166 | + |
| 167 | + // TODO: probably should show a GUI with settings etc |
| 168 | + QgsDataSourceURI uri = QgsPostgresConn::connUri( mName ); |
| 169 | + |
| 170 | + qApp->setOverrideCursor( Qt::WaitCursor ); |
| 171 | + |
| 172 | + QStringList importResults; |
| 173 | + bool hasError = false; |
| 174 | + QgsMimeDataUtils::UriList lst = QgsMimeDataUtils::decodeUriList( data ); |
| 175 | + foreach( const QgsMimeDataUtils::Uri& u, lst ) |
| 176 | + { |
| 177 | + if ( u.layerType != "vector" ) |
| 178 | + { |
| 179 | + importResults.append( tr( "%1: Not a vector layer!" ).arg( u.name ) ); |
| 180 | + hasError = true; // only vectors can be imported |
| 181 | + continue; |
| 182 | + } |
| 183 | + |
| 184 | + // open the source layer |
| 185 | + QgsVectorLayer* srcLayer = new QgsVectorLayer( u.uri, u.name, u.providerKey ); |
| 186 | + |
| 187 | + if ( srcLayer->isValid() ) |
| 188 | + { |
| 189 | + uri.setDataSource( QString(), u.name, "qgs_geometry" ); |
| 190 | + QgsDebugMsg( "URI " + uri.uri() ); |
| 191 | + QgsVectorLayerImport::ImportError err; |
| 192 | + QString importError; |
| 193 | + err = QgsVectorLayerImport::importLayer( srcLayer, uri.uri(), "postgres", &srcLayer->crs(), false, &importError ); |
| 194 | + if ( err == QgsVectorLayerImport::NoError ) |
| 195 | + importResults.append( tr( "%1: OK!" ).arg( u.name ) ); |
| 196 | + else |
| 197 | + { |
| 198 | + importResults.append( QString( "%1: %2" ).arg( u.name ).arg( importError ) ); |
| 199 | + hasError = true; |
| 200 | + } |
| 201 | + } |
| 202 | + else |
| 203 | + { |
| 204 | + importResults.append( tr( "%1: OK!" ).arg( u.name ) ); |
| 205 | + hasError = true; |
| 206 | + } |
| 207 | + |
| 208 | + delete srcLayer; |
| 209 | + } |
| 210 | + |
| 211 | + qApp->restoreOverrideCursor(); |
| 212 | + |
| 213 | + if ( hasError ) |
| 214 | + { |
| 215 | + QMessageBox::warning( 0, tr( "Import to PostGIS database" ), tr( "Failed to import some layers!\n\n" ) + importResults.join( "\n" ) ); |
| 216 | + } |
| 217 | + else |
| 218 | + { |
| 219 | + QMessageBox::information( 0, tr( "Import to PostGIS database" ), tr( "Import was successful." ) ); |
| 220 | + } |
| 221 | + |
| 222 | + refresh(); |
| 223 | + |
| 224 | + return true; |
| 225 | +} |
160 | 226 |
|
161 | 227 | // ---------------------------------------------------------------------------
|
162 | 228 | QgsPGLayerItem::QgsPGLayerItem( QgsDataItem* parent, QString name, QString path, QgsLayerItem::LayerType layerType, QgsPostgresLayerProperty layerProperty )
|
|
0 commit comments