Skip to content

Layer Editor Unification#4653

Open
deboisj wants to merge 273 commits into
deboisj/le_shared_basefrom
deboisj/unify_layer_editor_review
Open

Layer Editor Unification#4653
deboisj wants to merge 273 commits into
deboisj/le_shared_basefrom
deboisj/unify_layer_editor_review

Conversation

@deboisj

@deboisj deboisj commented Jun 17, 2026

Copy link
Copy Markdown
Collaborator

PR is not against master on purpose for the purpose of review. It's against a branch where i placed all the shared code as it was 1:1 in the usd-layer-editor repo, so that you can see what is actually new.

deboisj added 30 commits May 28, 2026 11:27
Tasks 7-9 of the USD Layer Editor migration plan: stand up the Maya-side
plumbing for the shared lib/usdUfe/usd-layer-editor/ test suite so the same
DCC-agnostic UsdLayerEditorTest runs in Maya the way it does in 3dsmax.

- lib/usdUfe/usd-layer-editor/test/mayaLayerEditorTestSetup.py: binds the
  five DCC hooks (_createStage, _resetScene, _undo, _redo,
  _openStageLayerEditor) to Maya equivalents using
  mayaUsd_createStageWithNewLayer / mayaUsdProxyShape +
  cmds.mayaUsdLayerEditorWindow. Mirrors max_layer_editor_test_setup.py.

- lib/usdUfe/usd-layer-editor/test/testMayaUsdSharedLayerEditor.py: thin
  ctest wrapper. Prepends its own directory to sys.path so layer_editor_test
  and mayaLayerEditorTestSetup resolve, calls setup(), and re-exports
  UsdLayerEditorTest so unittest discovery picks up every test_* method.

- test/lib/CMakeLists.txt: registers the wrapper under BUILD_NEW_LAYER_EDITOR
  as an interactive Maya test, with WORKING_DIRECTORY and PYTHONPATH pointing
  at the shared component's test directory (the script lives outside test/lib).

Verified end-to-end: configure (exit 0), build (exit 0), and ctest -R
SharedLayerEditor discovers and launches Maya which loads
mayaLayerEditorTestSetup successfully. The shared layer_editor_test.py
currently fails on `import UsdLayerEditor` because the shared component's
python bindings (lib/usdUfe/usd-layer-editor/python/) are not yet wired
into the build — that gap is migration content tracked separately.

eComponents,
  kToExportTheStageSaveComponents

Resolves all ~32 needs-port-file rows and all 10 component-creator
pending rows in MIGRATION.md.

f0 (Add banner for EF), 32d2d8d (UX color), c985a4f
(EMSUSD-3687 moved comments), 60cf0f2 (EMSUSD-3687 fix
layer-editor-crash), 7f4b4cf (want echo), plus merge commits
93f72d1 and d29de84.

itorWidget)
Hooks lib/usdUfe/usd-layer-editor/python/ into the build under
BUILD_NEW_LAYER_EDITOR. The Python module installs alongside usdUfe's
bindings so 'import UsdLayerEditor' resolves from Maya's PYTHONPATH.

Setup.py: binds the
  five DCC hooks (_createStage, _resetScene, _undo, _redo,
  _openStageLayerEditor) to Maya equivalents using
  mayaUsd_createStageWithNewLayer / mayaUsdProxyShape +
  cmds.mayaUsdLayerEditorWindow. Mirrors max_layer_editor_test_setup.py.

- lib/usdUfe/usd-layer-editor/test/testMayaUsdSharedLayerEditor.py: thin
  ctest wrapper. Prepends its own directory to sys.path so layer_editor_test
  and mayaLayerEditorTestSetup resolve, calls setup(), and re-exports
  UsdLayerEditorTest so unittest discovery picks up every test_* method.

- test/lib/CMakeLists.txt: registers the wrapper under BUILD_NEW_LAYER_EDITOR
  as an interactive Maya test, with WORKING_DIRECTORY and PYTHONPATH pointing
  at the shared component's test directory (the script lives outside test/lib).

Verified end-to-end: configure (exit 0), build (exit 0), and ctest -R
SharedLayerEditor discovers and launches Maya which loads
mayaLayerEditorTestSetup successfully. The shared layer_editor_test.py
currently fails on `import UsdLayerEditor` because the shared component's
python bindings (lib/usdUfe/usd-layer-editor/python/) are not yet wired
into the build — that gap is migration content tracked separately.

eComponents,
  kToExportTheStageSaveComponents

Resolves all ~32 needs-port-file rows and all 10 component-creator
pending rows in MIGRATION.md.

f0 (Add banner for EF), 32d2d8d (UX color), c985a4f
(EMSUSD-3687 moved comments), 60cf0f2 (EMSUSD-3687 fix
layer-editor-crash), 7f4b4cf (want echo), plus merge commits
93f72d1 and d29de84.

itorWidget)


k.h
unittest.main() parses sys.argv which Maya populates with the giant
'-c "python(...)"' wrapper string, causing unittest to try loading the
entire script as a test name. Switch to fixturesUtils.runTests(globals())
which matches the pattern used by every other Maya unittest in this repo
— loads tests from the module namespace, runs via TextTestRunner, flushes
streams, and propagates a proper exit code.

ape +
  cmds.mayaUsdLayerEditorWindow. Mirrors max_layer_editor_test_setup.py.

- lib/usdUfe/usd-layer-editor/test/testMayaUsdSharedLayerEditor.py: thin
  ctest wrapper. Prepends its own directory to sys.path so layer_editor_test
  and mayaLayerEditorTestSetup resolve, calls setup(), and re-exports
  UsdLayerEditorTest so unittest discovery picks up every test_* method.

- test/lib/CMakeLists.txt: registers the wrapper under BUILD_NEW_LAYER_EDITOR
  as an interactive Maya test, with WORKING_DIRECTORY and PYTHONPATH pointing
  at the shared component's test directory (the script lives outside test/lib).

Verified end-to-end: configure (exit 0), build (exit 0), and ctest -R
SharedLayerEditor discovers and launches Maya which loads
mayaLayerEditorTestSetup successfully. The shared layer_editor_test.py
currently fails on `import UsdLayerEditor` because the shared component's
python bindings (lib/usdUfe/usd-layer-editor/python/) are not yet wired
into the build — that gap is migration content tracked separately.

eComponents,
  kToExportTheStageSaveComponents

Resolves all ~32 needs-port-file rows and all 10 component-creator
pending rows in MIGRATION.md.

f0 (Add banner for EF), 32d2d8d (UX color), c985a4f
(EMSUSD-3687 moved comments), 60cf0f2 (EMSUSD-3687 fix
layer-editor-crash), 7f4b4cf (want echo), plus merge commits
93f72d1 and d29de84.

itorWidget)
The shared layer_editor_test.py used ufe.UndoableCommandMgr.executeCmd()
throughout. That works in 3dsmax (pybind11) but fails in Maya because
UsdLayerEditor's commands are bound with boost.python while UFE is
pybind11, and the two systems do not share class hierarchies.

- layer_editor_test.py: declare a new _executeCmd staticmethod on
  UsdLayerEditorTest (must be set by the DCC setup). Replace all 111
  call sites of mgr.executeCmd(...) with UsdLayerEditorTest._executeCmd(...).
- mayaLayerEditorTestSetup.py: provide a Maya implementation that wraps
  cmd.execute() in an MEL undo chunk. (3dsmax's setup should delegate
  to ufe.UndoableCommandMgr.instance().executeCmd; that change lives in
  the 3dsmax repo.)

With this in place the shared test suite runs 32 tests in ~15s from
Maya. The remaining failures are real behavior gaps — most around undo
because cmd.execute() in Maya does not register with the MEL undo stack
the same way a UFE-managed command would.

cript lives outside test/lib).

Verified end-to-end: configure (exit 0), build (exit 0), and ctest -R
SharedLayerEditor discovers and launches Maya which loads
mayaLayerEditorTestSetup successfully. The shared layer_editor_test.py
currently fails on `import UsdLayerEditor` because the shared component's
python bindings (lib/usdUfe/usd-layer-editor/python/) are not yet wired
into the build — that gap is migration content tracked separately.

eComponents,
  kToExportTheStageSaveComponents

