Skip to content

Commit

Permalink
Merge pull request #4742 from boundlessgeo/browsertree-collapse-wms
Browse files Browse the repository at this point in the history
Browsertree collapse network provider items
  • Loading branch information
elpaso committed Jun 20, 2017
2 parents 7fff6cf + 28c9fee commit 8b98db0
Show file tree
Hide file tree
Showing 21 changed files with 68 additions and 17 deletions.
3 changes: 2 additions & 1 deletion python/core/qgsdataitem.sip
Expand Up @@ -176,7 +176,8 @@ Create new data item.
NoCapabilities,
SetCrs,
Fertile,
Fast
Fast,
Collapse
};
typedef QFlags<QgsDataItem::Capability> Capabilities;

Expand Down
9 changes: 9 additions & 0 deletions python/gui/qgsbrowsertreeview.sip
Expand Up @@ -25,6 +25,15 @@ class QgsBrowserTreeView : QTreeView
QgsBrowserTreeView( QWidget *parent /TransferThis/ = 0 );

virtual void setModel( QAbstractItemModel *model );
void setBrowserModel( QgsBrowserModel *model );
%Docstring
Set the browser model
%End
QgsBrowserModel *browserModel( );
%Docstring
Return the browser model
:rtype: QgsBrowserModel
%End
virtual void showEvent( QShowEvent *e );
virtual void hideEvent( QHideEvent *e );

Expand Down
9 changes: 5 additions & 4 deletions src/core/qgsdataitem.h
Expand Up @@ -169,10 +169,11 @@ class CORE_EXPORT QgsDataItem : public QObject

enum Capability
{
NoCapabilities = 0,
SetCrs = 1 << 0, //!< Can set CRS on layer or group of layers
Fertile = 1 << 1, //!< Can create children. Even items without this capability may have children, but cannot create them, it means that children are created by item ancestors.
Fast = 1 << 2 //!< CreateChildren() is fast enough to be run in main thread when refreshing items, most root items (wms,wfs,wcs,postgres...) are considered fast because they are reading data only from QgsSettings
NoCapabilities = 0,
SetCrs = 1 << 0, //!< Can set CRS on layer or group of layers
Fertile = 1 << 1, //!< Can create children. Even items without this capability may have children, but cannot create them, it means that children are created by item ancestors.
Fast = 1 << 2, //!< CreateChildren() is fast enough to be run in main thread when refreshing items, most root items (wms,wfs,wcs,postgres...) are considered fast because they are reading data only from QgsSettings
Collapse = 1 << 3 //!< The collapse/expand status for this items children should be ignored in order to avoid undesired network connections (wms etc.)
};
Q_DECLARE_FLAGS( Capabilities, Capability )

Expand Down
1 change: 0 additions & 1 deletion src/gui/CMakeLists.txt
Expand Up @@ -746,7 +746,6 @@ SET(QGIS_GUI_UI_HDRS
${CMAKE_CURRENT_BINARY_DIR}/../ui/ui_qgsquerybuilderbase.h
${CMAKE_CURRENT_BINARY_DIR}/../ui/ui_qgssqlcomposerdialogbase.h
${CMAKE_CURRENT_BINARY_DIR}/../ui/ui_qgssublayersdialogbase.h
${CMAKE_CURRENT_BINARY_DIR}/../ui/ui_qgstablewidgetuibase.h
)

