Skip to content

Commit 8db19b2

Browse files
committedJun 2, 2017
[addlayerbutton] Raster support added
There is still an issue with the list not being correclty reset after the raster icon is selected.
1 parent 811e4df commit 8db19b2

File tree

5 files changed

+57
-27
lines changed

5 files changed

+57
-27
lines changed
 

‎src/app/qgisapp.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1603,6 +1603,7 @@ void QgisApp::dataSourceManager()
16031603
connect( mDataSourceManagerDialog, &QgsDataSourceManagerDialog::showStatusMessage, this, &QgisApp::showStatusMessage );
16041604
connect( mDataSourceManagerDialog, &QgsDataSourceManagerDialog::addDatabaseLayers, this, &QgisApp::addDatabaseLayers );
16051605
connect( mDataSourceManagerDialog, &QgsDataSourceManagerDialog::replaceSelectedVectorLayer, this, &QgisApp::replaceSelectedVectorLayer );
1606+
connect( mDataSourceManagerDialog, static_cast<void ( QgsDataSourceManagerDialog::* )()>( &QgsDataSourceManagerDialog::addRasterLayer ), this, static_cast<void ( QgisApp::* )()>( &QgisApp::addRasterLayer ) );
16061607
}
16071608
mDataSourceManagerDialog->exec();
16081609
}
@@ -11559,8 +11560,8 @@ void QgisApp::renameView()
1155911560
/////////////////////////////////////////////////////////////////
1156011561

1156111562

11562-
// this is a slot for action from GUI to add raster layer
11563-
void QgisApp::addRasterLayer()
11563+
// this is a slot for action from GUI to open and add raster layers
11564+
void QgisApp::addRasterLayer( )
1156411565
{
1156511566
QStringList selectedFiles;
1156611567
QString e;//only for parameter correctness
@@ -11576,7 +11577,7 @@ void QgisApp::addRasterLayer()
1157611577

1157711578
addRasterLayers( selectedFiles );
1157811579

11579-
}// QgisApp::addRasterLayer()
11580+
}
1158011581

1158111582
//
1158211583
// This is the method that does the actual work of adding a raster layer - the others

‎src/app/qgisapp.h

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -168,13 +168,6 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
168168
QgisApp( QgisApp const & ) = delete;
169169
QgisApp &operator=( QgisApp const & ) = delete;
170170

171-
/** Overloaded vesion of the private addRasterLayer()
172-
Method that takes a list of file names instead of prompting
173-
user with a dialog.
174-
\returns true if successfully added layer(s)
175-
*/
176-
bool addRasterLayers( const QStringList &layerQStringList, bool guiWarning = true );
177-
178171
/** Open a raster layer for the given file
179172
\returns false if unable to open a raster layer for rasterFile
180173
\note
@@ -794,6 +787,18 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
794787
*/
795788
bool addVectorLayers( const QStringList &layerQStringList, const QString &enc, const QString &dataSourceType );
796789

790+
/** Overloaded vesion of the private addRasterLayer()
791+
Method that takes a list of file names instead of prompting
792+
user with a dialog.
793+
\returns true if successfully added layer(s)
794+
*/
795+
bool addRasterLayers( const QStringList &layerQStringList, bool guiWarning = true );
796+
797+
/** \brief Open one or more raster layers and add to the map
798+
* Will prompt user for file names using a file selection dialog
799+
*/
800+
void addRasterLayer();
801+
797802
//! Open a plugin layer using its provider
798803
QgsPluginLayer *addPluginLayer( const QString &uri, const QString &baseName, const QString &providerKey );
799804

@@ -861,8 +866,6 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
861866
void sponsors();
862867
//! About QGIS
863868
void about();
864-
//! Add a raster layer to the map (will prompt user for file name using dlg )
865-
void addRasterLayer();
866869
//#ifdef HAVE_POSTGRESQL
867870
//! Add a databaselayer to the map
868871
void addDatabaseLayer();