Resolves all ~32 needs-port-file rows and all 10 component-creator
pending rows in MIGRATION.md.

f0 (Add banner for EF), 32d2d8d (UX color), c985a4f
(EMSUSD-3687 moved comments), 60cf0f2 (EMSUSD-3687 fix
layer-editor-crash), 7f4b4cf (want echo), plus merge commits
93f72d1 and d29de84.

itorWidget)
Most of the shared layer_editor_test.py suite relies on
ufe.UndoableCommandMgr.executeCmd() which crosses the boost.python <->
pybind11 boundary. The Maya-side _executeCmd hook bypasses UFE's undo
manager (calls cmd.execute() directly), so undo-driven tests fail.

Gate the registration on a new ENABLE_SHARED_LAYER_EDITOR_TESTS option
(default OFF) so the wrapper stays in tree and can be re-enabled once
the binding story is resolved (e.g. pybind11 conversion of UsdLayerEditor
commands).

ation that wraps
  cmd.execute() in an MEL undo chunk. (3dsmax's setup should delegate
  to ufe.UndoableCommandMgr.instance().executeCmd; that change lives in
  the 3dsmax repo.)

With this in place the shared test suite runs 32 tests in ~15s from
Maya. The remaining failures are real behavior gaps — most around undo
because cmd.execute() in Maya does not register with the MEL undo stack
the same way a UFE-managed command would.

cript lives outside test/lib).

Verified end-to-end: configure (exit 0), build (exit 0), and ctest -R
SharedLayerEditor discovers and launches Maya which loads
mayaLayerEditorTestSetup successfully. The shared layer_editor_test.py
currently fails on `import UsdLayerEditor` because the shared component's
python bindings (lib/usdUfe/usd-layer-editor/python/) are not yet wired
into the build — that gap is migration content tracked separately.

eComponents,
  kToExportTheStageSaveComponents

Resolves all ~32 needs-port-file rows and all 10 component-creator
pending rows in MIGRATION.md.

f0 (Add banner for EF), 32d2d8d (UX color), c985a4f
(EMSUSD-3687 moved comments), 60cf0f2 (EMSUSD-3687 fix
layer-editor-crash), 7f4b4cf (want echo), plus merge commits
93f72d1 and d29de84.

itorWidget)
Restores layer reorder via drag-and-drop in the shared usd-layer-editor:
- LayerTreeModel::flags() now returns ItemIsDragEnabled / ItemIsDropEnabled
  based on LayerTreeItem::isMovable() rather than unconditionally stripping
  drag/drop flags. The TODO LE-EXTRACT placeholder is removed.
- LayerTreeModel::supportedDropActions() returns Qt::MoveAction instead of
  Qt::IgnoreAction so InternalMove drag operations can complete and
  dropMimeData() -> commandHook()->moveSubLayerPath() actually runs.

Also fixes a latent typo in two places where the save-confirmation guard
called Options::optionVarExists() twice instead of evaluating the int
value. Without this fix, the second clause was always non-zero whenever
the option var existed, so the confirmation dialog could fire even when
the user had disabled it.

Files: layerTreeModel.cpp (flags/supportedDropActions/saveStage),
       layerTreeItem.cpp (saveEdits).

d-By: Claude Sonnet 4.6 <noreply@anthropic.com>
cript lives outside test/lib).

Verified end-to-end: configure (exit 0), build (exit 0), and ctest -R
SharedLayerEditor discovers and launches Maya which loads
mayaLayerEditorTestSetup successfully. The shared layer_editor_test.py
currently fails on `import UsdLayerEditor` because the shared component's
python bindings (lib/usdUfe/usd-layer-editor/python/) are not yet wired
into the build — that gap is migration content tracked separately.

eComponents,
  kToExportTheStageSaveComponents

Resolves all ~32 needs-port-file rows and all 10 component-creator
pending rows in MIGRATION.md.

f0 (Add banner for EF), 32d2d8d (UX color), c985a4f
(EMSUSD-3687 moved comments), 60cf0f2 (EMSUSD-3687 fix
layer-editor-crash), 7f4b4cf (want echo), plus merge commits
93f72d1 and d29de84.

itorWidget)
Brings LayerEditorWindow::buildContextMenu into alignment with
mayaUsdMenu_layerEditorContextMenu (the MEL-based Maya context menu):

- Add session-layer guard: Save/SaveAs not shown for session layer
- Add anonymous-layer locked check to Save enable condition
- Add "Add Parent Layer" item (was a TODO)
- Add "Lock Layer and Sublayers" item (was a TODO)
- Add "Select Prims with Spec" item (function existed but wasn't wired)
- Add protected virtual addDCCContextMenuItems() hook for DCC-specific
  items such as "Select Incoming Node" in Maya
- Reorder items to match Maya: Save/Reload | sep | AddSublayer/
  AddParentLayer/LoadSublayers/Stitch/Merge | sep | Mute/Lock/
  LockSubs/Print | sep | SelectPrimsWithSpec/[DCC] | sep | Remove/Clear
- Fix AddSublayer enable: remove singleSelect requirement (matches Maya)
- Fix StitchLayers enable: use !isLocked instead of !appearsLocked
- Add proper separators between groups
- Add QMenu include to .cpp and forward declaration to header

 test/lib).

Verified end-to-end: configure (exit 0), build (exit 0), and ctest -R
SharedLayerEditor discovers and launches Maya which loads
mayaLayerEditorTestSetup successfully. The shared layer_editor_test.py
currently fails on `import UsdLayerEditor` because the shared component's
python bindings (lib/usdUfe/usd-layer-editor/python/) are not yet wired
into the build — that gap is migration content tracked separately.

eComponents,
  kToExportTheStageSaveComponents

Resolves all ~32 needs-port-file rows and all 10 component-creator
pending rows in MIGRATION.md.

f0 (Add banner for EF), 32d2d8d (UX color), c985a4f
(EMSUSD-3687 moved comments), 60cf0f2 (EMSUSD-3687 fix
layer-editor-crash), 7f4b4cf (want echo), plus merge commits
93f72d1 and d29de84.

itorWidget)


egate.h
The MEL layerEditorContextMenu used getMayaUsdString("kMenuStitchLayers")
for the multi-select Stitch Layers item but the key was never added to
mayaUSDRegisterStrings.py, causing Maya to throw a resource-lookup error
each time the context menu opened with multiple layers selected.

was a TODO)
- Add "Select Prims with Spec" item (function existed but wasn't wired)
- Add protected virtual addDCCContextMenuItems() hook for DCC-specific
  items such as "Select Incoming Node" in Maya
- Reorder items to match Maya: Save/Reload | sep | AddSublayer/
  AddParentLayer/LoadSublayers/Stitch/Merge | sep | Mute/Lock/
  LockSubs/Print | sep | SelectPrimsWithSpec/[DCC] | sep | Remove/Clear
- Fix AddSublayer enable: remove singleSelect requirement (matches Maya)
- Fix StitchLayers enable: use !isLocked instead of !appearsLocked
- Add proper separators between groups
- Add QMenu include to .cpp and forward declaration to header

 test/lib).

Verified end-to-end: configure (exit 0), build (exit 0), and ctest -R
SharedLayerEditor discovers and launches Maya which loads
mayaLayerEditorTestSetup successfully. The shared layer_editor_test.py
currently fails on `import UsdLayerEditor` because the shared component's
python bindings (lib/usdUfe/usd-layer-editor/python/) are not yet wired
into the build — that gap is migration content tracked separately.

eComponents,
  kToExportTheStageSaveComponents

Resolves all ~32 needs-port-file rows and all 10 component-creator
pending rows in MIGRATION.md.

f0 (Add banner for EF), 32d2d8d (UX color), c985a4f
(EMSUSD-3687 moved comments), 60cf0f2 (EMSUSD-3687 fix
layer-editor-crash), 7f4b4cf (want echo), plus merge commits
93f72d1 and d29de84.

itorWidget)
The shared component's drag-and-drop layer reorder (LayerTreeModel::
dropMimeData) calls moveSubLayerPath, but UfeCommandHook had only a
TODO stub — so every drop silently did nothing.

Implement it as a RemoveSubPathCmd on the old parent followed by an
InsertSubPathCmd on the new parent at the target index. Both commands
are appended via AppendOrExecuteCommand, which adds them to the open
composite from the UndoContext in dropMimeData, making the whole move
a single undoable operation.

