Files
UnrealEngineUWP/Engine/Source/Runtime/Slate/Public/Framework/MultiBox/MultiBoxBuilder.h
Max Preussner 8e9b51aeff Copying //UE4/Dev-Sequencer to //UE4/Dev-Main (Source: //UE4/Dev-Sequencer @ 3237992)
#lockdown Nick.Penwarden
#rb none

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

Change 3136778 on 2016/09/22 by Max.Preussner

	Merged Dev-Main to Dev-Sequencer

Change 3179199 on 2016/10/29 by Max.Chen

	Sequencer: Fade only oin the current player context, not on all worlds.

	Copy from Release-4.14. Copied fix to FadeTrackInstance to FadeTemplate.

	#jira UE-37939

Change 3179340 on 2016/10/29 by Max.Preussner

	PS4Media: Fixed audio track dropping first frame

Change 3180391 on 2016/10/31 by Max.Preussner

	UdpMessaging: nulling out message processor in destructor

Change 3180459 on 2016/10/31 by Max.Chen

	Sequencer: Fix copy/paste crash in UMG.

Change 3180607 on 2016/10/31 by Andrew.Rodham

	UMG: Fixed parent bindings not being adhered to correctly. Fixed slot widgets that get recreated not having their object bindings updated.

	#jira UE-38021
	#jira UE-38018

Change 3181405 on 2016/11/01 by Lina.Halper

	#ANIM/SEQUCNER: sequencer animation blending support including additive
	 - created multiway blend node - extension of two way blend
	 - created anim sequencer instance to be used in sequencer for blending multiple animations and additives
	 - hooked up to sequencer track players

	- renamed AnimationNode_TwoWay to AnimNode_TwoWay to be consistent with other node names.
	- Make sure you can't choose montage when selecting animation in Sequencer
	- Fixed Anim BP playing with multi group montages

	#code review: Max.Chen

Change 3181870 on 2016/11/01 by Andrew.Rodham

	Sequencer: Made sequence pointers stored in sequence template instances weak object ptrs

	  - We can't guarantee the lifetime of the objects here

	#jira UE-38051

Change 3182851 on 2016/11/02 by Andrew.Rodham

	Sequencer: Assert that a GetScriptStructImpl has been overridden correctly on templates

Change 3182852 on 2016/11/02 by Andrew.Rodham

	Sequencer: Added 'Restore Animated State' command (CTRL+R) and button to sequencer toolbar

Change 3183161 on 2016/11/02 by Max.Preussner

	Media: Added supported file extensions & URL schemes

Change 3183476 on 2016/11/02 by Max.Preussner

	Merged Dev-Main to Dev-Sequencer

Change 3185181 on 2016/11/03 by Max.Chen

	Sequencer: Refactor general options button menu into play options and select options. Add Select Sections in Selection Range and Select All in Selection Range.

	Fix issues with convert to spawanble and convert to possessable. Convert to possessable now deletes the spawn track so that it's not left lying around, which when deleted would end up deleting the converted possessable actor.

	#jira UE-37854

Change 3185184 on 2016/11/03 by Max.Chen

	Sequencer: Add hotkey to toggle camera cut track lock/unlock camera.

Change 3185409 on 2016/11/03 by Max.Chen

	Sequencer: Fix crash in skeletal mesh section drawing.

	#jira UE-38090

Change 3185444 on 2016/11/03 by Max.Chen

	UMG: Expose label browser for UMG

Change 3185662 on 2016/11/03 by Max.Chen

	Sequencer: Paste track fixes.

	 - Loosen restrictions on paste track destination.  This allows the paste to operate on spawnables and on properties that don't have an explicit Set function.
	 - Allow pasting onto all types of tracks, not just property tracks.
	 - Fix when pasting the copied tracks onto multiple objects.

	Tested pasting transform tracks from possessable to spawnables.
	Tested pasting skeletal animation tracks from spawnable to possessables.

	#jira UETOOL-1206

Change 3185920 on 2016/11/03 by Andrew.Porter

	Adding test content for multiple audio video tracks.

Change 3186404 on 2016/11/03 by Max.Preussner

	Merged Dev-Main to Dev-Sequencer

Change 3187957 on 2016/11/04 by Max.Preussner

	MediaAssets: Exposed CanPlaySource in BP

Change 3187988 on 2016/11/05 by Max.Preussner

	Fixed documentation

Change 3188035 on 2016/11/05 by Max.Chen

	Sequencer: Show camera name in cinematic viewport.

	#jira UE-28115

Change 3188603 on 2016/11/07 by Max.Preussner

	WmfMedia: Added missing nullptr check

Change 3188788 on 2016/11/07 by Max.Preussner

	MediaPlayerEditor: Removed property buttons from PlatformMediaSource customization (UE-37948)

	#jira UE-37948

Change 3188808 on 2016/11/07 by Max.Preussner

	MediaAssets: Moved media player implementation into reusable class
	Also moved overlay text handling into separate asset.

Change 3188919 on 2016/11/07 by Max.Preussner

	Media: Changed the handling of invalid media and media that failed to open (UE-38014)

	#jira UE-38014

Change 3189112 on 2016/11/07 by Max.Preussner

	WmfMedia: Added rudimentary H.265 HEVC support for Windows 10 (UE-38324)

	#jira UE-38324

Change 3189376 on 2016/11/07 by Max.Preussner

	WmfMedia: Removed Windows specific code from factory module

Change 3189381 on 2016/11/07 by Max.Preussner

	Atrac9Audio: Fixed log category

Change 3189497 on 2016/11/07 by Max.Preussner

	Media: Added binary sinks support

Change 3189666 on 2016/11/07 by Max.Chen

	Curve Editor: Add option to show time in frame numbers

	#jira UE-27210

Change 3190339 on 2016/11/08 by Max.Preussner

	MediaAssets: Removed SetDesiredPlayerName since the field is public

Change 3190342 on 2016/11/08 by Andrew.Porter

	Adding sequencer test content for animation blueprint

Change 3190398 on 2016/11/08 by Max.Preussner

	Media: Renamed binary tracks to metadata tracks

Change 3190458 on 2016/11/08 by andrew.porter

	Updating Skeleton with new slots.

Change 3191167 on 2016/11/08 by Max.Chen

	Sequencer: Fix crash in validating paste tracks buffer. Validate the tracks instead of actually pasting into temp.

	#jira UE-38353

Change 3191336 on 2016/11/09 by Andrew.Rodham

	Slate: Added the ability to set and retrieve a host tab manager from a details view

Change 3191338 on 2016/11/09 by Andrew.Rodham

	Editor: Added the ability to extend default layouts

	  - FLayoutExtender can be used to provide basic tab layout extensions on default themes.
	  - This can be used by external plugins to inject tabs to other interfaces where necessary.
	  - Currently this is supported by the blueprint editor's unified component layout, and the level editor layout.

Change 3191346 on 2016/11/09 by Andrew.Rodham

	Sequencer: Added new (experimental) ActorSequence module and editor

	  - Sequences can now be added to actors via the UActorSequenceComponent.
	  - An embedded sequencer will appear on details panels, with the option to break it out into a tab.
	  - Separated common playback elements from ULevelSequencePlayer into UMovieSceneSequencePlayer, from which specific players can derive.
	  - The majority of level editorintegration with sequencer has been separated out into a separate singleton class that can manage multiple sequencers.
	  - All movie scene data now defaults to instanced, such that it can be duplicated and instanced correctly.
	  - Added read-only mode for sequencer which is used for actor sequence components that come from a blueprint archetype to prevent erroneous editing.

