Skip to content

Commit 24e3214

Browse files
Gustrym-kuhn
authored andcommittedMar 17, 2017
add checkbox to open sublayers in a group
1 parent ed1b0a2 commit 24e3214

File tree

4 files changed

+78
-4
lines changed

4 files changed

+78
-4
lines changed
 

‎python/gui/qgssublayersdialog.sip

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,18 @@ class QgsSublayersDialog : QDialog
3939
//! @note added in 2.16
4040
QgsSublayersDialog::LayerDefinitionList selection();
4141

42+
//! Set if we should display the add to group checkbox
43+
//! @note added in 3.0
44+
void setShowAddToGroupCheckbox( bool showAddToGroupCheckbox );
45+
46+
//! If we should display the add to group checkbox
47+
//! @note added in 3.0
48+
bool showAddToGroupCheckbox() const;
49+
50+
//! If we should add layers in a group
51+
//! @note added in 3.0
52+
bool addToGroupCheckbox() const;
53+
4254
public slots:
4355
void on_buttonBox_helpRequested();
4456
int exec();

‎src/app/qgisapp.cpp

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4061,6 +4061,7 @@ void QgisApp::askUserForGDALSublayers( QgsRasterLayer *layer )
40614061

40624062
// We initialize a selection dialog and display it.
40634063
QgsSublayersDialog chooseSublayersDialog( QgsSublayersDialog::Gdal, QStringLiteral( "gdal" ), this );
4064+
chooseSublayersDialog.setShowAddToGroupCheckbox( true );
40644065

40654066
QgsSublayersDialog::LayerDefinitionList layers;
40664067
QStringList names;
@@ -4112,6 +4113,13 @@ void QgisApp::askUserForGDALSublayers( QgsRasterLayer *layer )
41124113
QRegExp rx( "\"(.*)\"" );
41134114
QString uri, name;
41144115

4116+
QgsLayerTreeGroup *group = nullptr;
4117+
bool addToGroup = settings.value( QStringLiteral( "/qgis/openSublayersInGroup" ), true ).toBool();
4118+
if ( addToGroup )
4119+
{
4120+
group = QgsProject::instance()->layerTreeRoot()->insertGroup( 0, layer->name() );
4121+
}
4122+
41154123
Q_FOREACH ( const QgsSublayersDialog::LayerDefinition &def, chooseSublayersDialog.selection() )
41164124
{
41174125
int i = def.layerId;
@@ -4129,7 +4137,15 @@ void QgisApp::askUserForGDALSublayers( QgsRasterLayer *layer )
41294137
QgsRasterLayer *rlayer = new QgsRasterLayer( sublayers[i], name );
41304138
if ( rlayer && rlayer->isValid() )
41314139
{
4132-
addRasterLayer( rlayer );
4140+
if ( addToGroup )
4141+
{
4142+
QgsProject::instance()->addMapLayer( rlayer, false );
4143+
group->addLayer( rlayer );
4144+
}
4145+
else
4146+
{
4147+
addRasterLayer( rlayer );
4148+
}
41334149
}
41344150
}
41354151
}
@@ -4158,6 +4174,11 @@ void QgisApp::loadGDALSublayers( const QString &uri, const QStringList &list )
41584174
{
41594175
QString path, name;
41604176
QgsRasterLayer *subLayer = nullptr;
4177+
QgsSettings settings;
4178+
QgsLayerTreeGroup *group = nullptr;
4179+
bool addToGroup = settings.value( QStringLiteral( "/qgis/openSublayersInGroup" ), true ).toBool();
4180+
if ( addToGroup )
4181+
group = QgsProject::instance()->layerTreeRoot()->insertGroup( 0, QFileInfo( uri ).completeBaseName() );
41614182

41624183
//add layers in reverse order so they appear in the right order in the layer dock
41634184
for ( int i = list.size() - 1; i >= 0 ; i-- )
@@ -4170,7 +4191,15 @@ void QgisApp::loadGDALSublayers( const QString &uri, const QStringList &list )
41704191
if ( subLayer )
41714192
{
41724193
if ( subLayer->isValid() )
4173-
addRasterLayer( subLayer );
4194+
if ( addToGroup )
4195+
{
4196+
QgsProject::instance()->addMapLayer( subLayer, false );
4197+
group->addLayer( subLayer );
4198+
}
4199+
else
4200+
{
4201+
addRasterLayer( subLayer );
4202+
}
41744203
else
41754204
delete subLayer;
41764205
}
@@ -4224,12 +4253,14 @@ void QgisApp::askUserForOGRSublayers( QgsVectorLayer *layer )
42244253

42254254
// We initialize a selection dialog and display it.
42264255
QgsSublayersDialog chooseSublayersDialog( QgsSublayersDialog::Ogr, QStringLiteral( "ogr" ), this );
4256+
chooseSublayersDialog.setShowAddToGroupCheckbox( true );
42274257
chooseSublayersDialog.populateLayerTable( list );
42284258

42294259
if ( !chooseSublayersDialog.exec() )
42304260
return;
42314261

42324262
QString uri = layer->source();
4263+
QString name = layer->name();
42334264
//the separator char & was changed to | to be compatible
42344265
//with url for protocol drivers
42354266
if ( uri.contains( '|', Qt::CaseSensitive ) )
@@ -4276,12 +4307,19 @@ void QgisApp::askUserForOGRSublayers( QgsVectorLayer *layer )
42764307

42774308
if ( ! myList.isEmpty() )
42784309
{
4279-
// Register layer(s) with the layers registry
4280-
QgsProject::instance()->addMapLayers( myList );
4310+
QgsSettings settings;
4311+
bool addToGroup = settings.value( QStringLiteral( "/qgis/openSublayersInGroup" ), true ).toBool();
4312+
QgsLayerTreeGroup *group = nullptr;
4313+
if ( addToGroup )
4314+
group = QgsProject::instance()->layerTreeRoot()->insertGroup( 0, name );
4315+
4316+
QgsProject::instance()->addMapLayers( myList, ! addToGroup );
42814317
Q_FOREACH ( QgsMapLayer *l, myList )
42824318
{
42834319
bool ok;
42844320
l->loadDefaultStyle( ok );
4321+
if ( addToGroup )
4322+
group->addLayer( l );
42854323
}
42864324
}
42874325
}

