From ae7b657da35aed2dc8665192f4a13c04e752ca05 Mon Sep 17 00:00:00 2001 From: Matthias Kuhn Date: Wed, 23 Mar 2016 15:05:37 +0100 Subject: [PATCH] Add a new filter for WritableLayers to QgsMapLayerProxyModel --- python/gui/qgsmaplayerproxymodel.sip | 1 + src/gui/qgsmaplayerproxymodel.cpp | 6 +++++- src/gui/qgsmaplayerproxymodel.h | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/python/gui/qgsmaplayerproxymodel.sip b/python/gui/qgsmaplayerproxymodel.sip index af50cf7d4d0..df12578ded9 100644 --- a/python/gui/qgsmaplayerproxymodel.sip +++ b/python/gui/qgsmaplayerproxymodel.sip @@ -20,6 +20,7 @@ class QgsMapLayerProxyModel : QSortFilterProxyModel HasGeometry, VectorLayer, PluginLayer, + WritableLayer, All }; typedef QFlags Filters; diff --git a/src/gui/qgsmaplayerproxymodel.cpp b/src/gui/qgsmaplayerproxymodel.cpp index 9ae00ea296d..20ba2f96245 100644 --- a/src/gui/qgsmaplayerproxymodel.cpp +++ b/src/gui/qgsmaplayerproxymodel.cpp @@ -84,6 +84,11 @@ bool QgsMapLayerProxyModel::filterAcceptsRow( int source_row, const QModelIndex if ( mExceptList.contains( layer ) ) return false; + QgsVectorLayer* vl = qobject_cast( layer ); + + if ( mFilters.testFlag( WritableLayer ) && layer->readOnly() ) + return false; + // layer type if (( mFilters.testFlag( RasterLayer ) && layer->type() == QgsMapLayer::RasterLayer ) || ( mFilters.testFlag( VectorLayer ) && layer->type() == QgsMapLayer::VectorLayer ) || @@ -98,7 +103,6 @@ bool QgsMapLayerProxyModel::filterAcceptsRow( int source_row, const QModelIndex mFilters.testFlag( HasGeometry ); if ( detectGeometry && layer->type() == QgsMapLayer::VectorLayer ) { - QgsVectorLayer* vl = dynamic_cast( layer ); if ( vl ) { if ( mFilters.testFlag( HasGeometry ) && vl->hasGeometryType() ) diff --git a/src/gui/qgsmaplayerproxymodel.h b/src/gui/qgsmaplayerproxymodel.h index 89e047ae04e..41ac94a3938 100644 --- a/src/gui/qgsmaplayerproxymodel.h +++ b/src/gui/qgsmaplayerproxymodel.h @@ -46,6 +46,7 @@ class GUI_EXPORT QgsMapLayerProxyModel : public QSortFilterProxyModel HasGeometry = PointLayer | LineLayer | PolygonLayer, VectorLayer = NoGeometry | HasGeometry, PluginLayer = 32, + WritableLayer = 64, All = RasterLayer | VectorLayer | PluginLayer }; Q_DECLARE_FLAGS( Filters, Filter )