Change 3191387 on 2016/11/09 by Andrew.Rodham

	Orion: Fixed deprecation warnings

Change 3191388 on 2016/11/09 by Andrew.Rodham

	Orion: Added dependency on MovieScene module

Change 3191403 on 2016/11/09 by Andrew.Rodham

	Sequencer: Fix initialization order warning

Change 3191428 on 2016/11/09 by Andrew.Rodham

	Sequencer: Added missing include

Change 3191510 on 2016/11/09 by Andrew.Rodham

	Header include fixes

Change 3191599 on 2016/11/09 by Max.Chen

	Sequencer: Add option to lock the playback range per movie scene. The toggle is stored as editor only and should be a saved value so that it can persist as the asset is passed from user to user.

	#jira UE-34677

Change 3191664 on 2016/11/09 by Andrew.Rodham

	Sequencer: Ensure keyframe handlers are only added once

Change 3192373 on 2016/11/09 by Max.Preussner

	MediaAssets: Fixed regression: playlists no longer open

Change 3192408 on 2016/11/09 by Max.Preussner

	MediaAssets: Fixed OpenPlaylistIndex crashing

Change 3192878 on 2016/11/09 by Max.Chen

	Camera Rig: Fix log spam trying to unregister component.

	#jira UE-38435

Change 3192989 on 2016/11/10 by Andrew.Rodham

	Slate: Added constructor to appease old VS2013 compiler warning about non-constructible type

Change 3192991 on 2016/11/10 by Andrew.Rodham

	Sequencer: Moved lambda out-of-line to fix static analysis warning

Change 3193420 on 2016/11/10 by Max.Preussner

	MediaAssets: Replaced CopyToResolveTarget with new TransitionTarget API

Change 3193478 on 2016/11/10 by Max.Chen

	Sequencer: Moved Fix Actor References back under the General Options menu.

Change 3193870 on 2016/11/10 by Max.Preussner

	MediaPlayerEditor: Removed additional buttons in per-platform overrides (UE-37948)

	#jira UE-37948

Change 3193873 on 2016/11/10 by Lina.Halper

	- Sequencer fix with anim instance reinit
	- Fixed TMap issue with memory by changing to pointer from ref.

	#code review: Max.Chen

Change 3194184 on 2016/11/10 by Max.Chen

	Sequencer: Only expand section when setting keys when there are keys. Otherwise if you set the default value while the time position is outside of the section range, the section will expand, which seems undesirable.

Change 3194187 on 2016/11/10 by Max.Chen

	Sequencer: Backwards compatibility if a track no longer supports multiple rows, its sections are split to other duplicate tracks.

Change 3194191 on 2016/11/10 by Max.Chen

	Sequencer: Add audio volume and pitch curves.

	#jira UE-30009

Change 3194256 on 2016/11/10 by Max.Chen

	Merging //UE4/Dev-Main to Dev-Sequencer (//UE4/Dev-Sequencer)

Change 3194282 on 2016/11/10 by Max.Chen

	Movie Capture: Add some frame rate bounds. Max frame rate for recording is 200. Min is 1.

	#jira UE-38502

Change 3194355 on 2016/11/11 by Max.Chen

	Sequencer: Minimum handle size for time slider scrubber.

	#jira UE-34676

Change 3194767 on 2016/11/11 by Max.Chen

	Sequencer: Mark duplicated tracks as changed so that their template gets regenerated.

Change 3195094 on 2016/11/11 by Max.Preussner

	Media: Removing game thread dependencies

	This change removes game thread dependencies from all media players so that we can use the media framework for startup movies where the game thread is block while loading the Engine. The players now have two new methods, TickPlayer and TickVideo, which need to be called from the external code that owns the players. On the Engine side, this is taken care of by UMediaPlayer, which calls TickPlayer from the game thread and TickVideo from the render thread. In startup movies, this will be taken care of by a special thread.

	AvfMedia: This change does not fully remove game thread dependencies in AvfMediaPlayer yet. There are some async callbacks scheduled to execute on the game thread that need to be refactored. The execution of these events should be performed in TickPlayer instead.

	All platform owners, please review these changes for your platform and make sure that everything still works. I have not had time to test all platforms yet.

Change 3195396 on 2016/11/11 by Max.Preussner

	AvfMedia: Removed remaining game thread dependencies

Change 3195670 on 2016/11/11 by Max.Preussner

	MediaUtils: Renamed function

Change 3195690 on 2016/11/11 by Max.Preussner

	MediaAssets: MediaPlayerBase instance is now a field instead of pointer.

Change 3195802 on 2016/11/11 by Max.Preussner

	Media: Removed UMediaPlayer::GetNativePlayer

Change 3195843 on 2016/11/11 by Max.Preussner

	Kismet: Fixed non-unity

Change 3195851 on 2016/11/11 by Max.Preussner

	Fixed typo.

Change 3195854 on 2016/11/11 by Max.Preussner

	MediaUtils: Added missing forward declaration

Change 3195937 on 2016/11/11 by Max.Chen

	Media: CIS Fix

Change 3196120 on 2016/11/13 by Max.Chen

	Sequencer: Weight curve for skeletal animation section.

	Changed skeletal template evaluation so that it works with multiple animation tracks. The shared track clears all the weights, the section gathers up all the data, and the shared track evaluates the data. Otherwise, the multiple track evaluations would conflict with each other in setting states back and forth.

	#jira UE-38374, UEFW-128

Change 3196265 on 2016/11/13 by Max.Chen

	Sequencer: Fix audio waveforms so that they're regenrated when audio start time is changed.

	#jira UE-38543

Change 3196421 on 2016/11/14 by Andrew.Rodham

	Sequencer: Fixed modified tracks not being written to the transaction buffer when replacing object bindings

	#jira UE-38423

Change 3197131 on 2016/11/14 by Max.Chen

	Sequencer: Null checks.

	#jira UE-38570, UE-38593

Change 3197209 on 2016/11/14 by Max.Chen

	Cine Camera: Reset focus smoothing interpolation on PostEditChangeProperty. This fixes an issue where if you enable focus smoothing, the manual focus distance that is input isn't used since the interpolation happens from the last current focus distance.

	#jira UE-27055

Change 3198691 on 2016/11/15 by Max.Chen

	Sequence Recorder: Optimize record transforms by setting all the keyframes at once.  Also, added option to toggle removing redundant keyframes from the recorded tracks.

	#jira UE-38489

Change 3198711 on 2016/11/15 by andrew.porter

	Adding test content for MEdia Framework Track Switching.

Change 3199174 on 2016/11/15 by Lina.Halper

	Sequencer backward compatibility fix with root motion
	Make sure you could remove root motion fine

	#jira : UE-38591

Change 3199260 on 2016/11/15 by tim.gautier

	Updated QA-Media_TrackSwitch - changed Trigger Collision to only detect overlap from PlayerPawn

Change 3199663 on 2016/11/15 by Max.Chen

	Anim Sequencer: Fix deprecation warning for bCanUseParallelUpdateAnimation. Updated to use bUseMultiThreadedAnimationUpdate.

Change 3199727 on 2016/11/15 by Max.Chen

	Matinee to Level Sequence: Set default scale when converting matinee move tracks to sequencer.

	#jira UE-38688

Change 3199847 on 2016/11/16 by Max.Chen

	Sequencer: Add menu option to reduce keys of all sections in the current level sequence

Change 3200351 on 2016/11/16 by Max.Chen

	Level Editor/Sequencer: Fixes to allow for component keyframing. The transform track operates on the components that changed, not the actor. The level editor viewport broadcasts begin/end movement on the components that changed.

	#jira UE-38649, UE-38646

