Skip to content

Commit

Permalink
When opening or reloading a project, clear the previous one to empty …
Browse files Browse the repository at this point in the history
…the layer tree
  • Loading branch information
nirvn committed Jan 14, 2024
1 parent ac8b31c commit 142367b
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 8 deletions.
23 changes: 20 additions & 3 deletions src/core/layertreemodel.cpp
Expand Up @@ -115,7 +115,8 @@ FlatLayerTreeModelBase::FlatLayerTreeModelBase( QgsLayerTree *layerTree, QgsProj
mLayerTreeModel = new QgsLayerTreeModel( layerTree, this );
mLayerTreeModel->setFlag( QgsLayerTreeModel::ShowLegendAsTree, true );
QAbstractProxyModel::setSourceModel( mLayerTreeModel );
connect( mProject, &QgsProject::cleared, this, [=] { updateTemporalState(); buildMap( nullptr ); } );
connect( mProject, &QgsProject::aboutToBeCleared, this, [=] { mFrozen++; clearMap(); } );
connect( mProject, &QgsProject::cleared, this, [=] { mFrozen--; } );
connect( mProject, &QgsProject::readProject, this, [=] { buildMap( mLayerTreeModel ); } );
connect( mProject, &QgsProject::layersAdded, this, &FlatLayerTreeModelBase::adjustTemporalStateFromAddedLayers );
connect( mLayerTreeModel, &QAbstractItemModel::dataChanged, this, &FlatLayerTreeModelBase::updateMap );
Expand All @@ -125,12 +126,12 @@ FlatLayerTreeModelBase::FlatLayerTreeModelBase( QgsLayerTree *layerTree, QgsProj

void FlatLayerTreeModelBase::freeze()
{
mFrozen = true;
mFrozen++;
}

void FlatLayerTreeModelBase::unfreeze( bool resetModel )
{
mFrozen = false;
mFrozen = 0;
if ( resetModel )
buildMap( mLayerTreeModel );
}
Expand Down Expand Up @@ -331,6 +332,22 @@ void FlatLayerTreeModelBase::removeFromMap( const QModelIndex &parent, int first
}
}

void FlatLayerTreeModelBase::clearMap()
{
if ( mIsTemporal )
{
mIsTemporal = false;
emit isTemporalChanged();
}

beginResetModel();
mRowMap.clear();
mIndexMap.clear();
mCollapsedItems.clear();
mTreeLevelMap.clear();
endResetModel();
}

int FlatLayerTreeModelBase::buildMap( QgsLayerTreeModel *model, const QModelIndex &parent, int row, int treeLevel )
{
if ( mFrozen )
Expand Down
3 changes: 2 additions & 1 deletion src/core/layertreemodel.h
Expand Up @@ -34,6 +34,7 @@ class FlatLayerTreeModelBase : public QAbstractProxyModel

void updateMap( const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles );
int buildMap( QgsLayerTreeModel *model, const QModelIndex &parent = QModelIndex(), int row = 0, int treeLevel = 0 );
void clearMap();

void removeFromMap( const QModelIndex &parent, int first, int last );
void insertInMap( const QModelIndex &parent, int first, int last );
Expand Down Expand Up @@ -101,7 +102,7 @@ class FlatLayerTreeModelBase : public QAbstractProxyModel

bool mIsTemporal = false;

bool mFrozen = false;
int mFrozen = 0;
};

class FlatLayerTreeModel : public QSortFilterProxyModel
Expand Down
7 changes: 5 additions & 2 deletions src/core/qgismobileapp.cpp
Expand Up @@ -687,6 +687,8 @@ bool QgisMobileapp::loadProjectFile( const QString &path, const QString &name )

mAuthRequestHandler->clearStoredRealms();

// Clear project to empty the layer tree prior to freezing during project load
mProject->clear();
mProjectFilePath = path;
mProjectFileName = !name.isEmpty() ? name : fi.completeBaseName();

Expand All @@ -702,6 +704,9 @@ void QgisMobileapp::reloadProjectFile()
if ( mProjectFilePath.isEmpty() )
QgsMessageLog::logMessage( tr( "No project file currently opened" ), QStringLiteral( "QField" ), Qgis::Warning );

// Clear project to empty the layer tree prior to freezing during project load
mProject->clear();

emit loadProjectTriggered( mProjectFilePath, mProjectFileName );
}

Expand All @@ -715,8 +720,6 @@ void QgisMobileapp::readProjectFile()

const QString suffix = fi.suffix().toLower();

mProject->removeAllMapLayers();
mProject->setTitle( QString() );
mProject->layerTreeRegistryBridge()->setLayerInsertionMethod( Qgis::LayerTreeInsertionMethod::OptimalInInsertionGroup );

mTrackingModel->reset();
Expand Down
4 changes: 2 additions & 2 deletions src/qml/qgismobileapp.qml
Expand Up @@ -3206,9 +3206,9 @@ ApplicationWindow {
busyOverlay.text = qsTr( "Loading %1" ).arg( name !== '' ? name : path )
busyOverlay.state = "visible"

navigation.clearDestinationFeature();
navigation.clearDestinationFeature()

projectInfo.filePath = '';
projectInfo.filePath = ''
readProjectTimer.start()
}

Expand Down

1 comment on commit 142367b

@qfield-fairy
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.