34void QgsDataItemGuiProviderUtils::deleteConnectionsPrivate( 
const QStringList &connectionNames, 
const std::function<
void( 
const QString & )> &deleteConnection, QPointer<QgsDataItem> firstParent )
 
   36  if ( connectionNames.size() > 1 )
 
   38    if ( QMessageBox::question( 
nullptr, QObject::tr( 
"Remove Connections" ), QObject::tr( 
"Are you sure you want to remove all %1 selected connections?" ).arg( connectionNames.size() ), QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) != QMessageBox::Yes )
 
   43    if ( QMessageBox::question( 
nullptr, QObject::tr( 
"Remove Connection" ), QObject::tr( 
"Are you sure you want to remove the connection to “%1”?" ).arg( connectionNames.at( 0 ) ), QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) != QMessageBox::Yes )
 
   47  for ( 
const QString &connectionName : std::as_const( connectionNames ) )
 
   49    deleteConnection( connectionName );
 
   53    firstParent->refreshConnections();
 
   59  QString newConnectionName( name );
 
   60  while ( connectionNames.contains( newConnectionName ) )
 
   63    newConnectionName = QObject::tr( 
"%1 (copy %2)" ).arg( name ).arg( i );
 
   66  return newConnectionName;
 
 
   69bool QgsDataItemGuiProviderUtils::handleDropUriForConnection( std::unique_ptr<QgsAbstractDatabaseProviderConnection> connection, 
const QgsMimeDataUtils::Uri &sourceUri, 
const QString &destinationSchema, 
QgsDataItemGuiContext context, 
const QString &shortTitle, 
const QString &longTitle, 
const QVariantMap &destinationProviderOptions, 
const std::function<
void()> &onSuccessfulCompletion, 
const std::function<
void( 
Qgis::VectorExportResult, 
const QString & )> &onError, QObject *connectionContext )
 
   74  const QString connectionUri = connection->uri();
 
   75  const QString connectionProvider = connection->providerKey();
 
   79  dialog.setSourceUri( sourceUri );
 
   80  dialog.setDestinationSchema( destinationSchema );
 
   84  std::unique_ptr< QgsVectorLayerExporterTask > exportTask = dialog.createExporterTask( destinationProviderOptions );
 
   88  const QString destSchema = dialog.schema();
 
   89  const QString destTableName = dialog.tableName();
 
   90  const QString tableComment = dialog.tableComment();
 
   92  auto pushError = [shortTitle, longTitle, context]( 
const QString &error ) {
 
   94    QPushButton *detailsButton = 
new QPushButton( QObject::tr( 
"Details…" ) );
 
   95    QObject::connect( detailsButton, &QPushButton::clicked, detailsButton, [longTitle, error] {
 
  101    item->layout()->addWidget( detailsButton );
 
  106  QObject::connect( exportTask.get(), &
QgsVectorLayerExporterTask::exportComplete, connectionContext, [onSuccessfulCompletion, connectionUri, longTitle, pushError, connectionProvider, destSchema, destTableName, tableComment, shortTitle, context]() {
 
  107    if ( !tableComment.isEmpty() )
 
  109      std::unique_ptr<QgsAbstractDatabaseProviderConnection> connection;
 
  112        QgsProviderMetadata *md = QgsProviderRegistry::instance()->providerMetadata( connectionProvider );
 
  113        connection.reset( static_cast<QgsAbstractDatabaseProviderConnection *>( md->createConnection( connectionUri, {} ) ) );
 
  115      catch ( QgsProviderConnectionException &e )
 
  117        pushError( QObject::tr( 
"Could not retrieve connection details:\n\n%1" ).arg( e.what() ) );
 
  123        connection->setTableComment( destSchema, destTableName, tableComment );
 
  125      catch ( QgsProviderConnectionException &e )
 
  127        pushError( QObject::tr( 
"Failed to set new table comment!\n\n" ) + e.what() );
 
  133    onSuccessfulCompletion();
 
  138    if ( error != Qgis::VectorExportResult::UserCanceled )
 
  140      pushError( QObject::tr( 
"Failed to import layer!\n\n" ) + errorMessage );
 
  143    onError( error, errorMessage );
 
 
  155  const QString connectionUri = connection->uri();
 
  156  const QString connectionProvider = connection->providerKey();
 
  160  dialog.setDestinationSchema( destinationSchema );
 
  161  if ( !dialog.exec() )
 
  164  std::unique_ptr< QgsVectorLayerExporterTask > exportTask = dialog.createExporterTask( destinationProviderOptions );
 
  168  const QString destSchema = dialog.schema();
 
  169  const QString destTableName = dialog.tableName();
 
  170  const QString tableComment = dialog.tableComment();
 
  172  auto pushError = [shortTitle, longTitle, context]( 
const QString &error ) {
 
  174    QPushButton *detailsButton = 
new QPushButton( QObject::tr( 
"Details…" ) );
 
  175    QObject::connect( detailsButton, &QPushButton::clicked, detailsButton, [longTitle, error] {
 
  181    item->layout()->addWidget( detailsButton );
 
  186  QObject::connect( exportTask.get(), &
QgsVectorLayerExporterTask::exportComplete, connectionContext, [onSuccessfulCompletion, connectionUri, longTitle, pushError, connectionProvider, destSchema, destTableName, tableComment, shortTitle, context]() {
 
  187    if ( !tableComment.isEmpty() )
 
  189      std::unique_ptr<QgsAbstractDatabaseProviderConnection> connection;
 
  192        QgsProviderMetadata *md = QgsProviderRegistry::instance()->providerMetadata( connectionProvider );
 
  193        connection.reset( static_cast<QgsAbstractDatabaseProviderConnection *>( md->createConnection( connectionUri, {} ) ) );
 
  195      catch ( QgsProviderConnectionException &e )
 
  197        pushError( QObject::tr( 
"Could not retrieve connection details:\n\n%1" ).arg( e.what() ) );
 
  203        connection->setTableComment( destSchema, destTableName, tableComment );
 
  205      catch ( QgsProviderConnectionException &e )
 
  207        pushError( QObject::tr( 
"Failed to set new table comment!\n\n" ) + e.what() );
 
  213    onSuccessfulCompletion();
 
  218    if ( error != Qgis::VectorExportResult::UserCanceled )
 
  220      pushError( QObject::tr( 
"Failed to import layer!\n\n" ) + errorMessage );
 
  223    onError( error, errorMessage );
 
 
VectorExportResult
Vector layer export result codes.
 
@ Warning
Warning message.
 
static QgsTaskManager * taskManager()
Returns the application's task manager, used for managing application wide background task handling.
 
Encapsulates the context in which a QgsDataItem is shown within the application GUI.
 
QgsMessageBar * messageBar() const
Returns the associated message bar.
 
QgsMapCanvas * mapCanvas() const
Returns the map canvas associated with the item.
 
static void handleImportVectorLayerForConnection(std::unique_ptr< QgsAbstractDatabaseProviderConnection > connection, const QString &destinationSchema, QgsDataItemGuiContext context, const QString &shortTitle, const QString &longTitle, const QVariantMap &destinationProviderOptions, const std::function< void()> &onSuccessfulCompletion, const std::function< void(Qgis::VectorExportResult error, const QString &errorMessage)> &onError, QObject *connectionContext)
Handles importing a vector layer for connection items.
 
static const QString uniqueName(const QString &name, const QStringList &connectionNames)
Check if connection with name exists in connectionNames list and then try to append a number to it to...
 
static bool handleDropUriForConnection(std::unique_ptr< QgsAbstractDatabaseProviderConnection > connection, const QgsMimeDataUtils::Uri &sourceUri, const QString &destinationSchema, QgsDataItemGuiContext context, const QString &shortTitle, const QString &longTitle, const QVariantMap &destinationProviderOptions, const std::function< void()> &onSuccessfulCompletion, const std::function< void(Qgis::VectorExportResult error, const QString &errorMessage)> &onError, QObject *connectionContext)
Handles dropping a vector layer for connection items.
 
A generic dialog for customising vector layer import options for database connections.
 
void setMapCanvas(QgsMapCanvas *canvas)
Sets a map canvas to associate with the dialog.
 
Represents an item shown within a QgsMessageBar widget.
 
QgsMessageBarItem * pushWidget(QWidget *widget, Qgis::MessageLevel level=Qgis::MessageLevel::Info, int duration=0)
Display a widget as a message on the bar, after hiding the currently visible one and putting it in a ...
 
void pushSuccess(const QString &title, const QString &message)
Pushes a success message with default timeout to the message bar.
 
Interface for showing messages from QGIS in GUI independent way.
 
virtual void showMessage(bool blocking=true)=0
display the message to the user and deletes itself
 
static QgsMessageOutput * createMessageOutput()
function that returns new class derived from QgsMessageOutput (don't forget to delete it then if show...
 
virtual void setMessage(const QString &message, MessageType msgType)=0
Sets message, it won't be displayed until.
 
virtual void setTitle(const QString &title)=0
Sets title for the messages.
 
long addTask(QgsTask *task, int priority=0)
Adds a task to the manager.
 
void exportComplete()
Emitted when exporting the layer is successfully completed.
 
void errorOccurred(Qgis::VectorExportResult error, const QString &errorMessage)
Emitted when an error occurs which prevented the layer being exported (or if the task is canceled).