Change 3200474 on 2016/11/16 by Max.Chen

	Sequencer: Move reduce keys to section context menu.

Change 3200888 on 2016/11/16 by Max.Chen

	Sequencer: Clamp skeletal animation evaluation remapping of time to section bounds. This is necessary when evaluating nearest is enabled and the time is beyond the section bounds.

	Also, set the shared track template to have higher priority so that it always clears/initializes weights before each section's template adds section params for evaluation.

Change 3201633 on 2016/11/17 by Max.Chen

	Matinee to Level Sequence: Fix matinee 3d scale track conversion to level sequence.

	Also, added paste matinee vector track to sequencer's vector track.

	#jira UE-38688

Change 3202458 on 2016/11/17 by Max.Chen

	Sequencer: Fix track editor commands getting unregistered when switching from one level sequence to another.  The sequence of events is: track editor commands get bound when a level sequence is edited. When switching to another level sequence, the existing track editor is released after the new one is registered, causing the commands to ultimately get unbound.

	#jira UE-38693

Change 3202606 on 2016/11/17 by Max.Chen

	Actor Sequence: Null check in CanPossessObject for a component's owner.

	#jira UE-38514

Change 3203522 on 2016/11/17 by Max.Chen

	Sequencer: Audio start time deprecated in favor of start offset which is an offset into the audio clip. Also, limit the start offset to positive values since you can just crop into the audio clip by dragging the section's start time.

	Audio track no longer supports multiple rows (should have been checked in along with the audio volume and pitch multiplier curves).

	#jira UE-38549, UE-38554, UE-38547

Change 3203863 on 2016/11/18 by Andrew.Rodham

	Engine: Ensure that world settings actor is considered by network object list when sorting the actor list for a level

Change 3203865 on 2016/11/18 by Andrew.Rodham

	Sequencer: Fixed play rate track interaction between servers and clients
	  - The logic for evaluation was previously flawed (it would only run in editor builds). Play rate is now only evaluated on servers and standalone clients, with the time dilation being replicated to network clients.

Change 3203900 on 2016/11/18 by Andrew.Rodham

	Sequencer: Changed CreateLevelSequencePlayer to create a transient level sequence actor

	#jira UE-37277

Change 3205038 on 2016/11/18 by Max.Preussner

	Slate: Corrected comment

Change 3205046 on 2016/11/18 by Max.Preussner

	WmfMedia: Added missing nullptr check

	#jira UE-38825

Change 3205073 on 2016/11/18 by Max.Chen

	Sequencer: Fix audio upgrade case when start time is 0.

Change 3205277 on 2016/11/19 by Max.Preussner

	Merging //UE4/Dev-Main to Dev-Sequencer (//UE4/Dev-Sequencer)

	Please take a look at SequencerEdMode.cpp and Sequencer.cpp. I ended up accepting latest Dev-Sequencer, which seemed to be the right thing to do.

Change 3205465 on 2016/11/20 by Max.Preussner

	MovieScene: Fixed non-unity build

Change 3205467 on 2016/11/20 by Max.Preussner

	Engine: Fixed spelling

Change 3206264 on 2016/11/21 by Max.Preussner

	Kismet: Added missing forward declaration

Change 3206493 on 2016/11/21 by Max.Preussner

	PS4Media: Added remaining changes for removing game thread dependencies

Change 3206512 on 2016/11/21 by Andrew.Porter

	Adding test content to QAGame for Sequencer animation weight blending.

Change 3206529 on 2016/11/21 by Lina.Halper

	Fixed anim notifes to work in Sequencer Instance

	- Give proper delta in editor preview
	- Make sure not to recreate AnimInstance

	#jira: UE-38849
	#code review:Max.Chen

Change 3206552 on 2016/11/21 by Max.Preussner

	QAGame: Enabled looping by default

Change 3207462 on 2016/11/22 by andrew.porter

	QAGame: updating QA-Sequencer with changes to animation blending test cases

Change 3207499 on 2016/11/22 by tim.gautier

	Added Streaming Sources, added Streaming Source options for BP_MediaPlayer. Specified Media Option Categories with BP_MediaPlayer to clean up details panel.

	#jira none

Change 3207571 on 2016/11/22 by Max.Chen

	Curve Editor: Expose curve editor settings to Editor Preferences.

	#jira UE-38907

Change 3207690 on 2016/11/22 by Max.Chen

	Sequencer: Speculative crash fix for switching UMG animations.

	#jira UE-29333

Change 3207744 on 2016/11/22 by tim.gautier

	Removed unnecessary nodes from BP_MediaPlayer. Created a variable visible in the Details Panel to allow the user to specify a URL to Stream media without specifying a Source in-editor.

	#jira none

Change 3207935 on 2016/11/22 by Max.Chen

	Sequencer: Temporary fix for skeletal animation track scrubbing. Verified that anim notifies still fire when playing and scrubbing.

	#jira UE-38964

Change 3207938 on 2016/11/22 by Max.Chen

	Sequence Recorder: Set reduce keys back to true so that there's no change in current behavior. This should be toggled off for performance reasons but in general is nice to have reduced keys.

Change 3207950 on 2016/11/22 by Lina.Halper

	- Fixed so that mesh space additive won't show up in sequencer
	- Added warning if you change type later or existing ones

	#jira: UE-38062?

Change 3208278 on 2016/11/22 by andrew.porter

	QAGame: Adjusting level blueprint for test case.

Change 3208285 on 2016/11/22 by andrew.porter

	QAGame: adding SequencerBP animation blueprint.

Change 3208538 on 2016/11/23 by Max.Chen

	Actor Sequence: Fix plugin filename.

Change 3208916 on 2016/11/23 by Max.Chen

	Sequencer: Fix material parameter initialization so that the value is retrieved from the material instance and not the parent material.

	#jira UE-34317

Change 3208924 on 2016/11/23 by Max.Chen

	Save As: Cancel should not save over the existing asset. It should just return.

Change 3208939 on 2016/11/23 by andrew.porter

	QAGame: reset some content back to its default state for testing

Change 3209053 on 2016/11/23 by Max.Chen

	Sequencer: Ensure the section id is unique.

Change 3209161 on 2016/11/23 by Max.Chen

	Save As: Follow up fix for cancelling save as.

Change 3210540 on 2016/11/26 by Max.Preussner

	WmfMedia: Reworked fallback stride calculations to fix issues with some exotic video formats

Change 3210546 on 2016/11/26 by Max.Preussner

	WmfMedia: Fixed NV12 vertical buffer alignment

Change 3211567 on 2016/11/28 by Max.Preussner

	Merging //UE4/Dev-Main to Dev-Sequencer (//UE4/Dev-Sequencer)

	Step 1 of 2

Change 3212408 on 2016/11/28 by Max.Preussner

	Fixed fallout from Dev-Main merge

Change 3212456 on 2016/11/28 by Max.Preussner

	ActorSequenceEditor: Removed monolithic header dependencies

Change 3212562 on 2016/11/28 by Max.Preussner

	ActorSequenceEditor: Removed monolithic header usage

Change 3212649 on 2016/11/28 by Max.Chen

	Fix CIS

Change 3212671 on 2016/11/28 by Max.Chen

	Sequencer: Add option to restore to the pre animated state.

	#jira UE-38862
	#2953

Change 3212672 on 2016/11/28 by Max.Chen

	Sequencer: Select object binding node corresponding to selected components and vice versa (select components in level when object binding node is selected)

Change 3212673 on 2016/11/28 by Max.Chen

	Sequencer: Follow-up fix for component keyframing - key area needs to be updated by component.

	#jira UE-38649

