Files
UnrealEngineUWP/Engine/Source/Editor/PackagesDialog/Private/SPackagesDialog.h
Matt Kuhlenschmidt b7723933a6 Copying //UE4/Dev-Editor to //UE4/Dev-Main (Source: //UE4/Dev-Editor @ 3279756)
#lockdown Nick.Penwarden
#rb none

==========================
MAJOR FEATURES + CHANGES
==========================

Change 3229490 on 2016/12/09 by Cody.Albert

	Integrated fix to support named changelists in SVN

Change 3229574 on 2016/12/09 by Simon.Tourangeau

	Fix actor mobility getting changed on scene reimport

	#jira UE-39102

Change 3229692 on 2016/12/09 by Cody.Albert

	Fixing an XML Parser assert when parsing a root tag that completes on the same line.

	#jira UE-30393

Change 3230582 on 2016/12/12 by Matt.Kuhlenschmidt

	PR #3024: Correct the outdated error message instructions for how to fix being unable to launch on an iOS device. (Contributed by CleanCut)

Change 3231470 on 2016/12/12 by Matt.Kuhlenschmidt

	Eliminate editor sounds that play when  you PIE, simulate or possess the player.  They get in the way of game sounds, are annoying to hear when you are constantly starting and stopping pie, and flush async loading that the game might be doing when they load.

Change 3231475 on 2016/12/12 by Alex.Delesky

	#jira UE-39023 - Using the High Resolution screenshot tool with the "custom depth as mask" option checked should no longer crash the editor or a PIE viewport when the screen percentage is not set to 100.

Change 3231476 on 2016/12/12 by Alex.Delesky

	#jira UE-39380 - Thumbnails for static meshes in the foliage paint mode window should now update to show the correct mesh if the thumbnail pool has been exhausted. This also increases the number of foliage thumbnals that can exist onscreen at once.

Change 3231477 on 2016/12/12 by Alex.Delesky

	#jira none - Extending the IPluginWizardDefinition interface to allow it to return the descriptor type of the plugin. This fixes a merge conflict from Odin where the new plugin wizard was modified to allow for multiple template selection.

Change 3231479 on 2016/12/12 by Alex.Delesky

	#jira UE-39376 - Changing the number of players or changing the dedicated server options in PIE settings should now always persist on editor shutdown.

Change 3231480 on 2016/12/12 by Alex.Delesky

	#jira UE-39417 - A texture will now match to update a dropped in file if the source path differs from that of the dropped in file

Change 3231508 on 2016/12/12 by Alex.Delesky

	Removing todo comment

	#jira none

Change 3231603 on 2016/12/12 by Matt.Kuhlenschmidt

	Exposed a 0-1 UV set and the scaled pixel size for Box and Border brushes
	Also added a material function that exposes all of the current UV sets with nice names instead of indexed coordinates

Change 3231618 on 2016/12/12 by Alex.Delesky

	#jira UE-38732 - When editing a spin box with a delta value, committing the value with the Enter key and then clearing the focus from the spin box will no longer change the internal value to match the snapped value.

Change 3231638 on 2016/12/12 by Matt.Kuhlenschmidt

	Add RF_Transactional to the list of default flags for creating or importing new assets.  All should be transactional by default

Change 3231642 on 2016/12/12 by Matt.Kuhlenschmidt

	Brighten up the output log by default

Change 3231648 on 2016/12/12 by Alex.Delesky

	#jira UE-38033 - Selecting a Named Slot that's part of a widget in a Widget Switcher will now show that widget instead of the widget at index 0. This also applies to any content set inside the named slot.

Change 3231666 on 2016/12/12 by Alex.Delesky

	#jira UE-38952 - Widgets that have been copied and pasted into the same hierarchy will now retain the same name in the hierarchy. This does not fix widgets that have been previously copied and pasted from other widgets, nor copies of those widgets.

Change 3231674 on 2016/12/12 by Alex.Delesky

	#jira UE-37106 - When using or simulating touch for Widget Components, the hover/clicked state will now be accurately determined rather than showing hover on initial touch.

Change 3231745 on 2016/12/12 by Alex.Delesky

	Back out changelist 3231477 to fix build error C2259

Change 3232417 on 2016/12/13 by Simon.Tourangeau

	Add the following attributes to the Editor.Usage.FBX.Import EngineAnalytics event
	- FBX Version
	- Filename Hash
	- Import Type

	#jira UE-37453

Change 3232477 on 2016/12/13 by Michael.Dupuis

	#jira UE-39675 : There was an issue when the Neutral Value == the Min or Max value, so we simply prevent using the concept of neutral value if min or max == neutral as it mean you only want a log on one side.

Change 3232571 on 2016/12/13 by Alex.Delesky

	Back out changelist 3231745

	#jira none - Extending the IPluginWizardDefinition interface to allow it to return the descriptor type of the plugin. This fixes a merge conflict from Odin where the new plugin wizard was modified to allow for multiple template selection.

Change 3232675 on 2016/12/13 by Alexis.Matte

	Fix a crash when reordering material with a fbx containing unused materials, add a fbx automation test to prevent similar issue.
	#jira UE-39692

Change 3232975 on 2016/12/13 by Alex.Delesky

	Fix to build error C2259 for the IPluginWizardDefinition API change.

Change 3233146 on 2016/12/13 by Michael.Dupuis

	#jira UE-38766 : Added eye dropper to select flatten height
	Fixed a rounding errors resulting in not flattening to the specified height
	Fixed a rounding error resulting in LandscapeDataAccess::GetTexHeight not always returning the appropriate value

Change 3233153 on 2016/12/13 by Alexis.Matte

	We cannot anymore change the instance override materials array topology, the topology is limited by the mesh materials array
	#jira UE-38827

Change 3234406 on 2016/12/14 by Matt.Kuhlenschmidt

	Fix window handle and device context being accessed by scene viewports after the underlying window has been destroyed by the OS.  This is an invalid state on linux and using some vr devices.

	#jira UE-7388

Change 3234485 on 2016/12/14 by Michael.Dupuis

	tentative build fix for Mac

