Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #5219 from boundlessgeo/browser_shared_model_backport
[bugfix][backport] Browser shared model
  • Loading branch information
elpaso committed Sep 20, 2017
2 parents c81adf8 + f8b2b13 commit 36e6bd1
Show file tree
Hide file tree
Showing 7 changed files with 77 additions and 9 deletions.
8 changes: 7 additions & 1 deletion python/core/qgsbrowsermodel.sip
Expand Up @@ -5,7 +5,7 @@ class QgsBrowserModel : QAbstractItemModel
%End

public:
explicit QgsBrowserModel( QObject *parent = 0 );
explicit QgsBrowserModel( QObject *parent = 0, bool initialize = true );
~QgsBrowserModel();

enum ItemDataRole
Expand Down Expand Up @@ -81,6 +81,12 @@ class QgsBrowserModel : QAbstractItemModel
bool canFetchMore( const QModelIndex & parent ) const;
void fetchMore( const QModelIndex & parent );

//! Returns true if the model has been initialized
bool initialized( );

//! Delayed initialization
void init();

signals:
/** Emitted when item children fetch was finished */
void stateChanged( const QModelIndex & index, QgsDataItem::State oldState );
Expand Down
8 changes: 6 additions & 2 deletions src/app/qgisapp.cpp
Expand Up @@ -116,6 +116,7 @@
#include "qgsauthsslerrorsdialog.h"
#endif
#include "qgsbookmarks.h"
#include "qgsbrowsermodel.h"
#include "qgsbrowserdockwidget.h"
#include "qgsadvanceddigitizingdockwidget.h"
#include "qgsclipboard.h"
Expand Down Expand Up @@ -803,12 +804,14 @@ QgisApp::QgisApp( QSplashScreen *splash, bool restorePlugins, bool skipVersionCh
mSnappingDialog->setObjectName( "SnappingOption" );
endProfile();

mBrowserWidget = new QgsBrowserDockWidget( tr( "Browser Panel" ), this );
// Create the (shared) model with delayed initialization
mBrowserModel = new QgsBrowserModel( this, false );
mBrowserWidget = new QgsBrowserDockWidget( tr( "Browser Panel" ), mBrowserModel, this );
mBrowserWidget->setObjectName( "Browser" );
addDockWidget( Qt::LeftDockWidgetArea, mBrowserWidget );
mBrowserWidget->hide();

mBrowserWidget2 = new QgsBrowserDockWidget( tr( "Browser Panel (2)" ), this );
mBrowserWidget2 = new QgsBrowserDockWidget( tr( "Browser Panel (2)" ), mBrowserModel, this );
mBrowserWidget2->setObjectName( "Browser2" );
addDockWidget( Qt::LeftDockWidgetArea, mBrowserWidget2 );
mBrowserWidget2->hide();
Expand Down Expand Up @@ -1147,6 +1150,7 @@ QgisApp::QgisApp()
, mPythonUtils( nullptr )
, mUndoWidget( nullptr )
, mUndoDock( nullptr )
, mBrowserModel( nullptr )
, mBrowserWidget( nullptr )
, mBrowserWidget2( nullptr )
, mAdvancedDigitizingDockWidget( nullptr )
Expand Down
2 changes: 2 additions & 0 deletions src/app/qgisapp.h
Expand Up @@ -82,6 +82,7 @@ class QNetworkProxy;
class QAuthenticator;

class QgsBrowserDockWidget;
class QgsBrowserModel;
class QgsAdvancedDigitizingDockWidget;
class QgsSnappingDialog;
class QgsGPSInformationWidget;
Expand Down Expand Up @@ -1724,6 +1725,7 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
QgsUndoWidget *mUndoWidget;
QgsDockWidget *mUndoDock;

QgsBrowserModel *mBrowserModel;
QgsBrowserDockWidget *mBrowserWidget;
QgsBrowserDockWidget *mBrowserWidget2;

Expand Down
30 changes: 29 additions & 1 deletion src/app/qgsbrowserdockwidget.cpp
Expand Up @@ -261,12 +261,30 @@ void QgsBrowserPropertiesDialog::setItem( QgsDataItem* item )
setWindowTitle( item->type() == QgsDataItem::Layer ? tr( "Layer Properties" ) : tr( "Directory Properties" ) );
}


QgsBrowserDockWidget::QgsBrowserDockWidget( const QString& name, QgsBrowserModel *model, QWidget * parent )
: QgsDockWidget( parent )
, mModel( model )
, mProxyModel( nullptr )
, mPropertiesWidgetEnabled( false )
, mPropertiesWidgetHeight( 0 )
{
init( name );
}