ms to match Maya: Save/Reload | sep | AddSublayer/
  AddParentLayer/LoadSublayers/Stitch/Merge | sep | Mute/Lock/
  LockSubs/Print | sep | SelectPrimsWithSpec/[DCC] | sep | Remove/Clear
- Fix AddSublayer enable: remove singleSelect requirement (matches Maya)
- Fix StitchLayers enable: use !isLocked instead of !appearsLocked
- Add proper separators between groups
- Add QMenu include to .cpp and forward declaration to header

 test/lib).

Verified end-to-end: configure (exit 0), build (exit 0), and ctest -R
SharedLayerEditor discovers and launches Maya which loads
mayaLayerEditorTestSetup successfully. The shared layer_editor_test.py
currently fails on `import UsdLayerEditor` because the shared component's
python bindings (lib/usdUfe/usd-layer-editor/python/) are not yet wired
into the build — that gap is migration content tracked separately.

eComponents,
  kToExportTheStageSaveComponents

Resolves all ~32 needs-port-file rows and all 10 component-creator
pending rows in MIGRATION.md.

f0 (Add banner for EF), 32d2d8d (UX color), c985a4f
(EMSUSD-3687 moved comments), 60cf0f2 (EMSUSD-3687 fix
layer-editor-crash), 7f4b4cf (want echo), plus merge commits
93f72d1 and d29de84.

itorWidget)


pp
egate.h
Spec covers dual-target (old + new editor) GTest+QTest approach,
stub design, fixture, and 23 test cases across buttons, context
menu, drag-drop reorder, and window menus/stage selector.

he old parent followed by an
InsertSubPathCmd on the new parent at the target index. Both commands
are appended via AppendOrExecuteCommand, which adds them to the open
composite from the UndoContext in dropMimeData, making the whole move
a single undoable operation.

ms to match Maya: Save/Reload | sep | AddSublayer/
  AddParentLayer/LoadSublayers/Stitch/Merge | sep | Mute/Lock/
  LockSubs/Print | sep | SelectPrimsWithSpec/[DCC] | sep | Remove/Clear
- Fix AddSublayer enable: remove singleSelect requirement (matches Maya)
- Fix StitchLayers enable: use !isLocked instead of !appearsLocked
- Add proper separators between groups
- Add QMenu include to .cpp and forward declaration to header

 test/lib).

Verified end-to-end: configure (exit 0), build (exit 0), and ctest -R
SharedLayerEditor discovers and launches Maya which loads
mayaLayerEditorTestSetup successfully. The shared layer_editor_test.py
currently fails on `import UsdLayerEditor` because the shared component's
python bindings (lib/usdUfe/usd-layer-editor/python/) are not yet wired
into the build — that gap is migration content tracked separately.

eComponents,
  kToExportTheStageSaveComponents

Resolves all ~32 needs-port-file rows and all 10 component-creator
pending rows in MIGRATION.md.

f0 (Add banner for EF), 32d2d8d (UX color), c985a4f
(EMSUSD-3687 moved comments), 60cf0f2 (EMSUSD-3687 fix
layer-editor-crash), 7f4b4cf (want echo), plus merge commits
93f72d1 and d29de84.

itorWidget)
Creates CMake infrastructure for UsdLayerEditorOldTests and
UsdLayerEditorNewTests with empty source placeholders.

stage selector.

he old parent followed by an
InsertSubPathCmd on the new parent at the target index. Both commands
are appended via AppendOrExecuteCommand, which adds them to the open
composite from the UndoContext in dropMimeData, making the whole move
a single undoable operation.

ms to match Maya: Save/Reload | sep | AddSublayer/
  AddParentLayer/LoadSublayers/Stitch/Merge | sep | Mute/Lock/
  LockSubs/Print | sep | SelectPrimsWithSpec/[DCC] | sep | Remove/Clear
- Fix AddSublayer enable: remove singleSelect requirement (matches Maya)
- Fix StitchLayers enable: use !isLocked instead of !appearsLocked
- Add proper separators between groups
- Add QMenu include to .cpp and forward declaration to header

 test/lib).

Verified end-to-end: configure (exit 0), build (exit 0), and ctest -R
SharedLayerEditor discovers and launches Maya which loads
mayaLayerEditorTestSetup successfully. The shared layer_editor_test.py
currently fails on `import UsdLayerEditor` because the shared component's
python bindings (lib/usdUfe/usd-layer-editor/python/) are not yet wired
into the build — that gap is migration content tracked separately.

eComponents,
  kToExportTheStageSaveComponents

Resolves all ~32 needs-port-file rows and all 10 component-creator
pending rows in MIGRATION.md.

f0 (Add banner for EF), 32d2d8d (UX color), c985a4f
(EMSUSD-3687 moved comments), 60cf0f2 (EMSUSD-3687 fix
layer-editor-crash), 7f4b4cf (want echo), plus merge commits
93f72d1 and d29de84.

itorWidget)
ent followed by an
InsertSubPathCmd on the new parent at the target index. Both commands
are appended via AppendOrExecuteCommand, which adds them to the open
composite from the UndoContext in dropMimeData, making the whole move
a single undoable operation.

ms to match Maya: Save/Reload | sep | AddSublayer/
  AddParentLayer/LoadSublayers/Stitch/Merge | sep | Mute/Lock/
  LockSubs/Print | sep | SelectPrimsWithSpec/[DCC] | sep | Remove/Clear
- Fix AddSublayer enable: remove singleSelect requirement (matches Maya)
- Fix StitchLayers enable: use !isLocked instead of !appearsLocked
- Add proper separators between groups
- Add QMenu include to .cpp and forward declaration to header

 test/lib).

Verified end-to-end: configure (exit 0), build (exit 0), and ctest -R
SharedLayerEditor discovers and launches Maya which loads
mayaLayerEditorTestSetup successfully. The shared layer_editor_test.py
currently fails on `import UsdLayerEditor` because the shared component's
python bindings (lib/usdUfe/usd-layer-editor/python/) are not yet wired
into the build — that gap is migration content tracked separately.

eComponents,
  kToExportTheStageSaveComponents

Resolves all ~32 needs-port-file rows and all 10 component-creator
pending rows in MIGRATION.md.

f0 (Add banner for EF), 32d2d8d (UX color), c985a4f
(EMSUSD-3687 moved comments), 60cf0f2 (EMSUSD-3687 fix
layer-editor-crash), 7f4b4cf (want echo), plus merge commits
93f72d1 and d29de84.

itorWidget)


pp
egate.h
Binary compiles and runs 4 placeholder tests.
- StubCommandHook: use MayaUsd::LayerLockType (not bare LayerLockType),
  fix lockLayer body to call MayaUsd::lockLayer, add missing pure virtuals
  isProxyShapeStageIncoming / isProxyShapeSharedStage
- StubCommandHook: fix include path (mayaUsd/utils/layerLocking.h)
- StubSessionState: remove non-existent overrides (selectedStages,
  refreshCurrentStageEntry, refreshStageEntry not in SessionState base),
  fix _dccObjectPath -> _proxyShapePath in makeEntry
Both UsdLayerEditorOldTests and UsdLayerEditorNewTests share the same
stub files but compile against different AbstractCommandHook bases:
- Old: MayaUsd::LayerLockType, isProxyShape* pure virtuals
- New: UsdLayerEditor::LayerLockType, refreshCurrentStageEntry / selectedStages
  pure virtuals, _dccObjectPath in StageEntry

Use include-guard ifdefs (USDLAYEREDITOR_ABSTRACTCOMMANDHOOK_H /
USDLAYEREDITOR_SESSIONSTATE_H) to resolve the incompatible APIs.
Remove explicit <mayaUsd/utils/layerLocking.h> include from stub — the
lockLayer body no longer mutates lock state (records call only).
- Add MAYA_INCLUDE_DIRS to UsdLayerEditorOldTests so that the include chain
  through old abstractCommandHook.h → mayaUsd/utils/layerLocking.h →
  mayaUsd/nodes/proxyShapeBase.h → maya/MBoundingBox.h resolves correctly.
- Remove Qt::Test from both targets; no QTest:: API is used, only
  QApplication::processEvents() which is part of Qt::Widgets.

 the incompatible APIs.