Change 3234495 on 2016/12/14 by Matt.Kuhlenschmidt

	Made a setting to control if PIE enter and exit sounds are played.  Off by default

Change 3236709 on 2016/12/15 by Simon.Tourangeau

	Fix camera export rotation offset

	#jira UE-34692
	#jira UE-39740

Change 3236782 on 2016/12/15 by Jamie.Dale

	Fixed EmitTermExpr failing to use the correct package ID

	FBPTerminal::Source used to be set to the pin, however when pins were moved away from being UObjects, FBPTerminal::SourcePin was added and FBPTerminal::Source is typically null.

Change 3236853 on 2016/12/15 by Alexis.Matte

	Fix the serialization of the staticmesh property FMeshSectionInfoMap

Change 3236890 on 2016/12/15 by Matt.Kuhlenschmidt

	Remove old define

Change 3239328 on 2016/12/18 by Richard.TalbotWatkin

	Fixed Focus Viewport action in Static Mesh Viewport. Problem was that the conversion to Orbit Camera for storing the camera position was trashing the desired position during cvamera transitions.  Orbit camera position is now only stored at the end of a transition.
	#jira UE-39825 - Key "F" for Focus acts Sporadically in the Static Mesh Editor Viewport

Change 3239660 on 2016/12/19 by Alex.Delesky

	#jira UE-38968, UE-36826 - Components attached to actors can now be directly scaled to negative values using the transform gizmo for that component.

Change 3239662 on 2016/12/19 by Alex.Delesky

	#jira UE-39007 - The data table row editor now contains a Reset to Default control.

Change 3239663 on 2016/12/19 by Alex.Delesky

	#jira UE-39698 - Importing CSV files will now show the name of the file in the import dialog.

Change 3240696 on 2016/12/20 by Michael.Dupuis

	#jira UETOOL-1009:
	Added paddiing to columns view
	Added auto resize of column when double clicking on splitter handle in the header
	Remove right number alignment after discussion with Matt K.

Change 3240758 on 2016/12/20 by Michael.Dupuis

	added missing non abstract implementation

Change 3240782 on 2016/12/20 by Michael.Dupuis

	Added missing documentation for content browser column auto resizing

Change 3240817 on 2016/12/20 by Alex.Delesky

	#jira UE-38940 - Copying a Material-Custom node with a tab character should now correctly render the tab.

Change 3240834 on 2016/12/20 by Michael.Dupuis

	tentative fix for build error

Change 3240984 on 2016/12/20 by Michael.Dupuis

	Removed unnecessary functions

Change 3241174 on 2016/12/20 by Matt.Kuhlenschmidt

	Fix compile errors

Change 3241966 on 2016/12/21 by Chris.Wood

	Fixed Typo and changed execution order in "ComboBoxString" Component
	[UE-38994] - GitHub 2971 : Fixed Typo and changed execution order in "ComboBoxString" Component

	PR #2971: Fixed Typo and changed execution order in "ComboBoxString" Component (Contributed by eXifreXi)
	#github https://github.com/EpicGames/UnrealEngine/pull/2971

Change 3242126 on 2016/12/21 by Alexis.Matte

	Back out changelist 3236853
	We have to back out this change list because the change was implement in the 4.15 release branch and the EditorObjectVersion.h change is now implement in the ReleaseObjectVersion.h.

Change 3244492 on 2017/01/02 by Jamie.Dale

	Improved error message

Change 3244545 on 2017/01/02 by Nick.Darnell

	Navigation - Making it so we don't attempt to load HotReload during shutdown, we only access it if it's still loaded.

Change 3244549 on 2017/01/02 by Nick.Darnell

	Slate - Implementing custom hardware cursor loading across Windows, Mac and Linux and supports loading cursors from PAK files.  All platforms support loading PNGs through the FHardwareCursor interface.  Some platforms support additional formats, for multiresolution support, but there's a naming convention that can be used on PNGs for the same capability.  All of it is documented in the FHardwareCursor header.  The platform layer for ICursor, now has support for replacing cursor shapes as an override, and can be reset safely.

	The FHardwareCursor supports loading cursors from raw pixel buffers as well, the plan is to allow for the option to UTextures to also be used for hardware cursors.

	Now users through C++ can load and replace the hardware cursors with custom ones of their own,

	e.g. FSlateApplication::Get().RegisterCursor(EMouseCursor::Default, MakeShareable(new FHardwareCursor(FPaths::GameContentDir() / "Slate/FancyPointer", FIntPoint(0,0))));

	The next step is to expose a game friendly layer that supports caching cursors, and letting users change them out by name, without a bunch of destruction of OS resources.

Change 3244845 on 2017/01/03 by Jamie.Dale

	Fixing typo

	#jira UE-39920

Change 3244903 on 2017/01/03 by Jamie.Dale

	PR #3044: fix link error when FAssetData::PrintAssetData() is used in project (Contributed by kayama-shift)

Change 3245125 on 2017/01/03 by Alexis.Matte

	Put back the dev-editor version because there was some data create before we back it out

Change 3246106 on 2017/01/04 by Chris.Wood

	Removed broken CrashReportReciever pre-upload phase from CrashReportClient.
	[UE-40153] - CrashReportClient fails when used in legacy mode with a CrashReportReciever

Change 3246251 on 2017/01/04 by Alex.Delesky

	#jira UE-39869 - Moving an asset before saving it and then hitting Save All from the file menu will no longer save the asset in its original location.

Change 3246252 on 2017/01/04 by Alex.Delesky

	#jira UE-39793 - Fixes an issue with the AutoReimporter where specifying a non-existent mount point (a directory in the content browser) would cause a crash when attempting to auto-import an asset from a monitored directory, as well as ensuring that valid mount points will be able to create new assets from auto-import.

	The "Map Directory To" field when setting directories to monitor for auto-reimport has also been changed to use the content browser path picker instead of relying on the user to manually enter a mount point.

Change 3247620 on 2017/01/05 by Nick.Darnell

	Automation - Removing an adjustment to the number of shots we take for high res shots.

