diff --git a/lib/usd/ui/layerEditor/layerEditorWidget.cpp b/lib/usd/ui/layerEditor/layerEditorWidget.cpp index 538a80f99..9f64cc7a0 100644 --- a/lib/usd/ui/layerEditor/layerEditorWidget.cpp +++ b/lib/usd/ui/layerEditor/layerEditorWidget.cpp @@ -145,6 +145,13 @@ QLayout* LayerEditorWidget::setupLayout_toolbar() this, &LayerEditorWidget::onLazyUpdateLayerContents); + // update layer contents widget on selected layer data change + connect( + _treeView->layerTreeModel(), + &LayerTreeModel::selectedLayerDataChangedSignal, + this, + &LayerEditorWidget::onLazyUpdateLayerContents); + _buttons._loadLayer = addHIGButton( ":/UsdLayerEditor/import_layer", StringResources::getAsQString(StringResources::kLoadExistingLayer), diff --git a/lib/usd/ui/layerEditor/layerTreeModel.cpp b/lib/usd/ui/layerEditor/layerTreeModel.cpp index 39b49a1ba..4bf35c2fb 100644 --- a/lib/usd/ui/layerEditor/layerTreeModel.cpp +++ b/lib/usd/ui/layerEditor/layerTreeModel.cpp @@ -294,11 +294,12 @@ void LayerTreeModel::setSessionState(SessionState* in_sessionState) this, &LayerTreeModel::autoHideSessionLayerChanged); - rebuildModelOnIdle(); + rebuildModelOnIdle(true); } -void LayerTreeModel::rebuildModelOnIdle() +void LayerTreeModel::rebuildModelOnIdle(bool dataChanged) { + _selectedLayerDataChanged |= dataChanged; if (!_rebuildOnIdlePending) { _rebuildOnIdlePending = true; QTimer::singleShot(0, this, [this]() { @@ -313,6 +314,11 @@ void LayerTreeModel::rebuildModel(bool refreshLockState /*= false*/) _rebuildOnIdlePending = false; _lastAskedAnonLayerNameSinceRebuild = 0; + if (_selectedLayerDataChanged) { + Q_EMIT selectedLayerDataChangedSignal(); + _selectedLayerDataChanged = false; + } + if (!_sessionState->isValid()) { if (rowCount() > 0) { // Note: clear() calls beginResetModel and endResetModel for us. @@ -472,7 +478,7 @@ void LayerTreeModel::usd_layerChanged(SdfNotice::LayersDidChangeSentPerLayer con { // experienced crashes in python prototype For now, rebuild everything if (!_blockUsdNotices) - rebuildModelOnIdle(); + rebuildModelOnIdle(true); } // notification from USD diff --git a/lib/usd/ui/layerEditor/layerTreeModel.h b/lib/usd/ui/layerEditor/layerTreeModel.h index d37b85276..aa7c91ada 100644 --- a/lib/usd/ui/layerEditor/layerTreeModel.h +++ b/lib/usd/ui/layerEditor/layerTreeModel.h @@ -124,6 +124,7 @@ class LayerTreeModel Q_SIGNALS: void selectLayerSignal(const QModelIndex&); + void selectedLayerDataChangedSignal(); protected: // slots @@ -149,8 +150,9 @@ class LayerTreeModel mutable int _lastAskedAnonLayerNameSinceRebuild = 0; - void rebuildModelOnIdle(); + void rebuildModelOnIdle(bool dataChanged = false); bool _rebuildOnIdlePending = false; + bool _selectedLayerDataChanged = false; void rebuildModel(bool refreshLockState = false); void updateTargetLayer(InRebuildModel inRebuild);