18#include "moc_qgslayertreefilterproxymodel.cpp" 
   25  : QSortFilterProxyModel( parent )
 
 
   38  mCheckedLayers = layers;
 
 
   50  if ( idx.column() == 0 )
 
   52    return Qt::ItemIsEnabled | Qt::ItemIsUserCheckable;
 
   54  return Qt::NoItemFlags;
 
 
   59  QModelIndex newIndex = QSortFilterProxyModel::index( row, 0, 
parent );
 
   63  return createIndex( row, column, newIndex.internalId() );
 
 
   68  return QSortFilterProxyModel::parent( createIndex( child.row(), 0, child.internalId() ) );
 
 
   73  const QModelIndex 
parent = idx.parent();
 
 
   80  if ( idx.column() == 0 )
 
   82    node = mLayerTreeModel->
index2node( mapToSource( idx ) );
 
 
   93  if ( filterText == mFilterText )
 
   96  mFilterText = filterText;
 
 
  102  return mLayerTreeModel;
 
 
  113  return mShowPrivateLayers;
 
 
  118  if ( showPrivate == mShowPrivateLayers )
 
  121  mShowPrivateLayers = showPrivate;
 
 
  139  return mCheckedLayers.contains( layer );
 
 
  146    mCheckedLayers << layer;
 
  150    mCheckedLayers.removeAll( layer );
 
 
  154void QgsLayerTreeFilterProxyModel::setLayerCheckedPrivate( 
QgsMapLayer *layer, 
bool checked )
 
  162  const QModelIndex 
index = mapFromSource( mLayerTreeModel->
node2index( node ) );
 
  169bool QgsLayerTreeFilterProxyModel::layerShown( 
QgsMapLayer *layer )
 const 
  181    const auto constChildren = node->
children();
 
  196    if ( !mFilterText.isEmpty() && !layer->
name().contains( mFilterText, Qt::CaseInsensitive ) )
 
  205    return layerShown( layer );
 
 
  211  if ( idx.column() == 0 )
 
  213    if ( role == Qt::CheckStateRole )
 
  224          return Qt::Unchecked;
 
  230        bool hasChecked = 
false, hasUnchecked = 
false;
 
  232        for ( n = 0; !hasChecked || !hasUnchecked; n++ )
 
  234          const QVariant v = 
data( 
index( n, 0, idx ), role );
 
  240            case Qt::PartiallyChecked:
 
  242              return Qt::PartiallyChecked;
 
  256          return Qt::Unchecked;
 
  259        if ( hasChecked &&  hasUnchecked )
 
  260          return Qt::PartiallyChecked;
 
  265        Q_ASSERT( hasUnchecked );
 
  266        return Qt::Unchecked;
 
  271      return mLayerTreeModel->
data( mapToSource( idx ), role );
 
 
  279  if ( 
index.column() == 0 )
 
  281    if ( role == Qt::CheckStateRole )
 
  287        if ( !child.isValid() )
 
  300        if ( value.toInt() == Qt::Checked )
 
  301          setLayerCheckedPrivate( layer, 
true );
 
  302        else if ( value.toInt() == Qt::Unchecked )
 
  303          setLayerCheckedPrivate( layer, 
false );
 
  311    return mLayerTreeModel->
setData( mapToSource( 
index ), value, role );
 
 
QFlags< LayerFilter > LayerFilters
 
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
 
bool nodeShown(QgsLayerTreeNode *node) const
Returns true if the specified node will be shown in the model.
 
virtual void setLayerChecked(QgsMapLayer *layer, bool checked)
This will set if the layer is checked or not.
 
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override
 
virtual bool setData(const QModelIndex &index, const QVariant &value, int role) override
 
void setFilters(Qgis::LayerFilters filters)
Defines the type layers (vector, raster, etc) shown in the tree If the list is empty,...
 
virtual int columnCount(const QModelIndex &parent) const override
 
QgsMapLayer * mapLayer(const QModelIndex &idx) const
Returns the map layer at a given index.
 
void setLayerTreeModel(QgsLayerTreeModel *layerTreeModel)
Sets the layer tree model.
 
virtual bool isLayerChecked(QgsMapLayer *layer) const
Returns if the layer is checked or not.
 
virtual void setFilterText(const QString &filterText=QString())
Sets the filter text to search for a layer in the tree.
 
void setCheckedLayers(const QList< QgsMapLayer * > layers)
Initialize the list of checked layers.
 
void setShowPrivateLayers(bool showPrivate)
Determines if private layers are shown.
 
QModelIndex sibling(int row, int column, const QModelIndex &idx) const override
 
QModelIndex parent(const QModelIndex &child) const override
 
virtual QVariant data(const QModelIndex &index, int role) const override
 
QgsLayerTreeFilterProxyModel(QObject *parent=nullptr)
Constructor.
 
virtual Qt::ItemFlags flags(const QModelIndex &idx) const override
 
bool showPrivateLayers() const
Returns if private layers are shown.
 
QgsLayerTreeModel * layerTreeModel() const
Rerturns the layer tree model.
 
QgsLayerTreeLayer * findLayer(QgsMapLayer *layer) const
Find layer node representing the map layer.
 
QgsMapLayer * layer() const
Returns the map layer associated with this node.
 
A model representing the layer tree, including layers and groups of layers.
 
QModelIndex node2index(QgsLayerTreeNode *node) const
Returns index for a given node. If the node does not belong to the layer tree, the result is undefine...
 
bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole) override
 
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
 
QgsLayerTree * rootGroup() const
Returns pointer to the root node of the layer tree. Always a non nullptr value.
 
QgsLayerTreeNode * index2node(const QModelIndex &index) const
Returns layer tree node for given index.
 
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
 
Base class for nodes in a layer tree.
 
@ NodeGroup
Container of other groups and layers.
 
QList< QgsLayerTreeNode * > children()
Gets list of children of the node. Children are owned by the parent.
 
NodeType nodeType() const
Find out about type of the node. It is usually shorter to use convenience functions from QgsLayerTree...
 
static QgsLayerTreeLayer * toLayer(QgsLayerTreeNode *node)
Cast node to a layer.
 
static bool isLayer(const QgsLayerTreeNode *node)
Check whether the node is a valid layer node.
 
static bool layerMatchesFilters(const QgsMapLayer *layer, const Qgis::LayerFilters &filters)
Returns if the layer matches the given filters.
 
Base class for all map layer types.
 
QgsMapLayer::LayerFlags flags() const
Returns the flags for this layer.
 
@ Private
Determines if the layer is meant to be exposed to the GUI, i.e. visible in the layer legend tree.
 
static QgsProject * instance()
Returns the QgsProject singleton instance.
 
void readProject(const QDomDocument &document)
Emitted when a project is being read.