Change 3247621 on 2017/01/05 by Nick.Darnell

	Automation - Adding a few more rendering tests to the cornell box.

Change 3247629 on 2017/01/05 by Nick.Darnell

	Automation - Improving the comparison row display for screenshots so it's obvious what each image represents.

Change 3248811 on 2017/01/05 by Matt.Kuhlenschmidt

	PR #3091: Removed unnecessary UPackage casts (Contributed by projectgheist)

Change 3248860 on 2017/01/06 by Matt.Kuhlenschmidt

	Made the plugin browser select the "built in" category by default instead of the 2D category.  There is no reason for a sub-category to be selected first as it makes searching for plugins globally an extra click because you have to click on the base category first

Change 3249264 on 2017/01/06 by Matt.Kuhlenschmidt

	Fixed automation test warnings

	#jira UE-40198

Change 3249481 on 2017/01/06 by Michael.Dupuis

	#jira UE-37875 : Fill empty layers of components on assignation or creation
	Also fill new component added with the tool from neighbours predominance

Change 3249505 on 2017/01/06 by Matt.Kuhlenschmidt

	PR #3093: Include guard cleanup (Contributed by projectgheist)

Change 3249544 on 2017/01/06 by Michael.Dupuis

	#jira UE-40299: validate if UISettings is valid

Change 3250738 on 2017/01/09 by Nick.Darnell

	UMG - The WIC now checks if the Widget is enabled before it claims that it's over an interactable or keyboard focusable widget.

	#jira UE-39845

Change 3250865 on 2017/01/09 by Nick.Darnell

	Slate - Updating EAutoCenter and ESizingRule to use the newer enum class style enums.

Change 3250867 on 2017/01/09 by Nick.Darnell

	Slate - Adding more logging to the hardware cursor code so that it reports more information when it doesn't find an exact match when it comes to cursor size.

Change 3250936 on 2017/01/09 by Nick.Darnell

	Automation - Refactoring the screenshot comparison tool to no longer require one one generated report.  Doing screenshot comparions now generates individual reports for each failed comparison so that they can be evaluated in bits, and as changes occur as the user reviews aspects, we can remove the reports.  There is now async image loading for the comparison view so that it doesn't hitch.

Change 3250937 on 2017/01/09 by Nick.Darnell

	Automation - Adding another example to the CornellBox test.

Change 3250958 on 2017/01/09 by Nick.Darnell

	Slate - Fixing some other cases where people were referring to ESizingRule::Type.

Change 3251162 on 2017/01/09 by Nick.Darnell

	Slate - Fixing some other cases where people were referring to ESizingRule::Type.

Change 3251254 on 2017/01/09 by Matt.Kuhlenschmidt

	Attempt to fix static analysis warnings

Change 3251373 on 2017/01/09 by Nick.Darnell

	Core - Now writing a log warning instead of ensuring if calling LoadModule wouldn't have been safe to do here, depending on load order.

Change 3251525 on 2017/01/09 by Nick.Darnell

	Automation - Fixing a build issue in ImageComparer.

Change 3252321 on 2017/01/10 by Alex.Delesky

	#jira UE-40164 - Importing multiple files to overwrite existing assets such as sounds will now correctly persist the "Yes to All" / "No to All" dialog selections.

Change 3252354 on 2017/01/10 by Nick.Darnell

	Image Compare - Fixing a potential threading hazard in the image comparer.

Change 3252356 on 2017/01/10 by Nick.Darnell

	Automation - The screenshot metadata now captures the commit/CL that the screenshot was taken at and records it in the metadata.

Change 3252601 on 2017/01/10 by Alexis.Matte

	Fbx automation test, reload feature implementation

Change 3252761 on 2017/01/10 by Jamie.Dale

	Fixing some IWYU errors with PCH disabled

Change 3252765 on 2017/01/10 by Jamie.Dale

	Fixing some static analysis warnings

Change 3252793 on 2017/01/10 by Jamie.Dale

	Fixing FText natvis

	The text data visualizers have to be defined before the text visualizer

Change 3253987 on 2017/01/11 by Matt.Kuhlenschmidt

	PR #3108: Git Plugin: use asynchronous "MarkForAdd" and "CheckIn" operations for the initial commit (Contributed by SRombauts)

Change 3254378 on 2017/01/11 by Matt.Kuhlenschmidt

	Refactor scene importing to allow for plugins to make scene importers

Change 3254679 on 2017/01/11 by Matt.Kuhlenschmidt

	Fix calling LoadModule in perforce source control off the main thread

Change 3256472 on 2017/01/12 by Jamie.Dale

	Improved error reporting from IncludeTool

	- The error reporting was using zero-based line indices which was misleading.
	- The error reporting now includes the offending line to remove ambiguity.

Change 3256725 on 2017/01/13 by Jamie.Dale

	IncludeTool can now parse typedef in Fwd headers

Change 3256758 on 2017/01/13 by Jamie.Dale

	Added support for String Tables

	String Tables provide a way to centralize your localized text into one (or several) known locations, and then reference the entries within a string table from other assets or code in a robust way that allows for easy re-use of localized text.

	String Tables can be defined in C++ (using the LOCTABLE family of macros), loaded via CSV file, or created as an asset. They can be referenced in C++ using either the LOCTABLE macro, or the static FText::FromStringTable function. INI files can reference them using the LOCTABLE macro syntax, and FText properties in assets can reference them via the advanced settings combo.

Change 3257018 on 2017/01/13 by Alexis.Matte

	FbxAutomationTest fix the import reload operation, it was calling garbagecollect with no keep flag

Change 3257168 on 2017/01/13 by Jamie.Dale

	Removed code that was writing null into bytecode during save

Change 3257344 on 2017/01/13 by Jamie.Dale

	Backing out changelist 3256725, and excluding my header from the scan instead

Change 3257426 on 2017/01/13 by Nick.Darnell

	Slate - Adding the ability to invert alpha when drawing slate textures.  Going to be used in the future for rendering render targets for the scene which have inverted alpha.

Change 3257572 on 2017/01/13 by Nick.Darnell

	Slate - Fixing a build error.

