~added isEmpty property to details categories for showing stub categories
~styling support to show them properly
#jira UE-195683
#rb ronald.koppers
[CL 28073151 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]
Problem: With recent changes to the details panel some styling updates caused the scrollbar section to overlap with the reset button when the scrollbar is not showing.
Solution: In SDetailsViewBase.cpp, in the GetScrollbarVisibility method call into DisplayManager.GetIsScrollbarShowing, to tell whether or not we need to show the section which has the scrollbar
#jira UE-195050
#rb brooke.hubert
[CL 27809503 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]
- Fixed padding of default buttons contaier (or else the widget created with CreateDefaultPropertyButtonWidgets() will unintentionally make a row taller)
- Added IDetailsView.ScrollPropertyIntoView(), similar to HighlightProperty() sans does not set highlight
[CL 27407050 by mikko mononen 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]
This is a splitter that can dynamically connect matching properties as well as provide buttons for copying values between the two details panels.
#rb ben.hoffmann, dave.jones, karen.jirak
#jira UE-181566
#preflight 64386ecf930b3b84925271d9
[CL 25050248 by jordan hoffmann in ue5-main branch]
This is an improvement on how we diff object details so we can diff in real time and unify several algorithms into one
AsyncTreeDifferences is a generic structure that can diff any tree while AsyncDetailViewDiff is a specialization of that for details panels
Docs: https://docs.google.com/document/d/1rwY-FtTxq2BVptLaMdpKNpzb4hOSn8efm-Z-cF0fBhE/edit?usp=sharing
#rb ben.hoffmann, ben.zeigler, dave.jones
#preflight 6437336e0c4277fc0bdc4d8a
[CL 25027228 by jordan hoffmann in ue5-main branch]
[FYI] patrick.boutot
Original CL Desc
-----------------------------------------------------------------
Synchronize the scrolling between left and right details panels in Blueprint Diff
#jira UE-171205
#rb dan.oconnor
#preflight 6391255b5624e6da5ea8354e
[CL 23481543 by jordan hoffmann 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]
Changes from previous submit:
- ExpandedCustomItems uses TStringBuilder::Join()
- FStringPrefixTree::GetAllEntries() uses a const FString& to avoid a potential memcpy crash.
- Added checks to FStringPrefixTree for empty prefixes being added to the tree.
- Fixed bug where re-adding a substring along a node split boundary (eg. "FooFoo", "FooBar", "FooBar") would cause the intermediate node to be marked as a leaf (instead of the child), added tests for it.
[REVIEW] [at]richard.talbotwatkins, [at]paul.chipchase
#rnx
#preflight 636a59dc450be1d9f8261079
[CL 23069417 by sebastian nordgren in ue5-main branch]
[FYI] sebastian.nordgren
Original CL Desc
-----------------------------------------------------------------
Switched expanded nodes in SDetailsViewBase to use FStringPrefixTree.
This improved performance in one test case when calling RestoreExpandedItems() from ~500ms to ~100ms.
[REVIEW] [at]paul.chipchase
#rnx
#preflight 63650cc94b0e01486a51eb06
[CL 23019381 by aurel cordonnier in ue5-main branch]
This improved performance in one test case when calling RestoreExpandedItems() from ~500ms to ~100ms.
[REVIEW] [at]paul.chipchase
#rnx
#preflight 63650cc94b0e01486a51eb06
[CL 23011519 by sebastian nordgren in ue5-main branch]