Skip to content

Commit ccdda89

Browse files
committed
[bugfix][backport] Browser shared model
Backport of master PR 5164
1 parent c81adf8 commit ccdda89

6 files changed

+59
-6
lines changed

src/app/qgisapp.cpp

+5-2
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@
116116
#include "qgsauthsslerrorsdialog.h"
117117
#endif
118118
#include "qgsbookmarks.h"
119+
#include "qgsbrowsermodel.h"
119120
#include "qgsbrowserdockwidget.h"
120121
#include "qgsadvanceddigitizingdockwidget.h"
121122
#include "qgsclipboard.h"
@@ -803,12 +804,13 @@ QgisApp::QgisApp( QSplashScreen *splash, bool restorePlugins, bool skipVersionCh
803804
mSnappingDialog->setObjectName( "SnappingOption" );
804805
endProfile();
805806

806-
mBrowserWidget = new QgsBrowserDockWidget( tr( "Browser Panel" ), this );
807+
mBrowserModel = new QgsBrowserModel( this );
808+
mBrowserWidget = new QgsBrowserDockWidget( tr( "Browser Panel" ), mBrowserModel, this );
807809
mBrowserWidget->setObjectName( "Browser" );
808810
addDockWidget( Qt::LeftDockWidgetArea, mBrowserWidget );
809811
mBrowserWidget->hide();
810812

811-
mBrowserWidget2 = new QgsBrowserDockWidget( tr( "Browser Panel (2)" ), this );
813+
mBrowserWidget2 = new QgsBrowserDockWidget( tr( "Browser Panel (2)" ), mBrowserModel, this );
812814
mBrowserWidget2->setObjectName( "Browser2" );
813815
addDockWidget( Qt::LeftDockWidgetArea, mBrowserWidget2 );
814816
mBrowserWidget2->hide();
@@ -1147,6 +1149,7 @@ QgisApp::QgisApp()
11471149
, mPythonUtils( nullptr )
11481150
, mUndoWidget( nullptr )
11491151
, mUndoDock( nullptr )
1152+
, mBrowserModel( nullptr )
11501153
, mBrowserWidget( nullptr )
11511154
, mBrowserWidget2( nullptr )
11521155
, mAdvancedDigitizingDockWidget( nullptr )

src/app/qgisapp.h

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ class QNetworkProxy;
8282
class QAuthenticator;
8383

8484
class QgsBrowserDockWidget;
85+
class QgsBrowserModel;
8586
class QgsAdvancedDigitizingDockWidget;
8687
class QgsSnappingDialog;
8788
class QgsGPSInformationWidget;
@@ -1724,6 +1725,7 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
17241725
QgsUndoWidget *mUndoWidget;
17251726
QgsDockWidget *mUndoDock;
17261727

1728+
QgsBrowserModel *mBrowserModel;
17271729
QgsBrowserDockWidget *mBrowserWidget;
17281730
QgsBrowserDockWidget *mBrowserWidget2;
17291731

src/app/qgsbrowserdockwidget.cpp

+29-1
Original file line numberDiff line numberDiff line change
@@ -261,12 +261,30 @@ void QgsBrowserPropertiesDialog::setItem( QgsDataItem* item )
261261
setWindowTitle( item->type() == QgsDataItem::Layer ? tr( "Layer Properties" ) : tr( "Directory Properties" ) );
262262
}
263263

