When restorin expansion for property customizations, we need to do 2 passes.
Sometimes the first pass can removed the expansion states needed for the second pass.
Collect the saved expansion state once, and use the same data on both expansion passes so that the first pass cannot mess things up.
#rb logan.buchy
[CL 34089316 by mikko mononen in ue5-main branch]
jira UE-201373 caused a few regressions in the fixup tool so this change is making an effort to use the same paradigms as that CL while resolving those regressions
- fixed Subproperties of structs being visible when FDetailsViewArgs::bShowLooseProperties is set to false
#jira UE-212270
- fixed unset properties being visible in the left panel of fixup tool
- fixed remapping not hidding the previous property that was being remapped from in the fixup tool's left panel
#rb logan.buchy
[CL 33320441 by jordan hoffmann in ue5-main branch]
* A property tagged with "IsLoose" will be automatically filtered from the DetailsView unless the DetailsView is configured to show loose properties
#rb brooke.hubert, jordan.hoffmann
#jira UE-201373
[CL 32038794 by logan buchy in ue5-main branch]
This was available within SDetailsViewBase, but the only publicly available function was ForceRefresh which isn't deferred
Using RequestForceRefresh is preferable when the refresh can be deferred, as it can prevent performance problems from refreshing the view multiple times within a single frame
#rb Rex.Hill
[CL 31275746 by jamie dale in ue5-main branch]
- created FDetailsNameWidgetOverrideCustomization and function to get it on FDetailsViewPrivate, SDetailsView and FDetailsViewArgs to provide a customization that can override any Name widget
- FDetailsNameWidgetOverrideCustomization can override any non-nested property, using the CustomizeName function which takes a TSharedRef<SWidget> that is the name widget that would show without the new customization, and the FPropertyPath in order to be able to tell what properties to override.
- In SDetalsSingleItemRow added GetNameWidget to use the FDetailsNameWidgetOverrideCustomization to provide the name widget, if it has been provided
#jira UE-201379
#rb jordan.hoffmann, logan.buchy
[CL 31134537 by karen jirak in ue5-main branch]
~ finish up clean up and refactor of details view style. Make sure that all of the numbers are moved to the style file and anything state related stays in the display manager.
#jira UE-194125
#rb brooke.hubert
[CL 27899004 by karen jirak in ue5-main branch]
The categories on the components for core entities now have an action menu. It has many things in it that will log.
#jira UE-194008
#rb Brooke.Hubert
[CL 27717413 by karen jirak in ue5-main branch]
This enables the card layout upon renewal of selected items in UE. I added the CVar DetailsPanel.Style.EnableCardLayout. When true throughout UE Card layout will be used, else the Classic details panel layout will be used. Also made it so the hiding\showing of the component editor is independant of the details style, by adding a ShouldHideComponentEditor to the DetailsVieiwObjectFilter, which is checked in SActorDetails.cpp to see if the Component Editor should be shown. SDetailsView has been updated to return the Card layout as the primary style key if DetailsPanel.Style.EnableCardLayout is true.
#jira UE-194197
#rb Ronald.Koppers
[CL 27475943 by karen jirak in ue5-main branch]
* The details panel must be enhanced to show Components as cards
* This new Card style should be applicable to any details panel
* Subobject editor had to be hidden upon selection of entity
Scene graph ~ fix the linker errors caused by having to initialize a reference from importing the SDetailsView code
#jira UE-193821, UE-192032
#rb aditya.ravichandran
[CL 27395322 by karen jirak in ue5-main branch]
#rnx
[FYI] Karen.Jirak
Original CL Desc
-----------------------------------------------------------------
Feature:
* The details panel must be enhanced to show Components as cards
* This new Card style should be applicable to any details panel
* Subobject editor had to be hidden upon selection of entity
Scene graph ~ fix the linker errors caused by having to initialize a reference from importing the SDetailsView code
#jira UE-193821, UE-192032
#rb Brooke.Hubert
[CL 27366485 by hilda cruz in ue5-main branch]
* The details panel must be enhanced to show Components as cards
* This new Card style should be applicable to any details panel
* Subobject editor had to be hidden upon selection of entity
Scene graph ~ fix the linker errors caused by having to initialize a reference from importing the SDetailsView code
#jira UE-193821, UE-192032
#rb Brooke.Hubert
[CL 27366356 by karen jirak in ue5-main branch]
* The details panel must be enhanced to show Components as cards
* This new Card style should be applicable to any details panel
* Subobject editor had to be hidden upon selection of entity
#jira UE-192032
#rb Brooke.Hubert
[CL 27297832 by karen jirak in ue5-main branch]
[FYI] mikko.mononen
Original CL Desc
-----------------------------------------------------------------
Prevent accessing of invalid property nodes after undo and redo.
There's a window after undo (between undo and next property view tick) where property nodes point to the previous data.
If e.g. a property customization needs to refresh cached data after undo, they will try to access the data via old pointers.
Similar issue happens when removing item from array, the tick of IDetailCustomNodeBuilder gets called before we have updates the property nodes.
All these issues happen because when we update the child nodes, there are some parts of code that still hold hard refereces to them, and they are not
actually cleared on FPropertyNode::DestroyTree(). That in turn will cause IPropertyHandle to be in valid state, but pointing to data that has been freed.
- Detach property nodes recursively on FPropertyNode::DestroyTree(), also clearing parent pointers to that the invlidate property path cannot be followed.
- Call update view (same as tick) after undo to invalidate property nodes which do not point to correct memory anymore
- Use FEditorDelegates::PostUndoRedo instead of undo client, as in some rare cases with consequtive undo/redo the undo client callbacks get called on a stale pointer
- Postpone gameplay tag caching to next tick, since the delegates are called in reverse and SDetailsView gets OnUndoRedo gets called after out customization
#jira UE-190882
[CL 27169489 by mikko mononen in ue5-main branch]
There's a window after undo (between undo and next property view tick) where property nodes point to the previous data.
If e.g. a property customization needs to refresh cached data after undo, they will try to access the data via old pointers.
Similar issue happens when removing item from array, the tick of IDetailCustomNodeBuilder gets called before we have updates the property nodes.
All these issues happen because when we update the child nodes, there are some parts of code that still hold hard refereces to them, and they are not
actually cleared on FPropertyNode::DestroyTree(). That in turn will cause IPropertyHandle to be in valid state, but pointing to data that has been freed.
- Detach property nodes recursively on FPropertyNode::DestroyTree(), also clearing parent pointers to that the invlidate property path cannot be followed.
- Call update view (same as tick) after undo to invalidate property nodes which do not point to correct memory anymore
- Use FEditorDelegates::PostUndoRedo instead of undo client, as in some rare cases with consequtive undo/redo the undo client callbacks get called on a stale pointer
- Postpone gameplay tag caching to next tick, since the delegates are called in reverse and SDetailsView gets OnUndoRedo gets called after out customization
#jira UE-190882
[CL 27098189 by mikko mononen in ue5-main branch]
- Added IStructureProvider which allows to edit multiple instances of structs at a time
- Improved default value handling in standalone structure nodes
- Fixed bug where expanded nodes did not retain their expansion state when structure nodes were rebuild (e.g. when editing a component)
- Removed caching from Instanced struct customization
#jira UE-172047
#rb Jamie.Dale, Adrien.Logut
#preflight 644a48360f12404fb77173f6
[CL 25214019 by mikko mononen in ue5-main branch]
This is necessary because although we register an OnRowReleased handler, we also register a Visibility handler in SDetailsViewBase::GetTreeVisibility(). The OnRowReleased delegate is called when the tree next Ticks(), but when the tree is cleared, it also gets its visibility set to Collapsed, which causes the next Tick() to not occur. Since there's no way to force the tree to Tick(), this is the next best thing.
Added a few trace macros.
#jira UE-162823
[REVIEW] [at]patrick.boutot
#rnx
#preflight 6376176b4f460e024c15a9cf
[CL 23174550 by sebastian nordgren in ue5-main branch]