Remove explicit <mayaUsd/utils/layerLocking.h> include from stub — the
lockLayer body no longer mutates lock state (records call only).
stringResources.cpp (from the old layer editor) uses MStringResourceId,
MStringResource, MString, and MQtUtil which are provided by Foundation,
OpenMaya, and OpenMayaUI. Add those libraries to UsdLayerEditorOldTests
so it links cleanly without needing the full mayaUsdUI library.

which is part of Qt::Widgets.

 the incompatible APIs.
Remove explicit <mayaUsd/utils/layerLocking.h> include from stub — the
lockLayer body no longer mutates lock state (records call only).
The old layer editor sources (lib/usd/ui/layerEditor/) are tightly
coupled to mayaUsdUI — they depend on MayaUsdOptionVars, ComponentUtils,
UsdMayaUtilFileSystem, UsdMayaUtil, and more.  These can't be linked
without pulling in essentially all of mayaUsdUI, defeating the goal of a
standalone test.

UsdLayerEditorLib is the DCC-agnostic component designed for standalone
testing.  Keep only UsdLayerEditorNewTests (gated on BUILD_NEW_LAYER_EDITOR)
and remove the old target entirely.

es lock state (records call only).
UsdLayerEditorOldTests is gone; only NewTests remains. Drop all
#ifdef USDLAYEREDITOR_ABSTRACTCOMMANDHOOK_H / USDLAYEREDITOR_SESSIONSTATE_H
guards — use the new-component API unconditionally (LayerLockType,
_dccObjectPath, selectedStages/refreshCurrentStageEntry/refreshStageEntry
with override).

igned for standalone
testing.  Keep only UsdLayerEditorNewTests (gated on BUILD_NEW_LAYER_EDITOR)
and remove the old target entirely.

es lock state (records call only).
DPIScale() dereferences the QtUtils singleton (getQtUtils()), which was
null because initializeQtUtils() was never called in the test harness.
In production the plugin loader calls it; tests must do it explicitly.

Also add autoObserveUfeSelection()->false in StubSessionState and
isDccObjectSharedStage()->false in StubCommandHook to avoid UFE
initialization and unnecessary layer-iteration in updateButtons().

tirely.

es lock state (records call only).
Replaces all placeholder TEST_F bodies with real test logic across four
files (testButtons, testContextMenu, testReorder, testMenusAndStage).
Adds StubLayerEditorWindow to wrap LayerEditorWidget and expose the
action methods (addAnonymousSublayer, muteLayer, lockLayer, etc.) needed
for direct invocation without going through QMenu::exec().  Updates
testFixture to use StubLayerEditorWindow, adds selectRow() helper, and
corrects sessionLayerIndex / firstSublayerIndex to reflect the actual
tree structure.  All 23 tests pass.

By: Claude Sonnet 4.6 <noreply@anthropic.com>
File-by-file audit of old in-tree layer editor to produce GTests
verifying the new shareable implementation (UsdLayerEditorNewTests)
reproduces every significant behavior. Covers 12 test files, ~172 new
tests across state queries, model rebuild, drag-drop, memento,
dialogs, locking, and muting.

.  Updates
testFixture to use StubLayerEditorWindow, adds selectRow() helper, and
corrects sessionLayerIndex / firstSublayerIndex to reflect the actual
tree structure.  All 23 tests pass.

By: Claude Sonnet 4.6 <noreply@anthropic.com>
Phase 1: generate all tests and build. Phase 2: triage every failing
test (old code excerpt + new code excerpt + assessment) and present to
user before making any changes to new-editor code or test code.

, locking, and muting.

.  Updates
testFixture to use StubLayerEditorWindow, adds selectRow() helper, and
corrects sessionLayerIndex / firstSublayerIndex to reflect the actual
tree structure.  All 23 tests pass.

By: Claude Sonnet 4.6 <noreply@anthropic.com>
ith triage gate

Phase 1: generate all tests and build. Phase 2: triage every failing
test (old code excerpt + new code excerpt + assessment) and present to
user before making any changes to new-editor code or test code.

, locking, and muting.

.  Updates
testFixture to use StubLayerEditorWindow, adds selectRow() helper, and
corrects sessionLayerIndex / firstSublayerIndex to reflect the actual
tree structure.  All 23 tests pass.

By: Claude Sonnet 4.6 <noreply@anthropic.com>
New test files:
- testUtils.h: shared inline helpers (makeStageWithSublayer, makeDirty, lockLayerDirect, dismissNextModal)
- testLayerTreeItem.cpp: 30 state query tests (mute, lock, systemlock, movable, dirty, etc.)
- testLayerTreeModel.cpp: 20 tests (flags, MIME, rebuild, filtering, setEditTarget guards)
- testLayerTreeView.cpp: 17 tests (memento, double-click, mute/lock dispatch, delegate geometry)
- testLayerContentsWidget.cpp: 7 tests (setLayer, isEmpty, exportPseudoLayer)
- testSaveLayersDialog.cpp: 11 tests (construction, buttons, checkbox, exec)
- testLoadLayersDialog.cpp: 8 tests (construction, line edits, buttons, scroll area)
- testLayerLocking.cpp: 13 tests (lock/unlock/systemlock transitions, forget)
- testLayerMuting.cpp: 8 tests (mute/unmute, retained-layer list)

Expanded test files:
- testReorder.cpp: +9 canDropMimeData/drop ordering tests
- testButtons.cpp: +8 new/save/load button enable-disable matrix tests
- testContextMenu.cpp: +11 clearLayer/merge/discard/setEditTarget guard tests
- testMenusAndStage.cpp: +5 stage count/add/content-toggle tests

CMakeLists.txt: all new files wired into UsdLayerEditorNewTests target
…e PXR_NS:: prefix; replace protected method calls with public equivalents

irty, lockLayerDirect, dismissNextModal)
- testLayerTreeItem.cpp: 30 state query tests (mute, lock, systemlock, movable, dirty, etc.)
- testLayerTreeModel.cpp: 20 tests (flags, MIME, rebuild, filtering, setEditTarget guards)
- testLayerTreeView.cpp: 17 tests (memento, double-click, mute/lock dispatch, delegate geometry)
- testLayerContentsWidget.cpp: 7 tests (setLayer, isEmpty, exportPseudoLayer)
- testSaveLayersDialog.cpp: 11 tests (construction, buttons, checkbox, exec)
- testLoadLayersDialog.cpp: 8 tests (construction, line edits, buttons, scroll area)
- testLayerLocking.cpp: 13 tests (lock/unlock/systemlock transitions, forget)
- testLayerMuting.cpp: 8 tests (mute/unmute, retained-layer list)

Expanded test files:
- testReorder.cpp: +9 canDropMimeData/drop ordering tests
- testButtons.cpp: +8 new/save/load button enable-disable matrix tests
- testContextMenu.cpp: +11 clearLayer/merge/discard/setEditTarget guard tests
- testMenusAndStage.cpp: +5 stage count/add/content-toggle tests

CMakeLists.txt: all new files wired into UsdLayerEditorNewTests target
…vate exportPseudoLayer tests

otected method calls with public equivalents
irty, lockLayerDirect, dismissNextModal)
- testLayerTreeItem.cpp: 30 state query tests (mute, lock, systemlock, movable, dirty, etc.)
- testLayerTreeModel.cpp: 20 tests (flags, MIME, rebuild, filtering, setEditTarget guards)
- testLayerTreeView.cpp: 17 tests (memento, double-click, mute/lock dispatch, delegate geometry)
- testLayerContentsWidget.cpp: 7 tests (setLayer, isEmpty, exportPseudoLayer)
- testSaveLayersDialog.cpp: 11 tests (construction, buttons, checkbox, exec)
- testLoadLayersDialog.cpp: 8 tests (construction, line edits, buttons, scroll area)
- testLayerLocking.cpp: 13 tests (lock/unlock/systemlock transitions, forget)
- testLayerMuting.cpp: 8 tests (mute/unmute, retained-layer list)

Expanded test files:
- testReorder.cpp: +9 canDropMimeData/drop ordering tests
- testButtons.cpp: +8 new/save/load button enable-disable matrix tests
- testContextMenu.cpp: +11 clearLayer/merge/discard/setEditTarget guard tests
- testMenusAndStage.cpp: +5 stage count/add/content-toggle tests

