Files
UnrealEngineUWP/Engine/Source/Editor/UnrealEd/Private/EditorSelectUtils.cpp

707 lines
20 KiB
C++
Raw Normal View History

// Copyright Epic Games, Inc. All Rights Reserved.
Copying //UE4/Dev-Build to //UE4/Dev-Main (Source: //UE4/Dev-Build @ 3209340) #lockdown Nick.Penwarden #rb none ========================== MAJOR FEATURES + CHANGES ========================== Change 3209340 on 2016/11/23 by Ben.Marsh Convert UE4 codebase to an "include what you use" model - where every header just includes the dependencies it needs, rather than every source file including large monolithic headers like Engine.h and UnrealEd.h. Measured full rebuild times around 2x faster using XGE on Windows, and improvements of 25% or more for incremental builds and full rebuilds on most other platforms. * Every header now includes everything it needs to compile. * There's a CoreMinimal.h header that gets you a set of ubiquitous types from Core (eg. FString, FName, TArray, FVector, etc...). Most headers now include this first. * There's a CoreTypes.h header that sets up primitive UE4 types and build macros (int32, PLATFORM_WIN64, etc...). All headers in Core include this first, as does CoreMinimal.h. * Every .cpp file includes its matching .h file first. * This helps validate that each header is including everything it needs to compile. * No engine code includes a monolithic header such as Engine.h or UnrealEd.h any more. * You will get a warning if you try to include one of these from the engine. They still exist for compatibility with game projects and do not produce warnings when included there. * There have only been minor changes to our internal games down to accommodate these changes. The intent is for this to be as seamless as possible. * No engine code explicitly includes a precompiled header any more. * We still use PCHs, but they're force-included on the compiler command line by UnrealBuildTool instead. This lets us tune what they contain without breaking any existing include dependencies. * PCHs are generated by a tool to get a statistical amount of coverage for the source files using it, and I've seeded the new shared PCHs to contain any header included by > 15% of source files. Tool used to generate this transform is at Engine\Source\Programs\IncludeTool. [CL 3209342 by Ben Marsh in Main branch]
2016-11-23 15:48:37 -05:00
#include "CoreMinimal.h"
#include "Misc/FeedbackContext.h"
#include "Modules/ModuleManager.h"
#include "Components/ActorComponent.h"
#include "Components/SceneComponent.h"
#include "GameFramework/Actor.h"
#include "Components/PrimitiveComponent.h"
#include "Editor/UnrealEdEngine.h"
#include "Editor/GroupActor.h"
#include "Components/ChildActorComponent.h"
#include "Components/DecalComponent.h"
Copying //UE4/Dev-Build to //UE4/Dev-Main (Source: //UE4/Dev-Build @ 3209340) #lockdown Nick.Penwarden #rb none ========================== MAJOR FEATURES + CHANGES ========================== Change 3209340 on 2016/11/23 by Ben.Marsh Convert UE4 codebase to an "include what you use" model - where every header just includes the dependencies it needs, rather than every source file including large monolithic headers like Engine.h and UnrealEd.h. Measured full rebuild times around 2x faster using XGE on Windows, and improvements of 25% or more for incremental builds and full rebuilds on most other platforms. * Every header now includes everything it needs to compile. * There's a CoreMinimal.h header that gets you a set of ubiquitous types from Core (eg. FString, FName, TArray, FVector, etc...). Most headers now include this first. * There's a CoreTypes.h header that sets up primitive UE4 types and build macros (int32, PLATFORM_WIN64, etc...). All headers in Core include this first, as does CoreMinimal.h. * Every .cpp file includes its matching .h file first. * This helps validate that each header is including everything it needs to compile. * No engine code includes a monolithic header such as Engine.h or UnrealEd.h any more. * You will get a warning if you try to include one of these from the engine. They still exist for compatibility with game projects and do not produce warnings when included there. * There have only been minor changes to our internal games down to accommodate these changes. The intent is for this to be as seamless as possible. * No engine code explicitly includes a precompiled header any more. * We still use PCHs, but they're force-included on the compiler command line by UnrealBuildTool instead. This lets us tune what they contain without breaking any existing include dependencies. * PCHs are generated by a tool to get a statistical amount of coverage for the source files using it, and I've seeded the new shared PCHs to contain any header included by > 15% of source files. Tool used to generate this transform is at Engine\Source\Programs\IncludeTool. [CL 3209342 by Ben Marsh in Main branch]
2016-11-23 15:48:37 -05:00
#include "Kismet2/ComponentEditorUtils.h"
#include "Engine/Selection.h"
#include "EdMode.h"
#include "EditorModeManager.h"
#include "EditorModes.h"
#include "Dialogs/Dialogs.h"
#include "UnrealEdGlobals.h"
#include "ScopedTransaction.h"
#include "Engine/LevelStreaming.h"
#include "LevelUtils.h"
#include "LevelEditorViewport.h"
Copying //UE4/Dev-Build to //UE4/Dev-Main (Source: //UE4/Dev-Build @ 3209340) #lockdown Nick.Penwarden #rb none ========================== MAJOR FEATURES + CHANGES ========================== Change 3209340 on 2016/11/23 by Ben.Marsh Convert UE4 codebase to an "include what you use" model - where every header just includes the dependencies it needs, rather than every source file including large monolithic headers like Engine.h and UnrealEd.h. Measured full rebuild times around 2x faster using XGE on Windows, and improvements of 25% or more for incremental builds and full rebuilds on most other platforms. * Every header now includes everything it needs to compile. * There's a CoreMinimal.h header that gets you a set of ubiquitous types from Core (eg. FString, FName, TArray, FVector, etc...). Most headers now include this first. * There's a CoreTypes.h header that sets up primitive UE4 types and build macros (int32, PLATFORM_WIN64, etc...). All headers in Core include this first, as does CoreMinimal.h. * Every .cpp file includes its matching .h file first. * This helps validate that each header is including everything it needs to compile. * No engine code includes a monolithic header such as Engine.h or UnrealEd.h any more. * You will get a warning if you try to include one of these from the engine. They still exist for compatibility with game projects and do not produce warnings when included there. * There have only been minor changes to our internal games down to accommodate these changes. The intent is for this to be as seamless as possible. * No engine code explicitly includes a precompiled header any more. * We still use PCHs, but they're force-included on the compiler command line by UnrealBuildTool instead. This lets us tune what they contain without breaking any existing include dependencies. * PCHs are generated by a tool to get a statistical amount of coverage for the source files using it, and I've seeded the new shared PCHs to contain any header included by > 15% of source files. Tool used to generate this transform is at Engine\Source\Programs\IncludeTool. [CL 3209342 by Ben Marsh in Main branch]
2016-11-23 15:48:37 -05:00
#include "StatsViewerModule.h"
#include "SnappingUtils.h"
#include "Logging/MessageLog.h"
Copying //UE4/Dev-Editor to //UE4/Dev-Main (Source: //UE4/Dev-Editor @ 3431234) #lockdown Nick.Penwarden ========================== MAJOR FEATURES + CHANGES ========================== Change 3323393 on 2017/02/27 by Ben.Cosh This fixes an issue with actor details component selection causing actor selection to get out of sync across undo operations #Jira UE-40753 - [CrashReport] UE4Editor_LevelEditor!FLevelEditorActionCallbacks::Paste_CanExecute() [leveleditoractions.cpp:1602] #Proj Engine Change 3379355 on 2017/04/04 by Lauren.Ridge Adding sort priorities to Material Parameters and Parameter Groups. If sort priorities are equal, fallback to alphabetical sort. Default sort priority is 0, can be set on the parameter in the base material. Parameters are still sorted within groups.Group sort priority is set on the main material preferences. Change 3379389 on 2017/04/04 by Nick.Darnell Core - Removing several old macros that were referring to EMIT_DEPRECATED_WARNING_MESSAGE, which is no longer defined in the engine, so these macros are double deprecated. Change 3379551 on 2017/04/04 by Nick.Darnell Automation - Adding more logging to the automation controller when generating reports. Change 3379554 on 2017/04/04 by Nick.Darnell UMG - Making the WidgetComponent make more things caneditconst in the editor depending on what the settings are to make it more obvious what works in certain contexts. Change 3379565 on 2017/04/04 by Nick.Darnell UMG - Deprecating OPTIONA_BINDING, moving to PROPERTY_BINDING in place and you'll need to define a PROPERTY_BINDING_IMPLEMENTATION. Will make bindings safer to call from blueprints. Change 3379576 on 2017/04/04 by Lauren.Ridge Parameter group dropdown now sorts alphabetically Change 3379592 on 2017/04/04 by JeanMichel.Dignard Fbx Morph Targets import optimisation - Only reimport the points for each morphs and compute the tangents for the wedges affected by those points. - Removed the full skeletal mesh rebuild on each morph target import. - Allow MeshUtilities::ComputeTangents_MikkTSpace to only recompute the tangents that are zero. Gains around 7.30 mins for 785 morph targets in mikkt space and 1.30 mins using built-in normals, with provided test file. #jira UE-34125 Change 3380260 on 2017/04/04 by Nick.Darnell UMG - Fixing some OPTIONAL_BINDINGS that needed to be converted. Change 3380551 on 2017/04/05 by Andrew.Rodham Sequencer: Fixed ImplIndex sometimes not relating to the source data index when compiling at the track level #jira UE-43446 Change 3380555 on 2017/04/05 by Andrew.Rodham Sequencer: Automated unit tests for the segment and track compilers Change 3380647 on 2017/04/05 by Nick.Darnell UMG - Tweaking some stuff on the experimental rich textblock. Change 3380719 on 2017/04/05 by Yannick.Lange Fix 'Compile FortniteClient Mac' and 'Compile Ocean iOS' Failed with Material.cpp errors. Wrapping WITH_EDITOR around ParameterGroupData. #jira UE-43667 Change 3380765 on 2017/04/05 by Nick.Darnell UMG - Fixing a few more instances of OPTIONAL_BINDING. Change 3380786 on 2017/04/05 by Yannick.Lange Wrap SortPriority in GetParameterSortPriority with WITH_EDITOR. Change 3380872 on 2017/04/05 by Matt.Kuhlenschmidt PR #3453: UE-43004: YesNo MessageDialog instead of YesNoCancel (Contributed by projectgheist) Change 3381635 on 2017/04/05 by Matt.Kuhlenschmidt Expose static mesh material accessors to blueprints #jira UE-43631 Change 3381643 on 2017/04/05 by Matt.Kuhlenschmidt Added a way to enable or disable the component transform units display independently from unit display anywhere else. This is off by default Change 3381705 on 2017/04/05 by Yannick.Lange - Slate application multiple input pre-processors. - Remove ViewportWorldInteractionManager, let ViewportWorldInteraction handle it's own input pre-processor. Change 3381959 on 2017/04/05 by Yannick.Lange Back out changelist 3381705. Old changelist. Change 3382049 on 2017/04/05 by Yannick.Lange - Slate application multiple input pre-processors in a wrapper class. - Remove ViewportWorldInteractionManager, let ViewportWorldInteraction handle it's own input pre-processor. - Deprecated SetInputPreProcessor, but made it work with RegisterInputPreProcessor and UnregisterInputPreProcessor. Change 3382450 on 2017/04/06 by Andrew.Rodham Sequencer: Fixed 'ambiguous' overloaded constructor for UT linux server builds Change 3382468 on 2017/04/06 by Yannick.Lange Rename AllowWorldMovement parameter to bAllow. Change 3382474 on 2017/04/06 by Yannick.Lange Make GetInteractors constant because we dont want it to be possible to change this arrray. Change 3382492 on 2017/04/06 by Yannick.Lange VR Editor: Floating UI's are stored in a map with FNames as key. Change 3382502 on 2017/04/06 by Yannick.Lange VR Editor: Use asset container for auto scaler sound. Change 3382589 on 2017/04/06 by Nick.Darnell Slate - Upgrading usages of SetInputPreprocessor. Also adjusting the API for the new preprocessor functions to have an option to remove all, which was what several usages expected. Also updated the deprecated version of SetInputPreprocessor to removeall if null is provided for the remove, mimicing the old functionality. Change 3382594 on 2017/04/06 by Nick.Darnell UMG - Deprecating GetMousePositionScaledByDPI, this function has too many issues, and I don't want to break buggy backwards compatability, so just going to deprecate it instead. For replacement, you can now access an FGeometry representing the viewport (after DPI scale has been added to the transform stack), and also the FGeometry for a Player's Screen widget host, which might be constrained for splitscreen, or camera aspect. Change 3382672 on 2017/04/06 by Nick.Darnell Build - Fixing incremental build. Change 3382674 on 2017/04/06 by Nick.Darnell Removing a hack added by launcher. Change 3382697 on 2017/04/06 by Matt.Kuhlenschmidt Fixed plugin browser auto-resizing when scrolling. Gave it a proper splitter Change 3382875 on 2017/04/06 by Michael.Trepka Modified FMacApplication::OnCursorLock() to avoid a thread safety problem with using TSharedPtr/Ref<FMacWindow> of the same window on main and game threads simultaneously. #jira FORT-34952 Change 3383303 on 2017/04/06 by Lauren.Ridge Adding sort priority to texture parameter code Change 3383561 on 2017/04/06 by Jamie.Dale Fixed MaximumIntegralDigits incorrectly including group separators in its count Change 3383570 on 2017/04/06 by Jamie.Dale Added regression tests for formatting a number with MaximumIntegralDigits and group separators enabled Change 3384507 on 2017/04/07 by Lauren.Ridge Mesh painting no longer paints on invisible components. Toggling visiblity refreshes the selected set. #jira UE-21172 Change 3384804 on 2017/04/07 by Joe.Graf Fixed a clang error on Linux due to missing virtual destructor when deleting through the interface pointer #CodeReview: marc.audy #rb: n/a Change 3385011 on 2017/04/07 by Matt.Kuhlenschmidt Fix dirtying levels just by copying actors if the level contains a foliage actor. The foliage system makes lazy asset pointers #jira UE-43750 Change 3385127 on 2017/04/07 by Lauren.Ridge Adding WITHEDITOR to OnDragDropCheckOverride Change 3385241 on 2017/04/07 by Jamie.Dale Removing warning if asking for a null or empty localization provider Change 3385442 on 2017/04/07 by Arciel.Rekman Fix a number of problems with Linux splash. - Thread safety (UE-40354). - Inconsistent font (UE-35000). - Change by Cengiz Terzibas. Change 3385708 on 2017/04/08 by Lauren.Ridge Resaving VREditor asset container with engine version Change 3385711 on 2017/04/08 by Arciel.Rekman Speculative fix for a non-unity Linux build. Change 3386120 on 2017/04/10 by Matt.Kuhlenschmidt Fix stats not being enabled when in simulate Change 3386289 on 2017/04/10 by Matt.Kuhlenschmidt PR #3466: Git plugin: add option to autoconfigure Git LFS (Contributed by SRombauts) Change 3386301 on 2017/04/10 by Matt.Kuhlenschmidt PR #3470: Git Plugin: disable "Keep Files Checked Out" checkbox on Submit to Source Control Window (Contributed by SRombauts) Change 3386381 on 2017/04/10 by Michael.Trepka PR #3461: Mac doesn't return the correct exit code (Contributed by projectgheist) Change 3388223 on 2017/04/11 by matt.kuhlenschmidt Deleted collection: MattKTest Change 3388808 on 2017/04/11 by Lauren.Ridge Reset arrows now only display for non-default values in the Material Instance editor. Reset to default arrows now are placed in the correct location for SObjectPropertyEntryBox and SPropertyEditorAsset. SResetToDefaultPropertyEditor now takes a property handle in the constructor, instead of an FPropertyEditor. #jira UE-20882 Change 3388843 on 2017/04/11 by Lauren.Ridge Forward declaring custom reset override. Fix for incremental build error Change 3388950 on 2017/04/11 by Nick.Darnell PR #3450: UMG "Lock" Feature (Contributed by GBX-ABair). Epic Edit: Made some changes to make it work with named slots, added an option not to always recursively itterate the children, also removed the dependency on SWidget changes. Change 3388996 on 2017/04/11 by Matt.Kuhlenschmidt Removed crashtracker Change 3389004 on 2017/04/11 by Lauren.Ridge Fix for automated test error - additional safety check for if the reset button has been successfully created. Change 3389056 on 2017/04/11 by Matt.Kuhlenschmidt Removed editor live streaming Change 3389077 on 2017/04/11 by Jamie.Dale Removing QAGame config change Change 3389078 on 2017/04/11 by Nick.Darnell Fortnite - Fixing an input preprocessor warning. Change 3389136 on 2017/04/11 by Nick.Darnell Slate - Removing deprecated 'aspect ratio' locking box cells, never really worked, deprecated a long time ago. Change 3389147 on 2017/04/11 by Nick.Darnell UMG - Fixing a critical error with the alignment of the lock icon. #jira UE-43881 Change 3389401 on 2017/04/11 by Nick.Darnell UMG - Adds a designer option to control respecting the locked mode. Change 3389638 on 2017/04/11 by Nick.Darnell UMG - Adding the Widget Reflector button to the widget designer. Change 3389639 on 2017/04/11 by Nick.Darnell UMG - Tweaking the respect lock icon. Change 3390032 on 2017/04/12 by JeanMichel.Dignard Fixed project generation when using subfolders in Target.SolutionDirectory (ie: SolutionDirectory = "Programs\MyProgram") Change 3390033 on 2017/04/12 by Matt.Kuhlenschmidt PR #3472: Exposed Distributions to Game Projects and Plugins (Contributed by StormtideGames) Change 3390041 on 2017/04/12 by Matt.Kuhlenschmidt PR #3446: Add missing TryLock to PThreadCriticalSection and add RAII helper for try locking. (Contributed by Laurie-Hedge) Change 3390196 on 2017/04/12 by Lauren.Ridge Fix for crash on opening assets without reset to default button enable Change 3390414 on 2017/04/12 by Matt.Kuhlenschmidt PR #3300: UE-5528: Added check for empty startup tutorial path (Contributed by projectgheist) #jira UE-5528 Change 3390427 on 2017/04/12 by Jamie.Dale Fixed not being able to set pure whitespace values on FText properties #jira UE-42007 Change 3390712 on 2017/04/12 by Jamie.Dale Content Browser search now takes the display names of properties into account #jira UE-39564 Change 3390897 on 2017/04/12 by Nick.Darnell Slate - Changing the order that the tabs draw in so that the draw front to back, instead of back to front. Change 3390900 on 2017/04/12 by Nick.Darnell Making a Cast CastChecked in UScaleBox. Change 3390907 on 2017/04/12 by Nick.Darnell UMG - Adding GetMousePositionOnPlatform and GetMousePositionOnViewport as other replacements that people can use rather than GetMousePositionScaledByDPI. Change 3390934 on 2017/04/12 by Cody.Albert Fix to set correct draw layer in FSlateElementBatcher::AddElements Change 3390966 on 2017/04/12 by Nick.Darnell Input - Force inline some core input functions. Change 3391207 on 2017/04/12 by Jamie.Dale Fixed moving a folder containing a level not moving the level Also removed some redundant usage of ContentBrowserUtils::GetUnloadedAssets #jira UE-42091 Change 3391327 on 2017/04/12 by Mike.Fricker Removed Twitch support and GameLiveStreaming Change 3391405 on 2017/04/12 by Mike.Fricker Removed Twitch support and GameLiveStreaming (part 2) Change 3391407 on 2017/04/12 by Mike.Fricker Removed some remaining EditorLiveStreaming and CrashTracker code Change 3392296 on 2017/04/13 by Yannick.Lange VR Editor: New assets in asset containers for gizmo rotation. Change 3392332 on 2017/04/13 by Nick.Darnell Slate - Removing delegate hooks from the safezone and scalebox widget when the widgets are cleaned up. Change 3392349 on 2017/04/13 by Cody.Albert Corrected typo Change 3392688 on 2017/04/13 by Yannick.Lange VR Editor: Resaved asset containers Change 3392905 on 2017/04/13 by Jamie.Dale Fixed FPaths::ChangeExtension and FPaths::SetExtension stomping over the path part of a filename if the name part of the had no extension but the path contained a dot, eg) C:/First.Last/file Change 3393514 on 2017/04/13 by Yannick.Lange VR Editor: Temp direct interaction pointer. Change 3393930 on 2017/04/14 by Yannick.Lange VR Editor: Remove unused transform gizmo Change 3394084 on 2017/04/14 by Max.Chen Audio Capture: No longer beta Change 3394499 on 2017/04/14 by Cody.Albert Updated UMovieSceneSpawnTrack::PostLoad to call ConditionalPostLoad on bool track before converting it to a spawn track #rnx Change 3395703 on 2017/04/17 by Yannick.Lange Duplicate from Release-4.16 CL 3394172 Viewport Interaction: Fix disable animation when aiming for gizmo stretch handles. #jira UE-43964 Change 3395794 on 2017/04/17 by Mike.Fricker #rn Fixed FastXML not loading XML files with attributes delimited by single quote characters Change 3395945 on 2017/04/17 by Yannick.Lange VR Editor: Swap end and start of laser, because they start of laser was using end mesh. Change 3396253 on 2017/04/17 by Michael.Dupuis #jiraUE-43693: While moving foliage instance between levels, UI count was'nt updating properly Moved MoveSelectedFoliageToLevel to EdModeFoliage as we required more treatment than was done in LevelCollectionModel Ask to save foliage type as asset while moving between level foliage instances containing local foliage type Change 3396291 on 2017/04/17 by Michael.Dupuis #jira UE-35029: Added a cache for mesh bounds so if the bounds changed we can rebuild the occlusion tree Added possibility to register on bounds changed of a static mesh in editor mode Rebuild the occlusion tree if the mesh bounds changed Rebuild the occlusion tree if we change the mesh associated with a foliage type Optimize some operation to not Rebuild the occlusion tree for every instance added/remove instead it's done at the end of the operation Change 3396293 on 2017/04/17 by Michael.Dupuis #jira UE-40685: Improve Collision With World algo, to support painting pitch rotated instance or not on a flat terrain or slope respecting the specified ground angles Change 3397660 on 2017/04/18 by Matt.Kuhlenschmidt PR #3480: Git plugin: improve/cleanup init and settings (Contributed by SRombauts) Change 3397675 on 2017/04/18 by Alex.Delesky #jira UE-42383 - Adds a delegate to the placement mode module to allow users to register custom categories and listen to when they should be refreshed. Change 3397818 on 2017/04/18 by Yannick.Lange ViewportInteraction and VR Editor: - Replace GENERATED_UCLASS_BODY with GENERATED_BODY. - Remove destructors for uobjects. Change 3397832 on 2017/04/18 by Yannick.Lange VR Editor: Remove unused vreditorbuttoon Change 3397884 on 2017/04/18 by Yannick.Lange VREditor: Addition to 3397832, remove unused vreditorbuttoon. Change 3397985 on 2017/04/18 by Michael.Trepka Another attempt to solve the issue with dsymutil failing with an error saying the input file did not exist. We now check for the input file's existence in a loop 30 times (once a second) before trying to call dsymutil. Also, added a FixDylibDependencies as a prerequisite for dSYM generation. #jira UE-43900 Change 3398030 on 2017/04/18 by Jamie.Dale Fixed outline changes not automatically updating the text layout used by a text block #jira UE-42116 Change 3398039 on 2017/04/18 by Jamie.Dale Unified asset drag-and-drop FAssetDragDropOp now handles both assets and asset paths, and FAssetPathDragDropOp has been removed. This allows assets and folders to be drag-dropped at the same time in the Content Browser. #jira UE-39208 Change 3398074 on 2017/04/18 by Michael.Dupuis Fixed crash in cooking fortnite Change 3398351 on 2017/04/18 by Alex.Delesky Fixing PlacementMode module build error Change 3398513 on 2017/04/18 by Yannick.Lange VR Editor: - Remove unused previousvreditor member. - Removing extensions when exiting vr mode without having to find the extensions. Change 3398540 on 2017/04/18 by Alex.Delesky Removing a private PlacementMode header that was included in a public one. Change 3399434 on 2017/04/19 by Matt.Kuhlenschmidt Remove uncessary files from p4 Change 3400657 on 2017/04/19 by Jamie.Dale Fixed potential underflow when using negative digit ranges with FastDecimalFormat Change 3400722 on 2017/04/19 by Jamie.Dale Removed some check's that could trip with malformed data Change 3401811 on 2017/04/20 by Jamie.Dale Improved the display of asset tags in the Content Browser - Numeric tags are now displayed pretty printed. - Numeric tags can now be displayed as a memory value (the numeric value should be in bytes). - Dimensional tags are now split and each part pretty printed. - Date/Time tags are now stored as a timestamp (which has the side effect of sorting correctly) and displayed as a localized date/time. - The column view now shows the same display values as the tooltips do. - The tooltip now uses the tag meta-data display name (if set). - The tag meta-data display name can now be used as an alias in the Content Browser search. #jira UE-34090 Change 3401868 on 2017/04/20 by Cody.Albert Add screenshot save directory parameter to editor and project settings #rn Added options to the settings menu to specify screenshot save directory Change 3402107 on 2017/04/20 by Jamie.Dale Cleaned up the "View Options" menu in the Content Browser Re-organized some of the settings into better groups, and fixed some places where items would still be shown in the asset view when some of these content filter options were disabled (either via a setting, or via the UI). Change 3402283 on 2017/04/20 by Jamie.Dale Creating a folder in the Content Browser now creates the folder on disk, and cancelling a folder naming now removes the temporary folder #jira UE-8892 Change 3402572 on 2017/04/20 by Alex.Delesky #jira UE-42421 PR #3311: Improved log messages (Contributed by projectgheist) Change 3403226 on 2017/04/21 by Yannick.Lange VR Editor: - Removed previous quick menu floating UI panel. - Added the concept of a info display floating UI panel. - Used info display for showing sequencer timer. Change 3403277 on 2017/04/21 by Yannick.Lange VR Editor: - Set window mesh for info display panel. - Add option to null out widget when hidden. Change 3403289 on 2017/04/21 by Yannick.Lange VR Editor: Don't load VREditorAssetContainer asset when starting editor. Change 3403353 on 2017/04/21 by Yannick.Lange VR Editor: Fix variable 'RelativeOffset' is uninitialized when used within its own initialization. Change 3404183 on 2017/04/21 by Matt.Kuhlenschmidt Fix typo Change 3405378 on 2017/04/24 by Alex.Delesky #jira UE-42550 - Audio thumbnails should never rerender now, even with real-time thumbnails enabled Change 3405382 on 2017/04/24 by Alex.Delesky #jira UE-42097 - The Main Frame window will no longer steadily grow if it's closed while not maximized Change 3405384 on 2017/04/24 by Alex.Delesky #jira UE-43985 - Duplicating Force Feedback, Sound Wave, or Sound Cue assets from the context menu after right-clicking on the playback controls will now correctly select the newly created asset for rename. Change 3405386 on 2017/04/24 by Alex.Delesky #jire UE-42239 - Blueprints that have been duplicated from another blueprint will now render their thumbnails correctly instead of displaying a flat black thumbnail. Change 3405388 on 2017/04/24 by Alex.Delesky #jira UE-43241 - Blueprint classes that derive from notplaceable classes (such as SpectatorPawn and GameMode) can no longer be placed within the level editor via the right-click Add/Replace menus Change 3405394 on 2017/04/24 by Alex.Delesky #jira UE-42137 - Users can no longer access the widget object of a Widget Component from within actor construction scripts Change 3405429 on 2017/04/24 by Alex.Delesky Fixing a naming issue for CL 3405378 Change 3405579 on 2017/04/24 by Cody.Albert Fixed bad include from CL#1401868 #jira UE-44238 Change 3406716 on 2017/04/24 by Max.Chen Sequencer: Add attach/detach rules for attach section. #jira UE-40970 Change 3406718 on 2017/04/24 by Max.Chen Sequencer: Set component velocity for attached objects #jira UE-36337 Change 3406721 on 2017/04/24 by Max.Chen Sequencer: Re-evaluate on stop. This fixes a situation where if you set the playback position to the end of a sequence while it's playing, the sequence will stop playing but won't re-evaluate to the end of the sequence. #jira UE-43966 Change 3406726 on 2017/04/24 by Max.Chen Sequencer: Added StopAndGoToEnd() function to player #jira UE-43967 Change 3406727 on 2017/04/24 by Max.Chen Sequencer: Add cinematic options to level sequence player #jira UE-39388 Change 3407097 on 2017/04/25 by Yannick.Lange VR Editor: Temp asset for free rotation handle gizmo. Change 3407123 on 2017/04/25 by Michael.Dupuis #jira UE-44329: Only display the message in attended mode and editor (so user can actually perform the save) Change 3407135 on 2017/04/25 by Max.Chen Sequencer: Load level sequence asynchronously. #jira UE-43807 Change 3407137 on 2017/04/25 by Shaun.Kime Fixing comments to refer to correct function name. Change 3407138 on 2017/04/25 by Max.Chen Sequencer: Mark actor that the spawnable duplicates as a transient so that the level isn't dirtied. Then clear the transient flag on the object template. #jira UE-30007 Change 3407139 on 2017/04/25 by Max.Chen Sequencer: Fix active marker in sub, cinematic, control rig sections. #jira UE-44235 Change 3407229 on 2017/04/25 by Max.Chen Sequencer: Prioritize buttons over label. #jira UE-26813 Change 3407343 on 2017/04/25 by Matt.Kuhlenschmidt Added a world accessor to blutilties so they can operate on the editor world (spawn,destroy actors etc) Change 3407401 on 2017/04/25 by Nick.Darnell Slate - Adding a Round function to SlateRect. Also adding a way to convert a Transform2D to a full matrix. Change 3407842 on 2017/04/25 by Matt.Kuhlenschmidt Made AssetTools a uobject interface so it could be access from script. A few methods were deprecated and renamed to enforce a consistent UI. Now all asset tools methods that expose a dialog have "WithDialog" in their name to differentiate them from methods that do not open dialogs and could be used by scripts for automation. C++ users may still access IAssetTools but should not ever need to use the UAssetTools interface class Change 3407890 on 2017/04/25 by Matt.Kuhlenschmidt Removed temp method Change 3408084 on 2017/04/25 by Matt.Kuhlenschmidt Exposed source control helpers to script Change 3408163 on 2017/04/25 by Matt.Kuhlenschmidt Deprecated actor grouping methods on UUnrealEdEngine and moved their functionality into their own class( UActorGroupingUtils). There is a new editor config setting to set which grouping utils class is used and defaults to the base class. The new utility methods are exposed to script. Change 3408220 on 2017/04/25 by Alex.Delesky #jira UE-43387 - The Levels window will now support the organization of streaming levels using editor-only folders. Change 3408239 on 2017/04/25 by Matt.Kuhlenschmidt Added a file helpers API to script. This one is a wrapper around FEditorFileUtils for now to work around some issues exposing legacy methods to script but FEditorFileUtils will be deprecated soon Change 3408314 on 2017/04/25 by Jamie.Dale Fixed typo Change 3408911 on 2017/04/25 by Max.Chen Level Editor: Delegate for when viewport tab content changes. #jira UE-37805 Change 3408912 on 2017/04/25 by Max.Chen Sequencer: Transport controls are added when viewport content changes and only to viewports that support it (ie. cinematic viewport doesn't allow it since it has its own transport controls). This fixes issues where transport controls wouldn't be visible in newly created viewports and also would get disabled when switching from default to cinematic and back to default. #jira UE-37805 Change 3409073 on 2017/04/26 by Yannick.Lange VR Editor: Fix starting point of lasers. Change 3409330 on 2017/04/26 by Matt.Kuhlenschmidt Fix CIS Change 3409497 on 2017/04/26 by Alexis.Matte Fix crash importing animation with skeleton that do not match the fbx skeleton. #jira UE-43865 Change 3409530 on 2017/04/26 by Michael.Dupuis #jira UE-44329: Only display the log if we're not running a commandlet Change 3409559 on 2017/04/26 by Alex.Delesky #jira none - Fixing case of header include for CL 3408220 Change 3409577 on 2017/04/26 by Yannick.Lange VR Editor: being able to push/pull along the laser using touchpad or analog stick when transforming object towards laser impact. Change 3409614 on 2017/04/26 by Max.Chen Sequencer: Add Scrub() to movie scene player. Change 3409658 on 2017/04/26 by Jamie.Dale Made the handling of null item selection consistent in SComboBox If the selection was initially null and the combo was closed, it would previously pass through the null entry to its child SListView, which would then always think the selection was changing when the combo was opened and cause it to immediately close again. Change 3409659 on 2017/04/26 by Jamie.Dale Added preset Unicode block range selection to the font editor UI #jira UE-44312 Change 3409755 on 2017/04/26 by Max.Chen Sequencer: Back out bIsUISound for scrubbing. Change 3410015 on 2017/04/26 by Max.Chen Sequencer: Fix crash on asynchronous level sequence player load. #jira UE-43807 Change 3410094 on 2017/04/26 by Max.Chen Slate: Enter edit mode and return handled if not read only. Change 3410151 on 2017/04/26 by Michael.Trepka Fix for building EngineTest project on Mac Change 3410930 on 2017/04/27 by Matt.Kuhlenschmidt Expose editor visibility methods on Actor to blueprint/script Change 3411164 on 2017/04/27 by Matt.Kuhlenschmidt Fix crash when repeatedly spaming ctrl+s and ctrl+shift+s to save. PR #3511: UE-44098: Replace check with if-statement (Contributed by projectgheist) Change 3411187 on 2017/04/27 by Jamie.Dale No longer attempt to use the game culture override in the editor Change 3411443 on 2017/04/27 by Alex.Delesky #jira UE-43730, UE-43703 - Material Instances will now correctly use their preview meshes when being edited, or will use their parent's preview mesh if their preview mesh has not been set and the parent's is valid. Change 3411809 on 2017/04/27 by Max.Chen Sequencer: Prioritize buttons over label. #jira UE-26813 Change 3411810 on 2017/04/27 by Cody.Albert Scrollbox now properly calls Invalidate while scrolling Change 3411892 on 2017/04/27 by Alex.Delesky #jira UE-40031 PR #3065: Ignore .vs folder when initializing git projects (Contributed by mattiascibien) Change 3412002 on 2017/04/27 by Jamie.Dale Fixed crash when using an invalid regex pattern #jira UE-44340 Change 3412009 on 2017/04/27 by Cody.Albert Fixed Invalidation Panel to apply scale only to volatile elements, correcting an issue with Cache Relative Positions Change 3412631 on 2017/04/27 by Jamie.Dale Implemented support for hiding empty folders in the Content Browser "Empty" in this case is defined as folders that recursively don't contain assets or classes. Folders that have been created by the user or have at any point contained content during the current editing session are always shown. This also fixes some places where the content filters would miss certain folders (usually due to missing checks when processing AssetRegistry events), and allows asset and path views to be synced to folder selections (as well as asset selections), which improves the experience when renaming folders, and navigating the Content Browser history. #jira UE-40038 Change 3413023 on 2017/04/27 by Max.Chen Sequencer: Fix filtering so that it includes parent nodes only and doesn't recurse through to add their children. Change 3413309 on 2017/04/28 by Jamie.Dale Fixed shadow warning Change 3413327 on 2017/04/28 by Jamie.Dale Added code to sanitize some known strings before passing them to ICU Change 3413486 on 2017/04/28 by Matt.Kuhlenschmidt Allow AssetRenameData to be exposed to blueprints/script Change 3413630 on 2017/04/28 by Jamie.Dale Moved FUnicodeBlockRange into Slate so that it can be used for C++ defined fonts as well as those defined in the font editor Change 3414164 on 2017/04/28 by Jamie.Dale Removing some type-unsafe placement new array additions Change 3414497 on 2017/04/28 by Yannick.Lange ViewportInteraction: - Add arcball sphere asset. - Add opacity parameter to translucent gizmo material. Change 3415021 on 2017/04/28 by Max.Chen Sequencer: Remove spacer nodes at the top and bottom of the node tree. This fixes the artifact of having spaces at the top and bottom which get selected when you click on the space and when you press Home and End to go to the top or bottom of the tree. #jira UE-28931 Change 3415786 on 2017/05/01 by Matt.Kuhlenschmidt #rn PR #3518: Allow PaintedVertices to be sized down (Contributed by jasoncalvert) Change 3415836 on 2017/05/01 by Alex.Delesky #jira UE-39203 - You can now summon the reference viewer from the content browser using the keyboard shortcut. Change 3415837 on 2017/05/01 by Alex.Delesky #jira UE-34947 - When the user attempts to download an IDE from within the editor (due to needing one to add a C++ class), the window that hosts the widget will now close if it's a modal window. Change 3415839 on 2017/05/01 by Alex.Delesky #jira UE-42049 PR #3266: Profiler: added Thread filter (Contributed by StefanoProsperi) Change 3415842 on 2017/05/01 by Michael.Dupuis #jira UE-44514 : Removed the warning as it's causing more issue than it fixes. Change 3416511 on 2017/05/01 by Matt.Kuhlenschmidt Make UHT generate WITH_EDITOR guards around UFunctions generated in a WITH_EDITOR C++ block. This prevents these functions from being generated in non-editor builds Change 3416520 on 2017/05/01 by Yannick.Lange Viewport Interaction: - Toggle ViewportWorldInteraction with command for desktop testing without having to use VREditor. - Add helper function to add a unique extension by subclass. Change 3416956 on 2017/05/01 by Matt.Kuhlenschmidt Exposed EditorLevelUtils to script. This allows creation of streaming levels, setting the current level and moving actors between levels Change 3416964 on 2017/05/01 by Matt.Kuhlenschmidt Prevent foliage from marking actors dirty as HISM components are added and removed from the scene. Change 3416988 on 2017/05/01 by Lauren.Ridge PR #3122: UE-40262: Color tabs according to asset type (Contributed by projectgheist) Changed the highlight style to be around the icon and match the content browser color and style. #jira UE-40437 Change 3418014 on 2017/05/02 by Yannick.Lange Viewport Interaction: Remove material members from base transform gizmo and use asset container to get materials. Change 3418087 on 2017/05/02 by Lauren.Ridge Adding minor tab icon surrounds Change 3418602 on 2017/05/02 by Jamie.Dale Fixed a crash that could occur due to bad data in the asset registry It was possible for FAssetRegistry::PrioritizeSearchPath to re-order the BackgroundAssetResults in response to callback from FAssetRegistry::AssetSearchDataGathered, which caused integrity issues with the array, and would lead to results being missed, or an existing result being processed twice (which due to certain assumptions would result in it being deleted, and bad data being left in the asset registry). These results lists now use a custom type that prevents the mutation of items that have already been processed but not yet trimmed. Change 3418702 on 2017/05/02 by Matt.Kuhlenschmidt Fix USD files that reference other USD files not finding the referenced files by relative path. Requires USD third party changes only Change 3419071 on 2017/05/02 by Arciel.Rekman UBT: optimize FixDeps step on Linux. - Removes the need to re-link unrelated engine libraries when recompiling a code project. - Makes builds faster on machines with multiple cores. - The module that has circularly referenced dependencies is considered cross-referenced itself. - Tested compilation on Linux (native & cross) and Mac (native). Change 3419240 on 2017/05/02 by Cody.Albert Bound widgets in animation tracks can no longer be swapped with widgets from a different widget blueprint, which would lead to a crash Change 3420011 on 2017/05/02 by Max.Chen Sequencer: Fix scrubber hit testing so that the time scrubber is really favored over the playback ranges. #jira UE-44569 Change 3420507 on 2017/05/03 by Lauren.Ridge Selecting a camera or other preview actor in VR Mode now creates a floating in-world viewport. Also deselect all Actors when moving into and out of VR Mode Change 3420643 on 2017/05/03 by andrew.porter QAGame - Adding test content to QA-Sequencer for using spawnables with override bindings Change 3420678 on 2017/05/03 by andrew.porter QAGame: Updating override binding sequence Change 3420961 on 2017/05/03 by Jamie.Dale Exposed some missing Internationalization functions to BPs Change 3422767 on 2017/05/04 by Yannick.Lange ViewportInteraction: Extensibility for dragging on gizmo handles Removed ETransformGizmoInteractionType completely and replaced it with UViewportDragOperation. Using the ETransformGizmoInteractionType enum made external extensibility impossible. Now every gizmo handle group has a component called UViewportDragOperationComponent which holds a UViewportDragOperation of a certain type. This UViewportDragOperation can be inherited to create a custom method to calculate a new transform for the objects when dragging the gizmo handle. Change 3422789 on 2017/05/04 by Yannick.Lange ViewportInteraction: Fix duplicate console variable. Change 3422817 on 2017/05/04 by Andrew.Rodham Sequencer: Changed level sequence object references to always use a package and object path based lookup - Newly created binding references now consist of a package name and an inner object path for actors, and just an inner object path for components. The package name is fixed up dynamically for PIE, which means it can work correctly for multiplayer PIE, and when levels are streamed in during PIE (functionality previously unavailable to lazy object ptrs) - Added a way of rebinding all possessable objects in the current sequence (Rebind Possessable References) - Level sequence binding references no longer use native serialization now that TMap serialization is fully supported. - Multiple bindings are now supported in the API layer of level sequence references, although this is not yet exposed to the sequencer UI. #jira UE-44490 Change 3422826 on 2017/05/04 by Andrew.Rodham Removed erroneous braces Change 3422874 on 2017/05/04 by James.Golding Adding MaterialEditingLibrary to allow manipulation of materials within the editor. - Refactored code out of MaterialEditor where possible Marked some material types as BP-accessible, to allow to editor-Blueprint access. Remove unused 'bSkipPrim' property from Set/CheckMaterialUsage Change 3422942 on 2017/05/04 by Lauren.Ridge Tab padding adjustment to allow tabs with icons to be the same height as tabs without Change 3423090 on 2017/05/04 by Jamie.Dale Added a way to get the source package path for a localized package path Added tests for the localized package path checks. Change 3423133 on 2017/05/04 by Jamie.Dale Fixed a bug where a trailing quote without a newline at the end of a CSV file would be added to the parsed text rather than converted to a terminator Change 3423301 on 2017/05/04 by Max.Chen Sequencer: Add JumpToPosition which updates to a position in a scrubbing state. Change 3423344 on 2017/05/04 by Jamie.Dale Updated localized asset group caching so that it works in non-cooked builds Change 3423486 on 2017/05/04 by Lauren.Ridge Fixing deselection code in VWI Change 3423502 on 2017/05/04 by Jamie.Dale Adding automated localization tests Change 3424219 on 2017/05/04 by Yannick.Lange - Hide FWidget when ViewportWorldInteraction starts. - Added option to EditorViewportClient to not render FWidget without using FWidget::SetDefaultVisibility. Change 3425116 on 2017/05/05 by Matt.Kuhlenschmidt PR #3527: Modified comments (Contributed by projectgheist) Change 3425239 on 2017/05/05 by Matt.Kuhlenschmidt Fix shutdown crash in projects that unregister asset tools in UObjects being destroyed at shutdown. Change 3425241 on 2017/05/05 by Max.Chen Sequencer: Components aren't deselected from the sequencer tree view when they get deselected in the viewport/outliner. #jira UE-44559 Change 3425286 on 2017/05/05 by Jamie.Dale Text duplicated as part of a widget archetype now maintains its existing key #jira UE-44715 Change 3425477 on 2017/05/05 by Andrew.Rodham Sequencer: Do not deprecate legacy object references since they still need to be serialized on save - Also re-add identical via equality operator so that serialization works again Change 3425681 on 2017/05/05 by Jamie.Dale Fixed fallback font height/baseline measuring Change 3426137 on 2017/05/05 by Jamie.Dale Removing PPF_Localized It's an old UE3-ism that's no longer tested anywhere Change 3427434 on 2017/05/07 by Yannick.Lange ViewportInteraction: Null check for viewport. Change 3427905 on 2017/05/08 by Matt.Kuhlenschmidt Removed the concept of a global selection annotation. This poses a major problem when more than one selection set is clearing it. If more than one selection set is in a transaction the last one to be serialized will clear and rebuild the annotation thus causing out of sync issues with component and actor selection sets. This change introduces the concept of a per-selection set annotation to avoid being out of sync. Actor and ActorComponent now override IsSelected (editor only) to make use of these selections. #jira UE-44655 Change 3428738 on 2017/05/08 by Matt.Kuhlenschmidt Fix other usage of USelection not having a selection annotation #jira UE-44786 Change 3429562 on 2017/05/08 by Matt.Kuhlenschmidt Fix crash on platforms without a cursor #jira UE-44815 Change 3429862 on 2017/05/08 by tim.gautier QAGame: Enable Include CrashReporter in Project Settings Change 3430385 on 2017/05/09 by Lauren.Ridge Resetting user focus to game viewport after movie finishes playback #jira UE-44785 Change 3430695 on 2017/05/09 by Lauren.Ridge Fix for crash on leaving in the middle of a loading movie #jira UE-44834 Change 3431234 on 2017/05/09 by Matt.Kuhlenschmidt Fixed movie player setting all users to focus which breaks VR controllers [CL 3432852 by Matt Kuhlenschmidt in Main branch]
2017-05-10 11:49:32 -04:00
#include "ActorGroupingUtils.h"
#include "Subsystems/BrushEditingSubsystem.h"
#include "Elements/Framework/TypedElementList.h"
#include "Elements/Framework/TypedElementSelectionSet.h"
#include "Elements/Framework/EngineElementsLibrary.h"
#include "Elements/Interfaces/TypedElementWorldInterface.h"
#include "Elements/Interfaces/TypedElementObjectInterface.h"
#define LOCTEXT_NAMESPACE "EditorSelectUtils"
DEFINE_LOG_CATEGORY_STATIC(LogEditorSelectUtils, Log, All);
/*-----------------------------------------------------------------------------
Globals.
-----------------------------------------------------------------------------*/
// Click flags.
enum EViewportClick
{
CF_MOVE_ACTOR = 1, // Set if the actors have been moved since first click
CF_MOVE_TEXTURE = 2, // Set if textures have been adjusted since first click
CF_MOVE_ALL = (CF_MOVE_ACTOR | CF_MOVE_TEXTURE),
};
/*-----------------------------------------------------------------------------
Change transacting.
-----------------------------------------------------------------------------*/
void UUnrealEdEngine::NoteActorMovement()
{
if( !GUndo && !(GEditor->ClickFlags & CF_MOVE_ACTOR) )
{
GEditor->ClickFlags |= CF_MOVE_ACTOR;
const FScopedTransaction Transaction( NSLOCTEXT("UnrealEd", "ActorMovement", "Actor Movement") );
GLevelEditorModeTools().Snapping=0;
AActor* SelectedActor = NULL;
for ( FSelectionIterator It( GetSelectedActorIterator() ) ; It ; ++It )
{
AActor* Actor = static_cast<AActor*>( *It );
checkSlow( Actor->IsA(AActor::StaticClass()) );
SelectedActor = Actor;
break;
}
if( SelectedActor == NULL )
{
USelection* SelectedActors = GetSelectedActors();
SelectedActors->Modify();
SelectActor( GWorld->GetDefaultBrush(), true, true );
}
// Look for an actor that requires snapping.
for ( FSelectionIterator It( GetSelectedActorIterator() ) ; It ; ++It )
{
AActor* Actor = static_cast<AActor*>( *It );
checkSlow( Actor->IsA(AActor::StaticClass()) );
GLevelEditorModeTools().Snapping = 1;
break;
}
TSet<AGroupActor*> GroupActors;
// Modify selected actors.
for ( FSelectionIterator It( GetSelectedActorIterator() ) ; It ; ++It )
{
AActor* Actor = static_cast<AActor*>( *It );
checkSlow( Actor->IsA(AActor::StaticClass()) );
Actor->Modify();
Copying //UE4/Dev-Editor to //UE4/Dev-Main (Source: //UE4/Dev-Editor @ 3431234) #lockdown Nick.Penwarden ========================== MAJOR FEATURES + CHANGES ========================== Change 3323393 on 2017/02/27 by Ben.Cosh This fixes an issue with actor details component selection causing actor selection to get out of sync across undo operations #Jira UE-40753 - [CrashReport] UE4Editor_LevelEditor!FLevelEditorActionCallbacks::Paste_CanExecute() [leveleditoractions.cpp:1602] #Proj Engine Change 3379355 on 2017/04/04 by Lauren.Ridge Adding sort priorities to Material Parameters and Parameter Groups. If sort priorities are equal, fallback to alphabetical sort. Default sort priority is 0, can be set on the parameter in the base material. Parameters are still sorted within groups.Group sort priority is set on the main material preferences. Change 3379389 on 2017/04/04 by Nick.Darnell Core - Removing several old macros that were referring to EMIT_DEPRECATED_WARNING_MESSAGE, which is no longer defined in the engine, so these macros are double deprecated. Change 3379551 on 2017/04/04 by Nick.Darnell Automation - Adding more logging to the automation controller when generating reports. Change 3379554 on 2017/04/04 by Nick.Darnell UMG - Making the WidgetComponent make more things caneditconst in the editor depending on what the settings are to make it more obvious what works in certain contexts. Change 3379565 on 2017/04/04 by Nick.Darnell UMG - Deprecating OPTIONA_BINDING, moving to PROPERTY_BINDING in place and you'll need to define a PROPERTY_BINDING_IMPLEMENTATION. Will make bindings safer to call from blueprints. Change 3379576 on 2017/04/04 by Lauren.Ridge Parameter group dropdown now sorts alphabetically Change 3379592 on 2017/04/04 by JeanMichel.Dignard Fbx Morph Targets import optimisation - Only reimport the points for each morphs and compute the tangents for the wedges affected by those points. - Removed the full skeletal mesh rebuild on each morph target import. - Allow MeshUtilities::ComputeTangents_MikkTSpace to only recompute the tangents that are zero. Gains around 7.30 mins for 785 morph targets in mikkt space and 1.30 mins using built-in normals, with provided test file. #jira UE-34125 Change 3380260 on 2017/04/04 by Nick.Darnell UMG - Fixing some OPTIONAL_BINDINGS that needed to be converted. Change 3380551 on 2017/04/05 by Andrew.Rodham Sequencer: Fixed ImplIndex sometimes not relating to the source data index when compiling at the track level #jira UE-43446 Change 3380555 on 2017/04/05 by Andrew.Rodham Sequencer: Automated unit tests for the segment and track compilers Change 3380647 on 2017/04/05 by Nick.Darnell UMG - Tweaking some stuff on the experimental rich textblock. Change 3380719 on 2017/04/05 by Yannick.Lange Fix 'Compile FortniteClient Mac' and 'Compile Ocean iOS' Failed with Material.cpp errors. Wrapping WITH_EDITOR around ParameterGroupData. #jira UE-43667 Change 3380765 on 2017/04/05 by Nick.Darnell UMG - Fixing a few more instances of OPTIONAL_BINDING. Change 3380786 on 2017/04/05 by Yannick.Lange Wrap SortPriority in GetParameterSortPriority with WITH_EDITOR. Change 3380872 on 2017/04/05 by Matt.Kuhlenschmidt PR #3453: UE-43004: YesNo MessageDialog instead of YesNoCancel (Contributed by projectgheist) Change 3381635 on 2017/04/05 by Matt.Kuhlenschmidt Expose static mesh material accessors to blueprints #jira UE-43631 Change 3381643 on 2017/04/05 by Matt.Kuhlenschmidt Added a way to enable or disable the component transform units display independently from unit display anywhere else. This is off by default Change 3381705 on 2017/04/05 by Yannick.Lange - Slate application multiple input pre-processors. - Remove ViewportWorldInteractionManager, let ViewportWorldInteraction handle it's own input pre-processor. Change 3381959 on 2017/04/05 by Yannick.Lange Back out changelist 3381705. Old changelist. Change 3382049 on 2017/04/05 by Yannick.Lange - Slate application multiple input pre-processors in a wrapper class. - Remove ViewportWorldInteractionManager, let ViewportWorldInteraction handle it's own input pre-processor. - Deprecated SetInputPreProcessor, but made it work with RegisterInputPreProcessor and UnregisterInputPreProcessor. Change 3382450 on 2017/04/06 by Andrew.Rodham Sequencer: Fixed 'ambiguous' overloaded constructor for UT linux server builds Change 3382468 on 2017/04/06 by Yannick.Lange Rename AllowWorldMovement parameter to bAllow. Change 3382474 on 2017/04/06 by Yannick.Lange Make GetInteractors constant because we dont want it to be possible to change this arrray. Change 3382492 on 2017/04/06 by Yannick.Lange VR Editor: Floating UI's are stored in a map with FNames as key. Change 3382502 on 2017/04/06 by Yannick.Lange VR Editor: Use asset container for auto scaler sound. Change 3382589 on 2017/04/06 by Nick.Darnell Slate - Upgrading usages of SetInputPreprocessor. Also adjusting the API for the new preprocessor functions to have an option to remove all, which was what several usages expected. Also updated the deprecated version of SetInputPreprocessor to removeall if null is provided for the remove, mimicing the old functionality. Change 3382594 on 2017/04/06 by Nick.Darnell UMG - Deprecating GetMousePositionScaledByDPI, this function has too many issues, and I don't want to break buggy backwards compatability, so just going to deprecate it instead. For replacement, you can now access an FGeometry representing the viewport (after DPI scale has been added to the transform stack), and also the FGeometry for a Player's Screen widget host, which might be constrained for splitscreen, or camera aspect. Change 3382672 on 2017/04/06 by Nick.Darnell Build - Fixing incremental build. Change 3382674 on 2017/04/06 by Nick.Darnell Removing a hack added by launcher. Change 3382697 on 2017/04/06 by Matt.Kuhlenschmidt Fixed plugin browser auto-resizing when scrolling. Gave it a proper splitter Change 3382875 on 2017/04/06 by Michael.Trepka Modified FMacApplication::OnCursorLock() to avoid a thread safety problem with using TSharedPtr/Ref<FMacWindow> of the same window on main and game threads simultaneously. #jira FORT-34952 Change 3383303 on 2017/04/06 by Lauren.Ridge Adding sort priority to texture parameter code Change 3383561 on 2017/04/06 by Jamie.Dale Fixed MaximumIntegralDigits incorrectly including group separators in its count Change 3383570 on 2017/04/06 by Jamie.Dale Added regression tests for formatting a number with MaximumIntegralDigits and group separators enabled Change 3384507 on 2017/04/07 by Lauren.Ridge Mesh painting no longer paints on invisible components. Toggling visiblity refreshes the selected set. #jira UE-21172 Change 3384804 on 2017/04/07 by Joe.Graf Fixed a clang error on Linux due to missing virtual destructor when deleting through the interface pointer #CodeReview: marc.audy #rb: n/a Change 3385011 on 2017/04/07 by Matt.Kuhlenschmidt Fix dirtying levels just by copying actors if the level contains a foliage actor. The foliage system makes lazy asset pointers #jira UE-43750 Change 3385127 on 2017/04/07 by Lauren.Ridge Adding WITHEDITOR to OnDragDropCheckOverride Change 3385241 on 2017/04/07 by Jamie.Dale Removing warning if asking for a null or empty localization provider Change 3385442 on 2017/04/07 by Arciel.Rekman Fix a number of problems with Linux splash. - Thread safety (UE-40354). - Inconsistent font (UE-35000). - Change by Cengiz Terzibas. Change 3385708 on 2017/04/08 by Lauren.Ridge Resaving VREditor asset container with engine version Change 3385711 on 2017/04/08 by Arciel.Rekman Speculative fix for a non-unity Linux build. Change 3386120 on 2017/04/10 by Matt.Kuhlenschmidt Fix stats not being enabled when in simulate Change 3386289 on 2017/04/10 by Matt.Kuhlenschmidt PR #3466: Git plugin: add option to autoconfigure Git LFS (Contributed by SRombauts) Change 3386301 on 2017/04/10 by Matt.Kuhlenschmidt PR #3470: Git Plugin: disable "Keep Files Checked Out" checkbox on Submit to Source Control Window (Contributed by SRombauts) Change 3386381 on 2017/04/10 by Michael.Trepka PR #3461: Mac doesn't return the correct exit code (Contributed by projectgheist) Change 3388223 on 2017/04/11 by matt.kuhlenschmidt Deleted collection: MattKTest Change 3388808 on 2017/04/11 by Lauren.Ridge Reset arrows now only display for non-default values in the Material Instance editor. Reset to default arrows now are placed in the correct location for SObjectPropertyEntryBox and SPropertyEditorAsset. SResetToDefaultPropertyEditor now takes a property handle in the constructor, instead of an FPropertyEditor. #jira UE-20882 Change 3388843 on 2017/04/11 by Lauren.Ridge Forward declaring custom reset override. Fix for incremental build error Change 3388950 on 2017/04/11 by Nick.Darnell PR #3450: UMG "Lock" Feature (Contributed by GBX-ABair). Epic Edit: Made some changes to make it work with named slots, added an option not to always recursively itterate the children, also removed the dependency on SWidget changes. Change 3388996 on 2017/04/11 by Matt.Kuhlenschmidt Removed crashtracker Change 3389004 on 2017/04/11 by Lauren.Ridge Fix for automated test error - additional safety check for if the reset button has been successfully created. Change 3389056 on 2017/04/11 by Matt.Kuhlenschmidt Removed editor live streaming Change 3389077 on 2017/04/11 by Jamie.Dale Removing QAGame config change Change 3389078 on 2017/04/11 by Nick.Darnell Fortnite - Fixing an input preprocessor warning. Change 3389136 on 2017/04/11 by Nick.Darnell Slate - Removing deprecated 'aspect ratio' locking box cells, never really worked, deprecated a long time ago. Change 3389147 on 2017/04/11 by Nick.Darnell UMG - Fixing a critical error with the alignment of the lock icon. #jira UE-43881 Change 3389401 on 2017/04/11 by Nick.Darnell UMG - Adds a designer option to control respecting the locked mode. Change 3389638 on 2017/04/11 by Nick.Darnell UMG - Adding the Widget Reflector button to the widget designer. Change 3389639 on 2017/04/11 by Nick.Darnell UMG - Tweaking the respect lock icon. Change 3390032 on 2017/04/12 by JeanMichel.Dignard Fixed project generation when using subfolders in Target.SolutionDirectory (ie: SolutionDirectory = "Programs\MyProgram") Change 3390033 on 2017/04/12 by Matt.Kuhlenschmidt PR #3472: Exposed Distributions to Game Projects and Plugins (Contributed by StormtideGames) Change 3390041 on 2017/04/12 by Matt.Kuhlenschmidt PR #3446: Add missing TryLock to PThreadCriticalSection and add RAII helper for try locking. (Contributed by Laurie-Hedge) Change 3390196 on 2017/04/12 by Lauren.Ridge Fix for crash on opening assets without reset to default button enable Change 3390414 on 2017/04/12 by Matt.Kuhlenschmidt PR #3300: UE-5528: Added check for empty startup tutorial path (Contributed by projectgheist) #jira UE-5528 Change 3390427 on 2017/04/12 by Jamie.Dale Fixed not being able to set pure whitespace values on FText properties #jira UE-42007 Change 3390712 on 2017/04/12 by Jamie.Dale Content Browser search now takes the display names of properties into account #jira UE-39564 Change 3390897 on 2017/04/12 by Nick.Darnell Slate - Changing the order that the tabs draw in so that the draw front to back, instead of back to front. Change 3390900 on 2017/04/12 by Nick.Darnell Making a Cast CastChecked in UScaleBox. Change 3390907 on 2017/04/12 by Nick.Darnell UMG - Adding GetMousePositionOnPlatform and GetMousePositionOnViewport as other replacements that people can use rather than GetMousePositionScaledByDPI. Change 3390934 on 2017/04/12 by Cody.Albert Fix to set correct draw layer in FSlateElementBatcher::AddElements Change 3390966 on 2017/04/12 by Nick.Darnell Input - Force inline some core input functions. Change 3391207 on 2017/04/12 by Jamie.Dale Fixed moving a folder containing a level not moving the level Also removed some redundant usage of ContentBrowserUtils::GetUnloadedAssets #jira UE-42091 Change 3391327 on 2017/04/12 by Mike.Fricker Removed Twitch support and GameLiveStreaming Change 3391405 on 2017/04/12 by Mike.Fricker Removed Twitch support and GameLiveStreaming (part 2) Change 3391407 on 2017/04/12 by Mike.Fricker Removed some remaining EditorLiveStreaming and CrashTracker code Change 3392296 on 2017/04/13 by Yannick.Lange VR Editor: New assets in asset containers for gizmo rotation. Change 3392332 on 2017/04/13 by Nick.Darnell Slate - Removing delegate hooks from the safezone and scalebox widget when the widgets are cleaned up. Change 3392349 on 2017/04/13 by Cody.Albert Corrected typo Change 3392688 on 2017/04/13 by Yannick.Lange VR Editor: Resaved asset containers Change 3392905 on 2017/04/13 by Jamie.Dale Fixed FPaths::ChangeExtension and FPaths::SetExtension stomping over the path part of a filename if the name part of the had no extension but the path contained a dot, eg) C:/First.Last/file Change 3393514 on 2017/04/13 by Yannick.Lange VR Editor: Temp direct interaction pointer. Change 3393930 on 2017/04/14 by Yannick.Lange VR Editor: Remove unused transform gizmo Change 3394084 on 2017/04/14 by Max.Chen Audio Capture: No longer beta Change 3394499 on 2017/04/14 by Cody.Albert Updated UMovieSceneSpawnTrack::PostLoad to call ConditionalPostLoad on bool track before converting it to a spawn track #rnx Change 3395703 on 2017/04/17 by Yannick.Lange Duplicate from Release-4.16 CL 3394172 Viewport Interaction: Fix disable animation when aiming for gizmo stretch handles. #jira UE-43964 Change 3395794 on 2017/04/17 by Mike.Fricker #rn Fixed FastXML not loading XML files with attributes delimited by single quote characters Change 3395945 on 2017/04/17 by Yannick.Lange VR Editor: Swap end and start of laser, because they start of laser was using end mesh. Change 3396253 on 2017/04/17 by Michael.Dupuis #jiraUE-43693: While moving foliage instance between levels, UI count was'nt updating properly Moved MoveSelectedFoliageToLevel to EdModeFoliage as we required more treatment than was done in LevelCollectionModel Ask to save foliage type as asset while moving between level foliage instances containing local foliage type Change 3396291 on 2017/04/17 by Michael.Dupuis #jira UE-35029: Added a cache for mesh bounds so if the bounds changed we can rebuild the occlusion tree Added possibility to register on bounds changed of a static mesh in editor mode Rebuild the occlusion tree if the mesh bounds changed Rebuild the occlusion tree if we change the mesh associated with a foliage type Optimize some operation to not Rebuild the occlusion tree for every instance added/remove instead it's done at the end of the operation Change 3396293 on 2017/04/17 by Michael.Dupuis #jira UE-40685: Improve Collision With World algo, to support painting pitch rotated instance or not on a flat terrain or slope respecting the specified ground angles Change 3397660 on 2017/04/18 by Matt.Kuhlenschmidt PR #3480: Git plugin: improve/cleanup init and settings (Contributed by SRombauts) Change 3397675 on 2017/04/18 by Alex.Delesky #jira UE-42383 - Adds a delegate to the placement mode module to allow users to register custom categories and listen to when they should be refreshed. Change 3397818 on 2017/04/18 by Yannick.Lange ViewportInteraction and VR Editor: - Replace GENERATED_UCLASS_BODY with GENERATED_BODY. - Remove destructors for uobjects. Change 3397832 on 2017/04/18 by Yannick.Lange VR Editor: Remove unused vreditorbuttoon Change 3397884 on 2017/04/18 by Yannick.Lange VREditor: Addition to 3397832, remove unused vreditorbuttoon. Change 3397985 on 2017/04/18 by Michael.Trepka Another attempt to solve the issue with dsymutil failing with an error saying the input file did not exist. We now check for the input file's existence in a loop 30 times (once a second) before trying to call dsymutil. Also, added a FixDylibDependencies as a prerequisite for dSYM generation. #jira UE-43900 Change 3398030 on 2017/04/18 by Jamie.Dale Fixed outline changes not automatically updating the text layout used by a text block #jira UE-42116 Change 3398039 on 2017/04/18 by Jamie.Dale Unified asset drag-and-drop FAssetDragDropOp now handles both assets and asset paths, and FAssetPathDragDropOp has been removed. This allows assets and folders to be drag-dropped at the same time in the Content Browser. #jira UE-39208 Change 3398074 on 2017/04/18 by Michael.Dupuis Fixed crash in cooking fortnite Change 3398351 on 2017/04/18 by Alex.Delesky Fixing PlacementMode module build error Change 3398513 on 2017/04/18 by Yannick.Lange VR Editor: - Remove unused previousvreditor member. - Removing extensions when exiting vr mode without having to find the extensions. Change 3398540 on 2017/04/18 by Alex.Delesky Removing a private PlacementMode header that was included in a public one. Change 3399434 on 2017/04/19 by Matt.Kuhlenschmidt Remove uncessary files from p4 Change 3400657 on 2017/04/19 by Jamie.Dale Fixed potential underflow when using negative digit ranges with FastDecimalFormat Change 3400722 on 2017/04/19 by Jamie.Dale Removed some check's that could trip with malformed data Change 3401811 on 2017/04/20 by Jamie.Dale Improved the display of asset tags in the Content Browser - Numeric tags are now displayed pretty printed. - Numeric tags can now be displayed as a memory value (the numeric value should be in bytes). - Dimensional tags are now split and each part pretty printed. - Date/Time tags are now stored as a timestamp (which has the side effect of sorting correctly) and displayed as a localized date/time. - The column view now shows the same display values as the tooltips do. - The tooltip now uses the tag meta-data display name (if set). - The tag meta-data display name can now be used as an alias in the Content Browser search. #jira UE-34090 Change 3401868 on 2017/04/20 by Cody.Albert Add screenshot save directory parameter to editor and project settings #rn Added options to the settings menu to specify screenshot save directory Change 3402107 on 2017/04/20 by Jamie.Dale Cleaned up the "View Options" menu in the Content Browser Re-organized some of the settings into better groups, and fixed some places where items would still be shown in the asset view when some of these content filter options were disabled (either via a setting, or via the UI). Change 3402283 on 2017/04/20 by Jamie.Dale Creating a folder in the Content Browser now creates the folder on disk, and cancelling a folder naming now removes the temporary folder #jira UE-8892 Change 3402572 on 2017/04/20 by Alex.Delesky #jira UE-42421 PR #3311: Improved log messages (Contributed by projectgheist) Change 3403226 on 2017/04/21 by Yannick.Lange VR Editor: - Removed previous quick menu floating UI panel. - Added the concept of a info display floating UI panel. - Used info display for showing sequencer timer. Change 3403277 on 2017/04/21 by Yannick.Lange VR Editor: - Set window mesh for info display panel. - Add option to null out widget when hidden. Change 3403289 on 2017/04/21 by Yannick.Lange VR Editor: Don't load VREditorAssetContainer asset when starting editor. Change 3403353 on 2017/04/21 by Yannick.Lange VR Editor: Fix variable 'RelativeOffset' is uninitialized when used within its own initialization. Change 3404183 on 2017/04/21 by Matt.Kuhlenschmidt Fix typo Change 3405378 on 2017/04/24 by Alex.Delesky #jira UE-42550 - Audio thumbnails should never rerender now, even with real-time thumbnails enabled Change 3405382 on 2017/04/24 by Alex.Delesky #jira UE-42097 - The Main Frame window will no longer steadily grow if it's closed while not maximized Change 3405384 on 2017/04/24 by Alex.Delesky #jira UE-43985 - Duplicating Force Feedback, Sound Wave, or Sound Cue assets from the context menu after right-clicking on the playback controls will now correctly select the newly created asset for rename. Change 3405386 on 2017/04/24 by Alex.Delesky #jire UE-42239 - Blueprints that have been duplicated from another blueprint will now render their thumbnails correctly instead of displaying a flat black thumbnail. Change 3405388 on 2017/04/24 by Alex.Delesky #jira UE-43241 - Blueprint classes that derive from notplaceable classes (such as SpectatorPawn and GameMode) can no longer be placed within the level editor via the right-click Add/Replace menus Change 3405394 on 2017/04/24 by Alex.Delesky #jira UE-42137 - Users can no longer access the widget object of a Widget Component from within actor construction scripts Change 3405429 on 2017/04/24 by Alex.Delesky Fixing a naming issue for CL 3405378 Change 3405579 on 2017/04/24 by Cody.Albert Fixed bad include from CL#1401868 #jira UE-44238 Change 3406716 on 2017/04/24 by Max.Chen Sequencer: Add attach/detach rules for attach section. #jira UE-40970 Change 3406718 on 2017/04/24 by Max.Chen Sequencer: Set component velocity for attached objects #jira UE-36337 Change 3406721 on 2017/04/24 by Max.Chen Sequencer: Re-evaluate on stop. This fixes a situation where if you set the playback position to the end of a sequence while it's playing, the sequence will stop playing but won't re-evaluate to the end of the sequence. #jira UE-43966 Change 3406726 on 2017/04/24 by Max.Chen Sequencer: Added StopAndGoToEnd() function to player #jira UE-43967 Change 3406727 on 2017/04/24 by Max.Chen Sequencer: Add cinematic options to level sequence player #jira UE-39388 Change 3407097 on 2017/04/25 by Yannick.Lange VR Editor: Temp asset for free rotation handle gizmo. Change 3407123 on 2017/04/25 by Michael.Dupuis #jira UE-44329: Only display the message in attended mode and editor (so user can actually perform the save) Change 3407135 on 2017/04/25 by Max.Chen Sequencer: Load level sequence asynchronously. #jira UE-43807 Change 3407137 on 2017/04/25 by Shaun.Kime Fixing comments to refer to correct function name. Change 3407138 on 2017/04/25 by Max.Chen Sequencer: Mark actor that the spawnable duplicates as a transient so that the level isn't dirtied. Then clear the transient flag on the object template. #jira UE-30007 Change 3407139 on 2017/04/25 by Max.Chen Sequencer: Fix active marker in sub, cinematic, control rig sections. #jira UE-44235 Change 3407229 on 2017/04/25 by Max.Chen Sequencer: Prioritize buttons over label. #jira UE-26813 Change 3407343 on 2017/04/25 by Matt.Kuhlenschmidt Added a world accessor to blutilties so they can operate on the editor world (spawn,destroy actors etc) Change 3407401 on 2017/04/25 by Nick.Darnell Slate - Adding a Round function to SlateRect. Also adding a way to convert a Transform2D to a full matrix. Change 3407842 on 2017/04/25 by Matt.Kuhlenschmidt Made AssetTools a uobject interface so it could be access from script. A few methods were deprecated and renamed to enforce a consistent UI. Now all asset tools methods that expose a dialog have "WithDialog" in their name to differentiate them from methods that do not open dialogs and could be used by scripts for automation. C++ users may still access IAssetTools but should not ever need to use the UAssetTools interface class Change 3407890 on 2017/04/25 by Matt.Kuhlenschmidt Removed temp method Change 3408084 on 2017/04/25 by Matt.Kuhlenschmidt Exposed source control helpers to script Change 3408163 on 2017/04/25 by Matt.Kuhlenschmidt Deprecated actor grouping methods on UUnrealEdEngine and moved their functionality into their own class( UActorGroupingUtils). There is a new editor config setting to set which grouping utils class is used and defaults to the base class. The new utility methods are exposed to script. Change 3408220 on 2017/04/25 by Alex.Delesky #jira UE-43387 - The Levels window will now support the organization of streaming levels using editor-only folders. Change 3408239 on 2017/04/25 by Matt.Kuhlenschmidt Added a file helpers API to script. This one is a wrapper around FEditorFileUtils for now to work around some issues exposing legacy methods to script but FEditorFileUtils will be deprecated soon Change 3408314 on 2017/04/25 by Jamie.Dale Fixed typo Change 3408911 on 2017/04/25 by Max.Chen Level Editor: Delegate for when viewport tab content changes. #jira UE-37805 Change 3408912 on 2017/04/25 by Max.Chen Sequencer: Transport controls are added when viewport content changes and only to viewports that support it (ie. cinematic viewport doesn't allow it since it has its own transport controls). This fixes issues where transport controls wouldn't be visible in newly created viewports and also would get disabled when switching from default to cinematic and back to default. #jira UE-37805 Change 3409073 on 2017/04/26 by Yannick.Lange VR Editor: Fix starting point of lasers. Change 3409330 on 2017/04/26 by Matt.Kuhlenschmidt Fix CIS Change 3409497 on 2017/04/26 by Alexis.Matte Fix crash importing animation with skeleton that do not match the fbx skeleton. #jira UE-43865 Change 3409530 on 2017/04/26 by Michael.Dupuis #jira UE-44329: Only display the log if we're not running a commandlet Change 3409559 on 2017/04/26 by Alex.Delesky #jira none - Fixing case of header include for CL 3408220 Change 3409577 on 2017/04/26 by Yannick.Lange VR Editor: being able to push/pull along the laser using touchpad or analog stick when transforming object towards laser impact. Change 3409614 on 2017/04/26 by Max.Chen Sequencer: Add Scrub() to movie scene player. Change 3409658 on 2017/04/26 by Jamie.Dale Made the handling of null item selection consistent in SComboBox If the selection was initially null and the combo was closed, it would previously pass through the null entry to its child SListView, which would then always think the selection was changing when the combo was opened and cause it to immediately close again. Change 3409659 on 2017/04/26 by Jamie.Dale Added preset Unicode block range selection to the font editor UI #jira UE-44312 Change 3409755 on 2017/04/26 by Max.Chen Sequencer: Back out bIsUISound for scrubbing. Change 3410015 on 2017/04/26 by Max.Chen Sequencer: Fix crash on asynchronous level sequence player load. #jira UE-43807 Change 3410094 on 2017/04/26 by Max.Chen Slate: Enter edit mode and return handled if not read only. Change 3410151 on 2017/04/26 by Michael.Trepka Fix for building EngineTest project on Mac Change 3410930 on 2017/04/27 by Matt.Kuhlenschmidt Expose editor visibility methods on Actor to blueprint/script Change 3411164 on 2017/04/27 by Matt.Kuhlenschmidt Fix crash when repeatedly spaming ctrl+s and ctrl+shift+s to save. PR #3511: UE-44098: Replace check with if-statement (Contributed by projectgheist) Change 3411187 on 2017/04/27 by Jamie.Dale No longer attempt to use the game culture override in the editor Change 3411443 on 2017/04/27 by Alex.Delesky #jira UE-43730, UE-43703 - Material Instances will now correctly use their preview meshes when being edited, or will use their parent's preview mesh if their preview mesh has not been set and the parent's is valid. Change 3411809 on 2017/04/27 by Max.Chen Sequencer: Prioritize buttons over label. #jira UE-26813 Change 3411810 on 2017/04/27 by Cody.Albert Scrollbox now properly calls Invalidate while scrolling Change 3411892 on 2017/04/27 by Alex.Delesky #jira UE-40031 PR #3065: Ignore .vs folder when initializing git projects (Contributed by mattiascibien) Change 3412002 on 2017/04/27 by Jamie.Dale Fixed crash when using an invalid regex pattern #jira UE-44340 Change 3412009 on 2017/04/27 by Cody.Albert Fixed Invalidation Panel to apply scale only to volatile elements, correcting an issue with Cache Relative Positions Change 3412631 on 2017/04/27 by Jamie.Dale Implemented support for hiding empty folders in the Content Browser "Empty" in this case is defined as folders that recursively don't contain assets or classes. Folders that have been created by the user or have at any point contained content during the current editing session are always shown. This also fixes some places where the content filters would miss certain folders (usually due to missing checks when processing AssetRegistry events), and allows asset and path views to be synced to folder selections (as well as asset selections), which improves the experience when renaming folders, and navigating the Content Browser history. #jira UE-40038 Change 3413023 on 2017/04/27 by Max.Chen Sequencer: Fix filtering so that it includes parent nodes only and doesn't recurse through to add their children. Change 3413309 on 2017/04/28 by Jamie.Dale Fixed shadow warning Change 3413327 on 2017/04/28 by Jamie.Dale Added code to sanitize some known strings before passing them to ICU Change 3413486 on 2017/04/28 by Matt.Kuhlenschmidt Allow AssetRenameData to be exposed to blueprints/script Change 3413630 on 2017/04/28 by Jamie.Dale Moved FUnicodeBlockRange into Slate so that it can be used for C++ defined fonts as well as those defined in the font editor Change 3414164 on 2017/04/28 by Jamie.Dale Removing some type-unsafe placement new array additions Change 3414497 on 2017/04/28 by Yannick.Lange ViewportInteraction: - Add arcball sphere asset. - Add opacity parameter to translucent gizmo material. Change 3415021 on 2017/04/28 by Max.Chen Sequencer: Remove spacer nodes at the top and bottom of the node tree. This fixes the artifact of having spaces at the top and bottom which get selected when you click on the space and when you press Home and End to go to the top or bottom of the tree. #jira UE-28931 Change 3415786 on 2017/05/01 by Matt.Kuhlenschmidt #rn PR #3518: Allow PaintedVertices to be sized down (Contributed by jasoncalvert) Change 3415836 on 2017/05/01 by Alex.Delesky #jira UE-39203 - You can now summon the reference viewer from the content browser using the keyboard shortcut. Change 3415837 on 2017/05/01 by Alex.Delesky #jira UE-34947 - When the user attempts to download an IDE from within the editor (due to needing one to add a C++ class), the window that hosts the widget will now close if it's a modal window. Change 3415839 on 2017/05/01 by Alex.Delesky #jira UE-42049 PR #3266: Profiler: added Thread filter (Contributed by StefanoProsperi) Change 3415842 on 2017/05/01 by Michael.Dupuis #jira UE-44514 : Removed the warning as it's causing more issue than it fixes. Change 3416511 on 2017/05/01 by Matt.Kuhlenschmidt Make UHT generate WITH_EDITOR guards around UFunctions generated in a WITH_EDITOR C++ block. This prevents these functions from being generated in non-editor builds Change 3416520 on 2017/05/01 by Yannick.Lange Viewport Interaction: - Toggle ViewportWorldInteraction with command for desktop testing without having to use VREditor. - Add helper function to add a unique extension by subclass. Change 3416956 on 2017/05/01 by Matt.Kuhlenschmidt Exposed EditorLevelUtils to script. This allows creation of streaming levels, setting the current level and moving actors between levels Change 3416964 on 2017/05/01 by Matt.Kuhlenschmidt Prevent foliage from marking actors dirty as HISM components are added and removed from the scene. Change 3416988 on 2017/05/01 by Lauren.Ridge PR #3122: UE-40262: Color tabs according to asset type (Contributed by projectgheist) Changed the highlight style to be around the icon and match the content browser color and style. #jira UE-40437 Change 3418014 on 2017/05/02 by Yannick.Lange Viewport Interaction: Remove material members from base transform gizmo and use asset container to get materials. Change 3418087 on 2017/05/02 by Lauren.Ridge Adding minor tab icon surrounds Change 3418602 on 2017/05/02 by Jamie.Dale Fixed a crash that could occur due to bad data in the asset registry It was possible for FAssetRegistry::PrioritizeSearchPath to re-order the BackgroundAssetResults in response to callback from FAssetRegistry::AssetSearchDataGathered, which caused integrity issues with the array, and would lead to results being missed, or an existing result being processed twice (which due to certain assumptions would result in it being deleted, and bad data being left in the asset registry). These results lists now use a custom type that prevents the mutation of items that have already been processed but not yet trimmed. Change 3418702 on 2017/05/02 by Matt.Kuhlenschmidt Fix USD files that reference other USD files not finding the referenced files by relative path. Requires USD third party changes only Change 3419071 on 2017/05/02 by Arciel.Rekman UBT: optimize FixDeps step on Linux. - Removes the need to re-link unrelated engine libraries when recompiling a code project. - Makes builds faster on machines with multiple cores. - The module that has circularly referenced dependencies is considered cross-referenced itself. - Tested compilation on Linux (native & cross) and Mac (native). Change 3419240 on 2017/05/02 by Cody.Albert Bound widgets in animation tracks can no longer be swapped with widgets from a different widget blueprint, which would lead to a crash Change 3420011 on 2017/05/02 by Max.Chen Sequencer: Fix scrubber hit testing so that the time scrubber is really favored over the playback ranges. #jira UE-44569 Change 3420507 on 2017/05/03 by Lauren.Ridge Selecting a camera or other preview actor in VR Mode now creates a floating in-world viewport. Also deselect all Actors when moving into and out of VR Mode Change 3420643 on 2017/05/03 by andrew.porter QAGame - Adding test content to QA-Sequencer for using spawnables with override bindings Change 3420678 on 2017/05/03 by andrew.porter QAGame: Updating override binding sequence Change 3420961 on 2017/05/03 by Jamie.Dale Exposed some missing Internationalization functions to BPs Change 3422767 on 2017/05/04 by Yannick.Lange ViewportInteraction: Extensibility for dragging on gizmo handles Removed ETransformGizmoInteractionType completely and replaced it with UViewportDragOperation. Using the ETransformGizmoInteractionType enum made external extensibility impossible. Now every gizmo handle group has a component called UViewportDragOperationComponent which holds a UViewportDragOperation of a certain type. This UViewportDragOperation can be inherited to create a custom method to calculate a new transform for the objects when dragging the gizmo handle. Change 3422789 on 2017/05/04 by Yannick.Lange ViewportInteraction: Fix duplicate console variable. Change 3422817 on 2017/05/04 by Andrew.Rodham Sequencer: Changed level sequence object references to always use a package and object path based lookup - Newly created binding references now consist of a package name and an inner object path for actors, and just an inner object path for components. The package name is fixed up dynamically for PIE, which means it can work correctly for multiplayer PIE, and when levels are streamed in during PIE (functionality previously unavailable to lazy object ptrs) - Added a way of rebinding all possessable objects in the current sequence (Rebind Possessable References) - Level sequence binding references no longer use native serialization now that TMap serialization is fully supported. - Multiple bindings are now supported in the API layer of level sequence references, although this is not yet exposed to the sequencer UI. #jira UE-44490 Change 3422826 on 2017/05/04 by Andrew.Rodham Removed erroneous braces Change 3422874 on 2017/05/04 by James.Golding Adding MaterialEditingLibrary to allow manipulation of materials within the editor. - Refactored code out of MaterialEditor where possible Marked some material types as BP-accessible, to allow to editor-Blueprint access. Remove unused 'bSkipPrim' property from Set/CheckMaterialUsage Change 3422942 on 2017/05/04 by Lauren.Ridge Tab padding adjustment to allow tabs with icons to be the same height as tabs without Change 3423090 on 2017/05/04 by Jamie.Dale Added a way to get the source package path for a localized package path Added tests for the localized package path checks. Change 3423133 on 2017/05/04 by Jamie.Dale Fixed a bug where a trailing quote without a newline at the end of a CSV file would be added to the parsed text rather than converted to a terminator Change 3423301 on 2017/05/04 by Max.Chen Sequencer: Add JumpToPosition which updates to a position in a scrubbing state. Change 3423344 on 2017/05/04 by Jamie.Dale Updated localized asset group caching so that it works in non-cooked builds Change 3423486 on 2017/05/04 by Lauren.Ridge Fixing deselection code in VWI Change 3423502 on 2017/05/04 by Jamie.Dale Adding automated localization tests Change 3424219 on 2017/05/04 by Yannick.Lange - Hide FWidget when ViewportWorldInteraction starts. - Added option to EditorViewportClient to not render FWidget without using FWidget::SetDefaultVisibility. Change 3425116 on 2017/05/05 by Matt.Kuhlenschmidt PR #3527: Modified comments (Contributed by projectgheist) Change 3425239 on 2017/05/05 by Matt.Kuhlenschmidt Fix shutdown crash in projects that unregister asset tools in UObjects being destroyed at shutdown. Change 3425241 on 2017/05/05 by Max.Chen Sequencer: Components aren't deselected from the sequencer tree view when they get deselected in the viewport/outliner. #jira UE-44559 Change 3425286 on 2017/05/05 by Jamie.Dale Text duplicated as part of a widget archetype now maintains its existing key #jira UE-44715 Change 3425477 on 2017/05/05 by Andrew.Rodham Sequencer: Do not deprecate legacy object references since they still need to be serialized on save - Also re-add identical via equality operator so that serialization works again Change 3425681 on 2017/05/05 by Jamie.Dale Fixed fallback font height/baseline measuring Change 3426137 on 2017/05/05 by Jamie.Dale Removing PPF_Localized It's an old UE3-ism that's no longer tested anywhere Change 3427434 on 2017/05/07 by Yannick.Lange ViewportInteraction: Null check for viewport. Change 3427905 on 2017/05/08 by Matt.Kuhlenschmidt Removed the concept of a global selection annotation. This poses a major problem when more than one selection set is clearing it. If more than one selection set is in a transaction the last one to be serialized will clear and rebuild the annotation thus causing out of sync issues with component and actor selection sets. This change introduces the concept of a per-selection set annotation to avoid being out of sync. Actor and ActorComponent now override IsSelected (editor only) to make use of these selections. #jira UE-44655 Change 3428738 on 2017/05/08 by Matt.Kuhlenschmidt Fix other usage of USelection not having a selection annotation #jira UE-44786 Change 3429562 on 2017/05/08 by Matt.Kuhlenschmidt Fix crash on platforms without a cursor #jira UE-44815 Change 3429862 on 2017/05/08 by tim.gautier QAGame: Enable Include CrashReporter in Project Settings Change 3430385 on 2017/05/09 by Lauren.Ridge Resetting user focus to game viewport after movie finishes playback #jira UE-44785 Change 3430695 on 2017/05/09 by Lauren.Ridge Fix for crash on leaving in the middle of a loading movie #jira UE-44834 Change 3431234 on 2017/05/09 by Matt.Kuhlenschmidt Fixed movie player setting all users to focus which breaks VR controllers [CL 3432852 by Matt Kuhlenschmidt in Main branch]
2017-05-10 11:49:32 -04:00
if (UActorGroupingUtils::IsGroupingActive())
{
// if this actor is in a group, add the GroupActor into a list to be modified shortly
AGroupActor* ActorLockedRootGroup = AGroupActor::GetRootForActor(Actor, true);
if (ActorLockedRootGroup != nullptr)
{
GroupActors.Add(ActorLockedRootGroup);
}
}
}
// Modify unique group actors
for (auto* GroupActor : GroupActors)
{
GroupActor->Modify();
}
}
}
void UUnrealEdEngine::FinishAllSnaps()
{
if(!IsRunningCommandlet())
{
if( ClickFlags & CF_MOVE_ACTOR )
{
ClickFlags &= ~CF_MOVE_ACTOR;
for ( FSelectionIterator It( GetSelectedActorIterator() ) ; It ; ++It )
{
AActor* Actor = static_cast<AActor*>( *It );
checkSlow( Actor->IsA(AActor::StaticClass()) );
Actor->Modify();
Actor->InvalidateLightingCache();
Actor->PostEditMove( true );
}
}
}
}
void UUnrealEdEngine::Cleanse( bool ClearSelection, bool Redraw, const FText& Reason, bool bResetTrans )
{
if (GIsRunning)
{
FMessageLog("MapCheck").NewPage(LOCTEXT("MapCheck", "Map Check"));
FMessageLog("LightingResults").NewPage(LOCTEXT("LightingBuildNewLogPage", "Lighting Build"));
FStatsViewerModule& StatsViewerModule = FModuleManager::Get().LoadModuleChecked<FStatsViewerModule>(TEXT("StatsViewer"));
StatsViewerModule.Clear();
}
Super::Cleanse( ClearSelection, Redraw, Reason, bResetTrans );
}
FVector UUnrealEdEngine::GetPivotLocation()
{
return GLevelEditorModeTools().PivotLocation;
}
void UUnrealEdEngine::SetPivot( FVector NewPivot, bool bSnapPivotToGrid, bool bIgnoreAxis, bool bAssignPivot/*=false*/ )
{
if (!GCurrentLevelEditingViewportClient)
{
return;
}
FEditorModeTools& EditorModeTools = GLevelEditorModeTools();
if( !bIgnoreAxis )
{
// Don't stomp on orthonormal axis.
// TODO: this breaks if there is genuinely a need to set the pivot to a coordinate containing a zero component
if( NewPivot.X==0 ) NewPivot.X=EditorModeTools.PivotLocation.X;
if( NewPivot.Y==0 ) NewPivot.Y=EditorModeTools.PivotLocation.Y;
if( NewPivot.Z==0 ) NewPivot.Z=EditorModeTools.PivotLocation.Z;
}
// Set the pivot.
EditorModeTools.SetPivotLocation(NewPivot, false);
if( bSnapPivotToGrid )
{
FRotator DummyRotator(0,0,0);
FSnappingUtils::SnapToBSPVertex( EditorModeTools.SnappedLocation, EditorModeTools.GridBase, DummyRotator );
EditorModeTools.PivotLocation = EditorModeTools.SnappedLocation;
}
// Check all elements.
int32 NumElements = 0;
//default to using the x axis for the translate rotate widget
EditorModeTools.TranslateRotateXAxisAngle = 0.0f;
EditorModeTools.TranslateRotate2DAngle = 0.0f;
FVector TranslateRotateWidgetWorldXAxis = FVector::ZeroVector;
FVector Widget2DWorldXAxis = FVector::ZeroVector;
// Pick a new common pivot, or not.
TTypedElement<ITypedElementWorldInterface> SingleWorldElement;
Converted UTypedElementList to no longer be a UObject Storing typed elements in UObjects can easily lead to reference leaks if the elements aren't cleared prior to the UObject being left pending GC. This actually made UTypedElementList tricky to use, as you had to remember to manually empty it when you'd finished with it to avoid reference leaks, and we've had several cases now where that was done incorrectly. To address this issue, we've moved element lists back to being a normal C++ class, FTypedElementList. However, unlike the original version of FTypedElementList (which was itself a UStruct), this version is always heap-allocated and referenced via a TSharedPtr/TSharedRef. This gives us a nice middle-ground of a well defined lifetime (ie, no lingering references prior to GC) while still being efficient to pass around, including for scripting APIs via FTypedElementListProxy (which just wraps the TSharedPtr in a UStruct). The downside of this approach is that we need to wrap the FTypedElementList functions that we want to expose to the scripting API (see UTypedElementListLibrary), however that is a far more reasonable burden than requring every user of the typed element framework to know and understand that UTypedElementList had to be manually cleared to avoid potentially hard to find reference leaks (especially if via leaked via scripting APIs). The core of this change is to TypedElementList.h/.cpp, with TypedElementListFwd.h existing to forward declare the pointer types, and TypedElementListProxy.h and TypedElementListLibrary.h existing to declare the proxy type and wrapped functions used for scripting APIs. TypedElementSelectionInterface.h (and its implementations) provide an example of using FTypedElementListProxy within a scripting API, and the rest of the change is mostly just fallout to transform const UTypedElementList* to FTypedElementListConstRef and UTypedElementList* to FTypedElementListRef. #rb Brooke.Hubert #preflight 60d2720c634cd100016c804b #ROBOMERGE-SOURCE: CL 16776547 in //UE5/Main/... #ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v836-16769935) [CL 16776582 by jamie dale in ue5-release-engine-test branch]
2021-06-24 14:31:49 -04:00
FTypedElementListConstRef ElementsToManipulate = GCurrentLevelEditingViewportClient->GetElementsToManipulate();
ElementsToManipulate->ForEachElement<ITypedElementWorldInterface>([&NumElements, &TranslateRotateWidgetWorldXAxis, &Widget2DWorldXAxis, &SingleWorldElement](const TTypedElement<ITypedElementWorldInterface>& InWorldElement)
{
if (NumElements == 0)
{
FTransform ElementWorldTransform;
InWorldElement.GetWorldTransform(ElementWorldTransform);
TranslateRotateWidgetWorldXAxis = ElementWorldTransform.TransformVector(FVector(1.0f, 0.0f, 0.0f));
//get the xy plane project of this vector
TranslateRotateWidgetWorldXAxis.Z = 0.0f;
if (!TranslateRotateWidgetWorldXAxis.Normalize())
{
TranslateRotateWidgetWorldXAxis = FVector(1.0f, 0.0f, 0.0f);
}
Widget2DWorldXAxis = ElementWorldTransform.TransformVector(FVector(1, 0, 0));
Widget2DWorldXAxis.Y = 0;
if (!Widget2DWorldXAxis.Normalize())
{
Widget2DWorldXAxis = FVector(1, 0, 0);
}
}
SingleWorldElement = InWorldElement;
++NumElements;
return true;
});
if (bAssignPivot && UActorGroupingUtils::IsGroupingActive())
{
if (TTypedElement<ITypedElementObjectInterface> ObjectElement = ElementsToManipulate->GetElement<ITypedElementObjectInterface>(SingleWorldElement))
{
if (AActor* SingleActor = Cast<AActor>(ObjectElement.GetObject()))
{
// set group pivot for the root-most group
if (AGroupActor* ActorGroupRoot = AGroupActor::GetRootForActor(SingleActor, true, true))
{
ActorGroupRoot->SetActorLocation(EditorModeTools.PivotLocation, false);
}
}
}
}
//if there are multiple elements selected, just use the x-axis for the "translate/rotate" or 2D widgets
if (NumElements == 1)
{
EditorModeTools.TranslateRotateXAxisAngle = TranslateRotateWidgetWorldXAxis.Rotation().Yaw;
EditorModeTools.TranslateRotate2DAngle = FMath::RadiansToDegrees(FMath::Atan2(Widget2DWorldXAxis.Z, Widget2DWorldXAxis.X));
}
// Update showing.
EditorModeTools.PivotShown = NumElements > 0;
}
void UUnrealEdEngine::ResetPivot()
{
GLevelEditorModeTools().PivotShown = 0;
GLevelEditorModeTools().Snapping = 0;
GLevelEditorModeTools().SnappedActor = 0;
}
/*-----------------------------------------------------------------------------
Selection.
-----------------------------------------------------------------------------*/
void UUnrealEdEngine::OnEditorElementSelectionPtrChanged(USelection* Selection, UTypedElementSelectionSet* OldSelectionSet, UTypedElementSelectionSet* NewSelectionSet)
{
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
if (Selection == GetSelectedActors())
{
if (OldSelectionSet)
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
{
OldSelectionSet->OnChanged().RemoveAll(this);
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
}
if (NewSelectionSet)
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
{
NewSelectionSet->OnChanged().AddUObject(this, &UUnrealEdEngine::OnEditorElementSelectionChanged);
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
}
}
}
void UUnrealEdEngine::OnEditorElementSelectionChanged(const UTypedElementSelectionSet* SelectionSet)
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
{
NoteSelectionChange();
}
void UUnrealEdEngine::PostActorSelectionChanged()
{
// Whenever selection changes, recompute whether the selection contains a locked actor
bCheckForLockActors = true;
// Whenever selection changes, recompute whether the selection contains a world info actor
bCheckForWorldSettingsActors = true;
}
void UUnrealEdEngine::SetPivotMovedIndependently(bool bMovedIndependently)
{
bPivotMovedIndependently = bMovedIndependently;
}
bool UUnrealEdEngine::IsPivotMovedIndependently() const
{
return bPivotMovedIndependently;
}
void UUnrealEdEngine::UpdatePivotLocationForSelection( bool bOnChange )
{
if (!GCurrentLevelEditingViewportClient)
{
return;
}
// Pick a new common pivot, or not.
TTypedElement<ITypedElementWorldInterface> SingleWorldElement;
Converted UTypedElementList to no longer be a UObject Storing typed elements in UObjects can easily lead to reference leaks if the elements aren't cleared prior to the UObject being left pending GC. This actually made UTypedElementList tricky to use, as you had to remember to manually empty it when you'd finished with it to avoid reference leaks, and we've had several cases now where that was done incorrectly. To address this issue, we've moved element lists back to being a normal C++ class, FTypedElementList. However, unlike the original version of FTypedElementList (which was itself a UStruct), this version is always heap-allocated and referenced via a TSharedPtr/TSharedRef. This gives us a nice middle-ground of a well defined lifetime (ie, no lingering references prior to GC) while still being efficient to pass around, including for scripting APIs via FTypedElementListProxy (which just wraps the TSharedPtr in a UStruct). The downside of this approach is that we need to wrap the FTypedElementList functions that we want to expose to the scripting API (see UTypedElementListLibrary), however that is a far more reasonable burden than requring every user of the typed element framework to know and understand that UTypedElementList had to be manually cleared to avoid potentially hard to find reference leaks (especially if via leaked via scripting APIs). The core of this change is to TypedElementList.h/.cpp, with TypedElementListFwd.h existing to forward declare the pointer types, and TypedElementListProxy.h and TypedElementListLibrary.h existing to declare the proxy type and wrapped functions used for scripting APIs. TypedElementSelectionInterface.h (and its implementations) provide an example of using FTypedElementListProxy within a scripting API, and the rest of the change is mostly just fallout to transform const UTypedElementList* to FTypedElementListConstRef and UTypedElementList* to FTypedElementListRef. #rb Brooke.Hubert #preflight 60d2720c634cd100016c804b #ROBOMERGE-SOURCE: CL 16776547 in //UE5/Main/... #ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v836-16769935) [CL 16776582 by jamie dale in ue5-release-engine-test branch]
2021-06-24 14:31:49 -04:00
FTypedElementListConstRef ElementsToManipulate = GCurrentLevelEditingViewportClient->GetElementsToManipulate();
ElementsToManipulate->ForEachElement<ITypedElementWorldInterface>([&SingleWorldElement](const TTypedElement<ITypedElementWorldInterface>& InWorldElement)
{
#if DO_CHECK
Provided an interface to query element parent<->child hierarchy information and used it to unify selection normalization Previously we relied on element implementations to know what their parent or child elements might be, and to deal with them correctly in the following cases: 1) When "normalising" a selection to be safe for operations like a move or delete, eg) removing elements that are children of other selected elements. 2) When deleting an element, also ensuring that any implicitly destroyed child elements were deselected, eg) deleting an ISM component that has selected static mesh instances. This approach hurts the modularity of the elements themselves, as it requires that the element implementations have intrinsic knowledge of any other child (or parent) element types that may exist, and to deal with them accordingly when needed. As a concrete example, an ISM component may have child elements in the form of static mesh instance elements, however the generic component element type does not (and should not) directly know that static mesh instance elements exist. To address this issue, we've added a new interface, UTypedElementHierarchyInterface, which can be used to provide information about the logical parent<->child hierarchy information of elements. This is implemented as follows for our current element types: - Actor: - GetParentElement returns an invalid element handle. - GetChildElements returns the element handles of any components on the actor. - Component: - GetParentElement returns its owner actor element handle. - GetChildElements returns nothing by default, but UActorComponent::GetComponentChildElements may be overridden to control this behavior. - eg) UInstancedStaticMeshComponent overrides it to return its static mesh instance element handles. - SMInstance: - GetParentElement returns its owner ISM component element handle. - GetChildElements returns nothing. Now the problems listed above can be solved by using this interface instead of relying on the element implementations: 1) Selection normalization is now handled by UTypedElementSelectionSet, replacing the previous duplicate implementations of UTypedElementCommonActions and UTypedElementViewportInteraction. 2) UTypedElementSelectionSet will now walk and also update the selection state of child elements, when asked to via the FTypedElementSelectionOptions. Breaking Changes: - UTypedElementCommonActions::GetElementsForAction and UTypedElementViewportInteraction::GetSelectedElementsToMove have been removed, in favor of using the selection normalization functions of UTypedElementSelectionSet. - Note: You may still favor using FLevelEditorViewportClient::GetElementsToManipulate, as it will have removed normalized elements that also cannot be moved by a gizmo. - UTypedElementCommonActions::DeleteElements and UTypedElementCommonActions::DuplicateElements have been removed, as these functions operated on an unnormalized selection and could be unsafe. UTypedElementCommonActions::DeleteNormalizedElements and UTypedElementCommonActions::DuplicateNormalizedElements should be used instead. - AGroupActor::ForEachActorInGroup and AGroupActor::ForEachMovableActorInGroup now take a second AGroupActor* argument in their callback. #rb Brooke.Hubert #preflight 60ca33a678c3b00001e8f5df #ROBOMERGE-SOURCE: CL 16705229 in //UE5/Main/... #ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v835-16672529) [CL 16705233 by jamie dale in ue5-release-engine-test branch]
2021-06-17 11:19:53 -04:00
if (ULevel* OwnerLevel = InWorldElement.GetOwnerLevel())
{
const bool bIsTemplate = InWorldElement.IsTemplateElement();
const bool bLevelLocked = FLevelUtils::IsLevelLocked(OwnerLevel);
check(bIsTemplate || !bLevelLocked);
}
#endif // DO_CHECK
SingleWorldElement = InWorldElement;
return true;
});
if (SingleWorldElement)
{
UBrushEditingSubsystem* BrushSubsystem = GEditor->GetEditorSubsystem<UBrushEditingSubsystem>();
const bool bGeometryMode = BrushSubsystem && BrushSubsystem->IsGeometryEditorModeActive();
// For geometry mode use current pivot location as it's set to selected face, not actor
// TODO: If geometry used elements for face selection, then this could work via the world interface and this special case could be removed
if (!bGeometryMode || bOnChange)
{
FTransform ElementWorldTransform;
SingleWorldElement.GetWorldTransform(ElementWorldTransform);
FVector ElementPivotOffset = FVector::ZeroVector;
SingleWorldElement.GetPivotOffset(ElementPivotOffset);
// Set pivot point to the element location, accounting for any set pivot offset
FVector PivotPoint = ElementWorldTransform.TransformPosition(ElementPivotOffset);
// If grouping is active, see if this element is an actor that's part of a locked group and use that pivot instead
if (UActorGroupingUtils::IsGroupingActive())
{
if (TTypedElement<ITypedElementObjectInterface> ObjectElement = ElementsToManipulate->GetElement<ITypedElementObjectInterface>(SingleWorldElement))
{
if (AActor* SingleActor = Cast<AActor>(ObjectElement.GetObject()))
{
if (AGroupActor* ActorGroupRoot = AGroupActor::GetRootForActor(SingleActor, true, true))
{
PivotPoint = ActorGroupRoot->GetActorLocation();
}
}
}
}
SetPivot(PivotPoint, false, true);
}
}
else
{
ResetPivot();
}
SetPivotMovedIndependently(false);
}
Copying //UE4/Dev-Enterprise to //UE4/Dev-Main (Source: //UE4/Dev-Enterprise @ 4341740) #lockdown Nick.Penwarden #rb none ============================ MAJOR FEATURES & CHANGES ============================ Change 4280523 by Patrick.Boutot Add option in AjaCustomTimeStep to wait until the frame to be ready. Previously, the frame was there but not yet processed so it was possible that it was not ready by the time we wanted to read it. It won't work with interlaced because the 2 fields are processed at the same time. In interlaced, will get a 30fps behaviour when we actually want a 60fps. Fix bug that didn't set and reset bIsOwned properly when it was first initialized as not owned. Change 4280526 by Patrick.Boutot Add accessor to get the leaf media source or output. Change 4280624 by Patrick.Boutot Add timecode acessor to media samples Change 4280626 by Patrick.Boutot Rework the timing for AJA Media Player. Previously, we took the timing of the frame. That was a bad idea because if 2 incomings video frames were coming a the same time, you would only show one. Making the buffering system useless. That affects the Custom Time Step since it was waiting for the interrupt signal and in some behavior we would like the frame to be ready to be used by UE. Same the timecode in the MediaSample because we may not used it to stamps the frame. Change 4283022 by Patrick.Boutot [EditorScriptingUtilitites] Check folder names invalid characters separatly from the object's name. #jira UE-59886, UE-62333 Change 4283112 by Patrick.Boutot Remove MediaFrameworkUtilititesModule dependency to the Settings module at runtime. Rename TimemanagemenetEditor module names. Change 4283426 by JeanLuc.Corenthin Fix crash with FBX file #jira UE-62501 Change 4284940 by Patrick.Boutot A widget that let you select a single permutation from a list. It groups the values into categories and removes duplicates inside that category. Change 4285471 by Patrick.Boutot Remove MediaFrameworkUtilititesModule dependency to the Settings module at runtime. Change 4286925 by Patrick.Boutot [AJA] Add support to read LTC from the reference In. Add more detail on video format and the device. MediaSource use the Permutations Selection widget to select his mode and device. Remove debugging option to trigger an AJA custom time step and timecode provider. Remove the UYVY pixel option from AJA. It's better do to the conversion on the AJA card that on the GPU. Change the tooltip and category for some AjaMediaSource properties. Change 4287026 by Julien.StJean Modifed the file STimeCodeProviderTab.cpp to fix the position of a SComboButton that wasn't properly place. Change 4287663 by Jon.Nabozny Add timecode messages into nDisplay, and sync those between Master and Slave Change 4287884 by Jon.Nabozny Create a TimecodeProvider for SystemTime and introduce a notion for DefaultTimecodeProvider in Engine. Change 4288050 by Jon.Nabozny Rework the TimeSynchronization implementation for usability and functionality. Change 4288283 by Jon.Nabozny Fixed swapped MetaClass and DisplayName options on UEngine::DefaultTimecodeProviderClassName; Change 4288352 by Jon.Nabozny Set TimecodeProviderClassName and DefaultTimecodeProviderClassName in BaseEngine.ini Change 4288378 by Jon.Nabozny Fixup some issues in TimecodeSynchronizer where code was reset improperly due to multiple unshelves / resolves. Change 4288394 by Jon.Nabozny Add TimeSync functionality into LiveLink. Also add test cases for this. This should allow us to easily synchronize multiple LiveLink sources together, as well as synchronize those to anything else using the sync system (Relies on CL-4235417) Change 4288899 by Patrick.Boutot Fix initialization order of FMediaIOCorePlayerBase variables Change 4289157 by Patrick.Boutot Allow the user to change the source of a capture without stopping the current capture. [AJA] AjaMediaCapture, add support for UpdateSceneViewport & UpdateRenderTarget @made by julien.stjean Change 4291328 by Jon.Nabozny Report the Skeleton Guid with TimeSyncData and track sync state in LiveLinkTimeSynchronizationSource. This prevents a crash that can happen if a source is quickly cleared and reset before the next tick of Time Synchronization. Change 4296294 by Jon.Nabozny Fixup errors when TimecodeProviderClassName is empty. It's valid to leave this empty. Change 4297122 by Patrick.Boutot Media Profile with timecode provider & custom time step Change 4301855 by Austin.Crismore Fix for movment scaling and virtual joystick controls. Movement scaling in for truck and dolly is locked to the world xy plane, and virtual joysticks use their own method for movement scaling now. #jira UE-61762, UE-62187 Change 4301856 by Austin.Crismore Virtual sequence level controller now listens to on object spawned, so that it can intercept the camera actor and disable attatching to HMD to prevent camera movement that isn't from the level sequence #jira UE-61766 Change 4301860 by Austin.Crismore Fix for touch scrubbing. Added default values back in. Added logic to only allow scrubbing when touch focus was off. #jira UE-61865 Change 4302294 by Jamie.Dale Added functions to get your the localized spoken and subtitle text from a dialogue wave Change 4304393 by Jamie.Dale Added support for BlueprintAssignable properties in Python Change 4305852 by Jamie.Dale Removed hard-dependency between EditorScriptingUtilities and PythonScriptPlugin Backed-out changelist 4259264 and query Python availability based on whether anything is available to handle the command #jira UE-62318 Change 4308550 by Jamie.Dale Fixed crash when passing a null world to Python actor iterators Change 4311867 by Homam.Bahnassi Revit master material with exposed parameters matching the API when possible. Change 4314428 by Francis.Hurteau Made the usage of the bBuildDeveloperTools switch independent of the bCompileAgainstEngine switch. Changed bBuildDeveloperTools TargetRule in UnrealBuildTool to a nullable to keep the old behavior in case where bBuildDeveloperTools wasn't explicitly set in TargetRules Change 4315134 by Jamie.Dale Defer editable text focus selection until mouse-up to allow the user to make an initial selection #jira UE-58086 Change 4318615 by Johan.Duparc EditorFactories: consistent return values after asset import. Change 4322459 by Jamie.Dale Made SequencerScripting an Editor plugin as it depends on PythonScriptPlugin which is an Editor plugin This was causing issues at runtime when SequencerScripting was enabled, as it failed to load PythonScriptPlugin (which hadn't been built). Change 4323341 by Francis.Hurteau Implement proper message bus protocol version negociation with static nodes Change 4323733 by Francis.Hurteau Fix VR Pausing Sequence Scrubbing just setting playback speed to 0.0 Change 4324319 by Jamie.Dale Exposed transactions to Blueprints Change 4325847 by Alistair.White Copying //Tasks/UE4/Private-PixelStreaming@4325566 to Dev-Enterprise-Minimal (//UE4/Dev-Enterprise-Minimal) This adds the new experimental PixelStreaming plugin to allow streaming of an Unreal client's audio & video stream to a browser through the WebRTC protocol to support new uses for enterprise customers. Change 4326282 by Simon.Tourangeau nDisplay native present handler Change 4326581 by Jamie.Dale Replacing FDateTime with int64 Ticks value to workaround UE-63485 Change 4326599 by Homam.Bahnassi Moving texture coords outside UVEdit function to allow using different UV channels. Change 4333250 by Francis.Hurteau Small TFuture changes: * cleans up TFuture::Then with usage of TUniqueFunction * added TFuture::Reset to invalidate it and remove continuation from a future shared state Change 4333359 by Homam.Bahnassi Support scaling and rotating UVs around arbitrary pivot Change 4333566 by Johan.Duparc Expose ProxyLOD functionalities to Scripting #jira UEENT-1788 Change 4333988 by Jamie.Dale Allow UHT to parse FText default parameter values INVTEXT, NSLOCTEXT, LOCTABLE, and FText::GetEmpty() are supported. LOCTEXT isn't as it relies on an external macro that is known to C++ but not to UHT (NSLOCTEXT can easily be used instead). Change 4335020 by Francis.Hurteau Uncomment MessageBus::Send deprecation notice for 4.21 Update MessageBus Send usage to new API Change 4335195 by JeanMichel.Dignard Add a SetLodFromStaticMesh script utility function #jira UEENT-1789 Change 4335231 by Anousack.Kitisa Added functions to generate planar, cylindrical, box UV mapping. #jira UEENT-1598 Change 4335373 by Jamie.Dale Cleaned up some places creating empty literal texts Change 4335458 by Jamie.Dale Allow UHT to parse FText() as an alias of FText::GetEmpty() when processing default values Change 4335875 by Max.Chen Sequencer: Clear RF_Transient on pasted tracks/sections #jira UE-63537 Change 4336497 by Johan.Duparc ProxyLOD: Fix progress bar issue - removed duplicated code - removed duplicated LongTask object #jira UEENT-1788 Change 4336723 by Jamie.Dale Ensure that Python generated types create their CDO at the correct point #jira UE-62895 Change 4340594 by Ben.Marsh Fix manifest being invalidated when building two enterprise targets in a row. Fixes CIS error. #jira UE-63644 [CL 4342443 by JeanMichel Dignard in Main branch]
2018-09-04 16:35:02 -04:00
void UUnrealEdEngine::NoteSelectionChange(bool bNotify)
{
// The selection changed, so make sure the pivot (widget) is located in the right place
UpdatePivotLocationForSelection( true );
// Clear active editing visualizer on selection change
ComponentVisManager.ClearActiveComponentVis();
const bool bComponentSelectionChanged = GetSelectedComponentCount() > 0;
Copying //UE4/Dev-Enterprise to //UE4/Dev-Main (Source: //UE4/Dev-Enterprise @ 4341740) #lockdown Nick.Penwarden #rb none ============================ MAJOR FEATURES & CHANGES ============================ Change 4280523 by Patrick.Boutot Add option in AjaCustomTimeStep to wait until the frame to be ready. Previously, the frame was there but not yet processed so it was possible that it was not ready by the time we wanted to read it. It won't work with interlaced because the 2 fields are processed at the same time. In interlaced, will get a 30fps behaviour when we actually want a 60fps. Fix bug that didn't set and reset bIsOwned properly when it was first initialized as not owned. Change 4280526 by Patrick.Boutot Add accessor to get the leaf media source or output. Change 4280624 by Patrick.Boutot Add timecode acessor to media samples Change 4280626 by Patrick.Boutot Rework the timing for AJA Media Player. Previously, we took the timing of the frame. That was a bad idea because if 2 incomings video frames were coming a the same time, you would only show one. Making the buffering system useless. That affects the Custom Time Step since it was waiting for the interrupt signal and in some behavior we would like the frame to be ready to be used by UE. Same the timecode in the MediaSample because we may not used it to stamps the frame. Change 4283022 by Patrick.Boutot [EditorScriptingUtilitites] Check folder names invalid characters separatly from the object's name. #jira UE-59886, UE-62333 Change 4283112 by Patrick.Boutot Remove MediaFrameworkUtilititesModule dependency to the Settings module at runtime. Rename TimemanagemenetEditor module names. Change 4283426 by JeanLuc.Corenthin Fix crash with FBX file #jira UE-62501 Change 4284940 by Patrick.Boutot A widget that let you select a single permutation from a list. It groups the values into categories and removes duplicates inside that category. Change 4285471 by Patrick.Boutot Remove MediaFrameworkUtilititesModule dependency to the Settings module at runtime. Change 4286925 by Patrick.Boutot [AJA] Add support to read LTC from the reference In. Add more detail on video format and the device. MediaSource use the Permutations Selection widget to select his mode and device. Remove debugging option to trigger an AJA custom time step and timecode provider. Remove the UYVY pixel option from AJA. It's better do to the conversion on the AJA card that on the GPU. Change the tooltip and category for some AjaMediaSource properties. Change 4287026 by Julien.StJean Modifed the file STimeCodeProviderTab.cpp to fix the position of a SComboButton that wasn't properly place. Change 4287663 by Jon.Nabozny Add timecode messages into nDisplay, and sync those between Master and Slave Change 4287884 by Jon.Nabozny Create a TimecodeProvider for SystemTime and introduce a notion for DefaultTimecodeProvider in Engine. Change 4288050 by Jon.Nabozny Rework the TimeSynchronization implementation for usability and functionality. Change 4288283 by Jon.Nabozny Fixed swapped MetaClass and DisplayName options on UEngine::DefaultTimecodeProviderClassName; Change 4288352 by Jon.Nabozny Set TimecodeProviderClassName and DefaultTimecodeProviderClassName in BaseEngine.ini Change 4288378 by Jon.Nabozny Fixup some issues in TimecodeSynchronizer where code was reset improperly due to multiple unshelves / resolves. Change 4288394 by Jon.Nabozny Add TimeSync functionality into LiveLink. Also add test cases for this. This should allow us to easily synchronize multiple LiveLink sources together, as well as synchronize those to anything else using the sync system (Relies on CL-4235417) Change 4288899 by Patrick.Boutot Fix initialization order of FMediaIOCorePlayerBase variables Change 4289157 by Patrick.Boutot Allow the user to change the source of a capture without stopping the current capture. [AJA] AjaMediaCapture, add support for UpdateSceneViewport & UpdateRenderTarget @made by julien.stjean Change 4291328 by Jon.Nabozny Report the Skeleton Guid with TimeSyncData and track sync state in LiveLinkTimeSynchronizationSource. This prevents a crash that can happen if a source is quickly cleared and reset before the next tick of Time Synchronization. Change 4296294 by Jon.Nabozny Fixup errors when TimecodeProviderClassName is empty. It's valid to leave this empty. Change 4297122 by Patrick.Boutot Media Profile with timecode provider & custom time step Change 4301855 by Austin.Crismore Fix for movment scaling and virtual joystick controls. Movement scaling in for truck and dolly is locked to the world xy plane, and virtual joysticks use their own method for movement scaling now. #jira UE-61762, UE-62187 Change 4301856 by Austin.Crismore Virtual sequence level controller now listens to on object spawned, so that it can intercept the camera actor and disable attatching to HMD to prevent camera movement that isn't from the level sequence #jira UE-61766 Change 4301860 by Austin.Crismore Fix for touch scrubbing. Added default values back in. Added logic to only allow scrubbing when touch focus was off. #jira UE-61865 Change 4302294 by Jamie.Dale Added functions to get your the localized spoken and subtitle text from a dialogue wave Change 4304393 by Jamie.Dale Added support for BlueprintAssignable properties in Python Change 4305852 by Jamie.Dale Removed hard-dependency between EditorScriptingUtilities and PythonScriptPlugin Backed-out changelist 4259264 and query Python availability based on whether anything is available to handle the command #jira UE-62318 Change 4308550 by Jamie.Dale Fixed crash when passing a null world to Python actor iterators Change 4311867 by Homam.Bahnassi Revit master material with exposed parameters matching the API when possible. Change 4314428 by Francis.Hurteau Made the usage of the bBuildDeveloperTools switch independent of the bCompileAgainstEngine switch. Changed bBuildDeveloperTools TargetRule in UnrealBuildTool to a nullable to keep the old behavior in case where bBuildDeveloperTools wasn't explicitly set in TargetRules Change 4315134 by Jamie.Dale Defer editable text focus selection until mouse-up to allow the user to make an initial selection #jira UE-58086 Change 4318615 by Johan.Duparc EditorFactories: consistent return values after asset import. Change 4322459 by Jamie.Dale Made SequencerScripting an Editor plugin as it depends on PythonScriptPlugin which is an Editor plugin This was causing issues at runtime when SequencerScripting was enabled, as it failed to load PythonScriptPlugin (which hadn't been built). Change 4323341 by Francis.Hurteau Implement proper message bus protocol version negociation with static nodes Change 4323733 by Francis.Hurteau Fix VR Pausing Sequence Scrubbing just setting playback speed to 0.0 Change 4324319 by Jamie.Dale Exposed transactions to Blueprints Change 4325847 by Alistair.White Copying //Tasks/UE4/Private-PixelStreaming@4325566 to Dev-Enterprise-Minimal (//UE4/Dev-Enterprise-Minimal) This adds the new experimental PixelStreaming plugin to allow streaming of an Unreal client's audio & video stream to a browser through the WebRTC protocol to support new uses for enterprise customers. Change 4326282 by Simon.Tourangeau nDisplay native present handler Change 4326581 by Jamie.Dale Replacing FDateTime with int64 Ticks value to workaround UE-63485 Change 4326599 by Homam.Bahnassi Moving texture coords outside UVEdit function to allow using different UV channels. Change 4333250 by Francis.Hurteau Small TFuture changes: * cleans up TFuture::Then with usage of TUniqueFunction * added TFuture::Reset to invalidate it and remove continuation from a future shared state Change 4333359 by Homam.Bahnassi Support scaling and rotating UVs around arbitrary pivot Change 4333566 by Johan.Duparc Expose ProxyLOD functionalities to Scripting #jira UEENT-1788 Change 4333988 by Jamie.Dale Allow UHT to parse FText default parameter values INVTEXT, NSLOCTEXT, LOCTABLE, and FText::GetEmpty() are supported. LOCTEXT isn't as it relies on an external macro that is known to C++ but not to UHT (NSLOCTEXT can easily be used instead). Change 4335020 by Francis.Hurteau Uncomment MessageBus::Send deprecation notice for 4.21 Update MessageBus Send usage to new API Change 4335195 by JeanMichel.Dignard Add a SetLodFromStaticMesh script utility function #jira UEENT-1789 Change 4335231 by Anousack.Kitisa Added functions to generate planar, cylindrical, box UV mapping. #jira UEENT-1598 Change 4335373 by Jamie.Dale Cleaned up some places creating empty literal texts Change 4335458 by Jamie.Dale Allow UHT to parse FText() as an alias of FText::GetEmpty() when processing default values Change 4335875 by Max.Chen Sequencer: Clear RF_Transient on pasted tracks/sections #jira UE-63537 Change 4336497 by Johan.Duparc ProxyLOD: Fix progress bar issue - removed duplicated code - removed duplicated LongTask object #jira UEENT-1788 Change 4336723 by Jamie.Dale Ensure that Python generated types create their CDO at the correct point #jira UE-62895 Change 4340594 by Ben.Marsh Fix manifest being invalidated when building two enterprise targets in a row. Fixes CIS error. #jira UE-63644 [CL 4342443 by JeanMichel Dignard in Main branch]
2018-09-04 16:35:02 -04:00
if (bNotify)
{
USelection* Selection = bComponentSelectionChanged ? GetSelectedComponents() : GetSelectedActors();
Selection->NoteSelectionChanged();
Copying //UE4/Dev-Enterprise to //UE4/Dev-Main (Source: //UE4/Dev-Enterprise @ 4341740) #lockdown Nick.Penwarden #rb none ============================ MAJOR FEATURES & CHANGES ============================ Change 4280523 by Patrick.Boutot Add option in AjaCustomTimeStep to wait until the frame to be ready. Previously, the frame was there but not yet processed so it was possible that it was not ready by the time we wanted to read it. It won't work with interlaced because the 2 fields are processed at the same time. In interlaced, will get a 30fps behaviour when we actually want a 60fps. Fix bug that didn't set and reset bIsOwned properly when it was first initialized as not owned. Change 4280526 by Patrick.Boutot Add accessor to get the leaf media source or output. Change 4280624 by Patrick.Boutot Add timecode acessor to media samples Change 4280626 by Patrick.Boutot Rework the timing for AJA Media Player. Previously, we took the timing of the frame. That was a bad idea because if 2 incomings video frames were coming a the same time, you would only show one. Making the buffering system useless. That affects the Custom Time Step since it was waiting for the interrupt signal and in some behavior we would like the frame to be ready to be used by UE. Same the timecode in the MediaSample because we may not used it to stamps the frame. Change 4283022 by Patrick.Boutot [EditorScriptingUtilitites] Check folder names invalid characters separatly from the object's name. #jira UE-59886, UE-62333 Change 4283112 by Patrick.Boutot Remove MediaFrameworkUtilititesModule dependency to the Settings module at runtime. Rename TimemanagemenetEditor module names. Change 4283426 by JeanLuc.Corenthin Fix crash with FBX file #jira UE-62501 Change 4284940 by Patrick.Boutot A widget that let you select a single permutation from a list. It groups the values into categories and removes duplicates inside that category. Change 4285471 by Patrick.Boutot Remove MediaFrameworkUtilititesModule dependency to the Settings module at runtime. Change 4286925 by Patrick.Boutot [AJA] Add support to read LTC from the reference In. Add more detail on video format and the device. MediaSource use the Permutations Selection widget to select his mode and device. Remove debugging option to trigger an AJA custom time step and timecode provider. Remove the UYVY pixel option from AJA. It's better do to the conversion on the AJA card that on the GPU. Change the tooltip and category for some AjaMediaSource properties. Change 4287026 by Julien.StJean Modifed the file STimeCodeProviderTab.cpp to fix the position of a SComboButton that wasn't properly place. Change 4287663 by Jon.Nabozny Add timecode messages into nDisplay, and sync those between Master and Slave Change 4287884 by Jon.Nabozny Create a TimecodeProvider for SystemTime and introduce a notion for DefaultTimecodeProvider in Engine. Change 4288050 by Jon.Nabozny Rework the TimeSynchronization implementation for usability and functionality. Change 4288283 by Jon.Nabozny Fixed swapped MetaClass and DisplayName options on UEngine::DefaultTimecodeProviderClassName; Change 4288352 by Jon.Nabozny Set TimecodeProviderClassName and DefaultTimecodeProviderClassName in BaseEngine.ini Change 4288378 by Jon.Nabozny Fixup some issues in TimecodeSynchronizer where code was reset improperly due to multiple unshelves / resolves. Change 4288394 by Jon.Nabozny Add TimeSync functionality into LiveLink. Also add test cases for this. This should allow us to easily synchronize multiple LiveLink sources together, as well as synchronize those to anything else using the sync system (Relies on CL-4235417) Change 4288899 by Patrick.Boutot Fix initialization order of FMediaIOCorePlayerBase variables Change 4289157 by Patrick.Boutot Allow the user to change the source of a capture without stopping the current capture. [AJA] AjaMediaCapture, add support for UpdateSceneViewport & UpdateRenderTarget @made by julien.stjean Change 4291328 by Jon.Nabozny Report the Skeleton Guid with TimeSyncData and track sync state in LiveLinkTimeSynchronizationSource. This prevents a crash that can happen if a source is quickly cleared and reset before the next tick of Time Synchronization. Change 4296294 by Jon.Nabozny Fixup errors when TimecodeProviderClassName is empty. It's valid to leave this empty. Change 4297122 by Patrick.Boutot Media Profile with timecode provider & custom time step Change 4301855 by Austin.Crismore Fix for movment scaling and virtual joystick controls. Movement scaling in for truck and dolly is locked to the world xy plane, and virtual joysticks use their own method for movement scaling now. #jira UE-61762, UE-62187 Change 4301856 by Austin.Crismore Virtual sequence level controller now listens to on object spawned, so that it can intercept the camera actor and disable attatching to HMD to prevent camera movement that isn't from the level sequence #jira UE-61766 Change 4301860 by Austin.Crismore Fix for touch scrubbing. Added default values back in. Added logic to only allow scrubbing when touch focus was off. #jira UE-61865 Change 4302294 by Jamie.Dale Added functions to get your the localized spoken and subtitle text from a dialogue wave Change 4304393 by Jamie.Dale Added support for BlueprintAssignable properties in Python Change 4305852 by Jamie.Dale Removed hard-dependency between EditorScriptingUtilities and PythonScriptPlugin Backed-out changelist 4259264 and query Python availability based on whether anything is available to handle the command #jira UE-62318 Change 4308550 by Jamie.Dale Fixed crash when passing a null world to Python actor iterators Change 4311867 by Homam.Bahnassi Revit master material with exposed parameters matching the API when possible. Change 4314428 by Francis.Hurteau Made the usage of the bBuildDeveloperTools switch independent of the bCompileAgainstEngine switch. Changed bBuildDeveloperTools TargetRule in UnrealBuildTool to a nullable to keep the old behavior in case where bBuildDeveloperTools wasn't explicitly set in TargetRules Change 4315134 by Jamie.Dale Defer editable text focus selection until mouse-up to allow the user to make an initial selection #jira UE-58086 Change 4318615 by Johan.Duparc EditorFactories: consistent return values after asset import. Change 4322459 by Jamie.Dale Made SequencerScripting an Editor plugin as it depends on PythonScriptPlugin which is an Editor plugin This was causing issues at runtime when SequencerScripting was enabled, as it failed to load PythonScriptPlugin (which hadn't been built). Change 4323341 by Francis.Hurteau Implement proper message bus protocol version negociation with static nodes Change 4323733 by Francis.Hurteau Fix VR Pausing Sequence Scrubbing just setting playback speed to 0.0 Change 4324319 by Jamie.Dale Exposed transactions to Blueprints Change 4325847 by Alistair.White Copying //Tasks/UE4/Private-PixelStreaming@4325566 to Dev-Enterprise-Minimal (//UE4/Dev-Enterprise-Minimal) This adds the new experimental PixelStreaming plugin to allow streaming of an Unreal client's audio & video stream to a browser through the WebRTC protocol to support new uses for enterprise customers. Change 4326282 by Simon.Tourangeau nDisplay native present handler Change 4326581 by Jamie.Dale Replacing FDateTime with int64 Ticks value to workaround UE-63485 Change 4326599 by Homam.Bahnassi Moving texture coords outside UVEdit function to allow using different UV channels. Change 4333250 by Francis.Hurteau Small TFuture changes: * cleans up TFuture::Then with usage of TUniqueFunction * added TFuture::Reset to invalidate it and remove continuation from a future shared state Change 4333359 by Homam.Bahnassi Support scaling and rotating UVs around arbitrary pivot Change 4333566 by Johan.Duparc Expose ProxyLOD functionalities to Scripting #jira UEENT-1788 Change 4333988 by Jamie.Dale Allow UHT to parse FText default parameter values INVTEXT, NSLOCTEXT, LOCTABLE, and FText::GetEmpty() are supported. LOCTEXT isn't as it relies on an external macro that is known to C++ but not to UHT (NSLOCTEXT can easily be used instead). Change 4335020 by Francis.Hurteau Uncomment MessageBus::Send deprecation notice for 4.21 Update MessageBus Send usage to new API Change 4335195 by JeanMichel.Dignard Add a SetLodFromStaticMesh script utility function #jira UEENT-1789 Change 4335231 by Anousack.Kitisa Added functions to generate planar, cylindrical, box UV mapping. #jira UEENT-1598 Change 4335373 by Jamie.Dale Cleaned up some places creating empty literal texts Change 4335458 by Jamie.Dale Allow UHT to parse FText() as an alias of FText::GetEmpty() when processing default values Change 4335875 by Max.Chen Sequencer: Clear RF_Transient on pasted tracks/sections #jira UE-63537 Change 4336497 by Johan.Duparc ProxyLOD: Fix progress bar issue - removed duplicated code - removed duplicated LongTask object #jira UEENT-1788 Change 4336723 by Jamie.Dale Ensure that Python generated types create their CDO at the correct point #jira UE-62895 Change 4340594 by Ben.Marsh Fix manifest being invalidated when building two enterprise targets in a row. Fixes CIS error. #jira UE-63644 [CL 4342443 by JeanMichel Dignard in Main branch]
2018-09-04 16:35:02 -04:00
}
if (!bComponentSelectionChanged)
{
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
PostActorSelectionChanged();
}
UpdateFloatingPropertyWindows(/*bForceRefresh*/false, !bComponentSelectionChanged);
RedrawLevelEditingViewports();
}
void UUnrealEdEngine::SelectGroup(AGroupActor* InGroupActor, bool bForceSelection/*=false*/, bool bInSelected/*=true*/, bool bNotify/*=true*/)
{
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
USelection* ActorSelection = GetSelectedActors();
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
if (UTypedElementSelectionSet* SelectionSet = ActorSelection->GetElementSelectionSet())
{
FTypedElementList::FScopedClearNewPendingChange ClearNewPendingChange;
if (!bNotify)
{
ClearNewPendingChange = SelectionSet->GetScopedClearNewPendingChange();
}
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
const FTypedElementSelectionOptions SelectionOptions = FTypedElementSelectionOptions()
.SetWarnIfLocked(true)
.SetAllowGroups(false)
.SetAllowLegacyNotifications(false);
bool bSelectionChanged = false;
// Select/deselect all actors within the group (if locked or forced)
if (bForceSelection || InGroupActor->IsLocked())
{
TArray<AActor*> GroupActors;
InGroupActor->GetGroupActors(GroupActors);
TArray<FTypedElementHandle, TInlineAllocator<256>> GroupElements;
GroupElements.Reserve(GroupActors.Num());
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
for (AActor* Actor : GroupActors)
{
if (FTypedElementHandle ElementHandle = UEngineElementsLibrary::AcquireEditorActorElementHandle(Actor))
{
GroupElements.Add(MoveTemp(ElementHandle));
}
}
if (GroupElements.Num() > 0)
{
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
bSelectionChanged |= bInSelected
? SelectionSet->SelectElements(GroupElements, SelectionOptions)
: SelectionSet->DeselectElements(GroupElements, SelectionOptions);
}
}
if (bSelectionChanged)
Copying //UE4/Dev-Editor to //UE4/Dev-Main (Source: //UE4/Dev-Editor @ 3082391) #lockdown Nick.Penwarden #rb none ========================== MAJOR FEATURES + CHANGES ========================== Change 3051464 on 2016/07/15 by Nick.Darnell Regression Testing - Several upgrades to the functional testing system, better tracking of failure cases, some source line failure detection, trying to make it easier to run a specific test on a map. Some UI improvements, easier access to the automation system. Lots more refactoring to come, lots of improvements are still needed in transmitting screenshots and just generally building a automation report we could dump from the build machines. Change 3051465 on 2016/07/15 by Nick.Darnell Adding the "Engine Test" project our one stop shope for running automation tests in the engine to try and reduce regressions. Change 3051847 on 2016/07/15 by Matt.Kuhlenschmidt Fixed material editor viewport messages being blocked by viewport toolbar Change 3052025 on 2016/07/15 by Nick.Darnell Moving the placement mode hooks out of functional testing module, moving them into the editor automation module. Change 3053508 on 2016/07/18 by Stephan.Jiang Copy,Cut,Paste tracks, not for mastertracks yet. #UE-31808 Change 3054723 on 2016/07/18 by Stephan.Jiang Small fixes for typo & comments Change 3055996 on 2016/07/19 by Trung.Le PIE: No longer auto resume game in PIE on focus received Change 3056106 on 2016/07/19 by Trung.Le Back out changelist 3055996. Build break. Change 3056108 on 2016/07/19 by Stephan.Jiang Updating "SoundConcurrency" asseticon Change 3056389 on 2016/07/19 by Trung.Le PIE: No longer auto resume game in PIE on focus received #jira UE-33339 Change 3056396 on 2016/07/19 by Matt.Kuhlenschmidt More perf selection improvements: - Static meshes now go through the static draw path when rendered for selection outline instead of just rendering using the dynamic path Change 3056758 on 2016/07/19 by Stephan.Jiang Update SelectedWidgets in WidgetblueprintEditor to match the selected tracks in sequencer. Change 3057519 on 2016/07/20 by Matt.Kuhlenschmidt Another fix for selecting lots of objects taking forever. This one is due to repeated Modify calls if there are groups in the selection. Each group actor selected iterates through each object selected during USelection::Modify! Change 3057635 on 2016/07/20 by Stephan.Jiang Updating visual logger icon UI Change 3057645 on 2016/07/20 by Richard.TalbotWatkin Fixed single player PIE so the window position is correctly fetched and saved, even when running a dedicated server. This does not interfere with stored positions for multiple PIE, which uses ULevelEditorPlaySettings::MultipleInstancePositions. #jira UE-33416 - New Editor PIE window does not center to screen when running with a dedicated server Change 3057868 on 2016/07/20 by Richard.TalbotWatkin Spline component improvements, both tools and runtime: - SplineComponentVisualizer now works within the Blueprint editor. This works via a generic extension added to the base ComponentVisualizer class which correctly propagates modified properties from the preview actor to the archetype, and then on to any instances whose properties are at the default value. - The above feature required a breaking change to USplineComponent - namely, the three FInterpCurve properties have been collected together into a struct and added as a single property. This is so that changes to the length of one of the FInterpCurves marks all three as dirty and needing rebuilding. - Added a custom version for SplineComponent and provded serialization fixes. - Added a details customization to SplineComponent to hide the raw FInterpCurve properties. - Added a custom detail builder category which polls the SplineComponentVisualizer each tick and provides numerical editing for spline points which are selected in the visualizer. - Relaxed the limitation that SplineComponent keys need to have an increment of 1.0. Now any SplineComponent key can be set. The details customization enforces that the sequence remains strictly ascending. - Allowed an explicit loop point to be specified for closed splines. - Allowed discontinuous splines by no longer forcing the ArriveTangent and LeaveTangent to be equal. - Added some new Blueprintable methods for building splines with an FSplinePoint struct, which allows all of a spline point's properties to be specified, and added to the FInterpCurves sorted by the input key. - Fixed the logic which determines whether the UCS has modified the spline curves. - Added UActorComponent::RemoveUCSModifiedProperties, which allows a component to remove any properties from the cached list which it doesn't want to be considered as 'modified'. This is used to distinguish the case of properties preserved by the SplineInstanceDataCache from those genuinely modified by the UCS. - Fixed "Apply Instance Changes to Blueprint" so that edited spline data can be applied to the archetype. - Fixed some issues with the spline component visualizer to make it generate appropriate up vectors if scale and rotation are enabled. #jira UETOOL-766 - Spline tool improvements #jira UE-33049 - Transform widget visible in blueprint viewport when editing spline points in editor viewport #jira UE-9062 - Spline editing: It would be nice to be able to type in a specific value for a point #jira UE-7476 - Add ability to edit SplineComponent in BP editor (not just instance in level) #jira UE-13082 - Users would like a snapping feature for splines #jira UE-13568 - Additional Spline Component Functionality #jira UE-17822 - It would be useful to be able to update a bp spline layout from the editor viewport. Change 3057895 on 2016/07/20 by Richard.TalbotWatkin Mesh paint bugfixes and improvements. Changes to RerunConstructionScript so that OnObjectsReplaced is called correctly on all components, whether they have been created by the SCS or the UCS. Previously, components created by the UCS were not being handled, and components created by the SCS were not always being matched. Now a serialized index is maintained for UCS-created objects, which is matched after the construction scripts have been executed. This will fix issues with the mesh paint tool, and any other editor tool which hooks into the OnObjectsReplaced callback in order to update its internal cache of component pointers, for example, the component visualizer render list. #jira UE-33010 - Crash changing mesh paint material in blueprint, then changing to a different mode tab #jira UE-32279 - Editor crashes when reselecting a mesh in paint mode #jira UE-31763 - [CrashReport] UE4Editor_MeshPaint!FMulticastDelegateBase<FWeakObjectPtr>::RemoveAll() [multicastdelegatebase.h:75] #jira UE-30661 - Vertex Painting changes collision complexity if the asset is saved while vertex painting Change 3057966 on 2016/07/20 by Richard.TalbotWatkin Renamed IsEditingArchetype to IsVisualizingArchetype in the ComponentVisualizer API. #jira UE-33049 - Transform widget visible in blueprint viewport when editing spline points in editor viewport Change 3058009 on 2016/07/20 by Richard.TalbotWatkin Fixed build failure due to changes to FComponentVisualizer API, as of CL 3057868. Change 3058047 on 2016/07/20 by Stephan.Jiang Fixing error on previous CL: 3056758 (extra qualification) Change 3058266 on 2016/07/20 by Nick.Darnell Automation - Work continues on automation integrating some ideas form a licensee. Continuing to work on the usability aspects, I've made it possible for tests to provide custom open commands, as well as have complex subclasses that do different things. The functional tests now have a custom open command they emit that makes it so clicking on a test opens not the C++ location where the functional test macro lives, but instead the map, AND focuses the functional test actor. Change 3058282 on 2016/07/20 by Matt.Kuhlenschmidt PR #2611: Fix spurious component diff when properties are in subcategories (Contributed by CA-ADuran) Change 3059214 on 2016/07/21 by Richard.TalbotWatkin Further fixes to visualizers following Component Visualizer API change. Change 3059260 on 2016/07/21 by Richard.TalbotWatkin Template specialization not allowed in class scope, but Visual Studio allows it anyway. Fixed for clang. Change 3059543 on 2016/07/21 by Stephan.Jiang Changeing level details icon Change 3059732 on 2016/07/21 by Stephan.Jiang Directional Light icon update Change 3060095 on 2016/07/21 by Stephan.Jiang Directional Light editor icon asset changed Change 3060129 on 2016/07/21 by Nick.Darnell Automation - The session browser now attempts to select the app instance if no other thing is selected when it refreshes. This is to try and make it easier to use when you first bring it up and nothing is selected when most of the time you're going to use it on your own instance. Change 3061735 on 2016/07/22 by Stephan.Jiang Improve UMG replace with in HierarchyView function #UE-33582 Change 3062059 on 2016/07/22 by Stephan.Jiang Strip off "b" in propertyname in replace with function for tracks. Change 3062146 on 2016/07/22 by Stephan.Jiang checkin with CL: 3061735 Change 3062182 on 2016/07/22 by Stephan.Jiang Change both animation bindings' widget name when renameing the widget so the slot content is still valid Change 3062257 on 2016/07/22 by Stephan.Jiang comments Change 3062381 on 2016/07/22 by Nick.Darnell Build - Adding #undef LOCTEXT_NAMESPACE to try and fix the build. Change 3062924 on 2016/07/25 by Chris.Wood Fix a crash in CrashReportClient that happens when the CrashReportReceiver is not responding to pings and there are no PendingReportDirectories. This is a change in the UE4 stream depot based on a fix in the Fortnite stream depot -> JIRA FORT-27570 Change 3063017 on 2016/07/25 by Matt.Kuhlenschmidt PR #2618: DebuggerCommand not recording PlayLocationString (Contributed by ungalyant) Change 3063021 on 2016/07/25 by Matt.Kuhlenschmidt PR #2619: added a search box to ModuleUI (Contributed by straymist) Change 3063084 on 2016/07/25 by Matt.Kuhlenschmidt Fix "YesToAll" when deleting referenced actors overriding the "YesToAll" state for other referenced messages. https://jira.ol.epicgames.net/browse/UE-33651 #jira UE-33651 Change 3063091 on 2016/07/25 by Alex.Delesky #jira UE-32949 - Truncating the hue inside the theme color block tooltip to only display whole numbers, to match how the color picker displays the hue value inside the hue scrubber. Change 3063388 on 2016/07/25 by Matt.Kuhlenschmidt Selection Perf: - Fix large FName creation time when selecting thousands of objects Change 3063568 on 2016/07/25 by Matt.Kuhlenschmidt Selection Perf: - Modified how USelection stores classes. Classes are now in a TSet and can be accessed efficiently using IsClassSelected. The old unused way of checking if a selection has a class by iterating through them is deprecated - USelection no longer directly checks if an item is already selected with a costly n^2 search. The check is done by using the already existing UObject selected annotation - Object property nodes no longer perform an n^2 check for object uniqueness when objects are added to details panels. This is now left up to the caller to avoid - Eliminated useless work on FObjectPropertyNode::GetReadAddressUncached. If a read address list is not passed in we'll not attempt to the work to populate it - Removed expensive checking for brush actors when any actor is selected Change 3063749 on 2016/07/25 by Stephan.Jiang Disallow naming the widgetanimation to the same name with a override function in uuserwidget, because it will trigger a breakpoint in Rename() #jira UE-33711 Change 3064585 on 2016/07/26 by Matt.Kuhlenschmidt Merging //UE4/Dev-Main to Dev-Editor (//UE4/Dev-Editor) Change 3064612 on 2016/07/26 by Alex.Delesky #jira UE-33712 - Deleting many assets at once will now batch SourceControl commands rather than executing one for each asset. Change 3064647 on 2016/07/26 by Alexis.Matte #jira UE-33274 dont hash the same file over and over when importing multiple asset from one fbx file. Change 3064739 on 2016/07/26 by Matt.Kuhlenschmidt Fixed typo Change 3064795 on 2016/07/26 by Jamie.Dale Fixed typo in FLocalizationModule::GetLocalizationTargetByName #jira UE-32961 Change 3066461 on 2016/07/27 by Jamie.Dale Enabled stable localization keys Change 3066463 on 2016/07/27 by Jamie.Dale Set "Build Engine Localization" to upload all cultures to ensure we don't lose translation due to the archive keying changes Change 3066467 on 2016/07/27 by Jamie.Dale Updated internationalization archives to store translations per-identity This allows translators to translate each instance of a piece of text based upon their context, rather than requiring a content producer to go back and give the entry a unique namespace. It also allows us to optionally compile out-of-date translations, as they are now mapped to their source identity (namespace + key) rather than their source text. Major changes: - Added FLocTextHelper. This acts as a high-level API for uncompiled localized text, and replaces all the old ad-hoc loading/saving of manifests and archives, ensuring that everything is consistently using source control, and that older archives can be upgraded correctly to the new format. It also takes care of some of the quirks of our archives, such as native translations. All major localization commandlets have been updated to use FLocTextHelper. - Moved FTextLocalizationResourceGenerator from Core to Internationalization. This also allows IJsonInternationalizationManifestSerializer and IJsonInternationalizationArchiveSerializer to be removed, and for FJsonInternationalizationManifestSerializer and FJsonInternationalizationArchiveSerializer to have all their functions become static. - FTextLocalizationResourceGenerator being moved from Core meant that FTextLocalizationManager::LoadFromManifestAndArchives was also removed. This functionality is now handled by FTextLocalizationResourceGenerator::GenerateAndUpdateLiveEntriesFromConfig. - The RepairLocalizationData commandlet has been removed. This existed to fix a change that pre-dated 4.0 so no such data should exist in the wild, and the commandlet couldn't be updated to work with the new API (we handle format upgrades in-place now). - Removed FInternationalizationArchive::FindEntryBySource as it is no-longer safe to use. All existing code has been updated to use FInternationalizationArchive::FindEntryByKey instead. Workflow changes: - Archive conditioning now only adds new entries if they don't exist in the archive. This allows us to persist any existing translations, even if they're for old source text (caveat: native archives still update existing entries if the source is changed). - PO export now sets the msgctx for each entry to be "namespace,key", rather than only doing it when the entry had key meta-data. - PO import will now update both the source and translation stored in the archive to match the current PO data. This is the primary method by which stale source->translation pairs are updated. - LocRes compilation may now optionally compile stale translations. There's an option controlling this (defaulted to off) that can be changed via the Localization Dashboard (or added to an existing config file). Format changes: - The archive version was bumped to 2. - Archive entries now use the "Key" entry to store the key from the source text. Previously this "Key" entry was used to store the key meta-data, but that now exists within a "MetaData" sub-object. Loading handles this correctly based upon the archive version. #jira UETOOL-897 #jira UETOOL-898 #jira UE-29481 Change 3066487 on 2016/07/27 by Matt.Kuhlenschmidt Attempt to fix linux compilation Change 3066504 on 2016/07/27 by Matt.Kuhlenschmidt Fixed data tables with structs crashing due to recent editor selection optimizations Change 3066886 on 2016/07/27 by Jamie.Dale Added required data to accurately detect TZ (needed for DST) #jira UE-28511 Change 3067122 on 2016/07/27 by Jamie.Dale Added AsTime, AsDateTime, and AsDate overrides to BP to let you format a UTC time in a given timezone (default is the local timezone). Previously you could only format times using the "invariant" timezone, which assumed that the time was already specified in the correct timezone for display. Change 3067227 on 2016/07/27 by Jamie.Dale Added a test to verify that the ICU timezone is set correctly to produce local time (including DST) Change 3067313 on 2016/07/27 by Richard.TalbotWatkin Fixed SplineComponent constructor so that old assets (prior to the property changes) load correctly if they had properties at default values. #jira UE-33669 - Crash in Dev-Editor Change 3067736 on 2016/07/27 by Stephan.Jiang Border changes for experimental classes warning Change 3067769 on 2016/07/27 by Stephan.Jiang HERE BE DRAGONS for experimental class warning #UE-33780 Change 3068192 on 2016/07/28 by Alexis.Matte #jira UE-33586 make sure we remove any false warning when running fbx automation test. Change 3068264 on 2016/07/28 by Jamie.Dale Removed some code that was no longer needed and could cause a crash #jira UE-33342 Change 3068293 on 2016/07/28 by Alex.Delesky #jira UE-33620 - Comments on constant and parameter nodes in the Material Editor will now persist when converting them. Change 3068481 on 2016/07/28 by Stephan.Jiang Adding Options to show/hide soft & hard references & dependencies in References Viewer #jira UE-33746 Change 3068585 on 2016/07/28 by Richard.TalbotWatkin Fix to Spline Mesh collision building so that geometry does not default to being auto-inflated in PhysX. Change 3068701 on 2016/07/28 by Matt.Kuhlenschmidt Fixed some issues with the selected classes not updating when objects are deselected Change 3069335 on 2016/07/28 by Jamie.Dale Fixed unintended error when trying to load a manifest/archive that didn't exist Fixed a warning when trying to load a PO file that didn't exist Change 3069408 on 2016/07/28 by Alex.Delesky #jira UE-33429 - The editor should no longer hit an ensure if the user attempts to drop a tab into a tab well before the tab well has a chance to acknowledge its been dragged into a tab well. Change 3069878 on 2016/07/29 by Jamie.Dale Fixed include casing #jira UE-33910 Change 3071807 on 2016/08/01 by Matt.Kuhlenschmidt PR #2654: Fix the spell'ing of "diff'ing" and "diff'd". (Contributed by geary) Change 3071813 on 2016/08/01 by Jamie.Dale Fixed include casing #jira UE-33936 Change 3072043 on 2016/08/01 by Jamie.Dale Fixed FText formatting of pre-Gregorian dates We now convert to an ICU UDate via an ICU GregorianCalendar, as UE4 and ICU have a different time scale for pre-Gregorian dates. #jira UE-14504 Change 3072066 on 2016/08/01 by Jamie.Dale PR #2590: FEATURE: Collapse/expand folders in the outliner (Contributed by projectgheist) Change 3072149 on 2016/08/01 by Jamie.Dale We no longer use the editor culture when running with -game Change 3072169 on 2016/08/01 by Richard.TalbotWatkin A couple of changes to the BSP code: * Fixed longstanding issue where sometimes BSP geometry is not rebuilt correctly after editing it. This was due to poly normals not being recalculated after translating vertices in Geometry Mode. * Fixed corruption to FPoly::iLink as it is overloaded to have two meanings: when building BSP, it represents the surface index of the next coplanar surface (and adding a new BSP node uses this to determine whether a new surface needs to be added or not). In other operations it represents an FPoly index, in general this is used more in editor geometry operations. This fixes various crashes which arose from rebuilding BSP resulting in invalid FPoly indices. #jira UE-12157 - BSP brushes break when non-standard subtractive bsp brushes are used #jira UE-32087 - Crash occurs when creating Static Mesh from Trigger Volume Change 3072221 on 2016/08/01 by Jamie.Dale Fixed "Launch On" not providing the correct cultures to StartCookByTheBookInEditor #jira UE-33001 Change 3073389 on 2016/08/02 by Matt.Kuhlenschmidt Added ability to vsync the editor. Disabled by default. Set r.VSyncEditor to 1 to enable it. Reimplemented this change from the siggraph demo stream Change 3073396 on 2016/08/02 by Matt.Kuhlenschmidt Removed unused code as suggested by a pull request Change 3073750 on 2016/08/02 by Richard.TalbotWatkin Fixed formatting (broken in CL 3057895) in anticipation of merge from Main. Change 3073789 on 2016/08/02 by Jamie.Dale Added a way to mark text in text properties as culture invariant This allows you to flag properties containing text that doesn't need to be gathered. #jira UE-33713 Change 3073825 on 2016/08/02 by Stephan.Jiang Material Editor: Highligh all Nodes connect to an input. #jira UE-32502 Change 3073947 on 2016/08/02 by Stephan.Jiang UMG Project settings to show/hide different classes and categories in Palette view. --under Project Settings ->Editor->UMG Editor Change 3074012 on 2016/08/02 by Stephan.Jiang Minor changes and comments for CL: 3073947 Change 3074029 on 2016/08/02 by Jamie.Dale Deleting folders in the Content Browser now removes the folder from disk #jira UE-24303 Change 3074054 on 2016/08/02 by Matt.Kuhlenschmidt Added missing stats to track pooled vertex and index buffer cpu memory A new slate allocator was added to track memory usage for this case. Change 3074056 on 2016/08/02 by Matt.Kuhlenschmidt Renamed a few slate stats for consistency Change 3074810 on 2016/08/02 by Matt.Kuhlenschmidt Moved geometry cache asset type to the animation category. It is not a basic asset type Change 3074826 on 2016/08/02 by Matt.Kuhlenschmidt Fix a few padding and sizing issues Change 3075322 on 2016/08/03 by Matt.Kuhlenschmidt Settings UI improvements * Added the ability to search through all settings at once * Settings files which are not checked out are no longer grayed out. The editor now attempts to check out the file automatically if connected to source control and if that fails it marks the settings file writiable so it can save the setting properly ------- * This change adds a refactor to the details panel to support multiple top level objects existing in the details panel at once instead of combining all passed in objects to a single common base class. This is disabled by default but can be turned on setting bAllowMultipleTopLevelObjects to true in FDetailsViewArgs when creating a details panel. * Each top level object in a details panel will get their own customization instance. This made it necessary to deprecate a IDetailsView::GetBaseClass since there is no longer guaranteed to be one base class. *Details panels can have their own customization for each "root object header" in order to customize the look of having multiple top level objects in the details panel. Change 3075369 on 2016/08/03 by Matt.Kuhlenschmidt Removed FBX scene as a top level option in asset filter menu in the content browser. Change 3075556 on 2016/08/03 by Matt.Kuhlenschmidt Mac warning fix Change 3075603 on 2016/08/03 by Nick.Darnell Adding two new plugins to engine, one for editor and one for runtime based testing. Currently the only consumer of these plugins is going to be the EngineTest project. Change 3075605 on 2016/08/03 by Nick.Darnell Functional Testing - Continued work on cleanup, reorganization, trying to improve the workflow for using the session browser. Change 3076084 on 2016/08/03 by Jamie.Dale Added basic support for localizing plugins You can now localize plugins! There's no localization dashboard integration for this so it has to be done manually. You need to define the localization targets your plugin uses in its .uplugin file, eg) "LocalizationTargets": [ { "Name": "Paper2D", "LoadingPolicy": "Always" } ] "Name" should match a localization config under the Config/Localization folder for your plugin. These configs are set-up the same as any other localization config. "LoadingPolicy" may be one of Never, Always, Editor, Game, PropertyNames, or ToolTips. This allows you to control under what conditions your localizations should be loaded (eg, if your plugin has both game and editor data, you can separate the editor data off into its own localization target that's only loaded by the editor). UAT has been updated to support gathering from plugins. You can use the "IncludePlugins" flag to have it gather all plugins, or you can specify a whitelist of plugins to gather as an argument to "IncludePlugins", or alternatively, may blacklist certain plugins via "ExcludePlugins". It can now also support out-of-source gathering via the "UEProjectRoot" argument (previously it assumed that everything would be under the UE4 install/checkout directory). UAT has been updated to support staging plugin LocRes files. It will stage any plugin targets that are enabled for a game/client build, and are also from a plugin that's enabled for your project. #jira UE-4217 Change 3076123 on 2016/08/03 by Stephan.Jiang Extend "Select all input nodes" function to general blueprint editor Change 3077103 on 2016/08/04 by Jamie.Dale Added support for underlined text rendering (including with drop-shadows) FTextBlockStyle can now specify a brush to use to draw an underline for text (a suitable default would be "DefaultTextUnderline" from FCoreStyle). When a brush is specified here, we inject FSlateTextUnderlineLineHighlighter highlights into the text layout to draw the underline under the relevant pieces of text, using the correct color, position, and thickness. FSlateFontCache::GetUnderlineMetrics and FSlateFontRenderer::GetUnderlineMetrics have been added to handle getting the underline metrics (which are slightly different to the baseline). This change also adds FTextLayout::RemoveRunRenderer and FTextLayout::RemoveLineHighlight to fix some bad assumptions that FSlateEditableTextLayout and FTextBlockLayout were making about ownership of run renderers and line highlighters that could cause them to remove instances they didn't own (such as the new underline highlighter) when updating things like the cursor position or highlight. Change 3077842 on 2016/08/04 by Jamie.Dale Fixed fallout from API changes Change 3077999 on 2016/08/04 by Jamie.Dale Ensured that BULKDATA_SingleUse is only set by UFontBulkData::Serialize when loading This prevents it being incorrectly set by other operations, such as counting memory used by font data. #jira UE-34252 Change 3078000 on 2016/08/04 by Trung.Le Categories VREditor-specific UMG widget assets as "VR Editor" #jira UE-34134 Change 3078056 on 2016/08/04 by Nick.Darnell Build - Fixing a mac compiler warning, reodering constructor initializers. Change 3078813 on 2016/08/05 by Nick.Darnell Reorganizing editor tests, establishing plugins in the EditorTest project that will house the tests. Change 3078818 on 2016/08/05 by Nick.Darnell Additional rename and cleanup associated with test moving. Change 3078819 on 2016/08/05 by Nick.Darnell Removing the Oculus performance automation test, not running, and was unclaimed. Change 3078842 on 2016/08/05 by Nick.Darnell Continued reorganizing tests. Change 3078897 on 2016/08/05 by Nick.Darnell Additional changes to get some moved tests compiling Change 3079157 on 2016/08/05 by Nick.Darnell Making it possible to browse provider names thorugh the source control module interface. Change 3079176 on 2016/08/05 by Stephan.Jiang Add shortcut Ctrl+Shift+Space to rotate through different viewport options #jira UE-34140 Change 3079208 on 2016/08/05 by Stephan.Jiang Fix new animation name check in UMG Change 3079278 on 2016/08/05 by Nick.Darnell Fixing the build Change 3080555 on 2016/08/08 by Matt.Kuhlenschmidt Merging //UE4/Dev-Main to Dev-Editor (//UE4/Dev-Editor) Change 3081155 on 2016/08/08 by Nick.Darnell Fixing some issues with the editor tests / runtime tests under certain build configs. Change 3081243 on 2016/08/08 by Stephan.Jiang Add gesture in LevelViewport to switch between Top/Bottom...etc. Change 3082226 on 2016/08/09 by Matt.Kuhlenschmidt Work around animations not playing in paragon due to bsp rebuilds (UE-34391) Change 3082254 on 2016/08/09 by Stephan.Jiang DragTool_ViewportChange init changes [CL 3082411 by Matt Kuhlenschmidt in Main branch]
2016-08-09 11:28:56 -04:00
{
if (bNotify)
{
SelectionSet->NotifyPendingChanges();
}
Copying //UE4/Dev-Editor to //UE4/Dev-Main (Source: //UE4/Dev-Editor @ 3082391) #lockdown Nick.Penwarden #rb none ========================== MAJOR FEATURES + CHANGES ========================== Change 3051464 on 2016/07/15 by Nick.Darnell Regression Testing - Several upgrades to the functional testing system, better tracking of failure cases, some source line failure detection, trying to make it easier to run a specific test on a map. Some UI improvements, easier access to the automation system. Lots more refactoring to come, lots of improvements are still needed in transmitting screenshots and just generally building a automation report we could dump from the build machines. Change 3051465 on 2016/07/15 by Nick.Darnell Adding the "Engine Test" project our one stop shope for running automation tests in the engine to try and reduce regressions. Change 3051847 on 2016/07/15 by Matt.Kuhlenschmidt Fixed material editor viewport messages being blocked by viewport toolbar Change 3052025 on 2016/07/15 by Nick.Darnell Moving the placement mode hooks out of functional testing module, moving them into the editor automation module. Change 3053508 on 2016/07/18 by Stephan.Jiang Copy,Cut,Paste tracks, not for mastertracks yet. #UE-31808 Change 3054723 on 2016/07/18 by Stephan.Jiang Small fixes for typo & comments Change 3055996 on 2016/07/19 by Trung.Le PIE: No longer auto resume game in PIE on focus received Change 3056106 on 2016/07/19 by Trung.Le Back out changelist 3055996. Build break. Change 3056108 on 2016/07/19 by Stephan.Jiang Updating "SoundConcurrency" asseticon Change 3056389 on 2016/07/19 by Trung.Le PIE: No longer auto resume game in PIE on focus received #jira UE-33339 Change 3056396 on 2016/07/19 by Matt.Kuhlenschmidt More perf selection improvements: - Static meshes now go through the static draw path when rendered for selection outline instead of just rendering using the dynamic path Change 3056758 on 2016/07/19 by Stephan.Jiang Update SelectedWidgets in WidgetblueprintEditor to match the selected tracks in sequencer. Change 3057519 on 2016/07/20 by Matt.Kuhlenschmidt Another fix for selecting lots of objects taking forever. This one is due to repeated Modify calls if there are groups in the selection. Each group actor selected iterates through each object selected during USelection::Modify! Change 3057635 on 2016/07/20 by Stephan.Jiang Updating visual logger icon UI Change 3057645 on 2016/07/20 by Richard.TalbotWatkin Fixed single player PIE so the window position is correctly fetched and saved, even when running a dedicated server. This does not interfere with stored positions for multiple PIE, which uses ULevelEditorPlaySettings::MultipleInstancePositions. #jira UE-33416 - New Editor PIE window does not center to screen when running with a dedicated server Change 3057868 on 2016/07/20 by Richard.TalbotWatkin Spline component improvements, both tools and runtime: - SplineComponentVisualizer now works within the Blueprint editor. This works via a generic extension added to the base ComponentVisualizer class which correctly propagates modified properties from the preview actor to the archetype, and then on to any instances whose properties are at the default value. - The above feature required a breaking change to USplineComponent - namely, the three FInterpCurve properties have been collected together into a struct and added as a single property. This is so that changes to the length of one of the FInterpCurves marks all three as dirty and needing rebuilding. - Added a custom version for SplineComponent and provded serialization fixes. - Added a details customization to SplineComponent to hide the raw FInterpCurve properties. - Added a custom detail builder category which polls the SplineComponentVisualizer each tick and provides numerical editing for spline points which are selected in the visualizer. - Relaxed the limitation that SplineComponent keys need to have an increment of 1.0. Now any SplineComponent key can be set. The details customization enforces that the sequence remains strictly ascending. - Allowed an explicit loop point to be specified for closed splines. - Allowed discontinuous splines by no longer forcing the ArriveTangent and LeaveTangent to be equal. - Added some new Blueprintable methods for building splines with an FSplinePoint struct, which allows all of a spline point's properties to be specified, and added to the FInterpCurves sorted by the input key. - Fixed the logic which determines whether the UCS has modified the spline curves. - Added UActorComponent::RemoveUCSModifiedProperties, which allows a component to remove any properties from the cached list which it doesn't want to be considered as 'modified'. This is used to distinguish the case of properties preserved by the SplineInstanceDataCache from those genuinely modified by the UCS. - Fixed "Apply Instance Changes to Blueprint" so that edited spline data can be applied to the archetype. - Fixed some issues with the spline component visualizer to make it generate appropriate up vectors if scale and rotation are enabled. #jira UETOOL-766 - Spline tool improvements #jira UE-33049 - Transform widget visible in blueprint viewport when editing spline points in editor viewport #jira UE-9062 - Spline editing: It would be nice to be able to type in a specific value for a point #jira UE-7476 - Add ability to edit SplineComponent in BP editor (not just instance in level) #jira UE-13082 - Users would like a snapping feature for splines #jira UE-13568 - Additional Spline Component Functionality #jira UE-17822 - It would be useful to be able to update a bp spline layout from the editor viewport. Change 3057895 on 2016/07/20 by Richard.TalbotWatkin Mesh paint bugfixes and improvements. Changes to RerunConstructionScript so that OnObjectsReplaced is called correctly on all components, whether they have been created by the SCS or the UCS. Previously, components created by the UCS were not being handled, and components created by the SCS were not always being matched. Now a serialized index is maintained for UCS-created objects, which is matched after the construction scripts have been executed. This will fix issues with the mesh paint tool, and any other editor tool which hooks into the OnObjectsReplaced callback in order to update its internal cache of component pointers, for example, the component visualizer render list. #jira UE-33010 - Crash changing mesh paint material in blueprint, then changing to a different mode tab #jira UE-32279 - Editor crashes when reselecting a mesh in paint mode #jira UE-31763 - [CrashReport] UE4Editor_MeshPaint!FMulticastDelegateBase<FWeakObjectPtr>::RemoveAll() [multicastdelegatebase.h:75] #jira UE-30661 - Vertex Painting changes collision complexity if the asset is saved while vertex painting Change 3057966 on 2016/07/20 by Richard.TalbotWatkin Renamed IsEditingArchetype to IsVisualizingArchetype in the ComponentVisualizer API. #jira UE-33049 - Transform widget visible in blueprint viewport when editing spline points in editor viewport Change 3058009 on 2016/07/20 by Richard.TalbotWatkin Fixed build failure due to changes to FComponentVisualizer API, as of CL 3057868. Change 3058047 on 2016/07/20 by Stephan.Jiang Fixing error on previous CL: 3056758 (extra qualification) Change 3058266 on 2016/07/20 by Nick.Darnell Automation - Work continues on automation integrating some ideas form a licensee. Continuing to work on the usability aspects, I've made it possible for tests to provide custom open commands, as well as have complex subclasses that do different things. The functional tests now have a custom open command they emit that makes it so clicking on a test opens not the C++ location where the functional test macro lives, but instead the map, AND focuses the functional test actor. Change 3058282 on 2016/07/20 by Matt.Kuhlenschmidt PR #2611: Fix spurious component diff when properties are in subcategories (Contributed by CA-ADuran) Change 3059214 on 2016/07/21 by Richard.TalbotWatkin Further fixes to visualizers following Component Visualizer API change. Change 3059260 on 2016/07/21 by Richard.TalbotWatkin Template specialization not allowed in class scope, but Visual Studio allows it anyway. Fixed for clang. Change 3059543 on 2016/07/21 by Stephan.Jiang Changeing level details icon Change 3059732 on 2016/07/21 by Stephan.Jiang Directional Light icon update Change 3060095 on 2016/07/21 by Stephan.Jiang Directional Light editor icon asset changed Change 3060129 on 2016/07/21 by Nick.Darnell Automation - The session browser now attempts to select the app instance if no other thing is selected when it refreshes. This is to try and make it easier to use when you first bring it up and nothing is selected when most of the time you're going to use it on your own instance. Change 3061735 on 2016/07/22 by Stephan.Jiang Improve UMG replace with in HierarchyView function #UE-33582 Change 3062059 on 2016/07/22 by Stephan.Jiang Strip off "b" in propertyname in replace with function for tracks. Change 3062146 on 2016/07/22 by Stephan.Jiang checkin with CL: 3061735 Change 3062182 on 2016/07/22 by Stephan.Jiang Change both animation bindings' widget name when renameing the widget so the slot content is still valid Change 3062257 on 2016/07/22 by Stephan.Jiang comments Change 3062381 on 2016/07/22 by Nick.Darnell Build - Adding #undef LOCTEXT_NAMESPACE to try and fix the build. Change 3062924 on 2016/07/25 by Chris.Wood Fix a crash in CrashReportClient that happens when the CrashReportReceiver is not responding to pings and there are no PendingReportDirectories. This is a change in the UE4 stream depot based on a fix in the Fortnite stream depot -> JIRA FORT-27570 Change 3063017 on 2016/07/25 by Matt.Kuhlenschmidt PR #2618: DebuggerCommand not recording PlayLocationString (Contributed by ungalyant) Change 3063021 on 2016/07/25 by Matt.Kuhlenschmidt PR #2619: added a search box to ModuleUI (Contributed by straymist) Change 3063084 on 2016/07/25 by Matt.Kuhlenschmidt Fix "YesToAll" when deleting referenced actors overriding the "YesToAll" state for other referenced messages. https://jira.ol.epicgames.net/browse/UE-33651 #jira UE-33651 Change 3063091 on 2016/07/25 by Alex.Delesky #jira UE-32949 - Truncating the hue inside the theme color block tooltip to only display whole numbers, to match how the color picker displays the hue value inside the hue scrubber. Change 3063388 on 2016/07/25 by Matt.Kuhlenschmidt Selection Perf: - Fix large FName creation time when selecting thousands of objects Change 3063568 on 2016/07/25 by Matt.Kuhlenschmidt Selection Perf: - Modified how USelection stores classes. Classes are now in a TSet and can be accessed efficiently using IsClassSelected. The old unused way of checking if a selection has a class by iterating through them is deprecated - USelection no longer directly checks if an item is already selected with a costly n^2 search. The check is done by using the already existing UObject selected annotation - Object property nodes no longer perform an n^2 check for object uniqueness when objects are added to details panels. This is now left up to the caller to avoid - Eliminated useless work on FObjectPropertyNode::GetReadAddressUncached. If a read address list is not passed in we'll not attempt to the work to populate it - Removed expensive checking for brush actors when any actor is selected Change 3063749 on 2016/07/25 by Stephan.Jiang Disallow naming the widgetanimation to the same name with a override function in uuserwidget, because it will trigger a breakpoint in Rename() #jira UE-33711 Change 3064585 on 2016/07/26 by Matt.Kuhlenschmidt Merging //UE4/Dev-Main to Dev-Editor (//UE4/Dev-Editor) Change 3064612 on 2016/07/26 by Alex.Delesky #jira UE-33712 - Deleting many assets at once will now batch SourceControl commands rather than executing one for each asset. Change 3064647 on 2016/07/26 by Alexis.Matte #jira UE-33274 dont hash the same file over and over when importing multiple asset from one fbx file. Change 3064739 on 2016/07/26 by Matt.Kuhlenschmidt Fixed typo Change 3064795 on 2016/07/26 by Jamie.Dale Fixed typo in FLocalizationModule::GetLocalizationTargetByName #jira UE-32961 Change 3066461 on 2016/07/27 by Jamie.Dale Enabled stable localization keys Change 3066463 on 2016/07/27 by Jamie.Dale Set "Build Engine Localization" to upload all cultures to ensure we don't lose translation due to the archive keying changes Change 3066467 on 2016/07/27 by Jamie.Dale Updated internationalization archives to store translations per-identity This allows translators to translate each instance of a piece of text based upon their context, rather than requiring a content producer to go back and give the entry a unique namespace. It also allows us to optionally compile out-of-date translations, as they are now mapped to their source identity (namespace + key) rather than their source text. Major changes: - Added FLocTextHelper. This acts as a high-level API for uncompiled localized text, and replaces all the old ad-hoc loading/saving of manifests and archives, ensuring that everything is consistently using source control, and that older archives can be upgraded correctly to the new format. It also takes care of some of the quirks of our archives, such as native translations. All major localization commandlets have been updated to use FLocTextHelper. - Moved FTextLocalizationResourceGenerator from Core to Internationalization. This also allows IJsonInternationalizationManifestSerializer and IJsonInternationalizationArchiveSerializer to be removed, and for FJsonInternationalizationManifestSerializer and FJsonInternationalizationArchiveSerializer to have all their functions become static. - FTextLocalizationResourceGenerator being moved from Core meant that FTextLocalizationManager::LoadFromManifestAndArchives was also removed. This functionality is now handled by FTextLocalizationResourceGenerator::GenerateAndUpdateLiveEntriesFromConfig. - The RepairLocalizationData commandlet has been removed. This existed to fix a change that pre-dated 4.0 so no such data should exist in the wild, and the commandlet couldn't be updated to work with the new API (we handle format upgrades in-place now). - Removed FInternationalizationArchive::FindEntryBySource as it is no-longer safe to use. All existing code has been updated to use FInternationalizationArchive::FindEntryByKey instead. Workflow changes: - Archive conditioning now only adds new entries if they don't exist in the archive. This allows us to persist any existing translations, even if they're for old source text (caveat: native archives still update existing entries if the source is changed). - PO export now sets the msgctx for each entry to be "namespace,key", rather than only doing it when the entry had key meta-data. - PO import will now update both the source and translation stored in the archive to match the current PO data. This is the primary method by which stale source->translation pairs are updated. - LocRes compilation may now optionally compile stale translations. There's an option controlling this (defaulted to off) that can be changed via the Localization Dashboard (or added to an existing config file). Format changes: - The archive version was bumped to 2. - Archive entries now use the "Key" entry to store the key from the source text. Previously this "Key" entry was used to store the key meta-data, but that now exists within a "MetaData" sub-object. Loading handles this correctly based upon the archive version. #jira UETOOL-897 #jira UETOOL-898 #jira UE-29481 Change 3066487 on 2016/07/27 by Matt.Kuhlenschmidt Attempt to fix linux compilation Change 3066504 on 2016/07/27 by Matt.Kuhlenschmidt Fixed data tables with structs crashing due to recent editor selection optimizations Change 3066886 on 2016/07/27 by Jamie.Dale Added required data to accurately detect TZ (needed for DST) #jira UE-28511 Change 3067122 on 2016/07/27 by Jamie.Dale Added AsTime, AsDateTime, and AsDate overrides to BP to let you format a UTC time in a given timezone (default is the local timezone). Previously you could only format times using the "invariant" timezone, which assumed that the time was already specified in the correct timezone for display. Change 3067227 on 2016/07/27 by Jamie.Dale Added a test to verify that the ICU timezone is set correctly to produce local time (including DST) Change 3067313 on 2016/07/27 by Richard.TalbotWatkin Fixed SplineComponent constructor so that old assets (prior to the property changes) load correctly if they had properties at default values. #jira UE-33669 - Crash in Dev-Editor Change 3067736 on 2016/07/27 by Stephan.Jiang Border changes for experimental classes warning Change 3067769 on 2016/07/27 by Stephan.Jiang HERE BE DRAGONS for experimental class warning #UE-33780 Change 3068192 on 2016/07/28 by Alexis.Matte #jira UE-33586 make sure we remove any false warning when running fbx automation test. Change 3068264 on 2016/07/28 by Jamie.Dale Removed some code that was no longer needed and could cause a crash #jira UE-33342 Change 3068293 on 2016/07/28 by Alex.Delesky #jira UE-33620 - Comments on constant and parameter nodes in the Material Editor will now persist when converting them. Change 3068481 on 2016/07/28 by Stephan.Jiang Adding Options to show/hide soft & hard references & dependencies in References Viewer #jira UE-33746 Change 3068585 on 2016/07/28 by Richard.TalbotWatkin Fix to Spline Mesh collision building so that geometry does not default to being auto-inflated in PhysX. Change 3068701 on 2016/07/28 by Matt.Kuhlenschmidt Fixed some issues with the selected classes not updating when objects are deselected Change 3069335 on 2016/07/28 by Jamie.Dale Fixed unintended error when trying to load a manifest/archive that didn't exist Fixed a warning when trying to load a PO file that didn't exist Change 3069408 on 2016/07/28 by Alex.Delesky #jira UE-33429 - The editor should no longer hit an ensure if the user attempts to drop a tab into a tab well before the tab well has a chance to acknowledge its been dragged into a tab well. Change 3069878 on 2016/07/29 by Jamie.Dale Fixed include casing #jira UE-33910 Change 3071807 on 2016/08/01 by Matt.Kuhlenschmidt PR #2654: Fix the spell'ing of "diff'ing" and "diff'd". (Contributed by geary) Change 3071813 on 2016/08/01 by Jamie.Dale Fixed include casing #jira UE-33936 Change 3072043 on 2016/08/01 by Jamie.Dale Fixed FText formatting of pre-Gregorian dates We now convert to an ICU UDate via an ICU GregorianCalendar, as UE4 and ICU have a different time scale for pre-Gregorian dates. #jira UE-14504 Change 3072066 on 2016/08/01 by Jamie.Dale PR #2590: FEATURE: Collapse/expand folders in the outliner (Contributed by projectgheist) Change 3072149 on 2016/08/01 by Jamie.Dale We no longer use the editor culture when running with -game Change 3072169 on 2016/08/01 by Richard.TalbotWatkin A couple of changes to the BSP code: * Fixed longstanding issue where sometimes BSP geometry is not rebuilt correctly after editing it. This was due to poly normals not being recalculated after translating vertices in Geometry Mode. * Fixed corruption to FPoly::iLink as it is overloaded to have two meanings: when building BSP, it represents the surface index of the next coplanar surface (and adding a new BSP node uses this to determine whether a new surface needs to be added or not). In other operations it represents an FPoly index, in general this is used more in editor geometry operations. This fixes various crashes which arose from rebuilding BSP resulting in invalid FPoly indices. #jira UE-12157 - BSP brushes break when non-standard subtractive bsp brushes are used #jira UE-32087 - Crash occurs when creating Static Mesh from Trigger Volume Change 3072221 on 2016/08/01 by Jamie.Dale Fixed "Launch On" not providing the correct cultures to StartCookByTheBookInEditor #jira UE-33001 Change 3073389 on 2016/08/02 by Matt.Kuhlenschmidt Added ability to vsync the editor. Disabled by default. Set r.VSyncEditor to 1 to enable it. Reimplemented this change from the siggraph demo stream Change 3073396 on 2016/08/02 by Matt.Kuhlenschmidt Removed unused code as suggested by a pull request Change 3073750 on 2016/08/02 by Richard.TalbotWatkin Fixed formatting (broken in CL 3057895) in anticipation of merge from Main. Change 3073789 on 2016/08/02 by Jamie.Dale Added a way to mark text in text properties as culture invariant This allows you to flag properties containing text that doesn't need to be gathered. #jira UE-33713 Change 3073825 on 2016/08/02 by Stephan.Jiang Material Editor: Highligh all Nodes connect to an input. #jira UE-32502 Change 3073947 on 2016/08/02 by Stephan.Jiang UMG Project settings to show/hide different classes and categories in Palette view. --under Project Settings ->Editor->UMG Editor Change 3074012 on 2016/08/02 by Stephan.Jiang Minor changes and comments for CL: 3073947 Change 3074029 on 2016/08/02 by Jamie.Dale Deleting folders in the Content Browser now removes the folder from disk #jira UE-24303 Change 3074054 on 2016/08/02 by Matt.Kuhlenschmidt Added missing stats to track pooled vertex and index buffer cpu memory A new slate allocator was added to track memory usage for this case. Change 3074056 on 2016/08/02 by Matt.Kuhlenschmidt Renamed a few slate stats for consistency Change 3074810 on 2016/08/02 by Matt.Kuhlenschmidt Moved geometry cache asset type to the animation category. It is not a basic asset type Change 3074826 on 2016/08/02 by Matt.Kuhlenschmidt Fix a few padding and sizing issues Change 3075322 on 2016/08/03 by Matt.Kuhlenschmidt Settings UI improvements * Added the ability to search through all settings at once * Settings files which are not checked out are no longer grayed out. The editor now attempts to check out the file automatically if connected to source control and if that fails it marks the settings file writiable so it can save the setting properly ------- * This change adds a refactor to the details panel to support multiple top level objects existing in the details panel at once instead of combining all passed in objects to a single common base class. This is disabled by default but can be turned on setting bAllowMultipleTopLevelObjects to true in FDetailsViewArgs when creating a details panel. * Each top level object in a details panel will get their own customization instance. This made it necessary to deprecate a IDetailsView::GetBaseClass since there is no longer guaranteed to be one base class. *Details panels can have their own customization for each "root object header" in order to customize the look of having multiple top level objects in the details panel. Change 3075369 on 2016/08/03 by Matt.Kuhlenschmidt Removed FBX scene as a top level option in asset filter menu in the content browser. Change 3075556 on 2016/08/03 by Matt.Kuhlenschmidt Mac warning fix Change 3075603 on 2016/08/03 by Nick.Darnell Adding two new plugins to engine, one for editor and one for runtime based testing. Currently the only consumer of these plugins is going to be the EngineTest project. Change 3075605 on 2016/08/03 by Nick.Darnell Functional Testing - Continued work on cleanup, reorganization, trying to improve the workflow for using the session browser. Change 3076084 on 2016/08/03 by Jamie.Dale Added basic support for localizing plugins You can now localize plugins! There's no localization dashboard integration for this so it has to be done manually. You need to define the localization targets your plugin uses in its .uplugin file, eg) "LocalizationTargets": [ { "Name": "Paper2D", "LoadingPolicy": "Always" } ] "Name" should match a localization config under the Config/Localization folder for your plugin. These configs are set-up the same as any other localization config. "LoadingPolicy" may be one of Never, Always, Editor, Game, PropertyNames, or ToolTips. This allows you to control under what conditions your localizations should be loaded (eg, if your plugin has both game and editor data, you can separate the editor data off into its own localization target that's only loaded by the editor). UAT has been updated to support gathering from plugins. You can use the "IncludePlugins" flag to have it gather all plugins, or you can specify a whitelist of plugins to gather as an argument to "IncludePlugins", or alternatively, may blacklist certain plugins via "ExcludePlugins". It can now also support out-of-source gathering via the "UEProjectRoot" argument (previously it assumed that everything would be under the UE4 install/checkout directory). UAT has been updated to support staging plugin LocRes files. It will stage any plugin targets that are enabled for a game/client build, and are also from a plugin that's enabled for your project. #jira UE-4217 Change 3076123 on 2016/08/03 by Stephan.Jiang Extend "Select all input nodes" function to general blueprint editor Change 3077103 on 2016/08/04 by Jamie.Dale Added support for underlined text rendering (including with drop-shadows) FTextBlockStyle can now specify a brush to use to draw an underline for text (a suitable default would be "DefaultTextUnderline" from FCoreStyle). When a brush is specified here, we inject FSlateTextUnderlineLineHighlighter highlights into the text layout to draw the underline under the relevant pieces of text, using the correct color, position, and thickness. FSlateFontCache::GetUnderlineMetrics and FSlateFontRenderer::GetUnderlineMetrics have been added to handle getting the underline metrics (which are slightly different to the baseline). This change also adds FTextLayout::RemoveRunRenderer and FTextLayout::RemoveLineHighlight to fix some bad assumptions that FSlateEditableTextLayout and FTextBlockLayout were making about ownership of run renderers and line highlighters that could cause them to remove instances they didn't own (such as the new underline highlighter) when updating things like the cursor position or highlight. Change 3077842 on 2016/08/04 by Jamie.Dale Fixed fallout from API changes Change 3077999 on 2016/08/04 by Jamie.Dale Ensured that BULKDATA_SingleUse is only set by UFontBulkData::Serialize when loading This prevents it being incorrectly set by other operations, such as counting memory used by font data. #jira UE-34252 Change 3078000 on 2016/08/04 by Trung.Le Categories VREditor-specific UMG widget assets as "VR Editor" #jira UE-34134 Change 3078056 on 2016/08/04 by Nick.Darnell Build - Fixing a mac compiler warning, reodering constructor initializers. Change 3078813 on 2016/08/05 by Nick.Darnell Reorganizing editor tests, establishing plugins in the EditorTest project that will house the tests. Change 3078818 on 2016/08/05 by Nick.Darnell Additional rename and cleanup associated with test moving. Change 3078819 on 2016/08/05 by Nick.Darnell Removing the Oculus performance automation test, not running, and was unclaimed. Change 3078842 on 2016/08/05 by Nick.Darnell Continued reorganizing tests. Change 3078897 on 2016/08/05 by Nick.Darnell Additional changes to get some moved tests compiling Change 3079157 on 2016/08/05 by Nick.Darnell Making it possible to browse provider names thorugh the source control module interface. Change 3079176 on 2016/08/05 by Stephan.Jiang Add shortcut Ctrl+Shift+Space to rotate through different viewport options #jira UE-34140 Change 3079208 on 2016/08/05 by Stephan.Jiang Fix new animation name check in UMG Change 3079278 on 2016/08/05 by Nick.Darnell Fixing the build Change 3080555 on 2016/08/08 by Matt.Kuhlenschmidt Merging //UE4/Dev-Main to Dev-Editor (//UE4/Dev-Editor) Change 3081155 on 2016/08/08 by Nick.Darnell Fixing some issues with the editor tests / runtime tests under certain build configs. Change 3081243 on 2016/08/08 by Stephan.Jiang Add gesture in LevelViewport to switch between Top/Bottom...etc. Change 3082226 on 2016/08/09 by Matt.Kuhlenschmidt Work around animations not playing in paragon due to bsp rebuilds (UE-34391) Change 3082254 on 2016/08/09 by Stephan.Jiang DragTool_ViewportChange init changes [CL 3082411 by Matt Kuhlenschmidt in Main branch]
2016-08-09 11:28:56 -04:00
}
}
}
bool UUnrealEdEngine::CanSelectActor(AActor* Actor, bool bInSelected, bool bSelectEvenIfHidden, bool bWarnIfLevelLocked ) const
{
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
if (!Actor)
{
return false;
}
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
USelection* ActorSelection = GetSelectedActors();
if (UTypedElementSelectionSet* SelectionSet = ActorSelection->GetElementSelectionSet())
{
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
const FTypedElementSelectionOptions SelectionOptions = FTypedElementSelectionOptions()
.SetAllowHidden(bSelectEvenIfHidden)
.SetWarnIfLocked(bWarnIfLevelLocked);
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
return bInSelected
? SelectionSet->CanSelectElement(UEngineElementsLibrary::AcquireEditorActorElementHandle(Actor), SelectionOptions)
: SelectionSet->CanDeselectElement(UEngineElementsLibrary::AcquireEditorActorElementHandle(Actor), SelectionOptions);
}
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
return false;
}
void UUnrealEdEngine::SelectActor(AActor* Actor, bool bInSelected, bool bNotify, bool bSelectEvenIfHidden, bool bForceRefresh)
{
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
if (!Actor)
{
return;
}
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
USelection* ActorSelection = GetSelectedActors();
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
if (UTypedElementSelectionSet* SelectionSet = ActorSelection->GetElementSelectionSet())
{
FTypedElementList::FScopedClearNewPendingChange ClearNewPendingChange;
if (!bNotify)
{
ClearNewPendingChange = SelectionSet->GetScopedClearNewPendingChange();
}
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
const FTypedElementSelectionOptions SelectionOptions = FTypedElementSelectionOptions()
.SetAllowHidden(bSelectEvenIfHidden)
.SetWarnIfLocked(true)
.SetAllowLegacyNotifications(false);
const bool bSelectionChanged = bInSelected
? SelectionSet->SelectElement(UEngineElementsLibrary::AcquireEditorActorElementHandle(Actor), SelectionOptions)
: SelectionSet->DeselectElement(UEngineElementsLibrary::AcquireEditorActorElementHandle(Actor), SelectionOptions);
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
if (bSelectionChanged)
{
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
if (bNotify)
{
SelectionSet->NotifyPendingChanges();
}
}
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
else if (bNotify || bForceRefresh)
{
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
// Reset the property windows, in case something has changed since previous selection
UpdateFloatingPropertyWindows(bForceRefresh);
}
}
}
void UUnrealEdEngine::SelectComponent(UActorComponent* Component, bool bInSelected, bool bNotify, bool bSelectEvenIfHidden)
{
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
if (!Component)
{
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
return;
}
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
USelection* ComponentSelection = GetSelectedComponents();
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
if (UTypedElementSelectionSet* SelectionSet = ComponentSelection->GetElementSelectionSet())
{
FTypedElementList::FScopedClearNewPendingChange ClearNewPendingChange;
if (!bNotify)
{
ClearNewPendingChange = SelectionSet->GetScopedClearNewPendingChange();
}
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
const FTypedElementSelectionOptions SelectionOptions = FTypedElementSelectionOptions()
.SetAllowHidden(bSelectEvenIfHidden)
.SetWarnIfLocked(true)
.SetAllowLegacyNotifications(false);
const bool bSelectionChanged = bInSelected
? SelectionSet->SelectElement(UEngineElementsLibrary::AcquireEditorComponentElementHandle(Component), SelectionOptions)
: SelectionSet->DeselectElement(UEngineElementsLibrary::AcquireEditorComponentElementHandle(Component), SelectionOptions);
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
if (bSelectionChanged)
{
if (bNotify)
{
SelectionSet->NotifyPendingChanges();
}
}
}
}
bool UUnrealEdEngine::IsComponentSelected(const UPrimitiveComponent* PrimComponent)
{
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
USelection* ComponentSelection = GetSelectedComponents();
if (UTypedElementSelectionSet* SelectionSet = ComponentSelection->GetElementSelectionSet())
{
return SelectionSet->IsElementSelected(UEngineElementsLibrary::AcquireEditorComponentElementHandle(PrimComponent), FTypedElementIsSelectedOptions().SetAllowIndirect(true));
}
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
return false;
}
void UUnrealEdEngine::SelectBSPSurf(UModel* InModel, int32 iSurf, bool bSelected, bool bNoteSelectionChange)
{
if( GEdSelectionLock )
{
return;
}
FBspSurf& Surf = InModel->Surfs[ iSurf ];
InModel->ModifySurf( iSurf, false );
if( bSelected )
{
Surf.PolyFlags |= PF_Selected;
}
else
{
Surf.PolyFlags &= ~PF_Selected;
}
if( bNoteSelectionChange )
{
NoteSelectionChange();
}
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
PostActorSelectionChanged();
}
/**
* Deselects all BSP surfaces in the specified level.
*
* @param Level The level for which to deselect all surfaces.
* @return The number of surfaces that were deselected
*/
static uint32 DeselectAllSurfacesForLevel(ULevel* Level)
{
uint32 NumSurfacesDeselected = 0;
if ( Level )
{
UModel* Model = Level->Model;
for( int32 SurfaceIndex = 0 ; SurfaceIndex < Model->Surfs.Num() ; ++SurfaceIndex )
{
FBspSurf& Surf = Model->Surfs[SurfaceIndex];
if( Surf.PolyFlags & PF_Selected )
{
Model->ModifySurf( SurfaceIndex, false );
Surf.PolyFlags &= ~PF_Selected;
++NumSurfacesDeselected;
}
}
}
return NumSurfacesDeselected;
}
/**
* Deselects all BSP surfaces in the specified world.
*
* @param World The world for which to deselect all surfaces.
* @return The number of surfaces that were deselected
*/
static uint32 DeselectAllSurfacesForWorld(UWorld* World)
{
uint32 NumSurfacesDeselected = 0;
if (World)
{
NumSurfacesDeselected += DeselectAllSurfacesForLevel(World->PersistentLevel);
for (ULevelStreaming* StreamingLevel : World->GetStreamingLevels())
{
if (StreamingLevel)
{
if (ULevel* Level = StreamingLevel->GetLoadedLevel())
{
NumSurfacesDeselected += DeselectAllSurfacesForLevel(Level);
}
}
}
}
return NumSurfacesDeselected;
}
void UUnrealEdEngine::DeselectAllSurfaces()
{
DeselectAllSurfacesForWorld(GWorld);
}
void UUnrealEdEngine::SelectNone(bool bNoteSelectionChange, bool bDeselectBSPSurfs, bool WarnAboutManyActors)
{
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
if (GEdSelectionLock)
{
return;
}
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
bool bSelectionChanged = false;
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
USelection* ActorSelection = GetSelectedActors();
UTypedElementSelectionSet* SelectionSet = ActorSelection->GetElementSelectionSet();
FTypedElementList::FScopedClearNewPendingChange ClearNewPendingChange;
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
if (SelectionSet)
{
if (!bNoteSelectionChange)
{
ClearNewPendingChange = SelectionSet->GetScopedClearNewPendingChange();
}
First phase of converting Level Editor viewport selection to use typed elements This phase focuses on the minimum set of changes needed to port the UnrealEd logic for handling the selection of actors and components within the Level Editor viewport to use typed element interfaces. There is still future work to be done to clean this up further. This change adds a new framework type, UTypedElementSelectionSet, which manages the concept of "selection" for typed elements. Internally this owns its own UTypedElementList, and ensures that mutation of that list goes via the UTypedElementSelectionInterface implementations. To allow specific asset editors to customize their selection behavior, UTypedElementSelectionSet may have "selection proxies" that implement UTypedElementAssetEditorSelectionProxy registered to it. This is what's used to allow the level editor to implement its type specific rules. The core Level Editor selection implementation for actors and components now lives inside UActorElementLevelEditorSelectionProxy and UComponentElementLevelEditorSelectionProxy, and the existing UUnrealEdEngine functions that used to deal with this logic now proxy through to those implementations via UTypedElementSelectionSet. This means that the implementation has moved into the LevelEditor module without UnrealEd even knowing. Future work will focus on: - Cleaning up the legacy USelection bridge, so that all USelection instances are just a proxy around a UTypedElementSelectionSet. - This will involve making a basic "Object" element type to handle the generic UObject based selection (for assets) that USelection also handles. - This should allow GetMutableElementList to be removed from UTypedElementSelectionSet, to avoid potential abuse or misuse. - Investigating the best way to integrate element based selection into the editor modes. #rb Chris.Gagnon, Brooke.Hubert #rnx [CL 14470181 by Jamie Dale in ue5-main branch]
2020-10-11 12:40:44 -04:00
bSelectionChanged |= SelectionSet->ClearSelection(FTypedElementSelectionOptions().SetAllowLegacyNotifications(false));
}
if (bDeselectBSPSurfs)
{
bSelectionChanged |= DeselectAllSurfacesForWorld(GWorld) > 0;
}
if (bSelectionChanged)
{
PostActorSelectionChanged();
if (SelectionSet)
{
if (bNoteSelectionChange)
{
SelectionSet->NotifyPendingChanges();
}
}
}
}
Copying //UE4/Dev-Build to //UE4/Dev-Main (Source: //UE4/Dev-Build @ 3209340) #lockdown Nick.Penwarden #rb none ========================== MAJOR FEATURES + CHANGES ========================== Change 3209340 on 2016/11/23 by Ben.Marsh Convert UE4 codebase to an "include what you use" model - where every header just includes the dependencies it needs, rather than every source file including large monolithic headers like Engine.h and UnrealEd.h. Measured full rebuild times around 2x faster using XGE on Windows, and improvements of 25% or more for incremental builds and full rebuilds on most other platforms. * Every header now includes everything it needs to compile. * There's a CoreMinimal.h header that gets you a set of ubiquitous types from Core (eg. FString, FName, TArray, FVector, etc...). Most headers now include this first. * There's a CoreTypes.h header that sets up primitive UE4 types and build macros (int32, PLATFORM_WIN64, etc...). All headers in Core include this first, as does CoreMinimal.h. * Every .cpp file includes its matching .h file first. * This helps validate that each header is including everything it needs to compile. * No engine code includes a monolithic header such as Engine.h or UnrealEd.h any more. * You will get a warning if you try to include one of these from the engine. They still exist for compatibility with game projects and do not produce warnings when included there. * There have only been minor changes to our internal games down to accommodate these changes. The intent is for this to be as seamless as possible. * No engine code explicitly includes a precompiled header any more. * We still use PCHs, but they're force-included on the compiler command line by UnrealBuildTool instead. This lets us tune what they contain without breaking any existing include dependencies. * PCHs are generated by a tool to get a statistical amount of coverage for the source files using it, and I've seeded the new shared PCHs to contain any header included by > 15% of source files. Tool used to generate this transform is at Engine\Source\Programs\IncludeTool. [CL 3209342 by Ben Marsh in Main branch]
2016-11-23 15:48:37 -05:00
#undef LOCTEXT_NAMESPACE