‎src/app/qgisappinterface.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -142,13 +142,13 @@ QgsVectorLayer *QgisAppInterface::addVectorLayer( const QString &vectorLayerPath
142142

143143
QgsRasterLayer *QgisAppInterface::addRasterLayer( const QString &rasterLayerPath, const QString &baseName )
144144
{
145-
QString nonNullBaseBame = baseName;
146-
if ( nonNullBaseBame.isEmpty() )
145+
QString nonNullBaseName = baseName;
146+
if ( nonNullBaseName.isEmpty() )
147147
{
148148
QFileInfo fi( rasterLayerPath );
149-
nonNullBaseBame = fi.completeBaseName();
149+
nonNullBaseName = fi.completeBaseName();
150150
}
151-
return qgis->addRasterLayer( rasterLayerPath, nonNullBaseBame );
151+
return qgis->addRasterLayer( rasterLayerPath, nonNullBaseName );
152152
}
153153

154154
QgsRasterLayer *QgisAppInterface::addRasterLayer( const QString &url, const QString &baseName, const QString &providerKey )

‎src/app/qgsdatasourcemanagerdialog.cpp

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@
3030
QgsDataSourceManagerDialog::QgsDataSourceManagerDialog( QgsMapCanvas *mapCanvas, QWidget *parent, Qt::WindowFlags fl ) :
3131
QgsOptionsDialogBase( QStringLiteral( "Data Source Manager" ), parent, fl ),
3232
ui( new Ui::QgsDataSourceManagerDialog ),
33-
mMapCanvas( mapCanvas )
33+
mMapCanvas( mapCanvas ),
34+
mPreviousCurrentRow( -1 )
3435
{
3536

3637
ui->setupUi( this );
@@ -40,7 +41,7 @@ QgsDataSourceManagerDialog::QgsDataSourceManagerDialog( QgsMapCanvas *mapCanvas,
4041
initOptionsBase( true );
4142

4243
// Bind list index to the stacked dialogs
43-
connect( ui->mOptionsListWidget, SIGNAL( currentRowChanged( int ) ), this, SLOT( setCurrentPage( int ) ) );
44+
connect( ui->mOptionsListWidget, &QListWidget::currentRowChanged, this, &QgsDataSourceManagerDialog::setCurrentPage );
4445

4546
// BROWSER Add the browser widget to the first stacked widget page
4647
mBrowserWidget = new QgsBrowserDockWidget( QStringLiteral( "Browser" ), this );
@@ -55,6 +56,26 @@ QgsDataSourceManagerDialog::QgsDataSourceManagerDialog( QgsMapCanvas *mapCanvas,
5556
ogrItem->setToolTip( tr( "Add Vector layer" ) );
5657
connect( ovl, &QgsOpenVectorLayerDialog::addVectorLayers, this, &QgsDataSourceManagerDialog::vectorLayersAdded );
5758

59+
// RASTER (forward to app)
60+
ui->mOptionsStackedWidget->addWidget( new QWidget() );
61+
QListWidgetItem *rasterItem = new QListWidgetItem( tr( "Raster" ), ui->mOptionsListWidget );
62+
rasterItem->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionAddRasterLayer.svg" ) ) );
63+
rasterItem->setToolTip( tr( "Open a GDAL Supported Raster Data Source" ) );
64+
connect( ui->mOptionsListWidget, &QListWidget::currentRowChanged, this, [ = ]( int idx )
65+
{
66+
Q_UNUSED( idx );
67+
if ( rasterItem->isSelected( ) )
68+
{
69+
emit addRasterLayer();
70+
int prevPage = mPreviousCurrentRow != -1 ? mPreviousCurrentRow : 0;
71+
ui->mOptionsListWidget->setCurrentRow( prevPage );
72+
ui->mOptionsListWidget->item( prevPage )->setSelected( true );
73+
ui->mOptionsListWidget->setFocus();
74+
setCurrentPage( prevPage );
75+
}
76+
} );
77+
78+
5879
// Add data provider dialogs
5980
QDialog *dlg = nullptr;
6081

@@ -113,6 +134,8 @@ QgsDataSourceManagerDialog::QgsDataSourceManagerDialog( QgsMapCanvas *mapCanvas,
113134
connect( dlg, SIGNAL( addVectorLayer( QString, QString, QString ) ), this, SLOT( vectorLayerAdded( QString, QString, QString ) ) );
114135
connect( dlg, SIGNAL( replaceVectorLayer( QString, QString, QString, QString ) ), this, SIGNAL( replaceSelectedVectorLayer( QString, QString, QString, QString ) ) );
115136
}
137+
138+
116139
}
117140

118141
QgsDataSourceManagerDialog::~QgsDataSourceManagerDialog()
@@ -122,6 +145,7 @@ QgsDataSourceManagerDialog::~QgsDataSourceManagerDialog()
122145

123146
void QgsDataSourceManagerDialog::setCurrentPage( int index )
124147
{
148+
mPreviousCurrentRow = ui->mOptionsStackedWidget->currentIndex( );
125149
ui->mOptionsStackedWidget->setCurrentIndex( index );
126150
setWindowTitle( tr( "Data Source Manager | %1" ).arg( ui->mOptionsListWidget->currentItem()->text( ) ) );
127151
}
@@ -142,7 +166,7 @@ void QgsDataSourceManagerDialog::vectorLayersAdded( const QStringList &layerQStr
142166
}
143167

144168

145-
QDialog *QgsDataSourceManagerDialog::providerDialog( const QString providerKey, const QString providerName, const QString icon )
169+
QDialog *QgsDataSourceManagerDialog::providerDialog( const QString providerKey, const QString providerName, const QString icon, QString title )
146170
{
147171
QDialog *dlg = dynamic_cast<QDialog *>( QgsProviderRegistry::instance()->createSelectionWidget( providerKey, this, Qt::Widget, QgsProviderRegistry::WidgetMode::Embedded ) );
148172
if ( !dlg )
@@ -154,15 +178,15 @@ QDialog *QgsDataSourceManagerDialog::providerDialog( const QString providerKey,
154178
{
155179
ui->mOptionsStackedWidget->addWidget( dlg );
156180
QListWidgetItem *layerItem = new QListWidgetItem( providerName, ui->mOptionsListWidget );
157-
layerItem->setToolTip( tr( "Add %1 layer" ).arg( providerName ) );
181+
layerItem->setToolTip( title.isEmpty() ? tr( "Add %1 layer" ).arg( providerName ) : title );
158182
layerItem->setIcon( QgsApplication::getThemeIcon( icon ) );
159183
return dlg;
160184
}
161185
}
162186

163-
void QgsDataSourceManagerDialog::addDbProviderDialog( const QString providerKey, const QString providerName, const QString icon )
187+
void QgsDataSourceManagerDialog::addDbProviderDialog( const QString providerKey, const QString providerName, const QString icon, QString title )
164188
{
165-
QDialog *dlg = providerDialog( providerKey, providerName, icon );
189+
QDialog *dlg = providerDialog( providerKey, providerName, icon, title );
166190
if ( dlg )
167191
{
168192
connect( dlg, SIGNAL( addDatabaseLayers( QStringList const &, QString const & ) ),
@@ -174,9 +198,9 @@ void QgsDataSourceManagerDialog::addDbProviderDialog( const QString providerKey,
174198
}
175199
}
176200

177-
void QgsDataSourceManagerDialog::addRasterProviderDialog( const QString providerKey, const QString providerName, const QString icon )
201+
void QgsDataSourceManagerDialog::addRasterProviderDialog( const QString providerKey, const QString providerName, const QString icon, QString title )
178202
{
179-
QDialog *dlg = providerDialog( providerKey, providerName, icon );
203+
QDialog *dlg = providerDialog( providerKey, providerName, icon, title );
180204
if ( dlg )
181205
{
182206
// Forward

‎src/app/qgsdatasourcemanagerdialog.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class QgsDataSourceManagerDialog : public QgsOptionsDialogBase
5454
signals:
5555
//! For signal forwarding to QgisApp
5656
void addRasterLayer( QString const &uri, QString const &baseName, QString const &providerKey );
57+
void addRasterLayer( );
5758
void addVectorLayer( const QString &vectorLayerPath, const QString &baseName, const QString &providerKey );
5859
//! Replace the selected layer by a vector layer defined by uri, layer name, data source uri
5960
void replaceSelectedVectorLayer( const QString &oldId, const QString &uri, const QString &layerName, const QString &provider );
@@ -66,13 +67,14 @@ class QgsDataSourceManagerDialog : public QgsOptionsDialogBase
6667

6768
private:
6869
//! Return the dialog from the provider
69-
QDialog *providerDialog( QString const providerKey, QString const providerName, QString const icon );
70-
void addDbProviderDialog( QString const providerKey, QString const providerName, QString const icon );
71-
void addRasterProviderDialog( QString const providerKey, QString const providerName, QString const icon );
70+
QDialog *providerDialog( QString const providerKey, QString const providerName, QString const icon, QString title = QString( ) );
71+
void addDbProviderDialog( QString const providerKey, QString const providerName, QString const icon, QString title = QString( ) );
72+
void addRasterProviderDialog( QString const providerKey, QString const providerName, QString const icon, QString title = QString( ) );
7273
Ui::QgsDataSourceManagerDialog *ui;
7374
QgsBrowserDockWidget *mBrowserWidget = nullptr;
7475
//! Map canvas
7576
QgsMapCanvas *mMapCanvas = nullptr;
77+
int mPreviousCurrentRow;
7678
};
7779

7880
#endif // QGSDATASOURCEMANAGERDIALOG_H

0 commit comments

Comments
 (0)
Please sign in to comment.