Skip to content

Commit 3dba091

Browse files
committedSep 12, 2017
Share QgsBrowserModel among browser instances
1 parent 9349ae8 commit 3dba091

10 files changed

+55
-14
lines changed
 

‎python/core/qgsbrowsermodel.sip

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,17 @@ Reload the whole model
175175
void hidePath( QgsDataItem *item );
176176
%Docstring
177177
Hide the given path in the browser model
178+
%End
179+
180+
bool initialized( );
181+
%Docstring
182+
Returns true if the model has been initialized
183+
:rtype: bool
184+
%End
185+
186+
void init();
187+
%Docstring
188+
Delayied initialization
178189
%End
179190

180191
protected:
@@ -184,6 +195,7 @@ Populates the model
184195
%End
185196
void removeRootItems();
186197

198+
187199
};
188200

189201
/************************************************************************

‎python/gui/qgsbrowserdockwidget.sip

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class QgsBrowserDockWidget : QgsDockWidget
2121
%End
2222
public:
2323

24-
explicit QgsBrowserDockWidget( const QString &name, QWidget *parent /TransferThis/ = 0 );
24+
explicit QgsBrowserDockWidget( const QString &name, QgsBrowserModel *model, QWidget *parent /TransferThis/ = 0 );
2525
%Docstring
2626
Constructor for QgsBrowserDockWidget
2727
\param name name of the widget

‎src/app/qgisapp.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
#include "qgslayerstylingwidget.h"
7979
#include "qgstaskmanager.h"
8080
#include "qgsziputils.h"
81+
#include "qgsbrowsermodel.h"
8182

8283
#include <QNetworkReply>
8384
#include <QNetworkProxy>
@@ -866,7 +867,8 @@ QgisApp::QgisApp( QSplashScreen *splash, bool restorePlugins, bool skipVersionCh
866867
}
867868
endProfile();
868869

869-
mBrowserWidget = new QgsBrowserDockWidget( tr( "Browser Panel" ), this );
870+
mBrowserModel = new QgsBrowserModel( this );
871+
mBrowserWidget = new QgsBrowserDockWidget( tr( "Browser Panel" ), mBrowserModel, this );
870872
mBrowserWidget->setObjectName( QStringLiteral( "Browser" ) );
871873
addDockWidget( Qt::LeftDockWidgetArea, mBrowserWidget );
872874
mBrowserWidget->hide();
@@ -876,7 +878,7 @@ QgisApp::QgisApp( QSplashScreen *splash, bool restorePlugins, bool skipVersionCh
876878
connect( mBrowserWidget, &QgsBrowserDockWidget::openFile, this, &QgisApp::openFile );
877879
connect( mBrowserWidget, &QgsBrowserDockWidget::handleDropUriList, this, &QgisApp::handleDropUriList );
878880

879-
mBrowserWidget2 = new QgsBrowserDockWidget( tr( "Browser Panel (2)" ), this );
881+
mBrowserWidget2 = new QgsBrowserDockWidget( tr( "Browser Panel (2)" ), mBrowserModel, this );
880882
mBrowserWidget2->setObjectName( QStringLiteral( "Browser2" ) );
881883
addDockWidget( Qt::LeftDockWidgetArea, mBrowserWidget2 );
882884
mBrowserWidget2->hide();
@@ -1509,7 +1511,7 @@ void QgisApp::dataSourceManager( const QString &pageName )
15091511
{
15101512
if ( ! mDataSourceManagerDialog )
15111513
{
1512-
mDataSourceManagerDialog = new QgsDataSourceManagerDialog( this, mapCanvas() );
1514+
mDataSourceManagerDialog = new QgsDataSourceManagerDialog( mBrowserModel, this, mapCanvas() );
15131515
// Forward signals to this
15141516
connect( this, &QgisApp::connectionsChanged, mDataSourceManagerDialog, &QgsDataSourceManagerDialog::refresh );
15151517
connect( mDataSourceManagerDialog, &QgsDataSourceManagerDialog::connectionsChanged, this, &QgisApp::connectionsChanged );

‎src/app/qgisapp.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,8 @@ class QgsLayerStylingWidget;
123123
class QgsDiagramProperties;
124124
class QgsLocatorWidget;
125125
class QgsDataSourceManagerDialog;
126+
class QgsBrowserModel;
127+
126128

127129
#include <QMainWindow>
128130
#include <QToolBar>
@@ -2074,6 +2076,8 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
20742076
QTimer mRenderProgressBarTimer;
20752077
QMetaObject::Connection mRenderProgressBarTimerConnection;
20762078

2079+
QgsBrowserModel *mBrowserModel = nullptr;
2080+
20772081
friend class TestQgisAppPython;
20782082
};
20792083

‎src/core/qgsbrowsermodel.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,6 @@ QgsBrowserModel::QgsBrowserModel( QObject *parent )
4545
: QAbstractItemModel( parent )
4646

4747
{
48-
connect( QgsProject::instance(), &QgsProject::readProject, this, &QgsBrowserModel::updateProjectHome );
49-
connect( QgsProject::instance(), &QgsProject::writeProject, this, &QgsBrowserModel::updateProjectHome );
50-
addRootItems();
5148
}
5249

5350
QgsBrowserModel::~QgsBrowserModel()
@@ -172,6 +169,17 @@ void QgsBrowserModel::removeRootItems()
172169
mRootItems.clear();
173170
}
174171

172+
void QgsBrowserModel::init()
173+
{
174+
if ( ! mInitialized )
175+
{
176+
connect( QgsProject::instance(), &QgsProject::readProject, this, &QgsBrowserModel::updateProjectHome );
177+
connect( QgsProject::instance(), &QgsProject::writeProject, this, &QgsBrowserModel::updateProjectHome );
178+
addRootItems();
179+
mInitialized = true;
180+
}
181+
}
182+
175183

176184
Qt::ItemFlags QgsBrowserModel::flags( const QModelIndex &index ) const
177185
{

‎src/core/qgsbrowsermodel.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,12 @@ class CORE_EXPORT QgsBrowserModel : public QAbstractItemModel
167167
//! Hide the given path in the browser model
168168
void hidePath( QgsDataItem *item );
169169

170+
//! Returns true if the model has been initialized
171+
bool initialized( ) { return mInitialized; }
172+
173+
//! Delayied initialization
174+
void init();
175+
170176
protected:
171177
//! Populates the model
172178
void addRootItems();
@@ -175,6 +181,9 @@ class CORE_EXPORT QgsBrowserModel : public QAbstractItemModel
175181
QVector<QgsDataItem *> mRootItems;
176182
QgsFavoritesItem *mFavorites = nullptr;
177183
QgsDirectoryItem *mProjectHome = nullptr;
184+
185+
private:
186+
bool mInitialized = false;
178187
};
179188

180189
#endif // QGSBROWSERMODEL_H

‎src/gui/qgsbrowserdockwidget.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,10 @@
3838

3939
#include <QDragEnterEvent>
4040

41-
QgsBrowserDockWidget::QgsBrowserDockWidget( const QString &name, QWidget *parent )
41+
QgsBrowserDockWidget::QgsBrowserDockWidget( const QString &name, QgsBrowserModel *model, QWidget *parent )
4242
: QgsDockWidget( parent )
43+
, mModel( model )
44+
, mProxyModel( nullptr )
4345
, mPropertiesWidgetEnabled( false )
4446
, mPropertiesWidgetHeight( 0 )
4547
{
@@ -110,9 +112,12 @@ QgsBrowserDockWidget::~QgsBrowserDockWidget()
110112
void QgsBrowserDockWidget::showEvent( QShowEvent *e )
111113
{
112114
// delayed initialization of the model
113-
if ( !mModel )
115+
if ( !mModel->initialized( ) )
116+
{
117+
mModel->init();
118+
}
119+
if ( ! mProxyModel )
114120
{
115-
mModel = new QgsBrowserModel( mBrowserView );
116121
mProxyModel = new QgsBrowserTreeFilterProxyModel( this );
117122
mProxyModel->setBrowserModel( mModel );
118123
mBrowserView->setSettingsSection( objectName().toLower() ); // to distinguish 2 or more instances of the browser

‎src/gui/qgsbrowserdockwidget.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class GUI_EXPORT QgsBrowserDockWidget : public QgsDockWidget, private Ui::QgsBro
4949
* \param name name of the widget
5050
* \param parent parent widget
5151
*/
52-
explicit QgsBrowserDockWidget( const QString &name, QWidget *parent SIP_TRANSFERTHIS = nullptr );
52+
explicit QgsBrowserDockWidget( const QString &name, QgsBrowserModel *model, QWidget *parent SIP_TRANSFERTHIS = nullptr );
5353
~QgsBrowserDockWidget();
5454
//! Add directory to favorites
5555
void addFavoriteDirectory( const QString &favDir );