Change 3257970 on 2017/01/14 by Jamie.Dale

	Fixing exclude path

Change 3258458 on 2017/01/16 by Matt.Kuhlenschmidt

	PR #3135: GameViewportClient: FOnCloseRequested is now a multicast delegate (Contributed by Nadrin)

Change 3258472 on 2017/01/16 by Matt.Kuhlenschmidt

	PR #3126: Fix to load editor style assets (Contributed by projectgheist)

Change 3258473 on 2017/01/16 by Matt.Kuhlenschmidt

	PR #3124: Fix wrong result with Image-DrawAsBox with PaperSprite. (Contributed by valval88)

Change 3258539 on 2017/01/16 by Nick.Darnell

	Slate - Pixel Snapping has been moved to the GPU for the RHI rendering policy.  Additionally, widgets with a render transform of Scale, Rotation or Sheer, and their children are no longer pixel snapped, this should reduce some of jittering seen by users when animations are applied to widgets.  NOTE: This only affects render transforms, any transform in layout space is still subject to pixel snapping.

Change 3258607 on 2017/01/16 by Nick.Darnell

	Fixing the mac build.

Change 3258661 on 2017/01/16 by Matt.Kuhlenschmidt

	Actors with experimental components no longer say
	"Uses experimental class: Actor" when selecting the actor root in the details panel

	#jira UE-40535

Change 3258678 on 2017/01/16 by Nick.Darnell

	Platform - Introducing a way to get the mimetype for a file on Windows.  Other platforms don't yet have an implementation outside of returning application/unknown.

Change 3258924 on 2017/01/16 by Nick.Darnell

	Platform - Implementing a fallback for the generic platform http, that can do some basic mimetype lookups.

Change 3258929 on 2017/01/16 by Nick.Darnell

	UMG - Fixing the animation to finish the evaluation before it notifies that the animation completed.

Change 3259109 on 2017/01/16 by Nick.Darnell

	Platform - The GetMimeType function now only takes in FilePath, since some platforms will require that actually resolve to a file on disk in order to determine the true mimetype.

Change 3259111 on 2017/01/16 by Alexis.Matte

	Avoid to move the camera when we re-import in the static mesh editor
	#jira UE-40613

Change 3259275 on 2017/01/16 by Matt.Kuhlenschmidt

	Fix crash when a slate window is resized and calls into a scene viewport during loading code when the scene viewport is not in a slate hierarchy and thus has no widget

Change 3259300 on 2017/01/16 by Nick.Darnell

	UMG - Introducing PreConstruct and NativePreConstruct to the base UUserWidget.  Users can now visualize non-binding based changes in the designer by evaluating a very limited amount of the blueprint code.  In the event your user widget crashes on load, due to calling something unsafe, you can disable evaluation in the editor preferences under Widget Designer.

Change 3259306 on 2017/01/16 by Nick.Darnell

	Games - Removing the Game Specific implementations of PreConstruct.

Change 3260182 on 2017/01/17 by Matt.Kuhlenschmidt

	Fix static analysis

Change 3261049 on 2017/01/17 by Nick.Darnell

	Slate - Putting in some fixes for the non-gpu pixel snapping mode, and disabling gpu snapping while we dig into why it looks weird.

Change 3261434 on 2017/01/17 by Nick.Darnell

	Fixing the mac build.

Change 3261435 on 2017/01/17 by Nick.Darnell

	Slate - Tweaking some aspects of the slate rounding code on the GPU.  There's still some precision loss somewhere causing subtle differences in where the snap occurs, that's different from previously.

Change 3261460 on 2017/01/17 by Nick.Darnell

	UMG - Tweaking the defintiions of NativePreConstruct, dropping passing in design time since that is readily available in native code.

Change 3261833 on 2017/01/18 by Alexis.Matte

	Fix all warning for fbx automation tests
	#jira UE-40208

Change 3261874 on 2017/01/18 by Matt.Kuhlenschmidt

	PR #3136: Fix Submit to Source Control Window for Git plugin : use CanCheckIn() to filter out unmodified assets files (Contributed by SRombauts)

Change 3262000 on 2017/01/18 by Jamie.Dale

	Updated Slate to allocate widgets using MakeShared

	This saves one allocation per-widget

Change 3262003 on 2017/01/18 by Nick.Darnell

	UMG - Widget Interaction Components now ignore Visible(false) Widget Components when tracing.

	#jira UE-40523

Change 3262052 on 2017/01/18 by Alexis.Matte

	Put back the staticmesh skinxx workflow
	#jira UE-40782

Change 3262775 on 2017/01/18 by Nick.Darnell

	Slate - Ditching moving vertex rounding to the GPU, some precision issues could not be overcome.  Ended up writing a clean way to implement it on the CPU.

Change 3262818 on 2017/01/18 by Alex.Delesky

	#jira UE-40668 - Editor preferences will now save for data pin styles

Change 3263679 on 2017/01/19 by Nick.Darnell

	Slate - Adding some comments to the Slate Vertex Rounder.

Change 3265154 on 2017/01/19 by Nick.Darnell

	Slate/UMG - Putting in some more time into pixel snapping.  I've re-introduced the old constructors, and decided to go with the templated approach, as to not break old code that relied on the FSlateVertex working a certain way.

Change 3265478 on 2017/01/20 by Chris.Wood

	Added config support for hang detection time and switching hang detection on/off in UnrealWatchdog
	[UE-40838] - Make hang time configurable and increase default in UnrealWatchdog

Change 3265600 on 2017/01/20 by Nick.Darnell

	Slate - Making some const local variables const.

Change 3265714 on 2017/01/20 by Alex.Delesky

	#jira UE-40791 - The ForceFeedback thumbnail's Play and Stop icons will now render correctly, and will only be visible while an effect is playing or when the cursor hovers over the icon.

Change 3265865 on 2017/01/20 by Alex.Delesky

	#jira UE-40511 - The Content Browser file path will now update when inside a folder that is deleted from the Sources Panel.

Change 3267989 on 2017/01/23 by Jamie.Dale

	Exposed String Tables to Blueprints