QgsBrowserDockWidget::QgsBrowserDockWidget( const QString& name, QWidget * parent )
: QgsDockWidget( parent )
, mModel( nullptr )
, mProxyModel( nullptr )
, mPropertiesWidgetEnabled( false )
, mPropertiesWidgetHeight( 0 )
{
init( name );
}


void QgsBrowserDockWidget::init( const QString& name )
{
setupUi( this );

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


QgsBrowserDockWidget::~QgsBrowserDockWidget()
{
QSettings settings;
Expand All @@ -334,11 +353,20 @@ QgsBrowserDockWidget::~QgsBrowserDockWidget()

void QgsBrowserDockWidget::showEvent( QShowEvent * e )
{
// delayed initialization of the model

if ( !mModel )
{
mModel = new QgsBrowserModel( mBrowserView );
}

// delayed initialization of the model
if ( !mModel->initialized( ) )
{
mModel->init();
}

if ( ! mProxyModel )
{
connect( QgisApp::instance(), SIGNAL( newProject() ), mModel, SLOT( updateProjectHome() ) );

mProxyModel = new QgsBrowserTreeFilterProxyModel( this );
Expand Down
2 changes: 2 additions & 0 deletions src/app/qgsbrowserdockwidget.h
Expand Up @@ -105,6 +105,7 @@ class APP_EXPORT QgsBrowserDockWidget : public QgsDockWidget, private Ui::QgsBro
Q_OBJECT
public:
explicit QgsBrowserDockWidget( const QString& name, QWidget *parent = nullptr );
explicit QgsBrowserDockWidget( const QString& name, QgsBrowserModel *model, QWidget *parent = nullptr );
~QgsBrowserDockWidget();
void addFavouriteDirectory( const QString& favDir );

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

private:
void init( const QString& name );
};


Expand Down
19 changes: 15 additions & 4 deletions src/core/qgsbrowsermodel.cpp
Expand Up @@ -47,14 +47,14 @@ static bool cmpByDataItemName_( QgsDataItem* a, QgsDataItem* b )
return QString::localeAwareCompare( a->name(), b->name() ) < 0;
}

QgsBrowserModel::QgsBrowserModel( QObject *parent )
QgsBrowserModel::QgsBrowserModel( QObject *parent, bool initialize )
: QAbstractItemModel( parent )
, mFavourites( nullptr )
, mProjectHome( nullptr )
, mInitialized( false )
{
connect( QgsProject::instance(), SIGNAL( readProject( const QDomDocument & ) ), this, SLOT( updateProjectHome() ) );
connect( QgsProject::instance(), SIGNAL( writeProject( QDomDocument & ) ), this, SLOT( updateProjectHome() ) );
addRootItems();
if ( initialize )
init();
}

QgsBrowserModel::~QgsBrowserModel()
Expand Down Expand Up @@ -574,3 +574,14 @@ void QgsBrowserModel::hidePath( QgsDataItem *item )
emit endRemoveRows();
}
}

void QgsBrowserModel::init()
{
if ( ! mInitialized )
{
connect( QgsProject::instance(), SIGNAL( readProject( const QDomDocument & ) ), this, SLOT( updateProjectHome() ) );
connect( QgsProject::instance(), SIGNAL( writeProject( QDomDocument & ) ), this, SLOT( updateProjectHome() ) );
addRootItems();
mInitialized = true;
}
}
17 changes: 16 additions & 1 deletion src/core/qgsbrowsermodel.h
Expand Up @@ -53,7 +53,13 @@ class CORE_EXPORT QgsBrowserModel : public QAbstractItemModel
Q_OBJECT

public:
explicit QgsBrowserModel( QObject *parent = nullptr );

/**
* @brief QgsBrowserModel
* @param parent
* @param initialize immediately called init, default to true
*/
explicit QgsBrowserModel( QObject *parent = nullptr , bool initialize = true );
~QgsBrowserModel();

enum ItemDataRole
Expand Down Expand Up @@ -129,6 +135,12 @@ class CORE_EXPORT QgsBrowserModel : public QAbstractItemModel
bool canFetchMore( const QModelIndex & parent ) const override;
void fetchMore( const QModelIndex & parent ) override;

//! Returns true if the model has been initialized
bool initialized( ) const { return mInitialized; }

//! Delayed initialization
void init();

signals:
/** Emitted when item children fetch was finished */
void stateChanged( const QModelIndex & index, QgsDataItem::State oldState );
Expand Down Expand Up @@ -158,6 +170,9 @@ class CORE_EXPORT QgsBrowserModel : public QAbstractItemModel
QVector<QgsDataItem*> mRootItems;
QgsFavouritesItem *mFavourites;
QgsDirectoryItem *mProjectHome;

private:
bool mInitialized;
};

#endif // QGSBROWSERMODEL_H

0 comments on commit 36e6bd1

Please sign in to comment.