CMakeLists.txt: all new files wired into UsdLayerEditorNewTests target
deboisj and others added 21 commits June 19, 2026 12:59
876036 -0400

Merge remote-tracking branch 'upstream/dev' into deboisj/unify_layer_editor_review
kQACksGu6ycD7dV7/lRp4Guvvj
 KVCsT9UwEthfdkPDMfa7G3i+9GSacK733THUcJppZK+4DM2m8PbSiP0pj/dSaElf
 iaICFZ7H2KJ6tTashv3bQPy6Z7mn4slht5L+66l+D4rWifT8QB1CXj2z2cgZ+2NX
 oc1LH6nKO6HKmq8crOB63Yb8O81jLOWCJoYt40nrlxy1SWqIJpMNnV2mj+1xAnUI
 9n1h3qJb4+Jauu4zH+JPds/dewJ+3sLwKSF5q8BdLb8XmHckHG2ajvXmpZAJg6Rk
 vtkQDip8Viem0NpWOsVRVuQxOeqLs1UXhZt5e3bZ5txHR5L5PiHeb0rrphZ7b57w
 50zBFPlKnP/+noIbMBtPBSUkw9B0lQFNVvxjamQic2Zga23J5+dcJ1Qf9J1tVbf+
 hDOY1r3vxFU1PnDPvJjTgsA0ATH+P33Z1wQ4lYNaENo2iT+nbccq/fOusSNzsBdl
 iK2auWyxHX4P21ZpsZlICRgSkUn68Ncn0dJIUA6grewUAGxoBGkGHQ17FTTxWtXe
 XaZ3WpikFeNcRS89DayGpcjnj9UzSco2L0ZrudCLh/ltNDrxlk4tpQQrMep+0aI+
 B/oIBncZS8y4IZAKdDm5pqJtGaYulqwYHAXL41QyAv/QEg+sA20KLSRKVIaQz7CK
 kq12Y3YgiDpN7fbCmJx/
 =2NPd
 -----END PGP SIGNATURE-----
 

Merge pull request #4651 from Autodesk/barbalt/dev/EMSUSD-3311-remove-opinion

EMSUSD-3311 - Add remove opinion + undoENEITEM_HAS_METADATA is no…both unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
hropic.com>
om shared LE
876036 -0400

Merge remote-tracking branch 'upstream/dev' into deboisj/unify_layer_editor_review
kQACksGu6ycD7dV7/lRp4Guvvj
 KVCsT9UwEthfdkPDMfa7G3i+9GSacK733THUcJppZK+4DM2m8PbSiP0pj/dSaElf
 iaICFZ7H2KJ6tTashv3bQPy6Z7mn4slht5L+66l+D4rWifT8QB1CXj2z2cgZ+2NX
 oc1LH6nKO6HKmq8crOB63Yb8O81jLOWCJoYt40nrlxy1SWqIJpMNnV2mj+1xAnUI
 9n1h3qJb4+Jauu4zH+JPds/dewJ+3sLwKSF5q8BdLb8XmHckHG2ajvXmpZAJg6Rk
 vtkQDip8Viem0NpWOsVRVuQxOeqLs1UXhZt5e3bZ5txHR5L5PiHeb0rrphZ7b57w
 50zBFPlKnP/+noIbMBtPBSUkw9B0lQFNVvxjamQic2Zga23J5+dcJ1Qf9J1tVbf+
 hDOY1r3vxFU1PnDPvJjTgsA0ATH+P33Z1wQ4lYNaENo2iT+nbccq/fOusSNzsBdl
 iK2auWyxHX4P21ZpsZlICRgSkUn68Ncn0dJIUA6grewUAGxoBGkGHQ17FTTxWtXe
 XaZ3WpikFeNcRS89DayGpcjnj9UzSco2L0ZrudCLh/ltNDrxlk4tpQQrMep+0aI+
 B/oIBncZS8y4IZAKdDm5pqJtGaYulqwYHAXL41QyAv/QEg+sA20KLSRKVIaQz7CK
 kq12Y3YgiDpN7fbCmJx/
 =2NPd
 -----END PGP SIGNATURE-----
 

Merge pull request #4651 from Autodesk/barbalt/dev/EMSUSD-3311-remove-opinion

EMSUSD-3311 - Add remove opinion + undoENEITEM_HAS_METADATA is no…both unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
hropic.com>
sts
om shared LE
876036 -0400

Merge remote-tracking branch 'upstream/dev' into deboisj/unify_layer_editor_review
kQACksGu6ycD7dV7/lRp4Guvvj
 KVCsT9UwEthfdkPDMfa7G3i+9GSacK733THUcJppZK+4DM2m8PbSiP0pj/dSaElf
 iaICFZ7H2KJ6tTashv3bQPy6Z7mn4slht5L+66l+D4rWifT8QB1CXj2z2cgZ+2NX
 oc1LH6nKO6HKmq8crOB63Yb8O81jLOWCJoYt40nrlxy1SWqIJpMNnV2mj+1xAnUI
 9n1h3qJb4+Jauu4zH+JPds/dewJ+3sLwKSF5q8BdLb8XmHckHG2ajvXmpZAJg6Rk
 vtkQDip8Viem0NpWOsVRVuQxOeqLs1UXhZt5e3bZ5txHR5L5PiHeb0rrphZ7b57w
 50zBFPlKnP/+noIbMBtPBSUkw9B0lQFNVvxjamQic2Zga23J5+dcJ1Qf9J1tVbf+
 hDOY1r3vxFU1PnDPvJjTgsA0ATH+P33Z1wQ4lYNaENo2iT+nbccq/fOusSNzsBdl
 iK2auWyxHX4P21ZpsZlICRgSkUn68Ncn0dJIUA6grewUAGxoBGkGHQ17FTTxWtXe
 XaZ3WpikFeNcRS89DayGpcjnj9UzSco2L0ZrudCLh/ltNDrxlk4tpQQrMep+0aI+
 B/oIBncZS8y4IZAKdDm5pqJtGaYulqwYHAXL41QyAv/QEg+sA20KLSRKVIaQz7CK
 kq12Y3YgiDpN7fbCmJx/
 =2NPd
 -----END PGP SIGNATURE-----
 

Merge pull request #4651 from Autodesk/barbalt/dev/EMSUSD-3311-remove-opinion

EMSUSD-3311 - Add remove opinion + undoENEITEM_HAS_METADATA is no…both unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
hropic.com>
…rage

Apply the LOW_VALUE_TEST_REVIEW decisions (drop/strengthen/merge crash-only and
tautological tests), then restore the coverage those removals dropped:

- Restore testLayerTreeViewMouseLogic.cpp and testStageSelectorWidgetLogic.cpp
  (strengthened) and re-add them to CMakeLists.
- Add strengthened LayerTreeView tests (mute/lock button-push, key Delete/R,
  add-parent, expand-children) and LayerEditorWidget tests (splitter/lazy-update/
  save-stage button, GeneratedIconButton paint states).
- Add SaveLayersDialog all-as-relative tests and an unguarded EF toggle-button
  test covering the runtime-gated edit-forwarding setup.
- Export GeneratedIconButton (LayerEditorAPI) so its paint paths are testable.

UsdLayerEditorNewTests: 438 tests, 437 pass, 1 expected skip. Lib coverage ~70%.
TURE-----
 

Merge pull request #4651 from Autodesk/barbalt/dev/EMSUSD-3311-remove-opinion

EMSUSD-3311 - Add remove opinion + undoENEITEM_HAS_METADATA is no…both unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
hropic.com>
The layer contents widget was only refreshed on Qt selection changed signal.  The layer model optimization  broke the refresh because it now avoid rebuilding the model if the layer tree has not changed. Before this optimization , any change to data in the layer, for example moving a prim, would trigger a full tree  model rebuild, which indirectly emitted a selection change signal.

Fix:
- Add a specific signal when data change.
- Now, when the model receives a layer data change signal, it tells the model-rebuild function that it is being called due to internal layer data change.
- The model rebuilding emit the new signal.
- This reuse the on-idle behavior to limit signal traffic, avoiding emitting the signal constantly.
- Make the layer editor widget listen to this signal and update the contents.
E-----
 