Change 3268018 on 2017/01/23 by Jamie.Dale

	Small API clean-up for string tables

Change 3268455 on 2017/01/23 by Matt.Kuhlenschmidt

	Fix SaveAs (Which says SaveCurrentAs) not saving the current level and only saving the persistent level and then reloading everything thus causing work to be lost if editing a sub-level

	#jira UE-40930

Change 3269388 on 2017/01/24 by Chris.Wood

	Refactored tick timing in UnrealWatchdog to stop bug where it doesn't close.
	[UE-40839] - UnrealWatchdog running and blocking use of Unreal Game Sync for internal users

	Standalone tool code only - doesn't touch engine

Change 3270205 on 2017/01/24 by Cody.Albert

	Updated FUnrealEdMisc::OnMessageTokenActivated to properly traverse up the outer hierarchy of an object.

Change 3270231 on 2017/01/24 by Cody.Albert

	Renamed and exposed GetFullScreenAlignment and GetViewportAnchors for consistency with the setters

Change 3271734 on 2017/01/25 by Michael.Dupuis

	#jira UE-38631
	Add sorting for landscape target layer, user can now sort alphabetical, material based or custom
	Added a new vertical box SDragNDropVerticalBox to handle drag & drop of FSlot
	Fixed SDropTarget to only consider the drop action if it was started by it
	Added visibility toggle to only show used layers in the currently loaded data

Change 3271797 on 2017/01/25 by Jamie.Dale

	Renamed HasBeenAlreadyMadeSharable to DoesSharedInstanceExist as the old name was nonsense

Change 3271813 on 2017/01/25 by Jamie.Dale

	Fixed bad access of a shared this during widget destruction when a context menu was open

Change 3271988 on 2017/01/25 by Nick.Darnell

	Slate - Removing some old checkbox deprecated code from the 4.3 and 4.6 days.

Change 3271992 on 2017/01/25 by Nick.Darnell

	Blueprints - Making the checked call better to log out more information when dragging and dropping a missing property.

Change 3272134 on 2017/01/25 by Jamie.Dale

	Updated the GatherText commandlet to no longer hold a ConfigFile pointer while it runs

	This pointer is internal to GConfig, and may be updated (or invalidated) when other config files are loaded (as can happen via game code while gathering text).

Change 3272301 on 2017/01/25 by Nick.Darnell

	Slate - More cleanup from the removal of a old legacy enum that people were still using.

Change 3273070 on 2017/01/26 by Chris.Wood

	Fix CIS errors in landscape code from CL 3271734

Change 3273123 on 2017/01/26 by Chris.Wood

	Fix crash during init of CRC when running packaged without access to main engine config hierarchy.

Change 3273194 on 2017/01/26 by Nick.Darnell

	Fixing some build warnings.

Change 3273242 on 2017/01/26 by Michael.Dupuis

	#jira UE-39948 : if we detect there is multiple levels in the current persistent when we add a new foliage asset we ask to save the foliage as an asset to permit paiting over multiple levels

Change 3273279 on 2017/01/26 by Jamie.Dale

	String Table INI redirects are now in the "Core.StringTable" section (rather than "/Script/Engine.Engine")

Change 3273483 on 2017/01/26 by Alex.Delesky

	#jira UE-32047 - Made changes to the FixupRedirects commandlet to ensure that files that are marked for delete are moved from the default changelist to the pending changelist and submitted when using Perforce.

	Also makes a slight change to the ResavePackages commandlet to submit files marked for delete.

Change 3273568 on 2017/01/26 by Alex.Delesky

	Modifying changes made to SPluginWizard to have the plugin loading phase determined by the wizard's definition rather than from the first selected template.

	#jira none

Change 3273855 on 2017/01/26 by Alex.Delesky

	#jira UE-41117 - Updating the tooltip on the "Allow Paint of all LODs" option for mesh paint mode.

Change 3274200 on 2017/01/26 by Alex.Delesky

	For IPluginWizardDefinition, temporarily adding function bodies to two methods instead of having them be pure virtual methods.

Change 3274317 on 2017/01/26 by Jamie.Dale

	Deleting a seemingly corrupted asset that was accidentially submitted

Change 3275072 on 2017/01/27 by Michael.Dupuis

	#jira UE-38631 tweaks
	Fix typo error
	Iterate all components, not only active one
	Force expand the Target Layers widget

Change 3275249 on 2017/01/27 by Alexis.Matte

	Color grading controls: Keep the vector ratio when changing the master slider
	#jira UETOOL-1098

Change 3275282 on 2017/01/27 by Alexis.Matte

	Color grading controls: Cosmetic changes
	#jira UETOOL-1099

Change 3275292 on 2017/01/27 by Alexis.Matte

	Make sure the build is called once when we import a staticmesh.
	#jira UE-40947

Change 3275430 on 2017/01/27 by Alexis.Matte

	Add some fbx automation tests
	- Import a mesh with no material
	- Import corrupted asset with no section in a LOD
	- Import morph targets
	- Materials name clash
	- Max Multimap material ordering

Change 3275683 on 2017/01/27 by Michael.Dupuis

	#jira UE-41215 : when saving an asset do not register the transaction, and make sure that the duplicate wont keep a copy in the transaction buffer as an asset can't be undo

Change 3276237 on 2017/01/27 by Jamie.Dale

	Deleting a seemingly corrupted asset that was accidentially submitted

Change 3276266 on 2017/01/27 by Jamie.Dale

	Fix for accessing a potentially null pointer

Change 3277065 on 2017/01/30 by Chris.Wood

	Move crash report temp files to saved config and cleanup on schedule.
	[UE-39506] - CrashReportClient ini folders are not cleaned when opening the editor

Change 3277236 on 2017/01/30 by Matt.Kuhlenschmidt

	Fix crash when cancelling SaveCurrentLevelAs

	#jira UE-41182

