|
22 | 22 | #include "qgsbrowserdockwidget.h"
|
23 | 23 | #include "qgssettings.h"
|
24 | 24 | #include "qgsproviderregistry.h"
|
| 25 | +#include "qgssourceselectprovider.h" |
| 26 | +#include "qgssourceselectproviderregistry.h" |
25 | 27 | #include "qgsabstractdatasourcewidget.h"
|
26 | 28 | #include "qgsmapcanvas.h"
|
| 29 | +#include "qgsgui.h" |
27 | 30 |
|
28 | 31 | QgsDataSourceManagerDialog::QgsDataSourceManagerDialog( QWidget *parent, QgsMapCanvas *canvas, Qt::WindowFlags fl ) :
|
29 | 32 | QgsOptionsDialogBase( QStringLiteral( "Data Source Manager" ), parent, fl ),
|
@@ -55,39 +58,18 @@ QgsDataSourceManagerDialog::QgsDataSourceManagerDialog( QWidget *parent, QgsMapC
|
55 | 58 | connect( mBrowserWidget, &QgsBrowserDockWidget::connectionsChanged, this, &QgsDataSourceManagerDialog::connectionsChanged );
|
56 | 59 | connect( this, &QgsDataSourceManagerDialog::updateProjectHome, mBrowserWidget, &QgsBrowserDockWidget::updateProjectHome );
|
57 | 60 |
|
58 |
| - // Add data provider dialogs |
59 |
| - |
60 |
| - providerDialog( QStringLiteral( "ogr" ), tr( "Vector" ), QStringLiteral( "/mActionAddOgrLayer.svg" ) ); |
61 |
| - |
62 |
| - providerDialog( QStringLiteral( "gdal" ), tr( "Raster" ), QStringLiteral( "/mActionAddRasterLayer.svg" ) ); |
63 |
| - |
64 |
| - providerDialog( QStringLiteral( "delimitedtext" ), tr( "Delimited Text" ), QStringLiteral( "/mActionAddDelimitedTextLayer.svg" ) ); |
65 |
| - |
66 |
| -#ifdef HAVE_POSTGRESQL |
67 |
| - providerDialog( QStringLiteral( "postgres" ), tr( "PostgreSQL" ), QStringLiteral( "/mActionAddPostgisLayer.svg" ) ); |
68 |
| -#endif |
69 |
| - |
70 |
| - providerDialog( QStringLiteral( "spatialite" ), tr( "SpatiaLite" ), QStringLiteral( "/mActionAddSpatiaLiteLayer.svg" ) ); |
71 |
| - |
72 |
| - providerDialog( QStringLiteral( "mssql" ), tr( "MSSQL" ), QStringLiteral( "/mActionAddMssqlLayer.svg" ) ); |
73 |
| - |
74 |
| - providerDialog( QStringLiteral( "DB2" ), tr( "DB2" ), QStringLiteral( "/mActionAddDb2Layer.svg" ) ); |
75 |
| - |
76 |
| -#ifdef HAVE_ORACLE |
77 |
| - providerDialog( QStringLiteral( "oracle" ), tr( "Oracle" ), QStringLiteral( "/mActionAddOracleLayer.svg" ) ); |
78 |
| -#endif |
79 |
| - |
80 |
| - providerDialog( QStringLiteral( "virtual" ), tr( "Virtual Layer" ), QStringLiteral( "/mActionAddVirtualLayer.svg" ) ); |
81 |
| - |
82 |
| - providerDialog( QStringLiteral( "wms" ), tr( "WMS" ), QStringLiteral( "/mActionAddWmsLayer.svg" ) ); |
83 |
| - |
84 |
| - providerDialog( QStringLiteral( "wcs" ), tr( "WCS" ), QStringLiteral( "/mActionAddWcsLayer.svg" ) ); |
85 |
| - |
86 |
| - providerDialog( QStringLiteral( "WFS" ), tr( "WFS" ), QStringLiteral( "/mActionAddWfsLayer.svg" ) ); |
87 |
| - |
88 |
| - providerDialog( QStringLiteral( "arcgismapserver" ), tr( "ArcGIS Map Server" ), QStringLiteral( "/mActionAddAmsLayer.svg" ) ); |
89 |
| - |
90 |
| - providerDialog( QStringLiteral( "arcgisfeatureserver" ), tr( "ArcGIS Feature Server" ), QStringLiteral( "/mActionAddAfsLayer.svg" ) ); |
| 61 | + // Add provider dialogs |
| 62 | + const QList<QgsSourceSelectProvider *> sourceSelectProviders = QgsGui::sourceSelectProviderRegistry()->providers( ) ; |
| 63 | + for ( const auto provider : sourceSelectProviders ) |
| 64 | + { |
| 65 | + QgsAbstractDataSourceWidget *dlg = provider->createDataSourceWidget( this ); |
| 66 | + if ( !dlg ) |
| 67 | + { |
| 68 | + QMessageBox::warning( this, provider->name(), tr( "Cannot get %1 select dialog from source select provider %2." ).arg( provider->name(), provider->providerKey() ) ); |
| 69 | + continue; |
| 70 | + } |
| 71 | + addProviderDialog( dlg, provider->providerKey(), provider->text(), provider->icon( ) ); |
| 72 | + } |
91 | 73 |
|
92 | 74 | }
|
93 | 75 |
|
@@ -140,31 +122,21 @@ void QgsDataSourceManagerDialog::vectorLayersAdded( const QStringList &layerQStr
|
140 | 122 | }
|
141 | 123 |
|
142 | 124 |
|
143 |
| -QgsAbstractDataSourceWidget *QgsDataSourceManagerDialog::providerDialog( const QString providerKey, const QString providerName, const QString icon, QString title ) |
| 125 | +void QgsDataSourceManagerDialog::addProviderDialog( QgsAbstractDataSourceWidget *dlg, const QString &providerKey, const QString &providerName, const QIcon &icon, QString toolTip ) |
144 | 126 | {
|
145 |
| - QgsAbstractDataSourceWidget *dlg = dynamic_cast<QgsAbstractDataSourceWidget *>( QgsProviderRegistry::instance()->createSelectionWidget( providerKey, this, Qt::Widget, QgsProviderRegistry::WidgetMode::Embedded ) ); |
146 |
| - if ( !dlg ) |
147 |
| - { |
148 |
| - QMessageBox::warning( this, providerName, tr( "Cannot get %1 select dialog from provider %2." ).arg( providerName, providerKey ) ); |
149 |
| - return nullptr; |
150 |
| - } |
151 |
| - else |
| 127 | + mPageNames.append( providerKey ); |
| 128 | + ui->mOptionsStackedWidget->addWidget( dlg ); |
| 129 | + QListWidgetItem *layerItem = new QListWidgetItem( providerName, ui->mOptionsListWidget ); |
| 130 | + layerItem->setToolTip( toolTip.isEmpty() ? tr( "Add %1 layer" ).arg( providerName ) : toolTip ); |
| 131 | + layerItem->setIcon( icon ); |
| 132 | + // Set crs and extent from canvas |
| 133 | + if ( mMapCanvas ) |
152 | 134 | {
|
153 |
| - mPageNames.append( providerKey ); |
154 |
| - ui->mOptionsStackedWidget->addWidget( dlg ); |
155 |
| - QListWidgetItem *layerItem = new QListWidgetItem( providerName, ui->mOptionsListWidget ); |
156 |
| - layerItem->setToolTip( title.isEmpty() ? tr( "Add %1 layer" ).arg( providerName ) : title ); |
157 |
| - layerItem->setIcon( QgsApplication::getThemeIcon( icon ) ); |
158 |
| - // Set crs and extent from canvas |
159 |
| - if ( mMapCanvas ) |
160 |
| - { |
161 |
| - dlg->setMapCanvas( mMapCanvas ); |
162 |
| - } |
163 |
| - connect( dlg, &QgsAbstractDataSourceWidget::rejected, this, &QgsDataSourceManagerDialog::reject ); |
164 |
| - connect( dlg, &QgsAbstractDataSourceWidget::accepted, this, &QgsDataSourceManagerDialog::accept ); |
165 |
| - makeConnections( dlg, providerKey ); |
166 |
| - return dlg; |
| 135 | + dlg->setMapCanvas( mMapCanvas ); |
167 | 136 | }
|
| 137 | + connect( dlg, &QgsAbstractDataSourceWidget::rejected, this, &QgsDataSourceManagerDialog::reject ); |
| 138 | + connect( dlg, &QgsAbstractDataSourceWidget::accepted, this, &QgsDataSourceManagerDialog::accept ); |
| 139 | + makeConnections( dlg, providerKey ); |
168 | 140 | }
|
169 | 141 |
|
170 | 142 | void QgsDataSourceManagerDialog::makeConnections( QgsAbstractDataSourceWidget *dlg, const QString &providerKey )
|
|
0 commit comments