This change consists of multiple changes:
Core:
- Deprecation of ANY_PACKAGE macro. Added ANY_PACKAGE_DEPRECATED macro which can still be used for backwards compatibility purposes (only used in CoreUObject)
- Deprecation of StaticFindObjectFast* functions that take bAnyPackage parameter
- Added UStruct::GetStructPathName function that returns FTopLevelAssetPath representing the path name (package + object FName, super quick compared to UObject::GetPathName) + wrapper UClass::GetClassPathName to make it look better when used with UClasses
- Added (Static)FindFirstObject* functions that find a first object given its Name (no Outer). These functions are used in places I consider valid to do global UObject (UClass) lookups like parsing command line parameters / checking for unique object names
- Added static UClass::TryFindType function which serves a similar purpose as FindFirstObject however it's going to throw a warning (with a callstack / maybe ensure in the future?) if short class name is provided. This function is used in places that used to use short class names but now should have been converted to use path names to catch any potential regressions and or edge cases I missed.
- Added static UClass::TryConvertShortNameToPathName utility function
- Added static UClass::TryFixShortClassNameExportPath utility function
- Object text export paths will now also include class path (Texture2D'/Game/Textures/Grass.Grass' -> /Script/Engine.Texture2D'/Game/Textures/Grass.Grass')
- All places that manually generated object export paths for objects will now use FObjectPropertyBase::GetExportPath
- Added a new startup test that checks for short type names in UClass/FProperty MetaData values
AssetRegistry:
- Deprecated any member variables (FAssetData / FARFilter) or functions that use FNames to represent class names and replaced them with FTopLevelAssetPath
- Added new member variables and new function overloads that use FTopLevelAssetPath to represent class names
- This also applies to a few other modules' APIs to match AssetRegistry changes
Everything else:
- Updated code that used ANY_PACKAGE (depending on the use case) to use FindObject(nullptr, PathToObject), UClass::TryFindType (used when path name is expected, warns if it's a short name) or FindFirstObject (usually for finding types based on user input but there's been a few legitimate use cases not related to user input)
- Updated code that used AssetRegistry API to use FTopLevelAssetPaths and USomeClass::StaticClass()->GetClassPathName() instead of GetFName()
- Updated meta data and hardcoded FindObject(ANY_PACKAGE, "EEnumNameOrClassName") calls to use path names
#jira UE-99463
#rb many.people
[FYI] Marcus.Wassmer
#preflight 629248ec2256738f75de9b32
#codereviewnumbers 20320742, 20320791, 20320799, 20320756, 20320809, 20320830, 20320840, 20320846, 20320851, 20320863, 20320780, 20320765, 20320876, 20320786
#ROBOMERGE-OWNER: robert.manuszewski
#ROBOMERGE-AUTHOR: robert.manuszewski
#ROBOMERGE-SOURCE: CL 20430220 via CL 20433854 via CL 20435474 via CL 20435484
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v949-20362246)
[CL 20448496 by robert manuszewski in ue5-main branch]
- rows are now 26 pixels high
- right column is narrower unless the Sequencer is invoked
- padding has been removed to make more rows fit on the screen at once
- Advanced dropdown is now styled like a normal group and thus the bottom node is gone
#review-17520182 @editor-ux
#preflight 6140652a9dc6c8000144500a
[CL 17537602 by sebastian nordgren in ue5-main branch]
This is intended to make the drag behavior more noticeable and a bit more consistent with some other places in the editor that allow drag-and-drop, e.g., the Create menu
Also update the mouse cursor in various drag ops to use GrabHandClosed while dragging
#rb louise.rasmussen
#preflight 6142404db5a4fa000137d28a
[CL 17525962 by Steven Dao in ue5-main branch]
- Allow drag-and-drop behavior to be customized for a details widget row
- Cleanup PropertyEditorHelpers::MakePropertyReorderHandle (it was setting the enabled attribute which always ended up getting overwritten)
- Add drag-and-drop handler+op for UserDefinedStructureEditor to enable drag-and-drop reordering. Removed buttons for moving up/down.
#jira UETOOL-2776
#rb sebastian.nordgren
#preflight 6130deb01a52e20001a6c93b
[CL 17404287 by Steven Dao in ue5-main branch]
Additional changes:
- Deprecates the previous method for specifying a singular custom class viewer filter and updates all existing occurrences of this pattern in engine code.
- Extends the property editor utilities interface to expose custom class filter(s) that can be applied to the class picker widget used for editing class property values.
- Adds an implementation of this interface to SDetailsView such that additional class filter(s) can now be configured to be applied to all underlying class property nodes.
#jira UE-108316
#rb Lauren.Barnes
#preflight 60c2102e8ae8960001110d50
[CL 16623084 by Phillip Kavan in ue5-main branch]
CustomEditConditionValueChanged handlers are now postfixed with a call to FPropertyNode::InvalidateCachedState(), which causes the IsEditConst state to refresh.
Removed unnecessary code to access the PropertyEditor->IsEditConditionMet(), which is stored in EditConditionValue now.
#review @lauren.barnes, @patric.boutot
#jira FROST-1702
[CL 16008018 by sebastian nordgren in ue5-main branch]
This makes it possible to declare a UPROPERTY like so:
UPROPERTY(EditAnywhere, meta = (GetKeyOptions="GetValidItemKeys"))
TMap<FString, FString> MapOfItems;
and have the dropdown appear only on the key field.
#rb Lauren.Barnes
#fyi Vincent.Gauthier,Sebastian.Nordgren
#preflight 606229ea57aca40001ff1441
[CL 15855122 by Luke Thatcher in ue5-main branch]
Simplified logic for how SPropertyEditorTitle creates the name textblock.
#rb lauren.barnes
#jira UETOOL-2658
[CL 15279023 by sebastian nordgren in ue5-main branch]
The details view now displays gridlines between rows, and now has 4 columns - edit condition, name, value, and reset/extensions.
Edit condition widgets are now created in SDetailSingleItemRow and are placed in their own fixed column on the left of the details view. FEditConditionParser is now in FPropertyNode rather FPropertyEditor, which allows access to it more broadly - notably in SDetailSingleItemRow.
The Reset to Default SWidget can no longer be replaced - the logic for it being visible and a handler for when it is pressed is still customizable. SPropertyEditorAsset no longer has a special slot for the reset to default widget.
All extension widgets are now placed in a resizable column on the right of the panel, including the Keyframe button.
FDetailColumnSizeData is now publicly exposed by IDetailsView, and is no longer passed around as much.
#rb matt.kuhlenschmidt
[CL 14375859 by sebastian nordgren in ue5-main branch]
#rnx
#rb none
#ROBOMERGE-SOURCE: CL 10869241 via CL 10869527 via CL 10869904
#ROBOMERGE-BOT: (v613-10869866)
[CL 10870586 by ryan durand in Main branch]