Change 3212676 on 2016/11/28 by Max.Chen

	Level Editor: PostEditMove should only be called on the actor if it is moved.

	#jira UE-38646

Change 3212688 on 2016/11/29 by Max.Chen

	Sequencer: Force refresh event parameters customization when struct contents change but not a full refresh when struct child contents change.

	#jira UE-39094

Change 3212831 on 2016/11/29 by Andrew.Rodham

	Disabled ActorSequenceEditor plugin by default while it's experimental

Change 3213219 on 2016/11/29 by Max.Preussner

	AvfMedia: Added missing include

Change 3213333 on 2016/11/29 by Andrew.Rodham

	Sequencer: Added the ability to override bindings when playing back a level sequence on a level sequence actor

	#jira UETOOL-746

Change 3213905 on 2016/11/29 by Max.Preussner

	More IWYU fixes for macOS

Change 3214203 on 2016/11/29 by Michael.Gay

	Some demo files to test Sequencer timing.

Change 3214205 on 2016/11/29 by Max.Preussner

	More IWYU fixes for macOS

Change 3214548 on 2016/11/29 by Max.Preussner

	More IWYU fixes for macOS

Change 3214564 on 2016/11/29 by Max.Preussner

	More IWYU fixes

Change 3214567 on 2016/11/29 by Max.Chen

	More IWYU fixes for Win32

Change 3214573 on 2016/11/29 by Max.Preussner

	More IWYU fixes

Change 3214576 on 2016/11/29 by Max.Preussner

	More IWYU fixes

Change 3214621 on 2016/11/30 by Max.Preussner

	Atrac9Decoder: Fixed log category declaration

Change 3214630 on 2016/11/30 by Max.Preussner

	More IWYU fixes

Change 3214747 on 2016/11/30 by Andrew.Rodham

	Sequencer: Fixed shadow variable

Change 3214957 on 2016/11/30 by Andrew.Rodham

	Core: Changed Algo::Find to use TElementType
	  - This allows it to support c style arrays

Change 3215127 on 2016/11/30 by Andrew.Rodham

	Sequencer: Made burn-in options and init settings instanced

	  - This ensures they work correctly when defined on archetypes and blueprints

	#jira UE-38645

Change 3215754 on 2016/11/30 by Max.Chen

	Sequencer: Fix skeletal animation track evaluating tracks in the wrong time space. Cache the evalulation time and weight value in each section's template and then execute with those values in the shared track's template.

	#jira UE-39145

Change 3216603 on 2016/12/01 by Max.Chen

	Sequencer: Set audio volume/pitch only if changed.

Change 3216613 on 2016/12/01 by Max.Chen

	Sequencer: Add component selector when there are multiple components that have sockets. This fixes a crash when there are multiple components to attach to.

	#jira UE-39167

Change 3217175 on 2016/12/01 by Max.Chen

	Sequencer: Set skeletal animation track evaluation to be upper bound exclusive. This gives better behavior when two clips butt up against each other since the sections would overlap in time and evaluation would normalize they weighted contribution of each.

	#jira UE-37184

Change 3217292 on 2016/12/01 by Max.Chen

	Sequencer: Rework upgrading track rows to include overlapping sections. For skeletal animation sections, set weight values based on the evaluation bounds since there was no blending prior to 4.15.

Change 3217860 on 2016/12/01 by Max.Preussner

	Media: Fall-through for media options

Change 3217965 on 2016/12/01 by Max.Preussner

	MediaAssets: Renamed media option name

Change 3218470 on 2016/12/01 by Max.Chen

	Sequencer: Fix start time deprecation value so that negative values are supported.

	#jira UE-39259

Change 3218473 on 2016/12/01 by Max.Chen

	Sequencer: Fix crash if start seq length is negative.

Change 3219021 on 2016/12/02 by Max.Chen

	Sequencer: Add multiply and divide to transform box.

Change 3219374 on 2016/12/02 by Max.Chen

	Sequencer: Teleport simulating components when moving them through the transform track. This fixes bugs with recording simulating actors (ie. vehicle game) where recorded actors don't playback with the recorded positions and there are warnings about attempting to move a fully simulated skeletal mesh.

	#jira UE-38442, UE-38444, UE-38852

Change 3219638 on 2016/12/02 by Max.Preussner

	Projects: Fixed error message

Change 3220584 on 2016/12/03 by Andrew.Rodham

	Sequencer: Blueprint generated classes are now always removed from level sequences on load in the editor
	  - This ensures that old (and perhaps corrupt) BP generated classes are destroyed

	#jira UE-39173

Change 3220585 on 2016/12/03 by Andrew.Rodham

	Editor: Fix EditInstanceOnly properties that aren't variables on the generated class being editable in blueprints

Change 3220973 on 2016/12/04 by Max.Chen

	Fix CIS

Change 3222833 on 2016/12/05 by Max.Chen

	Sequencer: Fixed some recorded components not being generated.

	#jira UE-34289

Change 3224450 on 2016/12/06 by Max.Chen

	Sequencer: Fix convert spawnable to posessable. Logic for setting the parent was mistakenly removed in runtime eval.

	#jira UE-39419

Change 3225301 on 2016/12/07 by Max.Preussner

	AvfMedia: Added settings class

Change 3225304 on 2016/12/07 by Max.Preussner

	Fixed typo

Change 3225723 on 2016/12/07 by Max.Preussner

	Fixed typo.

Change 3225871 on 2016/12/07 by Max.Preussner

	Forgot to check in

Change 3225932 on 2016/12/07 by Max.Preussner

	Added missing header

Change 3226266 on 2016/12/07 by Max.Preussner

	Media: Fixed various module dependencies

Change 3226451 on 2016/12/07 by Max.Preussner

	Include fixes

Change 3226455 on 2016/12/07 by Max.Preussner

	LevelSequence: Added missing include

Change 3227135 on 2016/12/08 by Max.Preussner

	Merging //UE4/Dev-Main to Dev-Sequencer (//UE4/Dev-Sequencer)

Change 3227143 on 2016/12/08 by Max.Preussner

	LevelSequencer: Added missing header

Change 3227731 on 2016/12/08 by Max.Preussner

	LevelSequencer: Added missing include

Change 3228222 on 2016/12/08 by Max.Preussner

	UBT: Fixed delay load library support for remote compilation to macOS

Change 3228266 on 2016/12/08 by Max.Preussner

	PluginBrowser: Added missing includes

Change 3228755 on 2016/12/09 by Andrew.Rodham

	Sequencer: Fixed copy-paste of event keys
	  - Also added a key-value iterator to TCurveInterface (both const and non-const)

	#jira UE-39526

Change 3228777 on 2016/12/09 by Luke.Thatcher

	[PLATFORM] [PS4] [!] Reimplement fixes from Fortnite for PS4 media framework in //UE4/Dev-Sequencer.

	Based on Original CL 3227137

	 - Event callback from AvPlayer was enqueing the processing of events over to the player thread, so the "State" member of FPS4MediaPlayer doesn't get updated until the following frame. This breaks cases with multiple calls to SetRate within a single frame.
	 - Removed time check in FPS4MediavideoSampler::Tick. There are cases where the time check failed, even when a new frame was available from the AvPlayer libs. The video sampler now always calls sceAvPlayerGetVideoDataEx. This returns immediately if no frame data is available.
	 - FPS4MediaPlayer::Seek was failing if the video is in a playing/paused state. We now restart the stream if a seek command occurs after the video has stopped (e.g. due to EOF reached).
	 - Shared a single critical section between the FPS4MediaTracks, FPS4MediaVideoSampler and FPS4MediaPlayer objects. Fixes deadlocks between the decoder/player threads where each will be waiting on each others' critical section.

	[~] Enabled debug warnings from AvPlayer library in non-shipping builds.
	[~] Changed log levels of UE_LOGs to match their severity.

	-------------------------

	[!] Also, fixed rendering artifacts on videos using a cropping rectangle
	 - e.g. 1080p videos are actually decoded as 1920x1088, with an extra 8 pixels height, which contained garbage.
	 - We determine the final media texture size as the size of the cropping rectangle, and use modified UVs during the YCbCr->RGB converstion shader to do the mapping.

