Skip to content
Permalink
Browse files

Merge pull request #4742 from boundlessgeo/browsertree-collapse-wms

Browsertree collapse network provider items
  • Loading branch information
elpaso committed Jun 20, 2017
2 parents 7fff6cf + 28c9fee commit 8b98db07874696c16368d6bf67cb815553518cc0
@@ -176,7 +176,8 @@ Create new data item.
NoCapabilities,
SetCrs,
Fertile,
Fast
Fast,
Collapse
};
typedef QFlags<QgsDataItem::Capability> Capabilities;

@@ -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 );

@@ -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 )

@@ -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)
@@ -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 );
@@ -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
@@ -22,6 +22,7 @@
QgsBrowserTreeView::QgsBrowserTreeView( QWidget *parent )
: QTreeView( parent )
, mSettingsSection( QStringLiteral( "browser" ) )
, mBrowserModel( nullptr )
{
}

@@ -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 );
@@ -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 );
@@ -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.
@@ -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;

@@ -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
@@ -83,6 +83,7 @@ QgsAfsConnectionItem::QgsAfsConnectionItem( QgsDataItem *parent, const QString &
, mUrl( url )
{
mIconName = QStringLiteral( "mIconConnect.png" );
mCapabilities |= Collapse;
}

QVector<QgsDataItem *> QgsAfsConnectionItem::createChildren()
@@ -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();
}
@@ -35,6 +35,7 @@ QgsDb2ConnectionItem::QgsDb2ConnectionItem( QgsDataItem *parent, const QString n
: QgsDataCollectionItem( parent, name, path )
{
mIconName = QStringLiteral( "mIconConnect.png" );
mCapabilities |= Collapse;
populate();
}

@@ -41,7 +41,7 @@ QgsMssqlConnectionItem::QgsMssqlConnectionItem( QgsDataItem *parent, QString nam
, mAllowGeometrylessTables( true )
, mColumnTypeThread( nullptr )
{
mCapabilities |= Fast;
mCapabilities |= Fast | Collapse;
mIconName = QStringLiteral( "mIconConnect.png" );
}

@@ -34,6 +34,7 @@ QgsOracleConnectionItem::QgsOracleConnectionItem( QgsDataItem *parent, QString n
, mColumnTypeThread( nullptr )
{
mIconName = "mIconConnect.png";
mCapabilities |= Collapse;
}

QgsOracleConnectionItem::~QgsOracleConnectionItem()
@@ -29,6 +29,7 @@ QgsOWSConnectionItem::QgsOWSConnectionItem( QgsDataItem *parent, QString name, Q
: QgsDataCollectionItem( parent, name, path )
{
mIconName = QStringLiteral( "mIconConnect.png" );
mCapabilities |= Collapse;
}

QgsOWSConnectionItem::~QgsOWSConnectionItem()
@@ -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()
@@ -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 )
@@ -29,6 +29,7 @@ QgsWCSConnectionItem::QgsWCSConnectionItem( QgsDataItem *parent, QString name, Q
, mUri( uri )
{
mIconName = QStringLiteral( "mIconWcs.svg" );
mCapabilities |= Collapse;
}

QgsWCSConnectionItem::~QgsWCSConnectionItem()
@@ -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 );
}
@@ -31,7 +31,7 @@ class QgsWCSConnectionItem : public QgsDataCollectionItem

virtual QList<QAction *> actions() override;

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

public slots:
@@ -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()
@@ -58,7 +58,7 @@ class QgsWfsConnectionItem : public QgsDataCollectionItem
private:
QString mUri;

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


@@ -35,6 +35,7 @@ QgsWMSConnectionItem::QgsWMSConnectionItem( QgsDataItem *parent, QString name, Q
, mCapabilitiesDownload( nullptr )
{
mIconName = QStringLiteral( "mIconConnect.png" );
mCapabilities |= Collapse;
mCapabilitiesDownload = new QgsWmsCapabilitiesDownload( false );
}

0 comments on commit 8b98db0

Please sign in to comment.
You can’t perform that action at this time.