‎src/gui/qgssublayersdialog.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,13 @@ QgsSublayersDialog::QgsSublayersDialog( ProviderType providerType, const QString
5959

6060
QgsSettings settings;
6161
restoreGeometry( settings.value( "/Windows/" + mName + "SubLayers/geometry" ).toByteArray() );
62+
63+
// Checkbox about adding sublayers to a group
64+
checkboxAddToGroup = new QCheckBox( tr( "Add layers to a group" ) );
65+
bool addToGroup = settings.value( QStringLiteral( "/qgis/openSublayersInGroup" ), false ).toBool();
66+
checkboxAddToGroup->setChecked( addToGroup );
67+
if ( mShowAddToGroupCheckbox )
Code has comments. Press enter to view.
68+
buttonBox->addButton( checkboxAddToGroup, QDialogButtonBox::ActionRole );
6269
}
6370

6471
QgsSublayersDialog::~QgsSublayersDialog()
@@ -177,5 +184,7 @@ int QgsSublayersDialog::exec()
177184
int ret = QDialog::exec();
178185
if ( overrideCursor )
179186
QApplication::setOverrideCursor( cursor );
187+
188+
settings.setValue( QStringLiteral( "/qgis/openSublayersInGroup" ), checkboxAddToGroup->isChecked() );
180189
return ret;
181190
}

‎src/gui/qgssublayersdialog.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#define QGSSUBLAYERSDIALOG_H
1818

1919
#include <QDialog>
20+
#include <QCheckBox>
2021
#include <ui_qgssublayersdialogbase.h>
2122
#include "qgscontexthelp.h"
2223
#include "qgis_gui.h"
@@ -63,6 +64,18 @@ class GUI_EXPORT QgsSublayersDialog : public QDialog, private Ui::QgsSublayersDi
6364
//! @note added in 2.16
6465
LayerDefinitionList selection();
6566

67+
//! Set if we should display the add to group checkbox
68+
//! @note added in 3.0
69+
void setShowAddToGroupCheckbox( bool showAddToGroupCheckbox ) { mShowAddToGroupCheckbox = showAddToGroupCheckbox; }
70+
71+
//! If we should display the add to group checkbox
72+
//! @note added in 3.0
73+
bool showAddToGroupCheckbox() const { return mShowAddToGroupCheckbox; }
74+
75+
//! If we should add layers in a group
76+
//! @note added in 3.0
77+
bool addToGroupCheckbox() const { return checkboxAddToGroup->isChecked(); }
78+
6679
public slots:
6780
void on_buttonBox_helpRequested() { QgsContextHelp::run( metaObject()->className() ); }
6881
int exec();
@@ -72,6 +85,8 @@ class GUI_EXPORT QgsSublayersDialog : public QDialog, private Ui::QgsSublayersDi
7285
QStringList mSelectedSubLayers;
7386
bool mShowCount; //!< Whether to show number of features in the table
7487
bool mShowType; //!< Whether to show type in the table
88+
bool mShowAddToGroupCheckbox; //!< Whether to show the add to group checkbox
89+
QCheckBox *checkboxAddToGroup = nullptr;
7590
};
7691

7792
#endif

0 commit comments

Comments
 (0)
Please sign in to comment.