Merge pull request #4654 from Autodesk/derlerk/EMSUSD-3762

EMSUSD-3762 - RenderSetup undo/redof  `ExportChaser` and `ImportChaser` pluginsis no…both unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
<noreply@anthropic.com>
opic.com>
…ugins

Automatic loading of  `ExportChaser` and `ImportChaser` pluginsis no…both unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
ic for import and export chasers, triggering chaser plugin loading just before chasers are created.
o CMakeLists.
- Add strengthened LayerTreeView tests (mute/lock button-push, key Delete/R,
  add-parent, expand-children) and LayerEditorWidget tests (splitter/lazy-update/
  save-stage button, GeneratedIconButton paint states).
- Add SaveLayersDialog all-as-relative tests and an unguarded EF toggle-button
  test covering the runtime-gated edit-forwarding setup.
- Export GeneratedIconButton (LayerEditorAPI) so its paint paths are testable.

UsdLayerEditorNewTests: 438 tests, 437 pass, 1 expected skip. Lib coverage ~70%.
TURE-----
 

Merge pull request #4651 from Autodesk/barbalt/dev/EMSUSD-3311-remove-opinion

EMSUSD-3311 - Add remove opinion + undoENEITEM_HAS_METADATA is no…both unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
eply@anthropic.com>
hropic.com>
rcase.
filenames
Fix member names
Refactor UndoChunkUtils
RE-----
 
 wsFcBAABCAAQBQJqOT8CCRC1aQ7uu5UhlAAAXSsQAJD+nu5KEYM182GvaoREF2T3
 VXGtpZyOxsyDXDmeokiiAGY+vo08ZKnMAtRKoCSB4J5fe95bI5iQG3VXjWG7oSpk
 mvzWMP7/r/OHpPmW7J0UA2yYOLX+MMvF5KdiuCiHJqqc0G/tpZnswNy4cz52AP6W
 +PXcGY58HYgwZ50RCSHRrRg9F44zqCfEJt40aqTC48jDtXSL+2O5Dx/ZIV6J12T/
 AIyBMzJKp2Omccp/mO7A8H0NCT749XPmFzsUzplWjAG/+Yf19OpaSbGgxksKnBZK
 SsNh70+PQpM9OVwT4sQkopjrJJzpPG+hA1YpfiahF3ZnO7+k2NqF6/4wIKMuW8rR
 itMMjK73Lx4Ev4kG8sKEaEY7IvjYyXZqkx9BQCAMC2QhgdRzaI1raR1YUSS7yfhj
 20KDoWxj65qZ25RVg0PVlBTTZAjculPoKLHc+ApePQGpeVRRzN8BdXsRrfAy/8oq
 U1ajtTlclBk3XBkFGQBBuTZjl9nW/MXRVI21l7RMtKFFMzuCBYM4b0bQna+PlKcj
 V4MEDStii3SwcpxAXXPCj8SJYodYNsXUX1ulmHb/uxehFtTXCn7libbuRnLV3Wtp
 N+rk7B0BoJDDcnxpjqiGeNX0kbSmfywuyX+BGB+F/zxUeGGgU/snt2AO9sw8mr7g
 kmByzCDMP5fFwAqaOste
 =oVJ2
 -----END PGP SIGNATURE-----
 

Merge pull request #4642 from jufrantz/automatic_loading_of_chaser_plugins

Automatic loading of  `ExportChaser` and `ImportChaser` pluginsis no…both unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
opic.com>
++ tests: remove low-value tests, recover coverage

Apply the LOW_VALUE_TEST_REVIEW decisions (drop/strengthen/merge crash-only and
tautological tests), then restore the coverage those removals dropped:

- Restore testLayerTreeViewMouseLogic.cpp and testStageSelectorWidgetLogic.cpp
  (strengthened) and re-add them to CMakeLists.
- Add strengthened LayerTreeView tests (mute/lock button-push, key Delete/R,
  add-parent, expand-children) and LayerEditorWidget tests (splitter/lazy-update/
  save-stage button, GeneratedIconButton paint states).
- Add SaveLayersDialog all-as-relative tests and an unguarded EF toggle-button
  test covering the runtime-gated edit-forwarding setup.
- Export GeneratedIconButton (LayerEditorAPI) so its paint paths are testable.

UsdLayerEditorNewTests: 438 tests, 437 pass, 1 expected skip. Lib coverage ~70%.
TURE-----
 

Merge pull request #4651 from Autodesk/barbalt/dev/EMSUSD-3311-remove-opinion

EMSUSD-3311 - Add remove opinion + undoENEITEM_HAS_METADATA is no…both unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
hropic.com>
EMSUSD-3762 - RenderSetup undo/redof  `ExportChaser` and `ImportChaser` pluginsis no…both unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
7oSpk
 mvzWMP7/r/OHpPmW7J0UA2yYOLX+MMvF5KdiuCiHJqqc0G/tpZnswNy4cz52AP6W
 +PXcGY58HYgwZ50RCSHRrRg9F44zqCfEJt40aqTC48jDtXSL+2O5Dx/ZIV6J12T/
 AIyBMzJKp2Omccp/mO7A8H0NCT749XPmFzsUzplWjAG/+Yf19OpaSbGgxksKnBZK
 SsNh70+PQpM9OVwT4sQkopjrJJzpPG+hA1YpfiahF3ZnO7+k2NqF6/4wIKMuW8rR
 itMMjK73Lx4Ev4kG8sKEaEY7IvjYyXZqkx9BQCAMC2QhgdRzaI1raR1YUSS7yfhj
 20KDoWxj65qZ25RVg0PVlBTTZAjculPoKLHc+ApePQGpeVRRzN8BdXsRrfAy/8oq
 U1ajtTlclBk3XBkFGQBBuTZjl9nW/MXRVI21l7RMtKFFMzuCBYM4b0bQna+PlKcj
 V4MEDStii3SwcpxAXXPCj8SJYodYNsXUX1ulmHb/uxehFtTXCn7libbuRnLV3Wtp
 N+rk7B0BoJDDcnxpjqiGeNX0kbSmfywuyX+BGB+F/zxUeGGgU/snt2AO9sw8mr7g
 kmByzCDMP5fFwAqaOste
 =oVJ2
 -----END PGP SIGNATURE-----
 

Merge pull request #4642 from jufrantz/automatic_loading_of_chaser_plugins

Automatic loading of  `ExportChaser` and `ImportChaser` pluginsis no…both unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
opic.com>
…y-refresh

EMSUSD-3823 fix layer content refresh`ImportChaser` pluginsis no…both unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
tree has not changed. Before this optimization , any change to data in the layer, for example moving a prim, would trigger a full tree  model rebuild, which indirectly emitted a selection change signal.

Fix:
- Add a specific signal when data change.
- Now, when the model receives a layer data change signal, it tells the model-rebuild function that it is being called due to internal layer data change.
- The model rebuilding emit the new signal.
- This reuse the on-idle behavior to limit signal traffic, avoiding emitting the signal constantly.
- Make the layer editor widget listen to this signal and update the contents.
E-----
 

Merge pull request #4654 from Autodesk/derlerk/EMSUSD-3762

EMSUSD-3762 - RenderSetup undo/redof  `ExportChaser` and `ImportChaser` pluginsis no…both unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
<noreply@anthropic.com>
opic.com>
les.
++ tests: remove low-value tests, recover coverage

Apply the LOW_VALUE_TEST_REVIEW decisions (drop/strengthen/merge crash-only and
tautological tests), then restore the coverage those removals dropped:

- Restore testLayerTreeViewMouseLogic.cpp and testStageSelectorWidgetLogic.cpp
  (strengthened) and re-add them to CMakeLists.
- Add strengthened LayerTreeView tests (mute/lock button-push, key Delete/R,
  add-parent, expand-children) and LayerEditorWidget tests (splitter/lazy-update/
  save-stage button, GeneratedIconButton paint states).
- Add SaveLayersDialog all-as-relative tests and an unguarded EF toggle-button
  test covering the runtime-gated edit-forwarding setup.
- Export GeneratedIconButton (LayerEditorAPI) so its paint paths are testable.

UsdLayerEditorNewTests: 438 tests, 437 pass, 1 expected skip. Lib coverage ~70%.
TURE-----
 