IF(ENABLE_MODELTEST)
Expand Down
1 change: 1 addition & 0 deletions src/gui/qgsbrowserdockwidget.cpp
Expand Up @@ -118,6 +118,7 @@ void QgsBrowserDockWidget::showEvent( QShowEvent *e )
mProxyModel = new QgsBrowserTreeFilterProxyModel( this );
mProxyModel->setBrowserModel( mModel );
mBrowserView->setSettingsSection( objectName().toLower() ); // to distinguish 2 instances ow browser
mBrowserView->setBrowserModel( mModel );
mBrowserView->setModel( mProxyModel );
// provide a horizontal scroll bar instead of using ellipse (...) for longer items
mBrowserView->setTextElideMode( Qt::ElideNone );
Expand Down
2 changes: 2 additions & 0 deletions src/gui/qgsbrowserdockwidget_p.h
Expand Up @@ -212,6 +212,8 @@ class QgsBrowserTreeFilterProxyModel : public QSortFilterProxyModel
explicit QgsBrowserTreeFilterProxyModel( QObject *parent );
//! Set the browser model
void setBrowserModel( QgsBrowserModel *model );
//! Get the browser model
QgsBrowserModel *browserModel( ) { return mModel; }
//! Set the filter syntax
void setFilterSyntax( const QString &syntax );
//! Set the filter
Expand Down
26 changes: 25 additions & 1 deletion src/gui/qgsbrowsertreeview.cpp
Expand Up @@ -22,6 +22,7 @@
QgsBrowserTreeView::QgsBrowserTreeView( QWidget *parent )
: QTreeView( parent )
, mSettingsSection( QStringLiteral( "browser" ) )
, mBrowserModel( nullptr )
{
}

Expand All @@ -33,6 +34,11 @@ void QgsBrowserTreeView::setModel( QAbstractItemModel *model )
restoreState();
}

void QgsBrowserTreeView::setBrowserModel( QgsBrowserModel *model )
{
mBrowserModel = model;
}

