Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions app/layer/layertreesortfiltermodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,10 +92,14 @@ QModelIndex LayerTreeSortFilterModel::node2index( QgsLayerTreeNode *node ) const
return mapFromSource( srcIndex );
}

LayerTreeSortFilterModel::SortMethodEnum LayerTreeSortFilterModel::sortMethod( QgsProject *project )
{
return static_cast<SortMethodEnum>( project->readNumEntry( QStringLiteral( "Mergin" ), QStringLiteral( "SortLayersMethod/Method" ), SortMethodEnum::Alphabetical ) );
}

void LayerTreeSortFilterModel::onSourceModelInitialized()
{
bool sortMethod = mLayerTreeModel->qgsProject()->readNumEntry( QStringLiteral( "Mergin" ), QStringLiteral( "SortLayersMethod/Method" ), 1 );
if ( sortMethod == SortMethodEnum::Alphabetical )
if ( sortMethod( mLayerTreeModel->qgsProject() ) == SortMethodEnum::Alphabetical )
{
sort( 0 );
}
Expand Down
3 changes: 3 additions & 0 deletions app/layer/layertreesortfiltermodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ class LayerTreeSortFilterModel : public QSortFilterProxyModel

bool filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const override;

// Returns the layer sorting method configured for the given project (defaults to Alphabetical)
static SortMethodEnum sortMethod( QgsProject *project );

LayerTreeModel *layerTreeModel() const;
void setLayerTreeModel( LayerTreeModel *newLayerTreeModel );

Expand Down
18 changes: 18 additions & 0 deletions app/recordinglayersproxymodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
#include "qgsproject.h"
#include "qgslayertree.h"

#include "layer/layertreesortfiltermodel.h"

RecordingLayersProxyModel::RecordingLayersProxyModel( QObject *parent ) :
QgsMapLayerProxyModel{ parent },
mModel( nullptr )
Expand All @@ -34,6 +36,22 @@ bool RecordingLayersProxyModel::filterAcceptsRow( int source_row, const QModelIn
return mModel->data( index, LayersModel::LayerVisible ).toBool();
}

bool RecordingLayersProxyModel::lessThan( const QModelIndex &left, const QModelIndex &right ) const
{
if ( !mModel || LayerTreeSortFilterModel::sortMethod( QgsProject::instance() ) == LayerTreeSortFilterModel::Alphabetical )
return QgsMapLayerProxyModel::lessThan( left, right );

// preserve the layer order as arranged in the QGIS project's layer tree
QgsMapLayer *leftLayer = mModel->layerFromIndex( left );
QgsMapLayer *rightLayer = mModel->layerFromIndex( right );

if ( !leftLayer || !rightLayer )
return QgsMapLayerProxyModel::lessThan( left, right );

const QStringList treeOrder = QgsProject::instance()->layerTreeRoot()->findLayerIds();
return treeOrder.indexOf( leftLayer->id() ) < treeOrder.indexOf( rightLayer->id() );
}

QList<QgsMapLayer *> RecordingLayersProxyModel::layers() const
{
if ( !mModel )
Expand Down
1 change: 1 addition & 0 deletions app/recordinglayersproxymodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ class RecordingLayersProxyModel : public QgsMapLayerProxyModel
Q_INVOKABLE explicit RecordingLayersProxyModel( QObject *parent = nullptr );

bool filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const override;
bool lessThan( const QModelIndex &left, const QModelIndex &right ) const override;

/**
* @brief layers method return layers from source model filtered with filter function
Expand Down
Loading