Merge pull request #4651 from Autodesk/barbalt/dev/EMSUSD-3311-remove-opinion

EMSUSD-3311 - Add remove opinion + undoENEITEM_HAS_METADATA is no…both unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
hropic.com>
ve low-value tests, recover coverage

Apply the LOW_VALUE_TEST_REVIEW decisions (drop/strengthen/merge crash-only and
tautological tests), then restore the coverage those removals dropped:

- Restore testLayerTreeViewMouseLogic.cpp and testStageSelectorWidgetLogic.cpp
  (strengthened) and re-add them to CMakeLists.
- Add strengthened LayerTreeView tests (mute/lock button-push, key Delete/R,
  add-parent, expand-children) and LayerEditorWidget tests (splitter/lazy-update/
  save-stage button, GeneratedIconButton paint states).
- Add SaveLayersDialog all-as-relative tests and an unguarded EF toggle-button
  test covering the runtime-gated edit-forwarding setup.
- Export GeneratedIconButton (LayerEditorAPI) so its paint paths are testable.

UsdLayerEditorNewTests: 438 tests, 437 pass, 1 expected skip. Lib coverage ~70%.
TURE-----
 

Merge pull request #4651 from Autodesk/barbalt/dev/EMSUSD-3311-remove-opinion

EMSUSD-3311 - Add remove opinion + undoENEITEM_HAS_METADATA is no…both unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
hropic.com>
nification review pass
ve low-value tests, recover coverage

Apply the LOW_VALUE_TEST_REVIEW decisions (drop/strengthen/merge crash-only and
tautological tests), then restore the coverage those removals dropped:

- Restore testLayerTreeViewMouseLogic.cpp and testStageSelectorWidgetLogic.cpp
  (strengthened) and re-add them to CMakeLists.
- Add strengthened LayerTreeView tests (mute/lock button-push, key Delete/R,
  add-parent, expand-children) and LayerEditorWidget tests (splitter/lazy-update/
  save-stage button, GeneratedIconButton paint states).
- Add SaveLayersDialog all-as-relative tests and an unguarded EF toggle-button
  test covering the runtime-gated edit-forwarding setup.
- Export GeneratedIconButton (LayerEditorAPI) so its paint paths are testable.

UsdLayerEditorNewTests: 438 tests, 437 pass, 1 expected skip. Lib coverage ~70%.
TURE-----
 

Merge pull request #4651 from Autodesk/barbalt/dev/EMSUSD-3311-remove-opinion

EMSUSD-3311 - Add remove opinion + undoENEITEM_HAS_METADATA is no…both unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
hropic.com>
ass
ve low-value tests, recover coverage

Apply the LOW_VALUE_TEST_REVIEW decisions (drop/strengthen/merge crash-only and
tautological tests), then restore the coverage those removals dropped:

- Restore testLayerTreeViewMouseLogic.cpp and testStageSelectorWidgetLogic.cpp
  (strengthened) and re-add them to CMakeLists.
- Add strengthened LayerTreeView tests (mute/lock button-push, key Delete/R,
  add-parent, expand-children) and LayerEditorWidget tests (splitter/lazy-update/
  save-stage button, GeneratedIconButton paint states).
- Add SaveLayersDialog all-as-relative tests and an unguarded EF toggle-button
  test covering the runtime-gated edit-forwarding setup.
- Export GeneratedIconButton (LayerEditorAPI) so its paint paths are testable.

UsdLayerEditorNewTests: 438 tests, 437 pass, 1 expected skip. Lib coverage ~70%.
TURE-----
 

Merge pull request #4651 from Autodesk/barbalt/dev/EMSUSD-3311-remove-opinion

EMSUSD-3311 - Add remove opinion + undoENEITEM_HAS_METADATA is no…both unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
hropic.com>
 tests. Review pass
ass
ve low-value tests, recover coverage

Apply the LOW_VALUE_TEST_REVIEW decisions (drop/strengthen/merge crash-only and
tautological tests), then restore the coverage those removals dropped:

- Restore testLayerTreeViewMouseLogic.cpp and testStageSelectorWidgetLogic.cpp
  (strengthened) and re-add them to CMakeLists.
- Add strengthened LayerTreeView tests (mute/lock button-push, key Delete/R,
  add-parent, expand-children) and LayerEditorWidget tests (splitter/lazy-update/
  save-stage button, GeneratedIconButton paint states).
- Add SaveLayersDialog all-as-relative tests and an unguarded EF toggle-button
  test covering the runtime-gated edit-forwarding setup.
- Export GeneratedIconButton (LayerEditorAPI) so its paint paths are testable.

UsdLayerEditorNewTests: 438 tests, 437 pass, 1 expected skip. Lib coverage ~70%.
TURE-----
 

Merge pull request #4651 from Autodesk/barbalt/dev/EMSUSD-3311-remove-opinion

EMSUSD-3311 - Add remove opinion + undoENEITEM_HAS_METADATA is no…both unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
hropic.com>
…p QA_TEST_REVIEW scratch doc

T_REVIEW decisions (drop/strengthen/merge crash-only and
tautological tests), then restore the coverage those removals dropped:

- Restore testLayerTreeViewMouseLogic.cpp and testStageSelectorWidgetLogic.cpp
  (strengthened) and re-add them to CMakeLists.
- Add strengthened LayerTreeView tests (mute/lock button-push, key Delete/R,
  add-parent, expand-children) and LayerEditorWidget tests (splitter/lazy-update/
  save-stage button, GeneratedIconButton paint states).
- Add SaveLayersDialog all-as-relative tests and an unguarded EF toggle-button
  test covering the runtime-gated edit-forwarding setup.
- Export GeneratedIconButton (LayerEditorAPI) so its paint paths are testable.

UsdLayerEditorNewTests: 438 tests, 437 pass, 1 expected skip. Lib coverage ~70%.
TURE-----
 

Merge pull request #4651 from Autodesk/barbalt/dev/EMSUSD-3311-remove-opinion

EMSUSD-3311 - Add remove opinion + undoENEITEM_HAS_METADATA is no…both unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
hropic.com>
…editor_review

# Conflicts:
#	lib/usd/ui/CMakeLists.txt
#	lib/usd/ui/layerEditor/mayaCommandHook.cpp
#	lib/usd/ui/renderSetup/renderSetupWindowCmd.cpp
KBuYmLgYNrFpAfTMkewbc
 CKMXQPPtE40icSdsp8GsAmou8z/TdcXkVrx3JD5N4CxgT81ekwYQX5TvwCxQymhd
 fMGynH4JkKWCg5FK//rsu623du4u9XiTzOQrdsIGT7AMGotqm1qubXInvR+HKARo
 gxtSQ6mQf+CSGznSNbJlvy8aXq1tfH8fJv28nOXmMXSaq6cXq79lcF6tmS/VMylx
 pAi5CcIDsXH9rlbsyaKQjtgR30DyaFcu8xoIrQZ19oLk0AmvwGXMhjBVLxs7nKPY
 jxwJCaPIsEJKxebk5kGRocwFCDs5C+a3eT4I4NW5cOZRd4jzh9KuZ38VuO5BY/GN
 e7WSA+dxP67xP05w6EYjjdt1qrfe9Ko9jlTb506ptYTBm7Ewz+6roCz40QW7wo1X
 2ddj3B6oU3p0vIQVxTT8WhIXhrB/cccMMqaTEBt6YuiczLFCHuYzAOj1znAqnzrL
 XZWw2OaS9OkyBE0DnOd4czNnzSyx/vSBPo5Xo/QPi0fiVdOdNI/bdTC2NW+E6QTJ
 rMUPY1vf/KZPRV8l306V
 =2bZ3
 -----END PGP SIGNATURE-----
 

Merge pull request #4655 from Autodesk/bailp/EMSUSD-3823/layer-display-refresh

EMSUSD-3823 fix layer content refresh`ImportChaser` pluginsis no…both unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
8 <noreply@anthropic.com>
<noreply@anthropic.com>
opic.com>
782483718 -0400

Merge remote-tracking branch 'upstream/dev' into deboisj/unify_layer_editor_review