void QgsBrowserTreeView::showEvent( QShowEvent *e )
{
Q_UNUSED( e );
Expand Down Expand Up @@ -72,7 +78,25 @@ void QgsBrowserTreeView::restoreState()
{
QModelIndex expandIndex = QgsBrowserModel::findPath( model(), path, Qt::MatchStartsWith );
if ( expandIndex.isValid() )
expandIndexSet.insert( expandIndex );
{
QModelIndex modelIndex = browserModel()->findPath( path, Qt::MatchExactly );
if ( modelIndex.isValid() )
{
QgsDataItem *ptr = browserModel()->dataItem( modelIndex );
if ( ptr && ( ptr->capabilities2() & QgsDataItem::Capability::Collapse ) )
{
QgsDebugMsgLevel( "do not expand index for path " + path, 4 );
QModelIndex parentIndex = model()->parent( expandIndex );
// Still we need to store the parent in order to expand it
if ( parentIndex.isValid() )
expandIndexSet.insert( parentIndex );
}
else
{
expandIndexSet.insert( expandIndex );
}
}
}
else
{
QgsDebugMsgLevel( "index for path " + path + " not found", 4 );
Expand Down
7 changes: 6 additions & 1 deletion src/gui/qgsbrowsertreeview.h
Expand Up @@ -20,7 +20,7 @@
#include "qgis.h"
#include "qgis_gui.h"

//class QgsBrowserModel;
class QgsBrowserModel;

/** \ingroup gui
* The QgsBrowserTreeView class extends QTreeView with save/restore tree state functionality.
Expand All @@ -35,6 +35,10 @@ class GUI_EXPORT QgsBrowserTreeView : public QTreeView
QgsBrowserTreeView( QWidget *parent SIP_TRANSFERTHIS = 0 );

virtual void setModel( QAbstractItemModel *model ) override;
//! Set the browser model
void setBrowserModel( QgsBrowserModel *model );
//! Return the browser model
QgsBrowserModel *browserModel( ) { return mBrowserModel; }
virtual void showEvent( QShowEvent *e ) override;
virtual void hideEvent( QHideEvent *e ) override;

Expand Down Expand Up @@ -64,6 +68,7 @@ class GUI_EXPORT QgsBrowserTreeView : public QTreeView

// returns true if expanded from root to item
bool treeExpanded( const QModelIndex &index );
QgsBrowserModel *mBrowserModel;
};

#endif // QGSBROWSERTREEVIEW_H
1 change: 1 addition & 0 deletions src/providers/arcgisrest/qgsafsdataitems.cpp
Expand Up @@ -83,6 +83,7 @@ QgsAfsConnectionItem::QgsAfsConnectionItem( QgsDataItem *parent, const QString &
, mUrl( url )
{
mIconName = QStringLiteral( "mIconConnect.png" );
mCapabilities |= Collapse;
}

QVector<QgsDataItem *> QgsAfsConnectionItem::createChildren()
Expand Down
2 changes: 1 addition & 1 deletion src/providers/arcgisrest/qgsamsdataitems.cpp
Expand Up @@ -26,7 +26,7 @@
QgsAmsRootItem::QgsAmsRootItem( QgsDataItem *parent, QString name, QString path )
: QgsDataCollectionItem( parent, name, path )
{
mCapabilities |= Fast;
mCapabilities |= Fast | Collapse;
mIconName = QStringLiteral( "mIconAms.svg" );
populate();
}
Expand Down
1 change: 1 addition & 0 deletions src/providers/db2/qgsdb2dataitems.cpp
Expand Up @@ -35,6 +35,7 @@ QgsDb2ConnectionItem::QgsDb2ConnectionItem( QgsDataItem *parent, const QString n
: QgsDataCollectionItem( parent, name, path )
{
mIconName = QStringLiteral( "mIconConnect.png" );
mCapabilities |= Collapse;
populate();
}

Expand Down
2 changes: 1 addition & 1 deletion src/providers/mssql/qgsmssqldataitems.cpp
Expand Up @@ -41,7 +41,7 @@ QgsMssqlConnectionItem::QgsMssqlConnectionItem( QgsDataItem *parent, QString nam
, mAllowGeometrylessTables( true )
, mColumnTypeThread( nullptr )
{
mCapabilities |= Fast;
mCapabilities |= Fast | Collapse;
mIconName = QStringLiteral( "mIconConnect.png" );
}

Expand Down
1 change: 1 addition & 0 deletions src/providers/oracle/qgsoracledataitems.cpp
Expand Up @@ -34,6 +34,7 @@ QgsOracleConnectionItem::QgsOracleConnectionItem( QgsDataItem *parent, QString n
, mColumnTypeThread( nullptr )
{
mIconName = "mIconConnect.png";
mCapabilities |= Collapse;
}

QgsOracleConnectionItem::~QgsOracleConnectionItem()
Expand Down
1 change: 1 addition & 0 deletions src/providers/ows/qgsowsdataitems.cpp
Expand Up @@ -29,6 +29,7 @@ QgsOWSConnectionItem::QgsOWSConnectionItem( QgsDataItem *parent, QString name, Q
: QgsDataCollectionItem( parent, name, path )
{
mIconName = QStringLiteral( "mIconConnect.png" );
mCapabilities |= Collapse;
}

QgsOWSConnectionItem::~QgsOWSConnectionItem()
Expand Down
1 change: 1 addition & 0 deletions src/providers/postgres/qgspostgresdataitems.cpp
Expand Up @@ -39,6 +39,7 @@ QgsPGConnectionItem::QgsPGConnectionItem( QgsDataItem *parent, QString name, QSt
: QgsDataCollectionItem( parent, name, path )
{
mIconName = QStringLiteral( "mIconConnect.png" );
mCapabilities |= Collapse;
}

QVector<QgsDataItem *> QgsPGConnectionItem::createChildren()
Expand Down
1 change: 1 addition & 0 deletions src/providers/spatialite/qgsspatialitedataitems.cpp
Expand Up @@ -75,6 +75,7 @@ QgsSLConnectionItem::QgsSLConnectionItem( QgsDataItem *parent, QString name, QSt
{
mDbPath = QgsSpatiaLiteConnection::connectionPath( name );
mToolTip = mDbPath;
mCapabilities |= Collapse;
}

static QgsLayerItem::LayerType _layerTypeFromDb( const QString &dbType )
Expand Down
9 changes: 5 additions & 4 deletions src/providers/wcs/qgswcsdataitems.cpp
Expand Up @@ -29,6 +29,7 @@ QgsWCSConnectionItem::QgsWCSConnectionItem( QgsDataItem *parent, QString name, Q
, mUri( uri )
{
mIconName = QStringLiteral( "mIconWcs.svg" );
mCapabilities |= Collapse;
}

QgsWCSConnectionItem::~QgsWCSConnectionItem()
Expand All @@ -43,23 +44,23 @@ QVector<QgsDataItem *> QgsWCSConnectionItem::createChildren()
uri.setEncodedUri( mUri );
QgsDebugMsg( "mUri = " + mUri );

mCapabilities.setUri( uri );
mWcsCapabilities.setUri( uri );

// Attention: supportedLayers() gives tree leafes, not top level
if ( !mCapabilities.lastError().isEmpty() )
if ( !mWcsCapabilities.lastError().isEmpty() )
{
//children.append( new QgsErrorItem( this, tr( "Failed to retrieve layers" ), mPath + "/error" ) );
// TODO: show the error without adding child
return children;
}

Q_FOREACH ( const QgsWcsCoverageSummary &coverageSummary, mCapabilities.capabilities().contents.coverageSummary )
Q_FOREACH ( const QgsWcsCoverageSummary &coverageSummary, mWcsCapabilities.capabilities().contents.coverageSummary )
{
// Attention, the name may be empty
QgsDebugMsg( QString::number( coverageSummary.orderId ) + ' ' + coverageSummary.identifier + ' ' + coverageSummary.title );
QString pathName = coverageSummary.identifier.isEmpty() ? QString::number( coverageSummary.orderId ) : coverageSummary.identifier;

QgsWCSLayerItem *layer = new QgsWCSLayerItem( this, coverageSummary.title, mPath + '/' + pathName, mCapabilities.capabilities(), uri, coverageSummary );
QgsWCSLayerItem *layer = new QgsWCSLayerItem( this, coverageSummary.title, mPath + '/' + pathName, mWcsCapabilities.capabilities(), uri, coverageSummary );

children.append( layer );
}
Expand Down
2 changes: 1 addition & 1 deletion src/providers/wcs/qgswcsdataitems.h
Expand Up @@ -31,7 +31,7 @@ class QgsWCSConnectionItem : public QgsDataCollectionItem

virtual QList<QAction *> actions() override;

QgsWcsCapabilities mCapabilities;
QgsWcsCapabilities mWcsCapabilities;
QVector<QgsWcsCoverageSummary> mLayerProperties;

public slots:
Expand Down
3 changes: 2 additions & 1 deletion src/providers/wfs/qgswfsdataitems.cpp
Expand Up @@ -46,9 +46,10 @@ QgsWfsLayerItem::~QgsWfsLayerItem()
QgsWfsConnectionItem::QgsWfsConnectionItem( QgsDataItem *parent, QString name, QString path, QString uri )
: QgsDataCollectionItem( parent, name, path )
, mUri( uri )
, mCapabilities( nullptr )
, mWfsCapabilities( nullptr )
{
mIconName = QStringLiteral( "mIconWfs.svg" );
mCapabilities |= Collapse;
}

QgsWfsConnectionItem::~QgsWfsConnectionItem()
Expand Down
2 changes: 1 addition & 1 deletion src/providers/wfs/qgswfsdataitems.h
Expand Up @@ -58,7 +58,7 @@ class QgsWfsConnectionItem : public QgsDataCollectionItem
private:
QString mUri;

QgsWfsCapabilities *mCapabilities = nullptr;
QgsWfsCapabilities *mWfsCapabilities = nullptr;
};


Expand Down
1 change: 1 addition & 0 deletions src/providers/wms/qgswmsdataitems.cpp
Expand Up @@ -35,6 +35,7 @@ QgsWMSConnectionItem::QgsWMSConnectionItem( QgsDataItem *parent, QString name, Q
, mCapabilitiesDownload( nullptr )
{
mIconName = QStringLiteral( "mIconConnect.png" );
mCapabilities |= Collapse;
mCapabilitiesDownload = new QgsWmsCapabilitiesDownload( false );
}

Expand Down

0 comments on commit 8b98db0

Please sign in to comment.