Skip to content

Commit 8493636

Browse files
committedNov 5, 2018
Data source select dialog now accepts a model
1 parent 086be38 commit 8493636

File tree

5 files changed

+33
-9
lines changed

5 files changed

+33
-9
lines changed
 

‎python/gui/auto_generated/qgsdatasourceselectdialog.sip.in

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,14 @@ will return a (possibly invalid) QgsMimeDataUtils.Uri.
3131
%End
3232
public:
3333

34-
QgsDataSourceSelectDialog( bool setFilterByLayerType = false,
34+
QgsDataSourceSelectDialog( QgsBrowserModel *browserModel = 0,
35+
bool setFilterByLayerType = false,
3536
const QgsMapLayer::LayerType &layerType = QgsMapLayer::LayerType::VectorLayer,
3637
QWidget *parent = 0 );
3738
%Docstring
3839
Constructs a QgsDataSourceSelectDialog, optionally filtering by layer type
3940

41+
:param browserModel: an existing browser model (typically from app), if null an instance will be created
4042
:param setFilterByLayerType: activates filtering by layer type
4143
:param layerType: sets the layer type filter, this is in effect only if filtering by layer type is also active
4244
:param parent: the object

‎src/app/qgisapp.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6945,7 +6945,7 @@ void QgisApp::changeDataSource( QgsMapLayer *layer )
69456945
QString providerType( layer->providerType() );
69466946
QgsMapLayer::LayerType layerType( layer->type() );
69476947

6948-
QgsDataSourceSelectDialog dlg( true, layerType );
6948+
QgsDataSourceSelectDialog dlg( mBrowserModel, true, layerType );
69496949

69506950
if ( dlg.exec() == QDialog::Accepted )
69516951
{

‎src/gui/qgsdatasourceselectdialog.cpp

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,30 @@
2222

2323
#include <QPushButton>
2424

25-
QgsDataSourceSelectDialog::QgsDataSourceSelectDialog( bool setFilterByLayerType,
26-
const QgsMapLayer::LayerType &layerType,
27-
QWidget *parent )
25+
QgsDataSourceSelectDialog::QgsDataSourceSelectDialog(
26+
QgsBrowserModel *browserModel,
27+
bool setFilterByLayerType,
28+
const QgsMapLayer::LayerType &layerType,
29+
QWidget *parent )
2830
: QDialog( parent )
2931
{
32+
if ( ! browserModel )
33+
{
34+
mBrowserModel = qgis::make_unique<QgsBrowserModel>();
35+
mOwnModel = true;
36+
}
37+
else
38+
{
39+
mBrowserModel.reset( browserModel );
40+
mOwnModel = false;
41+
}
42+
3043
setupUi( this );
3144
setWindowTitle( tr( "Select a Data Source" ) );
3245
QgsGui::enableAutoGeometryRestore( this );
3346

34-
mBrowserModel.initialize();
35-
mBrowserProxyModel.setBrowserModel( &mBrowserModel );
47+
mBrowserModel->initialize();
48+
mBrowserProxyModel.setBrowserModel( mBrowserModel.get() );
3649
mBrowserTreeView->setHeaderHidden( true );
3750

3851
if ( setFilterByLayerType )
@@ -47,6 +60,12 @@ QgsDataSourceSelectDialog::QgsDataSourceSelectDialog( bool setFilterByLayerType,
4760
connect( mBrowserTreeView, &QgsBrowserTreeView::clicked, this, &QgsDataSourceSelectDialog::onLayerSelected );
4861
}
4962

63+
QgsDataSourceSelectDialog::~QgsDataSourceSelectDialog()
64+
{
65+
if ( ! mOwnModel )
66+
mBrowserModel.release();
67+
}
68+
5069
void QgsDataSourceSelectDialog::setLayerTypeFilter( QgsMapLayer::LayerType layerType )
5170
{
5271
mBrowserProxyModel.setFilterByLayerType( true );

‎src/gui/qgsdatasourceselectdialog.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,13 @@ class GUI_EXPORT QgsDataSourceSelectDialog: public QDialog, private Ui::QgsDataS
5050
/**
5151
* Constructs a QgsDataSourceSelectDialog, optionally filtering by layer type
5252
*
53+
* \param browserModel an existing browser model (typically from app), if null an instance will be created
5354
* \param setFilterByLayerType activates filtering by layer type
5455
* \param layerType sets the layer type filter, this is in effect only if filtering by layer type is also active
5556
* \param parent the object
5657
*/
57-
QgsDataSourceSelectDialog( bool setFilterByLayerType = false,
58+
QgsDataSourceSelectDialog( QgsBrowserModel *browserModel = nullptr,
59+
bool setFilterByLayerType = false,
5860
const QgsMapLayer::LayerType &layerType = QgsMapLayer::LayerType::VectorLayer,
5961
QWidget *parent = nullptr );
6062

@@ -75,8 +77,9 @@ class GUI_EXPORT QgsDataSourceSelectDialog: public QDialog, private Ui::QgsDataS
7577

7678
private:
7779

78-
QgsBrowserModel mBrowserModel;
7980
QgsBrowserProxyModel mBrowserProxyModel;
81+
std::unique_ptr<QgsBrowserModel> mBrowserModel;
82+
bool mOwnModel = true;
8083
QgsMimeDataUtils::Uri mUri;
8184

8285
};
0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)
Please sign in to comment.