264+
265+
QgsBrowserDockWidget::QgsBrowserDockWidget( const QString& name, QgsBrowserModel *model, QWidget * parent )
266+
: QgsDockWidget( parent )
267+
, mModel( model )
268+
, mProxyModel( nullptr )
269+
, mPropertiesWidgetEnabled( false )
270+
, mPropertiesWidgetHeight( 0 )
271+
{
272+
init( name );
273+
}
274+
275+
264276
QgsBrowserDockWidget::QgsBrowserDockWidget( const QString& name, QWidget * parent )
265277
: QgsDockWidget( parent )
266278
, mModel( nullptr )
267279
, mProxyModel( nullptr )
268280
, mPropertiesWidgetEnabled( false )
269281
, mPropertiesWidgetHeight( 0 )
282+
{
283+
init( name );
284+
}
285+
286+
287+
void QgsBrowserDockWidget::init( const QString& name )
270288
{
271289
setupUi( this );
272290

@@ -324,6 +342,7 @@ QgsBrowserDockWidget::QgsBrowserDockWidget( const QString& name, QWidget * paren
324342
connect( mSplitter, SIGNAL( splitterMoved( int, int ) ), this, SLOT( splitterMoved() ) );
325343
}
326344

345+
327346
QgsBrowserDockWidget::~QgsBrowserDockWidget()
328347
{
329348
QSettings settings;
@@ -334,11 +353,20 @@ QgsBrowserDockWidget::~QgsBrowserDockWidget()
334353

335354
void QgsBrowserDockWidget::showEvent( QShowEvent * e )
336355
{
337-
// delayed initialization of the model
356+
338357
if ( !mModel )
339358
{
340359
mModel = new QgsBrowserModel( mBrowserView );
360+
}
341361

362+
// delayed initialization of the model
363+
if ( !mModel->initialized( ) )
364+
{
365+
mModel->init();
366+
}
367+
368+
if ( ! mProxyModel )
369+
{
342370
connect( QgisApp::instance(), SIGNAL( newProject() ), mModel, SLOT( updateProjectHome() ) );
343371

344372
mProxyModel = new QgsBrowserTreeFilterProxyModel( this );

src/app/qgsbrowserdockwidget.h

+2
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ class APP_EXPORT QgsBrowserDockWidget : public QgsDockWidget, private Ui::QgsBro
105105
Q_OBJECT
106106
public:
107107
explicit QgsBrowserDockWidget( const QString& name, QWidget *parent = nullptr );
108+
explicit QgsBrowserDockWidget( const QString& name, QgsBrowserModel *model, QWidget *parent = nullptr );
108109
~QgsBrowserDockWidget();
109110
void addFavouriteDirectory( const QString& favDir );
110111

@@ -153,6 +154,7 @@ class APP_EXPORT QgsBrowserDockWidget : public QgsDockWidget, private Ui::QgsBro
153154
float mPropertiesWidgetHeight;
154155

155156
private:
157+
void init( const QString& name );
156158
};
157159

158160

src/core/qgsbrowsermodel.cpp

+12-3
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,8 @@ QgsBrowserModel::QgsBrowserModel( QObject *parent )
5151
: QAbstractItemModel( parent )
5252
, mFavourites( nullptr )
5353
, mProjectHome( nullptr )
54+
, mInitialized( false )
5455
{
55-
connect( QgsProject::instance(), SIGNAL( readProject( const QDomDocument & ) ), this, SLOT( updateProjectHome() ) );
56-
connect( QgsProject::instance(), SIGNAL( writeProject( QDomDocument & ) ), this, SLOT( updateProjectHome() ) );
57-
addRootItems();
5856
}
5957

6058
QgsBrowserModel::~QgsBrowserModel()
@@ -574,3 +572,14 @@ void QgsBrowserModel::hidePath( QgsDataItem *item )
574572
emit endRemoveRows();
575573
}
576574
}
575+
576+
void QgsBrowserModel::init()
577+
{
578+
if ( ! mInitialized )
579+
{
580+
connect( QgsProject::instance(), SIGNAL( readProject( const QDomDocument & ) ), this, SLOT( updateProjectHome() ) );
581+
connect( QgsProject::instance(), SIGNAL( writeProject( QDomDocument & ) ), this, SLOT( updateProjectHome() ) );
582+
addRootItems();
583+
mInitialized = true;
584+
}
585+
}

src/core/qgsbrowsermodel.h

+9
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,12 @@ class CORE_EXPORT QgsBrowserModel : public QAbstractItemModel
129129
bool canFetchMore( const QModelIndex & parent ) const override;
130130
void fetchMore( const QModelIndex & parent ) override;
131131

132+
//! Returns true if the model has been initialized
133+
bool initialized( ) const { return mInitialized; }
134+
135+
//! Delayed initialization
136+
void init();
137+
132138
signals:
133139
/** Emitted when item children fetch was finished */
134140
void stateChanged( const QModelIndex & index, QgsDataItem::State oldState );
@@ -158,6 +164,9 @@ class CORE_EXPORT QgsBrowserModel : public QAbstractItemModel
158164
QVector<QgsDataItem*> mRootItems;
159165
QgsFavouritesItem *mFavourites;
160166
QgsDirectoryItem *mProjectHome;
167+
168+
private:
169+
bool mInitialized;
161170
};
162171

163172
#endif // QGSBROWSERMODEL_H

0 commit comments

Comments
 (0)