diff --git a/src/tiled/layerdock.cpp b/src/tiled/layerdock.cpp index 19d5a43b4f0..2a5f983eebd 100644 --- a/src/tiled/layerdock.cpp +++ b/src/tiled/layerdock.cpp @@ -312,6 +312,8 @@ void LayerView::setMapDocument(MapDocument *mapDocument) auto layerModel = mMapDocument->layerModel(); mProxyModel->setSourceModel(layerModel); + connect(mMapDocument, &MapDocument::changed, + this, &LayerView::changeEvent); connect(mMapDocument, &MapDocument::currentLayerChanged, this, &LayerView::currentLayerChanged); connect(mMapDocument, &MapDocument::selectedLayersChanged, @@ -377,6 +379,26 @@ void LayerView::indexPressed(const QModelIndex &proxyIndex) mMapDocument->setCurrentObject(layer); } +void LayerView::changeEvent(const ChangeEvent &event) +{ + switch (event.type) { + case ChangeEvent::DocumentReloaded: { + // Restore expanded layers + const LayerModel *layerModel = mMapDocument->layerModel(); + for (const int layerId : std::as_const(mMapDocument->expandedGroupLayers)) { + if (Layer *layer = mMapDocument->map()->findLayerById(layerId)) { + const QModelIndex sourceIndex = layerModel->index(layer); + const QModelIndex index = mProxyModel->mapFromSource(sourceIndex); + setExpanded(index, true); + } + } + break; + } + default: + break; + } +} + void LayerView::currentLayerChanged(Layer *layer) { const LayerModel *layerModel = mMapDocument->layerModel(); diff --git a/src/tiled/layerdock.h b/src/tiled/layerdock.h index 61053a57e69..95dac234451 100644 --- a/src/tiled/layerdock.h +++ b/src/tiled/layerdock.h @@ -106,6 +106,8 @@ class LayerView : public QTreeView void currentRowChanged(const QModelIndex &proxyIndex); void indexPressed(const QModelIndex &proxyIndex); + + void changeEvent(const ChangeEvent &event); void currentLayerChanged(Layer *layer); void selectedLayersChanged(); void layerRemoved(Layer *layer);