# Conflicts:
#	lib/usd/ui/CMakeLists.txt
#	lib/usd/ui/layerEditor/mayaCommandHook.cpp
#	lib/usd/ui/renderSetup/renderSetupWindowCmd.cpp
KBuYmLgYNrFpAfTMkewbc
 CKMXQPPtE40icSdsp8GsAmou8z/TdcXkVrx3JD5N4CxgT81ekwYQX5TvwCxQymhd
 fMGynH4JkKWCg5FK//rsu623du4u9XiTzOQrdsIGT7AMGotqm1qubXInvR+HKARo
 gxtSQ6mQf+CSGznSNbJlvy8aXq1tfH8fJv28nOXmMXSaq6cXq79lcF6tmS/VMylx
 pAi5CcIDsXH9rlbsyaKQjtgR30DyaFcu8xoIrQZ19oLk0AmvwGXMhjBVLxs7nKPY
 jxwJCaPIsEJKxebk5kGRocwFCDs5C+a3eT4I4NW5cOZRd4jzh9KuZ38VuO5BY/GN
 e7WSA+dxP67xP05w6EYjjdt1qrfe9Ko9jlTb506ptYTBm7Ewz+6roCz40QW7wo1X
 2ddj3B6oU3p0vIQVxTT8WhIXhrB/cccMMqaTEBt6YuiczLFCHuYzAOj1znAqnzrL
 XZWw2OaS9OkyBE0DnOd4czNnzSyx/vSBPo5Xo/QPi0fiVdOdNI/bdTC2NW+E6QTJ
 rMUPY1vf/KZPRV8l306V
 =2bZ3
 -----END PGP SIGNATURE-----
 

Merge pull request #4655 from Autodesk/bailp/EMSUSD-3823/layer-display-refresh

EMSUSD-3823 fix layer content refresh`ImportChaser` pluginsis no…both unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
>
opic.com>
782483718 -0400

Merge remote-tracking branch 'upstream/dev' into deboisj/unify_layer_editor_review

# Conflicts:
#	lib/usd/ui/CMakeLists.txt
#	lib/usd/ui/layerEditor/mayaCommandHook.cpp
#	lib/usd/ui/renderSetup/renderSetupWindowCmd.cpp
KBuYmLgYNrFpAfTMkewbc
 CKMXQPPtE40icSdsp8GsAmou8z/TdcXkVrx3JD5N4CxgT81ekwYQX5TvwCxQymhd
 fMGynH4JkKWCg5FK//rsu623du4u9XiTzOQrdsIGT7AMGotqm1qubXInvR+HKARo
 gxtSQ6mQf+CSGznSNbJlvy8aXq1tfH8fJv28nOXmMXSaq6cXq79lcF6tmS/VMylx
 pAi5CcIDsXH9rlbsyaKQjtgR30DyaFcu8xoIrQZ19oLk0AmvwGXMhjBVLxs7nKPY
 jxwJCaPIsEJKxebk5kGRocwFCDs5C+a3eT4I4NW5cOZRd4jzh9KuZ38VuO5BY/GN
 e7WSA+dxP67xP05w6EYjjdt1qrfe9Ko9jlTb506ptYTBm7Ewz+6roCz40QW7wo1X
 2ddj3B6oU3p0vIQVxTT8WhIXhrB/cccMMqaTEBt6YuiczLFCHuYzAOj1znAqnzrL
 XZWw2OaS9OkyBE0DnOd4czNnzSyx/vSBPo5Xo/QPi0fiVdOdNI/bdTC2NW+E6QTJ
 rMUPY1vf/KZPRV8l306V
 =2bZ3
 -----END PGP SIGNATURE-----
 

Merge pull request #4655 from Autodesk/bailp/EMSUSD-3823/layer-display-refresh

EMSUSD-3823 fix layer content refresh`ImportChaser` pluginsis no…both unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
>
opic.com>
tor_review

# Conflicts:
#	lib/usd/ui/CMakeLists.txt
#	lib/usd/ui/layerEditor/mayaCommandHook.cpp
#	lib/usd/ui/renderSetup/renderSetupWindowCmd.cpp
KBuYmLgYNrFpAfTMkewbc
 CKMXQPPtE40icSdsp8GsAmou8z/TdcXkVrx3JD5N4CxgT81ekwYQX5TvwCxQymhd
 fMGynH4JkKWCg5FK//rsu623du4u9XiTzOQrdsIGT7AMGotqm1qubXInvR+HKARo
 gxtSQ6mQf+CSGznSNbJlvy8aXq1tfH8fJv28nOXmMXSaq6cXq79lcF6tmS/VMylx
 pAi5CcIDsXH9rlbsyaKQjtgR30DyaFcu8xoIrQZ19oLk0AmvwGXMhjBVLxs7nKPY
 jxwJCaPIsEJKxebk5kGRocwFCDs5C+a3eT4I4NW5cOZRd4jzh9KuZ38VuO5BY/GN
 e7WSA+dxP67xP05w6EYjjdt1qrfe9Ko9jlTb506ptYTBm7Ewz+6roCz40QW7wo1X
 2ddj3B6oU3p0vIQVxTT8WhIXhrB/cccMMqaTEBt6YuiczLFCHuYzAOj1znAqnzrL
 XZWw2OaS9OkyBE0DnOd4czNnzSyx/vSBPo5Xo/QPi0fiVdOdNI/bdTC2NW+E6QTJ
 rMUPY1vf/KZPRV8l306V
 =2bZ3
 -----END PGP SIGNATURE-----
 

Merge pull request #4655 from Autodesk/bailp/EMSUSD-3823/layer-display-refresh

EMSUSD-3823 fix layer content refresh`ImportChaser` pluginsis no…both unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
red-By: Claude Opus 4.8 <noreply@anthropic.com>
>
opic.com>
…_review

eview

# Conflicts:
#	lib/usd/ui/CMakeLists.txt
#	lib/usd/ui/layerEditor/mayaCommandHook.cpp
#	lib/usd/ui/renderSetup/renderSetupWindowCmd.cpp
KBuYmLgYNrFpAfTMkewbc
 CKMXQPPtE40icSdsp8GsAmou8z/TdcXkVrx3JD5N4CxgT81ekwYQX5TvwCxQymhd
 fMGynH4JkKWCg5FK//rsu623du4u9XiTzOQrdsIGT7AMGotqm1qubXInvR+HKARo
 gxtSQ6mQf+CSGznSNbJlvy8aXq1tfH8fJv28nOXmMXSaq6cXq79lcF6tmS/VMylx
 pAi5CcIDsXH9rlbsyaKQjtgR30DyaFcu8xoIrQZ19oLk0AmvwGXMhjBVLxs7nKPY
 jxwJCaPIsEJKxebk5kGRocwFCDs5C+a3eT4I4NW5cOZRd4jzh9KuZ38VuO5BY/GN
 e7WSA+dxP67xP05w6EYjjdt1qrfe9Ko9jlTb506ptYTBm7Ewz+6roCz40QW7wo1X
 2ddj3B6oU3p0vIQVxTT8WhIXhrB/cccMMqaTEBt6YuiczLFCHuYzAOj1znAqnzrL
 XZWw2OaS9OkyBE0DnOd4czNnzSyx/vSBPo5Xo/QPi0fiVdOdNI/bdTC2NW+E6QTJ
 rMUPY1vf/KZPRV8l306V
 =2bZ3
 -----END PGP SIGNATURE-----
 

Merge pull request #4655 from Autodesk/bailp/EMSUSD-3823/layer-display-refresh

EMSUSD-3823 fix layer content refresh`ImportChaser` pluginsis no…both unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
red-By: Claude Opus 4.8 <noreply@anthropic.com>
>
opic.com>
@deboisj deboisj force-pushed the deboisj/unify_layer_editor_review branch from bee27e7 to 8e24ed8 Compare June 26, 2026 15:35
…_review

# Conflicts:
#	lib/usd/ui/CMakeLists.txt
#	lib/usd/ui/layerEditor/mayaCommandHook.cpp
#	lib/usd/ui/renderSetup/renderSetupWindowCmd.cpp
static void onSceneChangedCB(void* clientData);

private:
void applyStages()

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Workaround for the load issue, will be discarded

@deboisj deboisj changed the title WIP Layer Editor Unification Layer Editor Unification Jun 26, 2026
@deboisj deboisj marked this pull request as ready for review June 26, 2026 17:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants