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, [=] {
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 );
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 ) {
…}
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, [=] {
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).