Change 3228793 on 2016/12/09 by Andrew.Rodham

	Sequencer: Edits to actor sequences now correctly mark their parent blueprints for compilation

	#jira UE-38723

Change 3228877 on 2016/12/09 by Luke.Thatcher

	[PLATFORM] [PS4] [!] Fix track switching issues in PS4 media player.
	 - Sony's AvPlayer library does not support switching tracks (audio or video) on-the-fly after a stream has begun playback.
	 - The higher level UMediaPlayer enables track 0 automatically, which would be committed to the AvPlayer, and therefore lock out other streams.
	 - Actual track selection is now deferred until the stream is started, after which changing tracks is prohibited.
	 - Tracks must be selected before calling SetRate for the first time.

	#jira UE-37225

Change 3229501 on 2016/12/09 by Max.Preussner

	Media: Better display names for media player plug-ins

Change 3229515 on 2016/12/09 by Max.Preussner

	MediaPlayerEditor: Sorting player plug-ins alphabetically; consistent display in both media player editor and media source customization

Change 3229716 on 2016/12/09 by andrew.porter

	Adding PlayRate sequence to my dev folder

Change 3230554 on 2016/12/12 by Andrew.Rodham

	Back out changelist 3220584
	  - Currently this causes actor instances to fail to load because they are instanced of dead classes. Need to think of a more robust solution here.

	#jira UE-39398

Change 3230922 on 2016/12/12 by Max.Preussner

	Merging //UE4/Dev-Main to Dev-Sequencer (//UE4/Dev-Sequencer)

Change 3232059 on 2016/12/12 by Max.Preussner

	MediaUtils: Better error message for when no suitable media player plug-in was found

Change 3232097 on 2016/12/13 by Max.Preussner

	Switch: Temp fix for borked folder name on case-sensitive platforms

Change 3232100 on 2016/12/13 by Max.Preussner

	MediaAssets: Split up UMediaSource into UBaseMediaSource

	Also added color space related properties

Change 3232101 on 2016/12/13 by Max.Preussner

	Media: Started to implement support for color spaces

Change 3232119 on 2016/12/13 by Max.Preussner

	MediaAssets: Fixed buffer not recreated if color space changed

Change 3232799 on 2016/12/13 by Max.Preussner

	PS4Media: Fixed build

	#jira UE-39706

Change 3233170 on 2016/12/13 by Max.Preussner

	Merging //UE4/Dev-Main to Dev-Sequencer (//UE4/Dev-Sequencer)

Change 3233250 on 2016/12/13 by Max.Preussner

	MediaPlayerEditor: Added separator in track menu

Change 3233309 on 2016/12/13 by andrew.porter

	QAGame: Edited text render actors in QA-Media_TrackSwitch

Change 3233439 on 2016/12/13 by Chris.Babcock

	Standardize Android media track DisplayName

Change 3233817 on 2016/12/13 by Chris.Babcock

	Fix virtual keyboard EditableTextBox update when comitted text matches current text from change updates
	#jira UE-39424
	#ue4
	#mobile

Change 3234421 on 2016/12/14 by Andrew.Rodham

	Sequencer: Fixed nullptr crash

Change 3234423 on 2016/12/14 by Andrew.Rodham

	Sequencer: Fixed incorrect copying of base-class from compiler rules

Change 3234429 on 2016/12/14 by Andrew.Rodham

	Sequencer: Fixed empty space not being added between the last and penultimate segments when required

	#jira UE-39442

Change 3234635 on 2016/12/14 by Max.Preussner

	MediaAssets: Exposed UTexture properties in UMediaTexture

Change 3234681 on 2016/12/14 by Max.Preussner

	MediaAssets: Made MediaTextureResources support -onethread

Change 3234878 on 2016/12/14 by Andrew.Rodham

	Sequencer: Fixed crash with "Evaluate Sub Sequences in Isolation" enabled
	  - This occurred when there were tracks at the root level of the sub sequence, because it would incorrectly hash in the parent ID, rather than just using it directly

Change 3234901 on 2016/12/14 by Max.Preussner

	MediaPlayerEditor: Detail customization improvements

Change 3235275 on 2016/12/14 by Chris.Babcock

	Fix WMF stream ordering to match other players
	#jira UE-39703
	#ue4
	#mediaframework

Change 3235390 on 2016/12/14 by Max.Preussner

	DesktopPlatform: Added IniPlatformName to FPlatformInfo; fixed up indentation

Change 3235402 on 2016/12/14 by Max.Preussner

	MediaAssets: Fixed platform player name overrides ignored in packaged builds (UE-39771)

	#jira UE-39771

Change 3235667 on 2016/12/14 by Max.Preussner

	Media: Moved enums into separate header file, so they can be shared

Change 3235984 on 2016/12/14 by Max.Preussner

	Back out changelist 3235667

Change 3236040 on 2016/12/14 by Max.Preussner

	Core: Added modulus operator to FTimespan

Change 3236139 on 2016/12/15 by Max.Preussner

	Core: Added FTimespan::IsZero

Change 3236527 on 2016/12/15 by Max.Preussner

	Fixed initialization order

Change 3237101 on 2016/12/15 by Andrew.Rodham

	Sequencer: Skeletal animation and audio tracks now support multiple rows again.
	  - In practice there were too many edge-cases to account for whilst considering backwards compatability
	  - The impossible scenario was 2 sections on different rows, but evaluating nearest section - this cannot be represented as separate tracks.
	  - Reorganised animation runtime template to use execution tokens rather than ::Initialize to ensure that animation operates correctly on the first frame for spawned objects

	#jira UE-39442
	#jira UE-39725

Change 3237213 on 2016/12/15 by Andrew.Rodham

	Sequencer: Fixed crash when setting event key properties

	#jira UE-39347

Change 3237255 on 2016/12/15 by Chris.Babcock

	Fix Multi with ETC2 and PVRTC selecting ES3.0 instead of 2.0
	#jira UE-39839
	#ue4
	#android

Change 3237294 on 2016/12/15 by Andrew.Rodham

	Sequencer: Fixed shadowed variable warnings

Change 3237366 on 2016/12/15 by Max.Preussner

	Media: Removed color space changes; we'll do these in material graphs instead

Change 3237436 on 2016/12/15 by Andrew.Rodham

	Sequencer: Fixed montages not being stopped for specific animation slots when animation sections were no longer evaluated

	#jira UE-39847

Change 3237458 on 2016/12/15 by Andrew.Rodham

	Sequencer: Always force regeneration of templates when PIE  to eliminate the posibility of combining stale data

Change 3237516 on 2016/12/15 by Max.Preussner

	Media: Attempting to fix Crash in fortnite just before exiting onboarding (UE-39841)

	#jira UE-39841

Change 3237532 on 2016/12/15 by Max.Preussner

	Added missing scope lock

Change 3237991 on 2016/12/16 by Max.Preussner

	PS4Media: Fixed build

