Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[bugfix][backport] Browser shared model #5219

Merged
merged 2 commits into from Sep 20, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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