Not working yet

This commit is contained in:
Alessandro Pasotti 2020-10-22 15:58:05 +02:00
parent 8942ed5e3f
commit 165dcb6719
6 changed files with 44 additions and 4 deletions

View File

@ -82,7 +82,6 @@ The root node is not transferred by the model.
DeferredLegendInvalidation,
UseEmbeddedWidgets,
UseTextFormatting,
ShowHidden,
// behavioral flags
AllowNodeReorder,

View File

@ -39,6 +39,10 @@ the Free Software Foundation; either version 2 of the License, or *
void setFilterText( const QString &filterText = QString() );
bool showHidden() const;
void setShowHidden( bool showHidden );
protected:
virtual bool filterAcceptsRow( int sourceRow, const QModelIndex &sourceParent ) const;
@ -307,6 +311,13 @@ Set width of contextual menu mark, at right of layer node items.
Set the message bar to display messages from the layer tree
.. versionadded:: 3.14
%End
void setShowHidden( bool showHidden );
%Docstring
Set the show hidden layers to ``showHidden``
.. versionadded:: 3.18
%End
signals:

View File

@ -1193,7 +1193,6 @@ void QgsProjectProperties::apply()
else
flags &= ~QgsMapLayer::Hidden;
layer->setFlags( flags );
QgsVectorLayer *vl = qobject_cast<QgsVectorLayer *>( layer );

View File

@ -98,7 +98,6 @@ class CORE_EXPORT QgsLayerTreeModel : public QAbstractItemModel
DeferredLegendInvalidation = 0x0008, //!< Defer legend model invalidation
UseEmbeddedWidgets = 0x0010, //!< Layer nodes may optionally include extra embedded widgets (if used in QgsLayerTreeView). Added in 2.16
UseTextFormatting = 0x0020, //!< Layer nodes will alter text appearance based on layer properties, such as scale based visibility
ShowHidden = 0x0020, //!< Display hidden layers
// behavioral flags
AllowNodeReorder = 0x1000, //!< Allow reordering with drag'n'drop

View File

@ -95,6 +95,7 @@ void QgsLayerTreeView::setModel( QAbstractItemModel *model )
);
mProxyModel = new QgsLayerTreeProxyModel( treeModel, this );
mProxyModel->setShowHidden( false );
QTreeView::setModel( mProxyModel );
connect( treeModel->rootGroup(), &QgsLayerTreeNode::expandedChanged, this, &QgsLayerTreeView::onExpandedChanged );
@ -536,6 +537,12 @@ void QgsLayerTreeView::setMessageBar( QgsMessageBar *messageBar )
);
}
void QgsLayerTreeView::setShowHidden( bool showHidden )
{
mShowHidden = true;
mProxyModel->setShowHidden( showHidden );
}
void QgsLayerTreeView::mouseReleaseEvent( QMouseEvent *event )
{
// we need to keep last mouse position in order to know whether to emit an indicator's clicked() signal
@ -684,7 +691,19 @@ bool QgsLayerTreeProxyModel::nodeShown( QgsLayerTreeNode *node ) const
return true;
if ( !mFilterText.isEmpty() && !layer->name().contains( mFilterText, Qt::CaseInsensitive ) )
return false;
if ( ! mShowHidden && layer->flags().testFlag( QgsMapLayer::LayerFlag::Hidden ) )
return false;
return true;
}
}
bool QgsLayerTreeProxyModel::showHidden() const
{
return mShowHidden;
}
void QgsLayerTreeProxyModel::setShowHidden( bool showHidden )
{
mShowHidden = showHidden;
invalidateFilter();
}

View File

@ -43,6 +43,10 @@ class GUI_EXPORT QgsLayerTreeProxyModel : public QSortFilterProxyModel
void setFilterText( const QString &filterText = QString() );
bool showHidden() const;
void setShowHidden( bool showHidden );
protected:
bool filterAcceptsRow( int sourceRow, const QModelIndex &sourceParent ) const override;
@ -53,6 +57,7 @@ class GUI_EXPORT QgsLayerTreeProxyModel : public QSortFilterProxyModel
QgsLayerTreeModel *mLayerTreeModel = nullptr;
QString mFilterText;
bool mShowHidden = false;
};
@ -289,6 +294,12 @@ class GUI_EXPORT QgsLayerTreeView : public QTreeView
*/
void setMessageBar( QgsMessageBar *messageBar );
/**
* Set the show hidden layers to \a showHidden
* \since QGIS 3.18
*/
void setShowHidden( bool showHidden );
signals:
//! Emitted when a current layer is changed
void currentLayerChanged( QgsMapLayer *layer );
@ -345,6 +356,8 @@ class GUI_EXPORT QgsLayerTreeView : public QTreeView
QgsMessageBar *mMessageBar = nullptr;
bool mShowHidden = false;
// friend so it can access viewOptions() method and mLastReleaseMousePos without making them public
friend class QgsLayerTreeViewItemDelegate;
};