[CL 3238204 by Max Preussner in Main branch]
2016-12-16 11:17:44 -05:00

519 lines
22 KiB
C++

// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "MultiBoxExtender.h"
#include "SlateDelegates.h"
#include "CoreMinimal.h"
#include "Misc/Attribute.h"
#include "Layout/Visibility.h"
#include "Widgets/SWidget.h"
#include "Styling/CoreStyle.h"
#include "Framework/SlateDelegates.h"
#include "Textures/SlateIcon.h"
#include "Framework/Commands/UICommandInfo.h"
#include "Framework/Commands/UICommandList.h"
#include "Framework/MultiBox/MultiBoxDefs.h"
#include "Framework/MultiBox/MultiBoxExtender.h"
#include "MultiBox.h"
class FUICommandInfo;
class FUICommandList;
struct FSlateIcon;
struct FUIAction;
/** Delegate used by multi-box to call a user function to populate a new menu. Used for spawning sub-menus and pull-down menus. */
DECLARE_DELEGATE_OneParam( FNewMenuDelegate, class FMenuBuilder& );
/**
* MultiBox builder
*/
class SLATE_API FMultiBoxBuilder
{
public:
/**
* Constructor
*
* @param InType Type of MultiBox
* @param bInShouldCloseWindowAfterMenuSelection Sets whether or not the window that contains this multibox should be destroyed after the user clicks on a menu item in this box
* @param InCommandList The action list that maps command infos to delegates that should be called for each command associated with a multiblock widget. This can be modified after the MultiBox is created by calling the PushCommandList() and PopCommandList() methods.
* @param InTutorialHighlightName Optional name to identify this widget and highlight during tutorials
*/
FMultiBoxBuilder( const EMultiBoxType::Type InType, FMultiBoxCustomization InCustomization, const bool bInShouldCloseWindowAfterMenuSelection, const TSharedPtr< const FUICommandList >& InCommandList, TSharedPtr<FExtender> InExtender = TSharedPtr<FExtender>(), FName InTutorialHighlightName = NAME_None );
/**
* Adds an editable text entry
*
* @param InLabel The label to display in the menu
* @param InToolTip The tool tip to display when the menu entry is hovered over
* @param InIcon The icon to display to the left of the label
* @param InTextAttribute The text string we're editing (often, a delegate will be bound to the attribute)
* @param InOnTextCommitted Called when the user commits their change to the editable text control
* @param InOnTextChanged Called when the text is changed interactively
* @param bInReadOnly Whether or not the text block is read only
*/
void AddEditableText( const FText& InLabel, const FText& InToolTip, const FSlateIcon& InIcon, const TAttribute< FText >& InTextAttribute, const FOnTextCommitted& InOnTextCommitted = FOnTextCommitted(), const FOnTextChanged& InOnTextChanged = FOnTextChanged(), bool bInReadOnly = false );
/**
* Creates a widget for this MultiBox
*
* @return New widget object
*/
virtual TSharedRef< class SWidget > MakeWidget( FMultiBox::FOnMakeMultiBoxBuilderOverride* InMakeMultiBoxBuilderOverride = nullptr );
/**
* Get the multi-box being built.
*
* @return The multi-box being built.
*/
TSharedRef< class FMultiBox > GetMultiBox();
/**
* Pushes a new command list onto the stack. This command list will be used for all subsequently-added multiblocks, until the command-list is popped.
*
* @param CommandList The new command list to use
*/
void PushCommandList( const TSharedRef< const FUICommandList > CommandList );
/**
* Pops the current command list.
*/
void PopCommandList();
/**
* @return The top command list
*/
TSharedPtr<const FUICommandList> GetTopCommandList();
/**
* Pushes a new extender onto the stack. This extender will be used for all subsequently-added multiblocks, until the extender is popped.
*
* @param InExtender The new extender to use
*/
void PushExtender( TSharedRef< FExtender > InExtender );
/**
* Pops the current extender.
*/
void PopExtender();
/** @return The style set used by the multibox widgets */
const ISlateStyle* GetStyleSet() const;
/** @return The style name used by the multibox widgets */
const FName& GetStyleName() const;
/** Sets the style to use on the multibox widgets */
void SetStyle( const ISlateStyle* InStyleSet, const FName& InStyleName );
/** @return The customization settings for the box being built */
FMultiBoxCustomization GetCustomization() const;
protected:
/** Applies any potential extension hooks at the current place */
virtual void ApplyHook(FName InExtensionHook, EExtensionHook::Position HookPosition) = 0;
/** Applies the beginning of a section, including the header and relevant separator */
virtual void ApplySectionBeginning() {}
protected:
/** The MultiBox we're building up */
TSharedRef< class FMultiBox > MultiBox;
/** A stack of command lists which map command infos to delegates that should be called. New multi blocks will always use
the command-list at the top of the stack at the time they are added. */
TArray< TSharedPtr< const FUICommandList > > CommandListStack;
/** The extender stack holding all the possible extensions for this menu builder */
TArray< TSharedPtr<class FExtender> > ExtenderStack;
/** Name to identify this widget and highlight during tutorials */
FName TutorialHighlightName;
};
/**
* Base menu builder
*/
class SLATE_API FBaseMenuBuilder : public FMultiBoxBuilder
{
public:
/**
* Constructor
*
* @param InType Type of MultiBox
* @param bInShouldCloseWindowAfterMenuSelection Sets whether or not the window that contains this multibox should be destroyed after the user clicks on a menu item in this box
* @param InCommandList The action list that maps command infos to delegates that should be called for each command associated with a multiblock widget
* @param bInCloseSelfOnly True if clicking on a menu entry closes itself only and its children but not the entire stack
* @param InTutorialHighlightName Optional name to identify this widget and highlight during tutorials
*/
FBaseMenuBuilder( const EMultiBoxType::Type InType, const bool bInShouldCloseWindowAfterMenuSelection, TSharedPtr< const FUICommandList > InCommandList, bool bInCloseSelfOnly, TSharedPtr<FExtender> InExtender = TSharedPtr<FExtender>(), const ISlateStyle* InStyleSet = &FCoreStyle::Get(), FName InTutorialHighlightName = NAME_None );
/**
* Adds a menu entry
*
* @param InCommand The command associated with this menu entry
* @param InExtensionHook The section hook. Can be NAME_None
* @param InLabelOverride Optional label override. If omitted, then the action's label will be used instead.
* @param InToolTipOverride Optional tool tip override. If omitted, then the action's label will be used instead.
* @param InIconOverride Optional name of the slate brush to use for the tool bar image. If omitted, then the command's icon will be used instead.
* @param InTutorialHighlightName Optional name to identify this widget and highlight during tutorials
*/
void AddMenuEntry( const TSharedPtr< const FUICommandInfo > InCommand, FName InExtensionHook = NAME_None, const TAttribute<FText>& InLabelOverride = TAttribute<FText>(), const TAttribute<FText>& InToolTipOverride = TAttribute<FText>(), const FSlateIcon& InIconOverride = FSlateIcon(), FName InTutorialHighlightName = NAME_None );
/**
* Adds a menu entry without the use of a command
*
* @param InLabel Label to show in the menu entry
* @param InToolTip Tool tip used when hovering over the menu entry
* @param InIcon The icon to use
* @param UIAction Actions to execute on this menu item.
* @param InExtensionHook The section hook. Can be NAME_None
* @param UserInterfaceActionType Type of interface action
* @param InTutorialHighlightName Optional name to identify this widget and highlight during tutorials
*/
void AddMenuEntry( const TAttribute<FText>& InLabel, const TAttribute<FText>& InToolTip, const FSlateIcon& InIcon, const FUIAction& UIAction, FName InExtensionHook = NAME_None, const EUserInterfaceActionType::Type UserInterfaceActionType = EUserInterfaceActionType::Button, FName InTutorialHighlightName = NAME_None );
void AddMenuEntry( const FUIAction& UIAction, const TSharedRef< SWidget > Contents, const FName& InExtensionHook = NAME_None, const TAttribute<FText>& InToolTip = TAttribute<FText>(), const EUserInterfaceActionType::Type UserInterfaceActionType = EUserInterfaceActionType::Button, FName InTutorialHighlightName = NAME_None );
protected:
/** True if clicking on a menu entry closes itself only and its children and not the entire stack */
bool bCloseSelfOnly;
};
/**
* Vertical menu builder
*/
class SLATE_API FMenuBuilder : public FBaseMenuBuilder
{
public:
/**
* Constructor
*
* @param bInShouldCloseWindowAfterMenuSelection Sets whether or not the window that contains this multibox should be destroyed after the user clicks on a menu item in this box
* @param InCommandList The action list that maps command infos to delegates that should be called for each command associated with a multiblock widget
* @param bInCloseSelfOnly True if clicking on a menu entry closes itself only and its children but not the entire stack
*/
FMenuBuilder( const bool bInShouldCloseWindowAfterMenuSelection, TSharedPtr< const FUICommandList > InCommandList, TSharedPtr<FExtender> InExtender = TSharedPtr<FExtender>(), const bool bCloseSelfOnly = false, const ISlateStyle* InStyleSet = &FCoreStyle::Get() )
: FBaseMenuBuilder( EMultiBoxType::Menu, bInShouldCloseWindowAfterMenuSelection, InCommandList, bCloseSelfOnly, InExtender, InStyleSet )
, bSectionNeedsToBeApplied(false)
{
AddSearchWidget();
}
/**
* Creates a widget for this MultiBox
*
* @return New widget object
*/
virtual TSharedRef< class SWidget > MakeWidget( FMultiBox::FOnMakeMultiBoxBuilderOverride* InMakeMultiBoxBuilderOverride = nullptr ) override;
/**
* Adds a menu separator
*/
void AddMenuSeparator(FName InExtensionHook = NAME_None);
/**
* Starts a section on to the extender section hook stack
*
* @param InExtensionHook The section hook. Can be NAME_None
* @param InHeadingText The heading text to use. If none, only a separator is used
*/
void BeginSection( FName InExtensionHook, const TAttribute< FText >& InHeadingText = TAttribute<FText>() );
/**
* Ends the current section
*/
void EndSection();
/**
* Adds a sub-menu which is a menu within a menu
*
* @param InMenuLabel The text that should be shown for the menu
* @param InToolTip The tooltip that should be shown when the menu is hovered over
* @param InSubMenu Sub-Menu object which creates menu entries for the sub-menu
* @param InUIAction Actions to execute on this menu item.
* @param InExtensionHook The section hook. Can be NAME_None
* @param InUserInterfaceActionType Type of interface action
* @param bInOpenSubMenuOnClick Sub-menu will open only if the sub-menu entry is clicked
* @param InIcon The icon to use
* @param bInShouldCloseWindowAfterMenuSelection Whether the submenu should close after an item is selected
*/
void AddSubMenu( const TAttribute<FText>& InMenuLabel, const TAttribute<FText>& InToolTip, const FNewMenuDelegate& InSubMenu, const FUIAction& InUIAction, FName InExtensionHook, const EUserInterfaceActionType::Type InUserInterfaceActionType, const bool bInOpenSubMenuOnClick = false, const FSlateIcon& InIcon = FSlateIcon(), const bool bInShouldCloseWindowAfterMenuSelection = true );
void AddSubMenu( const TAttribute<FText>& InMenuLabel, const TAttribute<FText>& InToolTip, const FNewMenuDelegate& InSubMenu, const bool bInOpenSubMenuOnClick = false, const FSlateIcon& InIcon = FSlateIcon(), const bool bInShouldCloseWindowAfterMenuSelection = true );
void AddSubMenu( const TSharedRef< SWidget > Contents, const FNewMenuDelegate& InSubMenu, const bool bInOpenSubMenuOnClick = false, const bool bInShouldCloseWindowAfterMenuSelection = true );
void AddSubMenu( const FUIAction& UIAction, const TSharedRef< SWidget > Contents, const FNewMenuDelegate& InSubMenu, const bool bInShouldCloseWindowAfterMenuSelection = true );
/**
* Adds any widget to the menu
*
* @param InWidget The widget that should be shown in the menu
* @param InLabel Optional label text to be added to the left of the content
* @param bNoIndent If true, removes the padding from the left of the widget that lines it up with other menu items (default == false)
* @param bSearchable If true, widget will be searchable (default == true)
*/
void AddWidget( TSharedRef<SWidget> InWidget, const FText& Label, bool bNoIndent = false, bool bSearchable = true );
/**
* Adds the widget the multibox will use for searching
*/
void AddSearchWidget();
protected:
/** FMultiBoxBuilder interface */
virtual void ApplyHook(FName InExtensionHook, EExtensionHook::Position HookPosition) override;
virtual void ApplySectionBeginning() override;
public:
// These classes need access to the AddWrapperSubMenu() methods
//friend class FWidgetBlock;
//friend class FToolBarComboButtonBlock;
/**
* Adds a sub-menu which is a menu within a menu
*
* @param InMenuLabel The text that should be shown for the menu
* @param InToolTip The tooltip that should be shown when the menu is hovered over
* @param InSubMenu Sub-Menu object which creates the sub-menu
*/
void AddWrapperSubMenu( const FText& InMenuLabel, const FText& InToolTip, const FOnGetContent& InSubMenu, const FSlateIcon& InIcon );
/**
* Adds a sub-menu which is a menu within a menu
*
* @param InMenuLabel The text that should be shown for the menu
* @param InToolTip The tooltip that should be shown when the menu is hovered over
* @param InSubMenu Sub-Menu object
*/
void AddWrapperSubMenu( const FText& InMenuLabel, const FText& InToolTip, const TSharedPtr<SWidget>& InSubMenu, const FSlateIcon& InIcon );
private:
/** Current extension hook name for sections to determine where sections begin and end */
FName CurrentSectionExtensionHook;
/** Any pending section's heading text */
FText CurrentSectionHeadingText;
/** True if there is a pending section that needs to be applied */
bool bSectionNeedsToBeApplied;
};
/**
* Menu bar builder
*/
class SLATE_API FMenuBarBuilder : public FBaseMenuBuilder
{
public:
/**
* Constructor
*
* @param InCommandList The action list that maps command infos to delegates that should be called for each command associated with a multiblock widget
*/
FMenuBarBuilder( TSharedPtr< const FUICommandList > InCommandList, TSharedPtr<FExtender> InExtender = TSharedPtr<FExtender>(), const ISlateStyle* InStyleSet = &FCoreStyle::Get() )
: FBaseMenuBuilder( EMultiBoxType::MenuBar, false, InCommandList, false, InExtender, InStyleSet )
{
}
/**
* Adds a pull down menu
*
* @param InMenuLabel The text that should be shown for the menu
* @param InToolTip The tooltip that should be shown when the menu is hovered over
* @param InPullDownMenu Pull down menu object for the menu to add.
*/
void AddPullDownMenu( const FText& InMenuLabel, const FText& InToolTip, const FNewMenuDelegate& InPullDownMenu, FName InExtensionHook = NAME_None, FName InTutorialHighlightName = NAME_None );
protected:
/** FMultiBoxBuilder interface */
virtual void ApplyHook(FName InExtensionHook, EExtensionHook::Position HookPosition) override;
};
/**
* Tool bar builder
*/
class SLATE_API FToolBarBuilder : public FMultiBoxBuilder
{
public:
/**
* Constructor
*
* @param InCommandList The action list that maps command infos to delegates that should be called for each command associated with a multiblock widget
*/
FToolBarBuilder( TSharedPtr< const FUICommandList > InCommandList, FMultiBoxCustomization InCustomization, TSharedPtr<FExtender> InExtender = TSharedPtr<FExtender>(), EOrientation Orientation = Orient_Horizontal, const bool InForceSmallIcons = false )
: FMultiBoxBuilder( (Orientation == Orient_Horizontal) ? EMultiBoxType::ToolBar : EMultiBoxType::VerticalToolBar, InCustomization, false, InCommandList, InExtender )
, bSectionNeedsToBeApplied(false)
, bIsFocusable(false)
, bForceSmallIcons(InForceSmallIcons)
{
}
void SetLabelVisibility( EVisibility InLabelVisibility ) { LabelVisibility = InLabelVisibility ; }
void SetIsFocusable( bool bInIsFocusable ) { bIsFocusable = bInIsFocusable; }
/**
* Adds a tool bar button
*
* @param InCommand The command associated with this tool bar button
* @param InLabelOverride Optional label override. If omitted, then the action's label will be used instead.
* @param InToolTipOverride Optional tool tip override. If omitted, then the action's label will be used instead.
* @param InIconOverride Optional name of the slate brush to use for the tool bar image. If omitted, then the action's icon will be used instead.
* @param InTutorialHighlightName Name to identify this widget and highlight during tutorials
*/
void AddToolBarButton(const TSharedPtr< const FUICommandInfo > InCommand, FName InExtensionHook = NAME_None, const TAttribute<FText>& InLabelOverride = TAttribute<FText>(), const TAttribute<FText>& InToolTipOverride = TAttribute<FText>(), const TAttribute<FSlateIcon>& InIconOverride = TAttribute<FSlateIcon>(), FName InTutorialHighlightName = NAME_None );
/**
* Adds a tool bar button
*
* @param UIAction Actions to execute on this menu item.
* @param InLabel Label to show in the menu entry
* @param InToolTip Tool tip used when hovering over the menu entry
* @param InIcon The icon to use
* @param UserInterfaceActionType Type of interface action
* @param InTutorialHighlightName Name to identify this widget and highlight during tutorials
*/
void AddToolBarButton(const FUIAction& InAction, FName InExtensionHook = NAME_None, const TAttribute<FText>& InLabelOverride = TAttribute<FText>(), const TAttribute<FText>& InToolTipOverride = TAttribute<FText>(), const TAttribute<FSlateIcon>& InIconOverride = TAttribute<FSlateIcon>(), const EUserInterfaceActionType::Type UserInterfaceActionType = EUserInterfaceActionType::Button, FName InTutorialHighlightName = NAME_None );
/**
* Adds a combo button
*
* @param InAction UI action that sets the enabled state for this combo button
* @param InMenuContentGenerator Delegate that generates a widget for this combo button's menu content. Called when the menu is summoned.
* @param InLabelOverride Optional label override. If omitted, then the action's label will be used instead.
* @param InToolTipOverride Optional tool tip override. If omitted, then the action's label will be used instead.
* @param InIconOverride Optional icon to use for the tool bar image. If omitted, then the action's icon will be used instead.
* @param bInSimpleComboBox If true, the icon and label won't be displayed
* @param InTutorialHighlightName Name to identify this widget and highlight during tutorials
*/
void AddComboButton( const FUIAction& InAction, const FOnGetContent& InMenuContentGenerator, const TAttribute<FText>& InLabelOverride = TAttribute<FText>(), const TAttribute<FText>& InToolTipOverride = TAttribute<FText>(), const TAttribute<FSlateIcon>& InIconOverride = TAttribute<FSlateIcon>(), bool bInSimpleComboBox = false, FName InTutorialHighlightName = NAME_None );
/**
* Adds any widget to the toolbar
*
* @param InWidget The widget that should be shown in the toolbar
* @param InTutorialHighlightName Name to identify this widget and highlight during tutorials
* @param bSearchable If true, widget will be searchable (default == true)
*/
void AddWidget(TSharedRef<SWidget> InWidget, FName InTutorialHighlightName = NAME_None, bool bSearchable = true);
/**
* Adds a toolbar separator
*/
void AddSeparator(FName InExtensionHook = NAME_None);
/**
* Starts a section on to the extender section hook stack
*
* @param InExtensionHook The section hook. Can be NAME_None
*/
void BeginSection( FName InExtensionHook );
/**
* Ends the current section
*/
void EndSection();
/**
* Starts a new Group block, must be used in conjunction with EndBlockGroup
*/
void BeginBlockGroup();
/**
* End a group block, must be used in conjunction with BeginBlockGroup.
*/
void EndBlockGroup();
protected:
/** FMultiBoxBuilder interface */
virtual void ApplyHook(FName InExtensionHook, EExtensionHook::Position HookPosition) override;
virtual void ApplySectionBeginning() override;
private:
/** Current extension hook name for sections to determine where sections begin and end */
FName CurrentSectionExtensionHook;
TOptional< EVisibility > LabelVisibility;
/** True if there is a pending section that needs to be applied */
bool bSectionNeedsToBeApplied;
/** Whether the buttons created can receive keyboard focus */
bool bIsFocusable;
/** Whether this toolbar should always use small icons, regardless of the current settings */
bool bForceSmallIcons;
};
/**
* Button grid builder
*/
class SLATE_API FButtonRowBuilder : public FMultiBoxBuilder
{
public:
/**
* Constructor
*
* @param InCommandList The action list that maps command infos to delegates that should be called for each command associated with a multiblock widget
*/
FButtonRowBuilder( TSharedPtr< const FUICommandList > InCommandList, TSharedPtr<FExtender> InExtender = TSharedPtr<FExtender>() )
: FMultiBoxBuilder( EMultiBoxType::ButtonRow, FMultiBoxCustomization::None, false, InCommandList, InExtender )
{
}
/**
* Adds a button to a row
*
* @param InCommand The command associated with this tool bar button
* @param InLabelOverride Optional label override. If omitted, then the action's label will be used instead.
* @param InToolTipOverride Optional tool tip override. If omitted, then the action's label will be used instead.
* @param InIconOverride Optional icon to use for the tool bar image. If omitted, then the action's icon will be used instead.
*/
void AddButton( const TSharedPtr< const FUICommandInfo > InCommand, const TAttribute<FText>& InLabelOverride = TAttribute<FText>(), const TAttribute<FText>& InToolTipOverride = TAttribute<FText>(), const FSlateIcon& InIconOverride = FSlateIcon() );
/**
* Adds a button to a row
*
* @param InLabel The button label to display
* @param InToolTipOverride The tooltip for the button
* @param UIAction Action to execute when the button is clicked or when state should be checked
* @param InIcon The icon for the button
* @param UserInterfaceActionType The style of button to display
*/
void AddButton( const FText& InLabel, const FText& InToolTip, const FUIAction& UIAction, const FSlateIcon& InIcon = FSlateIcon(), const EUserInterfaceActionType::Type UserInterfaceActionType = EUserInterfaceActionType::Button );
protected:
/** FMultiBoxBuilder interface */
virtual void ApplyHook(FName InExtensionHook, EExtensionHook::Position HookPosition) override {}
};