‎src/gui/qgsdatasourcemanagerdialog.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
#include "qgsmessagelog.h"
2929
#include "qgsgui.h"
3030

31-
QgsDataSourceManagerDialog::QgsDataSourceManagerDialog( QWidget *parent, QgsMapCanvas *canvas, Qt::WindowFlags fl ) :
31+
QgsDataSourceManagerDialog::QgsDataSourceManagerDialog( QgsBrowserModel *&browserModel, QWidget *parent, QgsMapCanvas *canvas, Qt::WindowFlags fl ) :
3232
QgsOptionsDialogBase( QStringLiteral( "Data Source Manager" ), parent, fl ),
3333
ui( new Ui::QgsDataSourceManagerDialog ),
3434
mPreviousRow( -1 ),
@@ -48,7 +48,7 @@ QgsDataSourceManagerDialog::QgsDataSourceManagerDialog( QWidget *parent, QgsMapC
4848
connect( ui->mOptionsListWidget, &QListWidget::currentRowChanged, this, &QgsDataSourceManagerDialog::setCurrentPage );
4949

5050
// BROWSER Add the browser widget to the first stacked widget page
51-
mBrowserWidget = new QgsBrowserDockWidget( QStringLiteral( "Browser" ), this );
51+
mBrowserWidget = new QgsBrowserDockWidget( QStringLiteral( "Browser" ), browserModel, this );
5252
mBrowserWidget->setFeatures( QDockWidget::NoDockWidgetFeatures );
5353
ui->mOptionsStackedWidget->addWidget( mBrowserWidget );
5454
mPageNames.append( QStringLiteral( "browser" ) );

‎src/gui/qgsdatasourcemanagerdialog.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class QgsBrowserDockWidget;
3232
class QgsRasterLayer;
3333
class QgsMapCanvas;
3434
class QgsAbstractDataSourceWidget;
35+
class QgsBrowserModel;
3536

3637
/** \ingroup gui
3738
* The QgsDataSourceManagerDialog class embeds the browser panel and all
@@ -52,7 +53,7 @@ class GUI_EXPORT QgsDataSourceManagerDialog : public QgsOptionsDialogBase, priva
5253
* \param canvas a pointer to the map canvas
5354
* \param fl window flags
5455
*/
55-
explicit QgsDataSourceManagerDialog( QWidget *parent = nullptr, QgsMapCanvas *canvas = nullptr, Qt::WindowFlags fl = QgsGuiUtils::ModalDialogFlags );
56+
explicit QgsDataSourceManagerDialog( QgsBrowserModel *&browserModel, QWidget *parent = nullptr, QgsMapCanvas *canvas = nullptr, Qt::WindowFlags fl = QgsGuiUtils::ModalDialogFlags );
5657
~QgsDataSourceManagerDialog();
5758

5859
/**

0 commit comments

Comments
 (0)
Please sign in to comment.