- Duplicate now works properly in the asset view.
- Consolidated common asset actions into the asset context menu and removed the duplicate code from all asset type actions that had implemented them. The affected actions are Edit, Reimport, Find in Explorer, and Open in External Editor. The latter three actions are only visible for imported assets.
- Added IsImportedAsset() and GetSourceFilePaths() to IAssetTypeActions for use by the context menu.
- Compressed the bottom matter on the context menu by removing section headers and compressing Source Control options into a sub-menu (when connected, otherwise there's just a "connect" menu entry).
- Added lots of icons! (The missing ones are TTP'd)
- Fixed FAssetEditorManager::OpenEditorForAssets to work in a useful fashion. IAssetTypeActions::OpenAssetEditor() already took in a UObject array, so it is up to the class's asset type actions to decide how to handle editing multiple assets. (It appeared to be before, but wasn't really).
- Removed the "Details" option from the context menu (since it's redundant when there's a guaranteed "Edit" option)
- Consolidated all skeleton-related actions into AnimationEditorUtils and removed the duplicate code from FAssetTypeActions_SkeletalMesh and FAssetTypeActions_Skeleton
- Compressed the Paper2D sprite options for textures into a submenu
- Renamed "New" to "Create" in content browser
[CL 2324288 by Dan Hertzka in Main branch]
FScopedSlowTask has been refactored to better allow for nesting of slow operations. This allows us to cascade nested scopes and provide accurate feedback on slow tasks. FScopedSlowTasks now work together when nested inside sub functions. Break up long functions that contain calls to multiple nested FScopedSlowTasks with FScopedSlowTask::EnterProgressFrame().
Example Usage:
void DoSlowWork()
{
FScopedSlowTask Progress(2.f, LOCTEXT("DoingSlowWork", "Doing Slow Work..."));
// Optionally make this show a dialog if not already shown
Progress.MakeDialog();
// Indicate that we are entering a frame representing 1 unit of work
Progress.EnterProgressFrame(1.f);
// DoFirstThing() can follow a similar pattern of creating a scope divided into frames. These contribute to their parent's progress frame proportionately.
DoFirstThing();
Progress.EnterProgressFrame(1.f);
DoSecondThing();
}
This addresses TTP#338602 - NEEDS REVIEW: Editor progress bars nearly always just show 100%, don't offer useful indication of progress
[CL 2322391 by Andrew Rodham in Main branch]
TTP #343071 CORE: FCoreDelegates should not have references to UObjects.
#codereview Robert.Manuszewski
[CL 2317144 by Mikolaj Sieluzycki in Main branch]
Enum prefixes are no longer displayed, and CamelCaseEnums are now space-separated.
This addresses TTP#345449 - NUX:Content Browser: NUX: Tooltips for Materials and Textures have weird acronyms all over them
[CL 2305503 by Andrew Rodham in Main branch]
This is controlled by the macro "WITH_CASE_PRESERVING_NAME", which is currently just set to "WITH_EDITORONLY_DATA" so that it works in editor builds (and UHT).
Added an extra NAME_INDEX entry to FName to store a second string table index for a case-variant string. The previous Index value (now called ComparisonIndex) is still used for comparison purposes (as FNames are still case-insensitive).
The Init process for an FName now works like this:
1) It will find or add a string table entry for the given string (not matching case) - this entry index is stored in ComparisonIndex.
2) It will then compare the string table entry string against the given string (matching case) to see if it also needs to add a case-variant entry for the FName.
3) If it does, it finds or adds a second string table entry (matching case) for the string - this entry index is stored in DisplayIndex.
Hard-coded FNames (those listed in UnrealNames.h) do not support case-variants (due to existing network replication rules for hard-coded FNames), so they skip steps 2 and 3.
I added FMinimalName, which is the same size as FName was previously. This shouldn't really be used (and as such, is deliberately awkward to make/use) as it loses the case-preserving behaviour of FName, however it was required for some things (like stats) that had a hard-coded upper limit on FName size.
I added FScriptName, which always contains the extra display index (even when WITH_CASE_PRESERVING_NAME is disabled). This is used by Blueprint bytecode, as the types used by Blueprint bytecode must be a consistent size between all build configurations.
Other changes:
- Fixed up any places that were passing an Index into the FName constructor which was supposed to take an EName.
- Some places were doing this to make the number unique when replicating an object, but this was losing the case-variant information, so I had to fix them.
- FName will now assert if the EName constructor is used with an value outside the range of hard-coded FNames.
- Ensured that assets, actors, and blueprint components could all be renamed in a way that only changed their case, and that these changes were correctly persisted.
- Added FLinkerNamePairKeyFuncs and TLinkerNameMapKeyFuncs for use with TSet and TMap.
- These allow ULinkerSave and ULinkerLoad to correctly write out case-variants for FNames, and also fixes an issue where the linker would erroneously write out duplicate string table entries for FNames which had a different number (causing package bloat).
- Bumped VER_MIN_SCRIPTVM_UE4 so that all Blueprint bytecode is recompiled using FScriptName.
ReviewedBy Robert.Manuszewski, Gil.Gribb
[CL 2300730 by Jamie Dale in Main branch]
Tiny text is now using a lighter font with a better hinting algorithm, and is centrally justified.
We want to minimise waste of horizontal space, so content browser thumbnails now fill the width of the content browser once again.
[CL 2299335 by Andrew Rodham in Main branch]
The font has also been reduced in size to reduce the amount of wrapping on asset labels at small sizes.
Also polished the asset borders and shadows.
This addresses TTP 345457 and 345452.
[CL 2297910 by Andrew Rodham in Main branch]
- Folder hotkeys (rename, delete) work properly in path view
- Deleting and renaming folders in asset view doesn't reset the asset view scope
- Deleting the open folder returns scope to the Game folder (no longer disables "New" and "Import")
[CL 2286985 by Dan Hertzka in Main branch]
#UE4 You can now use the level "Save As..." dialog to overwrite existing levels. If they are in memory, they will be unloaded before proceeding.
--------
Integrated using branch Ue4-To-UE4-Fortnite-Simple (reversed) of change#2280588 by Bob.Tellez on 2014/09/01 13:20:53.
[CL 2280595 by Bob Tellez in Main branch]
This solves a wrapping issue where STextBlock would incorrectly consume new-line characters when wrapping, as well as allowing it to use custom wrapping behavior (eg, CamelCase wrapping for asset names in the content browser).
This change also implements FString -> FText passthrough for SLATE_TEXT_ATTRIBUTE (it was previously performing FText -> FString passthrough, however this didn't fit well with the fact that FText has a more efficient method of comparing whether a bound text attribute has changed (see FTextSnapshot), so can quickly work out that the FTextLayout doesn't need updating).
This change adds FTextBlockLayout to handle the text layout cache for text block types (STextBlock and SRichTextBlock) and serves a dual purpose of moving the duplicated caching logic into a single place, as well as hiding it from the widget (so allowing the cache to mutate, even when called from immutable widget functions).
This change also increases the unification between the STextBlock and SRichTextBlock construction parameters, by allowing STextBlock to specify a Justification, Margin, and LineHeightPercentage, and allowing SRichTextBlock to specify its HighlightText as an attribute.
ReviewedBy Nick.Atamas, Justin.Sargent
[CL 2280351 by Jamie Dale in Main branch]