Change 3277409 on 2017/01/30 by Jamie.Dale

	Improved text rendering when the last resort font is missing

	The last resort font is no longer included in shipping builds, so this change makes some improvements to text rendering when it's missing.

	- The legacy font cache no longer tries to use the last resort font if it's not available (preventing warnings).
	- The Slate font renderer no longer tries to use the last resort font if it's not available.
	- Text shaping will use the last resort character if none of the available fonts can render a given character (likely because the last resort font is missing).
	- HarfBuzz shaped text now uses the fallback character correctly.

Change 3277749 on 2017/01/30 by Nick.Darnell

	Slate - Moving ESlateDrawEffect & ESlateBatchDrawFlag over to be enum class, found cases where users were improperly assuming the enum order, and so now it won't be possible to just treat an int32 or a bool as the draw effect value.

	Core - Adding EnumHasAllFlags and EnumHasAnyFlags, templated functions to make it easier to check for the existance of a flag on enum classes.

Change 3277805 on 2017/01/30 by Nick.Darnell

	Rendering - Changing some LoadModuleChecked calls to GetModuleChecked, as these calls are not happening on the main thread and are not safe to make.

Change 3277914 on 2017/01/30 by Matt.Kuhlenschmidt

	Fix Niagara slate style warning on startup

Change 3278058 on 2017/01/30 by Matt.Kuhlenschmidt

	Fixed compile error

Change 3278132 on 2017/01/30 by Nick.Darnell

	Fixed compile error

Change 3278133 on 2017/01/30 by Matt.Kuhlenschmidt

	Fixed compile errors

Change 3278186 on 2017/01/30 by Nick.Darnell

	Fixed compile error

Change 3278525 on 2017/01/30 by Nick.Darnell

	Fixed compile error

Change 3278534 on 2017/01/30 by Nick.Darnell

	Automation - Clearing up several warnings/errors with automation results, trying to get Automation Tests to at least yellow before integration.

Change 3278941 on 2017/01/31 by Nick.Darnell

	Fixing a build warning due to build team refactor.

Change 3278949 on 2017/01/31 by Nick.Darnell

	Fixing incrmenetal build issues.

Change 3278953 on 2017/01/31 by Nick.Darnell

	Fixing some incrmental linux build issues.

Change 3278964 on 2017/01/31 by Nick.Darnell

	FIxing more incremental build issues.

Change 3279256 on 2017/01/31 by Michael.Dupuis

	#jira UE-41319
	#jira UE-41315
	#jira UE-41316
	Instead of getting the Landscape Actor, call GetLandscapeProxy so all case are handled, either proxy or landscape actor

Change 3279270 on 2017/01/31 by Chad.Garyet

	re-updating the automation test pool

[CL 3279775 by Matt Kuhlenschmidt in Main branch]
2017-01-31 15:22:49 -05:00

576 lines
16 KiB
C++

// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Misc/Attribute.h"
#include "PackagesDialog.h"
#include "Layout/Visibility.h"
#include "Widgets/DeclarativeSyntaxSupport.h"
#include "Styling/SlateTypes.h"
#include "Input/Reply.h"
#include "Widgets/SWidget.h"
#include "Widgets/SCompoundWidget.h"
#include "Widgets/Views/STableViewBase.h"
#include "Widgets/Views/STableRow.h"
#include "ISourceControlProvider.h"
#include "ISourceControlModule.h"
class SCheckBox;
/**
* Represents a button that will dynamically be added to the package dialog window
*/
class FPackageButton : public TSharedFromThis<FPackageButton>
{
public:
FPackageButton(FPackagesDialogModule* InModule, EDialogReturnType InType, const FText& InName, const FText& InToolTip, TAttribute<bool> InDisabled = false)
: Module(InModule)
, Name(InName)
, ToolTip(InToolTip)
, Type(InType)
, Clicked(false)
, Disabled(InDisabled)
{ }
/**
* Gets called when the button is clicked
*/
FReply OnButtonClicked()
{
Clicked = true;
Module->RemovePackagesDialog();
return FReply::Handled();
}
/**
* Returns if the button should be enabled
*
* @return True if the button is not disabled, false otherwise
*/
bool IsEnabled() const { return !Disabled.Get(); }
/**
* Gets the name of the button
*
* @return the name of the button
*/
FText GetName() const { return Name; }
/**
* Gets the tooltip for the button
*
* @return the tooltip for the button
*/
FText GetToolTip() const { return ToolTip; }
/**
* Returns if the button was clicked
*
* @return True if the button was clicked, false otherwise
*/
bool IsClicked() const { return Clicked; }
/**
* Gets the type of the button
*
* @return the tupe of the button
*/
EDialogReturnType GetType() const { return Type; }
/**
* Sets if the button should be disabled
*
* @param InDisabled New disabled value
*/
void SetDisabled(bool InDisabled)
{
if( !Disabled.IsBound() )
{
Disabled.Set( InDisabled );
}
}
/**
* Resets this button state
*/
void Reset()
{
Clicked = false;
}
private:
FPackagesDialogModule* Module; // Stores the module that contains this button
FText Name; // Name of the button
FText ToolTip; // Tool tip for this button
EDialogReturnType Type; // Button type
bool Clicked; // Stores if the button was clicked to close the dialog
TAttribute<bool> Disabled; // Stores if the button is disabled or not
};
/**
* Represents package item that is displayed as a checkbox inside the package dialog
*/
class FPackageItem : public TSharedFromThis<FPackageItem>
{
public:
FPackageItem(UPackage* InPackage, const FString& InEntryName, ECheckBoxState InState, bool InDisabled = false, FString InIconName=TEXT("SavePackages.SCC_DlgNoIcon"), FString InIconToolTip=TEXT(""))
: Package(InPackage)
, EntryName(InEntryName)
, State(InState)
, Disabled(InDisabled)
, IconName(InIconName)
, IconToolTip(InIconToolTip)
{
/** if the item is checked and disabled make the state Undetermined */
if(State == ECheckBoxState::Checked && Disabled)
{
State = ECheckBoxState::Undetermined;
}
}
/**
* Gets the display state of the item
*
* @return the item state
*/
ECheckBoxState OnGetDisplayCheckState() const
{
RefreshButtonCallback.ExecuteIfBound();
return State;
}
/**
* Sets the item state
*
* @param InNewState the new state to set the item to
*/
void OnDisplayCheckStateChanged(ECheckBoxState InNewState)
{
State = InNewState;
/** if the item is checked and disabled make the state Undetermined */
if( State == ECheckBoxState::Checked && Disabled )
{
State = ECheckBoxState::Undetermined;
}
}
/**
* Sets refresh callback that should be called when the item's state change
*
* @param InRefreshButtonCallback the new callback
*/
void SetRefreshCallback(FSimpleDelegate InRefreshButtonCallback)
{
RefreshButtonCallback = InRefreshButtonCallback;
}
/**
* Gets the state of the checkbox item
*
* @return the state of the checkbox item
*/
ECheckBoxState GetState() const { return State; }
/**
* Gets the package represented by this checkbox item
*
* @return the package represented by this checkbox item
*/
UPackage* GetPackage() const { return Package; }
/**
* Get the object belonging to the package, if any
*
* @return the object which is in the package, if any
*/
UObject* GetPackageObject() const;
/**
* Checks to see if the checkbox item is disabled
*
* @return True if the checkbox item is disabled, false otherwise
*/
bool IsDisabled() const { return Disabled; }
/**
* Gets the name of the checkbox item
*
* @return the name of the checkbox item
*/
FString GetName() const { return EntryName; }
/**
* Gets the icon name of the checkbox item
*
* @return the icon name of the checkbox item
*/
FString GetIconName() const { return IconName; }
/**
* Get a string containing the name(s) of other users who have the file checked out
*
* @return names of other users who have the file checked out
*/
FString GetCheckedOutByString() const
{
ISourceControlProvider& SourceControlProvider = ISourceControlModule::Get().GetProvider();
FSourceControlStatePtr SourceControlState = SourceControlProvider.GetState(Package, EStateCacheUsage::Use);
FString CheckedOutBy;
if (SourceControlState.IsValid())
{
SourceControlState->IsCheckedOutOther(&CheckedOutBy);
}
return CheckedOutBy;
}
/**
* Gets the type name and color of the package item
*
* @param OutName FString into which the type name will be placed, or an empty string if type cannot be obtained
* @param OutColor FColor into which the type color will be placed
*
* @return Whether the details were successfully fetched.
*/
bool GetTypeNameAndColor(FString& OutName, FColor& OutColor) const;
/**
* Gets just the type name of the package item
*
* @return Type name of the package item, or an empty string
*/
FString GetTypeName() const
{
FString OutName;
FColor OutColor;
GetTypeNameAndColor(OutName, OutColor);
return OutName;
}
/**
* Gets the tool tip of the checkbox item
*
* @return the tool tip of the checkbox item
*/
FString GetToolTip() const { return IconToolTip; }
/**
* Sets the new checkbox item state
*
* @param NewState New state
*/
void SetState(ECheckBoxState NewState) { State = NewState; }
private:
UPackage* Package; // The package associated with this entry
FString EntryName; // Name of the checkbox
ECheckBoxState State; // The state of the checkbox
bool Disabled; // if the entry is disabled
FString IconName; // Name of an icon to show next to the checkbox
FString IconToolTip; // ToolTip to display for the icon
FSimpleDelegate RefreshButtonCallback; // ToolTip to display for the icon
mutable TWeakObjectPtr<UObject> Object; // Cached object associated with this entry.
};
/**
* Represents a package dialog comprised of packages and checkboxes and buttons
*/
class SPackagesDialog : public SCompoundWidget
{
public:
SLATE_BEGIN_ARGS(SPackagesDialog)
: _ReadOnly(false)
, _AllowSourceControlConnection(false)
, _Message()
, _Warning()
{}
/** When true, this dialog only shows a list of packages without the ability to filter */
SLATE_ATTRIBUTE(bool, ReadOnly)
/** When true, this dialog displays a 'connect to source control' button */
SLATE_ATTRIBUTE(bool, AllowSourceControlConnection)
/** The message of the widget */
SLATE_ARGUMENT(FText, Message)
/** The warning message of the widget */
SLATE_ARGUMENT(FText, Warning)
/** Called when source control state changes */
SLATE_EVENT(FSimpleDelegate, OnSourceControlStateChanged)
SLATE_END_ARGS()
/**
* Construct this widget
*
* @param InArgs The declaration data for this widget
*/
void Construct( const FArguments& InArgs );
/**
* Create and return a widget for the given item and column ID
*
* @param Item The item being queried
* @param ColumnID The column ID being queried
*
* @return The widget which was created
*/
TSharedRef<SWidget> GenerateWidgetForItemAndColumn( TSharedPtr<FPackageItem> Item, const FName ColumnID ) const;
/**
* Removes all checkbox items from the dialog
*/
void RemoveAll();
/**
* Adds a new checkbox item to the dialog
*
* @param Item The item to be added
*/
void Add(TSharedPtr<FPackageItem> Item);
/**
* Adds a new button to the dialog
*
* @param Button The button to be added
*/
void AddButton(TSharedPtr<FPackageButton> Button);
/**
* Sets the message of the widget
*
* @param InMessage The string that the message should be set to
*/
void SetMessage(const FText& InMessage);
/**
* Sets the warning message of the widget
*
* @param InMessage The string that the warning message should be set to
*/
void SetWarning(const FText& InMessage);
/**
* Gets the return type of the dialog and it populates the package array results
*
* @param OutCheckedPackages Will be populated with the checked packages
* @param OutUncheckedPackages Will be populated with the unchecked packages
* @param OutUndeterminedPackages Will be populated with the undetermined packages
*
* @return returns the button that was pressed to remove the dialog
*/
EDialogReturnType GetReturnType(OUT TArray<UPackage*>& OutCheckedPackages, OUT TArray<UPackage*>& OutUncheckedPackages, OUT TArray<UPackage*>& OutUndeterminedPackages);
/**
* Gets the widget which is to have keyboard focus on activating the dialog
*
* @return returns the widget
*/
TSharedPtr< SWidget > GetWidgetToFocusOnActivate() const;
/**
* Get the visibility of the 'Connect to Source Control' button
*/
EVisibility GetConnectToSourceControlVisibility() const;
/**
* Delegate used when the 'Connect to Source Control' button is clicked
*/
FReply OnConnectToSourceControlClicked() const;
/**
* Populate the items with their current ignore status
* @param InIgnorePackages Container to populate the items from.
*/
void PopulateIgnoreForSaveItems( const TSet<FString>& InIgnorePackages );
/**
* Populate current ignore status array with the item status
* @param InOutIgnorePackages Container to populate with the current ignore status of the items.
*/
void PopulateIgnoreForSaveArray( OUT TSet<FString>& InOutIgnorePackages ) const;
/**
* Reset the state of this dialogs buttons
*/
void Reset();
/**
* Whether the dialog allows a source control connection
*/
bool IsSourceControlConnectionAllowed() const { return bAllowSourceControlConnection; }
private:
//~ Begin SWidget Interface
virtual FReply OnKeyDown( const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent ) override;
//~ End SWidget Interface
/**
* Called when the checkbox items have changed state
*/
void RefreshButtons();
/**
* @return the desired toggle state for the ToggleSelectedCheckBox.
* Returns Unchecked, unless all of the selected packages are Checked.
*/
ECheckBoxState GetToggleSelectedState() const;
/**
* Toggles the highlighted packages.
* If no packages are explicitly highlighted, toggles all packages in the list.
*/
void OnToggleSelectedCheckBox(ECheckBoxState InNewState);
/**
* Makes the widget for the checkbox items in the list view
*/
TSharedRef<ITableRow> MakePackageListItemWidget(TSharedPtr<FPackageItem> Item, const TSharedRef<STableViewBase>& OwnerTable);
/**
* Makes the widget for the context menu in the list view
*/
TSharedPtr<SWidget> MakePackageListContextMenu() const;
/**
* Handler to check to see if "Diff Against Depot" can be executed
*/
bool CanExecuteSCCDiffAgainstDepot() const;
/**
* Handler for when "Diff Against Depot" is selected
*/
void ExecuteSCCDiffAgainstDepot() const;
/**
* Get all the selected items in the dialog.
*
* @param bAllIfNone - if true, returns all teh items when none are selected
* @return the array of packages to be altered by ToggleSelectedCheckBox
*/
TArray< TSharedPtr<FPackageItem> > GetSelectedItems( bool bAllIfNone ) const;
/** Delegate used to supply message text to the widget */
FText GetMessage() const;
/** Delegate used to supply warning text to the widget */
FText GetWarning() const;
/** Delegate used to determine visibility of the warning */
EVisibility GetWarningVisibility() const;
/**
* Returns the current column sort mode (ascending or descending) if the ColumnId parameter matches the current
* column to be sorted by, otherwise returns EColumnSortMode_None.
*
* @param ColumnId Column ID to query sort mode for.
*
* @return The sort mode for the column, or EColumnSortMode_None if it is not known.
*/
EColumnSortMode::Type GetColumnSortMode( const FName ColumnId ) const;
/**
* Callback for SHeaderRow::Column::OnSort, called when the column to sort by is changed.
*
* @param ColumnId The new column to sort by
* @param InSortMode The sort mode (ascending or descending)
*/
void OnColumnSortModeChanged( const EColumnSortPriority::Type SortPriority, const FName& ColumnId, const EColumnSortMode::Type InSortMode );
/**
* Requests that the source list data be sorted according to the current sort column and mode,
* and refreshes the list view.
*/
void RequestSort();
/**
* Sorts the source list data according to the current sort column and mode.
*/
void SortTree();
/** A Checkbox used to toggle multiple packages. */
TSharedPtr< SCheckBox > ToggleSelectedCheckBox;
/** All checkbox items stored in this widget for the list view */
TArray< TSharedPtr<FPackageItem> > Items;
/** The list view for showing all checkboxes */
TSharedPtr< SListView< TSharedPtr<FPackageItem> > >ItemListView;
/** All buttons stored in this widget */
TArray< TSharedPtr<FPackageButton> > Buttons;
/** A horizontal box that will contain all of the buttons */
TSharedPtr< SHorizontalBox > ButtonsBox;
/** Refresh callback that should be called when a checkbox item state change */
FSimpleDelegate RefreshButtonsCallback;
/** A horizontal box that will represent the message of the widget */
TSharedPtr< SHorizontalBox > MessageBox;
/** When true, this dialog only shows a list of packages without the ability to filter */
bool bReadOnly;
/** When true, this dialog displays a 'connect to source control' button */
bool bAllowSourceControlConnection;
/** When true, the warning message is displayed in the widget */
bool bShowWarning;
/** The message to display */
FText Message;
/** The warning to display */
FText Warning;
/** Specify which column to sort with */
FName SortByColumn;
/** Currently selected sorting mode */
EColumnSortMode::Type SortMode;
/** Called when source control state changes */
FSimpleDelegate OnSourceControlStateChanged;
};
/** Widget that represents a row in the PackagesDialog's list view. Generates widgets for each column on demand. */
class SPackageItemsListRow
: public SMultiColumnTableRow< TSharedPtr< FPackageItem > >
{
public:
SLATE_BEGIN_ARGS( SPackageItemsListRow ) {}
/** The Packages Dialog that owns the tree. We'll only keep a weak reference to it. */
SLATE_ARGUMENT( TSharedPtr< SPackagesDialog >, PackagesDialog )
/** The list item for this row */
SLATE_ARGUMENT( TSharedPtr< FPackageItem >, Item )
SLATE_END_ARGS()
/** Construct function for this widget */
void Construct( const FArguments& InArgs, const TSharedRef<STableViewBase>& InOwnerTableView );
/** Overridden from SMultiColumnTableRow. Generates a widget for this column of the list row. */
virtual TSharedRef<SWidget> GenerateWidgetForColumn( const FName& ColumnName ) override;
private:
/** Weak reference to the PackagesDialog widget that owns our list */
TWeakPtr< SPackagesDialog > PackagesDialogWeak;
/** The item associated with this row of data */
TSharedPtr< FPackageItem > Item;
};