Files
UnrealEngineUWP/Engine/Source/Runtime/Slate/Public/Framework/MultiBox/MultiBox.h

706 lines
20 KiB
C
Raw Normal View History

// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
#pragma once
Copying //UE4/Dev-Build to //UE4/Dev-Main (Source: //UE4/Dev-Build @ 3209340) #lockdown Nick.Penwarden #rb none ========================== MAJOR FEATURES + CHANGES ========================== Change 3209340 on 2016/11/23 by Ben.Marsh Convert UE4 codebase to an "include what you use" model - where every header just includes the dependencies it needs, rather than every source file including large monolithic headers like Engine.h and UnrealEd.h. Measured full rebuild times around 2x faster using XGE on Windows, and improvements of 25% or more for incremental builds and full rebuilds on most other platforms. * Every header now includes everything it needs to compile. * There's a CoreMinimal.h header that gets you a set of ubiquitous types from Core (eg. FString, FName, TArray, FVector, etc...). Most headers now include this first. * There's a CoreTypes.h header that sets up primitive UE4 types and build macros (int32, PLATFORM_WIN64, etc...). All headers in Core include this first, as does CoreMinimal.h. * Every .cpp file includes its matching .h file first. * This helps validate that each header is including everything it needs to compile. * No engine code includes a monolithic header such as Engine.h or UnrealEd.h any more. * You will get a warning if you try to include one of these from the engine. They still exist for compatibility with game projects and do not produce warnings when included there. * There have only been minor changes to our internal games down to accommodate these changes. The intent is for this to be as seamless as possible. * No engine code explicitly includes a precompiled header any more. * We still use PCHs, but they're force-included on the compiler command line by UnrealBuildTool instead. This lets us tune what they contain without breaking any existing include dependencies. * PCHs are generated by a tool to get a statistical amount of coverage for the source files using it, and I've seeded the new shared PCHs to contain any header included by > 15% of source files. Tool used to generate this transform is at Engine\Source\Programs\IncludeTool. [CL 3209342 by Ben Marsh in Main branch]
2016-11-23 15:48:37 -05:00
#include "CoreMinimal.h"
#include "SlateFwd.h"
#include "Layout/Visibility.h"
#include "Widgets/DeclarativeSyntaxSupport.h"
#include "Input/Reply.h"
#include "Widgets/SWidget.h"
#include "Widgets/SCompoundWidget.h"
#include "Widgets/Layout/SMenuOwner.h"
#include "Framework/Commands/UIAction.h"
#include "Framework/Commands/UICommandInfo.h"
#include "Framework/Commands/UICommandList.h"
#include "Framework/MultiBox/MultiBoxDefs.h"
Copying //UE4/Dev-Build to //UE4/Dev-Main (Source: //UE4/Dev-Build @ 3209340) #lockdown Nick.Penwarden #rb none ========================== MAJOR FEATURES + CHANGES ========================== Change 3209340 on 2016/11/23 by Ben.Marsh Convert UE4 codebase to an "include what you use" model - where every header just includes the dependencies it needs, rather than every source file including large monolithic headers like Engine.h and UnrealEd.h. Measured full rebuild times around 2x faster using XGE on Windows, and improvements of 25% or more for incremental builds and full rebuilds on most other platforms. * Every header now includes everything it needs to compile. * There's a CoreMinimal.h header that gets you a set of ubiquitous types from Core (eg. FString, FName, TArray, FVector, etc...). Most headers now include this first. * There's a CoreTypes.h header that sets up primitive UE4 types and build macros (int32, PLATFORM_WIN64, etc...). All headers in Core include this first, as does CoreMinimal.h. * Every .cpp file includes its matching .h file first. * This helps validate that each header is including everything it needs to compile. * No engine code includes a monolithic header such as Engine.h or UnrealEd.h any more. * You will get a warning if you try to include one of these from the engine. They still exist for compatibility with game projects and do not produce warnings when included there. * There have only been minor changes to our internal games down to accommodate these changes. The intent is for this to be as seamless as possible. * No engine code explicitly includes a precompiled header any more. * We still use PCHs, but they're force-included on the compiler command line by UnrealBuildTool instead. This lets us tune what they contain without breaking any existing include dependencies. * PCHs are generated by a tool to get a statistical amount of coverage for the source files using it, and I've seeded the new shared PCHs to contain any header included by > 15% of source files. Tool used to generate this transform is at Engine\Source\Programs\IncludeTool. [CL 3209342 by Ben Marsh in Main branch]
2016-11-23 15:48:37 -05:00
class FDropPreviewBlock;
class ITableRow;
class SClippingHorizontalBox;
class SHorizontalBox;
class SMultiBoxWidget;
class STableViewBase;
class SVerticalBox;
namespace MultiBoxConstants
{
// @todo Slate MultiBox: Hard coded dimensions
const float MenuIconSize = 16.0f;
const float MenuCheckBoxSize = 16.0f;
/** The time that a mouse should be hovered over a sub-menu before it automatically opens */
const float SubMenuOpenTime = 0.0f;
/** When a sub-menu is already open, the time that a mouse should be hovered over a sub-menu entry before
dismissing the other menu and opening this one */
const float SubMenuClobberTime = 0.5f;
//const FName MenuItemFont = "MenuItem.Font";
//const FName MenuBindingFont = "MenuItem.BindingFont";
//const FName EditableTextFont = "MenuItem.Font";
/** Minimum widget of an editable text box within a multi-box */
const float EditableTextMinWidth = 30.0f;
}
/**
* MultiBlock (abstract). Wraps a "block" of useful UI functionality that can be added to a MultiBox.
*/
class SLATE_API FMultiBlock
: public TSharedFromThis< FMultiBlock > // Enables this->AsShared()
{
public:
/**
* Constructor
*
* @param InCommand The command info that describes what action to take when this block is activated
* @param InCommandList The list of mappings from command info to delegates so we can find the delegates to process for the provided action
*/
FMultiBlock( const TSharedPtr< const FUICommandInfo > InCommand, TSharedPtr< const FUICommandList > InCommandList, FName InExtensionHook = NAME_None, EMultiBlockType::Type InType = EMultiBlockType::None )
: Action( InCommand )
, ActionList( InCommandList )
, ExtensionHook( InExtensionHook )
, Type( InType )
, TutorialHighlightName( NAME_None )
{
}
/**
* Constructor
*
* @InAction UI action delegates that should be used in place of UI commands (dynamic menu items)
*/
FMultiBlock( const FUIAction& InAction, FName InExtensionHook = NAME_None, EMultiBlockType::Type InType = EMultiBlockType::None )
: DirectActions( InAction )
, ExtensionHook( InExtensionHook )
, Type( InType )
, TutorialHighlightName( NAME_None )
{
}
virtual ~FMultiBlock()
{
}
/**
* Returns the action list associated with this block
*
* @return The action list or null if one does not exist for this block
*/
TSharedPtr< const FUICommandList > GetActionList() const { return ActionList; }
/**
* Returns the action associated with this block
*
* @return The action for this block or null if one does not exist
*/
TSharedPtr< const FUICommandInfo> GetAction() const { return Action; }
/**
* Returns the direct actions for this block. Delegates may be unbound if this block has a UICommand
*
* @return DirectActions for this block
*/
const FUIAction& GetDirectActions() const { return DirectActions; }
/** Creates a menu entry that is representative of this block */
virtual void CreateMenuEntry(class FMenuBuilder& MenuBuilder) const { }
/** Group blocks interface */
virtual bool IsGroupStartBlock() const { return false; }
virtual bool IsGroupEndBlock() const { return false; }
virtual bool HasIcon() const { return false; }
/** Set the tutorial highlight name for this menu entry */
void SetTutorialHighlightName(FName InTutorialName)
{
TutorialHighlightName = InTutorialName;
}
/** Get the tutorial highlight name for this menu entry */
FName GetTutorialHighlightName() const
{
return TutorialHighlightName;
}
/**
* Creates a MultiBlock widget for this MultiBlock
*
* @param InOwnerMultiBoxWidget The widget that will own the new MultiBlock widget
* @param InLocation The location information for the MultiBlock widget
*
* @return MultiBlock widget object
*/
TSharedRef< class IMultiBlockBaseWidget > MakeWidget( TSharedRef< class SMultiBoxWidget > InOwnerMultiBoxWidget, EMultiBlockLocation::Type InLocation, bool bSectionContainsIcons ) const;
/**
* Gets the type of this MultiBox
*
* @return The MultiBlock's type
*/
const EMultiBlockType::Type GetType() const
{
return Type;
}
/**
* Sets the searchable state of this block
*
* @param bSearchable The searchable state to set
*/
void SetSearchable(bool bSearchable);
/**
* Gets the searchable state of this block
*
* @return Whether this block is searchable
*/
bool GetSearchable() const;
private:
/**
* Allocates a widget for this type of MultiBlock. Override this in derived classes.
*
* @return MultiBlock widget object
*/
virtual TSharedRef< class IMultiBlockBaseWidget > ConstructWidget() const = 0;
/** Gets the extension hook so users can see what hooks are where */
FName GetExtensionHook() const {return ExtensionHook;}
private:
// We're friends with SMultiBoxWidget so that it can call MakeWidget() directly
friend class SMultiBoxWidget;
/** Direct processing of actions. Will use these actions if there is not UICommand associated with this block that handles actions*/
FUIAction DirectActions;
/** The action associated with this block (can be null for some actions) */
const TSharedPtr< const FUICommandInfo > Action;
/** The list of mappings from command info to delegates that should be called. This is here for quick access. Can be null for some widgets*/
const TSharedPtr< const FUICommandList > ActionList;
/** Optional extension hook which is used for debug display purposes, so users can see what hooks are where */
FName ExtensionHook;
/** Type of MultiBlock */
EMultiBlockType::Type Type;
/** Name to identify a widget for tutorials */
FName TutorialHighlightName;
/** Whether this block can be searched */
bool bSearchable;
};
/**
* MultiBox. Contains a list of MultiBlocks that provide various functionality.
*/
class SLATE_API FMultiBox
: public TSharedFromThis< FMultiBox > // Enables this->AsShared()
{
public:
virtual ~FMultiBox();
/**
* Creates a new multibox instance
*/
static TSharedRef<FMultiBox> Create( const EMultiBoxType::Type InType, FMultiBoxCustomization InCustomization, const bool bInShouldCloseWindowAfterMenuSelection );
/**
* Gets the type of this MultiBox
*
* @return The MultiBox's type
*/
const EMultiBoxType::Type GetType() const
{
return Type;
}
/**
* Gets whether or not the window that contains this multibox should be destroyed after the user clicks on a menu item in this box
*
* @return True if window should be closed automatically when the user clicks on a menu item, otherwise false
*/
bool ShouldCloseWindowAfterMenuSelection() const
{
return bShouldCloseWindowAfterMenuSelection;
}
/**
* Adds a MultiBlock to this MultiBox, to the end of the list
*/
void AddMultiBlock( TSharedRef< const FMultiBlock > InBlock );
/**
* Removes a MultiBlock from the list for user customization
*/
void RemoveCustomMultiBlock( TSharedRef< const FMultiBlock> InBlock );
/**
* Inserts a MultiBlock to the list for user customization
*/
void InsertCustomMultiBlock( TSharedRef<const FMultiBlock> InBlock, int32 Index );
DECLARE_DELEGATE_TwoParams( FOnMakeMultiBoxBuilderOverride, const TSharedRef<FMultiBox>&, const TSharedRef<SMultiBoxWidget>& );
/**
* Creates a MultiBox widget for this MultiBox
*
* @return MultiBox widget object
*/
TSharedRef< class SMultiBoxWidget > MakeWidget( bool bSearchable, FOnMakeMultiBoxBuilderOverride* InMakeMultiBoxBuilderOverride = nullptr );
/**
* Access this MultiBox's list of blocks
*
* @return Our list of MultiBlocks
*/
const TArray< TSharedRef< const FMultiBlock > >& GetBlocks() const
{
return Blocks;
}
/** @return The style set used by the multibox widgets */
const ISlateStyle* GetStyleSet() const { return StyleSet; }
/** @return The style name used by the multibox widgets */
const FName& GetStyleName() const { return StyleName; }
/** Sets the style to use on the multibox widgets */
void SetStyle( const ISlateStyle* InStyleSet, const FName& InStyleName )
{
StyleSet = InStyleSet;
StyleName = InStyleName;
}
/** @return The customization name for this box */
FName GetCustomizationName() const;
/**
* Creates a block from the provided command that is compatible with this box
*
* @param Command The UI command to create the block from
* @return The created multi block. If null, this command could not be placed in this block
*/
TSharedPtr<FMultiBlock> MakeMultiBlockFromCommand( TSharedPtr<const FUICommandInfo> Command, bool bCommandMustBeBound ) const;
/**
* Finds an existing block that handles the provided command
*
* @param Command The command to check for
*/
TSharedPtr<const FMultiBlock> FindBlockFromCommand( TSharedPtr<const FUICommandInfo> Command ) const;
bool IsInEditMode() const { return FMultiBoxSettings::IsInToolbarEditMode() && IsCustomizable(); }
/* The search widget to be displayed at the top of the multibox */
TSharedPtr<STextBlock> SearchTextWidget;
private:
/**
* 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
*/
FMultiBox( const EMultiBoxType::Type InType, FMultiBoxCustomization InCustomization, const bool bInShouldCloseWindowAfterMenuSelection );
/**
* @return true if this box can be customized by a user
*/
bool IsCustomizable() const;
/**
* Applies user customized blocks to the multibox
*/
void ApplyCustomizedBlocks();
private:
/** Saved customization data */
TSharedRef< class FMultiBoxCustomizationData > CustomizationData;
/** All command lists in this box */
TArray< TSharedPtr<const FUICommandList> > CommandLists;
/** Ordered list of blocks */
TArray< TSharedRef< const FMultiBlock > > Blocks;
/** The style set to use with the widgets in the MultiBox */
const ISlateStyle* StyleSet;
/** The style name to use with the widgets in the MultiBox */
FName StyleName;
/** Type of MultiBox */
EMultiBoxType::Type Type;
/** True if window that owns any widgets created from this multibox should be closed automatically after the user commits to a menu choice */
bool bShouldCloseWindowAfterMenuSelection;
};
/**
* MultiBlock Slate widget interface
*/
class SLATE_API IMultiBlockBaseWidget
{
public:
/**
* Interprets this object as a SWidget
*
* @return Widget reference
*/
virtual TSharedRef< SWidget > AsWidget() = 0;
/**
* Interprets this object as a SWidget
*
* @return Widget reference
*/
virtual TSharedRef< const SWidget > AsWidget() const = 0;
/**
* Associates the owner MultiBox widget with this widget
*
* @param InOwnerMultiBoxWidget The MultiBox widget that owns us
*/
virtual void SetOwnerMultiBoxWidget( TSharedRef< SMultiBoxWidget > InOwnerMultiBoxWidget ) = 0;
/**
* Associates this widget with a MultiBlock
*
* @param InMultiBlock The MultiBlock we'll be associated with
*/
virtual void SetMultiBlock( TSharedRef< const FMultiBlock > InMultiBlock ) = 0;
/**
* Builds this MultiBlock widget up from the MultiBlock associated with it
*
* @param StyleSet The Slate style to use to build the widget
* @param StyleName The style name to use from the StyleSet
*/
virtual void BuildMultiBlockWidget(const ISlateStyle* StyleSet, const FName& StyleName) = 0;
/**
* Sets the blocks location relative to the other blocks
*
* @param InLocation The MultiBlocks location
* @param bSectionContainsIcons Does the section contain icons?
*/
virtual void SetMultiBlockLocation(EMultiBlockLocation::Type InLocation, bool bSectionContainsIcons) = 0;
/**
* Returns this MultiBlocks location
*/
virtual EMultiBlockLocation::Type GetMultiBlockLocation() = 0;
};
/**
* MultiBlock Slate base widget (pure virtual). You'll derive your own MultiBlock class from this base class.
*/
class SLATE_API SMultiBlockBaseWidget
: public IMultiBlockBaseWidget,
public SCompoundWidget
{
public:
/** IMultiBlockBaseWidget interface */
virtual TSharedRef< SWidget > AsWidget() override;
virtual TSharedRef< const SWidget > AsWidget() const override;
virtual void SetOwnerMultiBoxWidget( TSharedRef< SMultiBoxWidget > InOwnerMultiBoxWidget ) override;
virtual void SetMultiBlock( TSharedRef< const FMultiBlock > InMultiBlock ) override;
virtual void SetMultiBlockLocation( EMultiBlockLocation::Type InLocation, bool bInSectionContainsIcons ) override;
virtual EMultiBlockLocation::Type GetMultiBlockLocation() override;
/** SWidget Interface */
virtual void OnDragEnter( const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent ) override;
virtual FReply OnDragOver( const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent ) override;
virtual FReply OnDrop( const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent ) override;
protected:
/** Weak reference back to the MultiBox widget that owns us */
TWeakPtr< SMultiBoxWidget > OwnerMultiBoxWidget;
/** The MultiBlock we're associated with */
TSharedPtr< const FMultiBlock > MultiBlock;
/** The MultiBlocks location relative to the other blocks in the set */
EMultiBlockLocation::Type Location;
/** Does the section this block resides in contain blocks with icons? */
bool bSectionContainsIcons;
};
/**
* MultiBox Slate widget
*/
class SLATE_API SMultiBoxWidget
: public SMenuOwner
{
public:
SLATE_BEGIN_ARGS( SMultiBoxWidget )
: _ContentScale( FVector2D::UnitVector )
{}
/** Content scaling factor */
SLATE_ATTRIBUTE( FVector2D, ContentScale )
SLATE_END_ARGS()
/**
* Construct this widget
*
* @param InArgs The declaration data for this widget
*/
void Construct( const FArguments& InArgs );
/**
* Associates this widget with a MultiBox
*
* @param InMultiBox The MultiBox we'll be associated with
*/
void SetMultiBox( TSharedRef< FMultiBox > InMultiBox )
{
MultiBox = InMultiBox;
}
/**
* Sets new content for the SMultiBoxWidget
*
* @param InContent The new content to place in the ChildSlot
*/
void SetContent( TSharedRef< SWidget > InContent )
{
ChildSlot
[
InContent
];
}
/**
* Access the MultiBox associated with this widget
*/
TSharedRef< const FMultiBox > GetMultiBox() const
{
return MultiBox.ToSharedRef();
}
/**
* Sets the searchable state of this multibox
*
* @param bSearchable The searchable state to set
*/
void SetSearchable(bool bSearchable);
/**
* Gets the searchable state of this multibox
*
* @return Whether this block is searchable
*/
bool GetSearchable() const;
/**
* Builds this MultiBox widget up from the MultiBox associated with it
*/
void BuildMultiBoxWidget();
/** Generates the tiles for an STileView for button rows */
TSharedRef<ITableRow> GenerateTiles(TSharedPtr<SWidget> Item, const TSharedRef<STableViewBase>& OwnerTable);
/** Gets the maximum item width and height of the consituent widgets */
float GetItemWidth() const;
float GetItemHeight() const;
/** Event handler for clicking the wrap button */
TSharedRef<SWidget> OnWrapButtonClicked();
const ISlateStyle* GetStyleSet() const { return MultiBox->GetStyleSet(); }
const FName& GetStyleName() const { return MultiBox->GetStyleName(); }
/**
* Called when a user drags a UI command into a multiblock in this widget
*/
void OnCustomCommandDragEnter( TSharedRef<const FMultiBlock> MultiBlock, const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent );
/**
* Called when a user drags a UI command within multiblock in this widget
*/
void OnCustomCommandDragged( TSharedRef<const FMultiBlock> MultiBlock, const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent );
/**
* Called when a user drops a UI command in this widget
*/
void OnCustomCommandDropped();
/**
* Called after a drag was initiated from this box but was dropped elsewhere
*/
void OnDropExternal();
/** Helper function used to transfer focus to the next/previous widget */
static FReply FocusNextWidget(EUINavigation NavigationType);
/** SWidget interface */
virtual FReply OnDragOver( const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent ) override;
virtual FReply OnDrop( const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent ) override;
virtual bool SupportsKeyboardFocus() const override;
virtual FReply OnFocusReceived( const FGeometry& MyGeometry, const FFocusEvent& InFocusEvent ) override;
virtual FReply OnKeyDown( const FGeometry& MyGeometry, const FKeyEvent& KeyEvent ) override;
virtual FReply OnKeyChar( const FGeometry& MyGeometry, const FCharacterEvent& InCharacterEvent ) override;
Copying //UE4/Orion-Staging to //UE4/Dev-Main (Source: //Orion/Dev-General @ 2961068) #lockdown Nick.Penwarden ========================== MAJOR FEATURES + CHANGES ========================== Change 2958488 on 2016/04/27 by Michael.Noland Engine: Added support for UNumericProperty (int64, etc...) and doubles as allowable types in data table structures (Note: Blueprints still can't access these types, so use is limited to C++ for now) #tests Tested with a data table created from a struct that contained int64 properties Change 2958440 on 2016/04/27 by Leslie.Nivison Adding .tps and licenses for elftoolchain #test none Change 2958434 on 2016/04/27 by david.nikdel #ROBOMERGE-AUTHOR: josh.markiewicz #UE4 - fix for merge conflict from 0.25 branch #tests none #ROBOMERGE-SOURCE: CL 2958433 in //Orion/Main/... #ROBOMERGE-BOT: ORION (Main -> Dev-General) Change 2958431 on 2016/04/27 by Martin.Wilson Fix crash when changing curve type of new curve #TESTS recreated original issue to prove changes fix it Change 2958409 on 2016/04/27 by Brad.Angelcyk updates LinuxToolChain with a function to escape arguments passed to clang #tests compiled LinuxNoEditor and LinuxServer Change 2958287 on 2016/04/27 by Jason.Bestimt #ORION_DG - Merge MAIN @ CL 2958273 #RB:none #Tests:none Change 2958201 on 2016/04/27 by Jason.Bestimt #ORION_DG - Merge MAIN @ CL 2958156 #RB:none #Tests:none Change 2958034 on 2016/04/27 by Dmitry.Rekman Do not skip rendering commands on server (UE-29891). - Enqueue... macros changed to make commands execute on the calling thread for UE_SERVER. - Removed workaround in stats code that was added because advancing frame was not previously happening. - Added logic to avoid allocating memory (and triggering check()) from NullRHI in FStaticShadowDepthMap. #coderreview Daniel.Wright, Sam.Zamani #tests Compiled Linux server and Windows client, ran a couple matches (on compatible cooked build). Change 2957881 on 2016/04/27 by Andrew.Grant Fix for UE-29973 #tests compiled Change 2957769 on 2016/04/27 by Robert.Manuszewski Stopping thread heartbeat when the engine crashes to prevent it from interfering with generating crash reports. #jira OR-20501 #tests Win64 client cooked build Change 2957711 on 2016/04/27 by david.nikdel #ROBOMERGE-AUTHOR: ben.marsh EC: Use the original author for any ROBOMERGED changes in failure emails. [CodeReviewed] David.Nikdel #ROBOMERGE-SOURCE: CL 2957709 in //Orion/Main/... #ROBOMERGE-BOT: ORION (Main -> Dev-General) Change 2957042 on 2016/04/26 by david.nikdel #ROBOMERGE-AUTHOR: nick.atamas Merging CL 2956472 from .25 to Main. Fading out HUD on victory/defeat. Added code to SRetainerWidget to respect its own opacity. #test PIE #ROBOMERGE-SOURCE: CL 2957041 in //Orion/Main/... #ROBOMERGE-BOT: ORION (Main -> Dev-General) Change 2957005 on 2016/04/26 by Daniel.Lamb Included pete on the rebuild lighting emails. He will be taking over whilest I'm out next week #test Compile. Change 2956915 on 2016/04/26 by Leslie.Nivison Adding .tps for swaggerui, roboto font. #test none Change 2956778 on 2016/04/26 by Lina.Halper Fixed crash with curve importing UID issue #Rb: none #Code review:Martin.Wilson #tests: editor, import, no crash Change 2956735 on 2016/04/26 by Mieszko.Zielinski Removed PRAGMA_DISABLE_OPTIMIZATION that slipped through code review #Orion #test none Change 2956669 on 2016/04/26 by Mieszko.Zielinski Big Bot Objectives pass #Orion - Objective graph navigation introduced, acompanied with BT task to take advantage of it - lots of improvements to AICommander and ObjectiveGraph - bot teams are aware of their human members while dealing objectives - behavior improvements, including a separate EQS queries for melee and ranged enemy selection Disabled for now, will get enabled in a separate CL #test golden path Change 2956665 on 2016/04/26 by Mieszko.Zielinski Changed NavMesh projection code to use 2d distance when looking for the best point on navmesh #UE4 #test golen path Change 2956639 on 2016/04/26 by Mieszko.Zielinski Implemented a generic, template 2d grid #UE4 #test none Change 2956628 on 2016/04/26 by Jon.Lietz first pass on gameplay code needed for Buff Bar - added OnTimeChangeDelegate to FActiveGameplayEffect to tracking when the duration or start effect time changes for a gameplay effect. - added GetGameplayEffectStartTimeAndDuration() that will set the passed in start time and duration for the given FActiveGameplayEffectHandle - added support for FOrionStatusEffectDisplayInfo to be a dynamic array vs a static one. - added a FGameplayTag and UTexture2D* to track buff effects #RB DaveRatti #tests apply and remove tracked gameplay effects. Change 2956424 on 2016/04/26 by Simon.Tovey Fix for OR-20387 Bone Socket module could require different sizes of instance data depending on properties that can differ between lods. Allocation code assumes all lods want the same size. Altered module to request max of all possible sizes. #tests Editor, GoldenPath, Fixes crash Change 2956403 on 2016/04/26 by Mieszko.Zielinski Generic, graph, template A* implementation #UE4 #test golden path Change 2956360 on 2016/04/26 by Lina.Halper Fix crash of animation editing when joint becomes invalid - due to compact joint and so on - Coil's editing has caused issue where it isn't included to compact bone container #tests: Michael Rumple tested this change in his local machine where we could crash consistently. Change 2956068 on 2016/04/26 by Leslie.Nivison Adding licenses, .tps for Mono #test none Change 2956049 on 2016/04/26 by Andrew.Grant Undid accidental console variables checkin Change 2955972 on 2016/04/26 by Bart.Bressler Add "Mixed" replication mode used by OrionPlayerState_Game to save bandwidth while replicating the player state. Saves 1.5-2kb/s Currently turned off with a cvar (Orion.PlayerState.MixedReplicationModeForPlayers) #tests took network profiles with/without changes, also loaded replays and used logging to make sure the correct data was getting replicated Change 2955966 on 2016/04/26 by Andrew.Grant Merging //UE4/Orion-Staging (Source: //UE4/Main @ 2952833) #tests compiled, cooked, PIE, golden-path Change 2955598 on 2016/04/25 by Andrew.Grant Optionally show warnings and errors visually on the HUD in dev builds. Controlled by DurationOfErrorsAndWarningsOnHUD in Engine.Engine section of DefaultEngine.ini (set to 0 to disable) #tests game, editor, PS4 played, exited. Change 2955589 on 2016/04/25 by Andrew.Grant Clarified array bounds warnings in script #tests local tests with bounds checking Change 2955506 on 2016/04/25 by david.nikdel #ROBOMERGE-AUTHOR: andrew.grant Merging changes from Release branches to Main (//Orion/Main) #ROBOMERGE-SOURCE: CL 2955505 in //Orion/Main/... #ROBOMERGE-BOT: ORION (Main -> Dev-General) Change 2955274 on 2016/04/25 by Eric.Newman Improved support for in-memory screenshots. Added a RequestScreenshot variant that does not require a filename parameter. #tests sent myself several player report screenshots #robomerge: MAIN, 25 Change 2955109 on 2016/04/25 by Jason.Bestimt #ORION_DG - Merge MAIN @ CL 2955087 #RB:none #Tests:none Change 2954451 on 2016/04/25 by Jason.Bestimt #ORION_DG - Merge MAIN @ CL 2954443 #RB:none #tests:none Change 2954444 on 2016/04/25 by david.nikdel #ROBOMERGE-AUTHOR: jason.bestimt #ORION_MAIN - Merge 25 @ CL 2954417 #RB:none #Tests:none #ROBOMERGE-SOURCE: CL 2954443 in //Orion/Main/... #ROBOMERGE-BOT: ORION (Main -> Dev-General) Change 2954439 on 2016/04/25 by Robert.Manuszewski Removing debug code #tests none Change 2954437 on 2016/04/25 by Robert.Manuszewski Changing thread hang detection and DLL injection asserts to custom ensures so that we have time to verify if they work correctly in live environment. - DLL injection will now print only worker threads' callstacks - Tweaked messages printed when game hang is detected - re-enabled DLL injection test #tests Tested with cooked Win64 Client Change 2954379 on 2016/04/25 by david.nikdel #ROBOMERGE-AUTHOR: jason.bestimt #ORION_25 - Merge 24.1 fixes @ CL 2954327 #RB:none #Tests:none #ROBOMERGE-SOURCE: CL 2954377 in //Orion/Release-0.25/... via CL 2954378 #ROBOMERGE-BOT: ORION (Main -> Dev-General) Change 2954157 on 2016/04/25 by Robert.Manuszewski Possible fix for missing/incomplete callstacks reported by thread hartbeat when a hang is detected. #tests Cooked Win64 client Change 2954051 on 2016/04/24 by Chris.Gagnon Copying CL 2953496 to Paragon from Fortnite When the console closes it now properly restores the viewports input state (both focus and capture). #tests ran the game and used the Console Change 2953620 on 2016/04/22 by Brad.Angelcyk adds nullrhi to the exclusions list for rendering on linux builds. fixes build error on case sensitive filesystems. #tests compiled LinuxNoEditor and LinuxServer Change 2953546 on 2016/04/22 by david.nikdel #ROBOMERGE-AUTHOR: ben.marsh BuildGraph: Fix chunking task not correctly filtering files into the ignore list, and adding quotes around the filenames that BPT doesn't seem parse. New output verified to be the same as UAT's debug manifest. #tests ran chunking part of build script on an existing build, and verified that the generated ignore list matches up with the UAT debug manifest. #ROBOMERGE-SOURCE: CL 2953545 in //Orion/Main/... #ROBOMERGE-BOT: ORION (Main -> Dev-General) Change 2953468 on 2016/04/22 by Andrew.Grant Pulling updated PhysX binaries from //UE4/Main to address OR-19860 #tests golden path with Gideon Change 2953432 on 2016/04/22 by Rob.Cannaday Ignore presence updates for local user with different resources #jira OR-19929 #tests front end party invites #ROBOMERGE Main Change 2953367 on 2016/04/22 by Leslie.Nivison TPSAuditTool can't find files under Engine/Build, so adding Android .tps files under Engine/Source/ThirdParty/Android to be properly picked up. #test none Change 2952860 on 2016/04/22 by Ben.Marsh EC: Simplify patterns for excluded jobs so they only have to match against the custom part of the job name. Prevents jobs with decorators such as "(#2)" not matching current patterns. Change 2952824 on 2016/04/22 by Ben.Marsh EC: Allow filtering out jobs from the grid view on the dashboard. We don't want to show promotion jobs there. Change 2952632 on 2016/04/22 by Dan.Youhon Fix delayed minion reactions to sudden root motion movements on clients - Added OnRootMotionSourceBeingApplied virtual function to UCharacterMovementComponent, does nothing by default, in OrionCharMovementComponent we ForceServerTick() like we do on knockbacks/other velocity-changing events - This specifically fixes Coil's BFG ability push being so quick that minions looked like they were almost teleporting to their end destination on clients - much more responsive now #tests PIE Change 2952390 on 2016/04/22 by david.nikdel #ROBOMERGE-AUTHOR: andrew.grant Back out revision 10 from //Orion/Main/Engine/Source/Runtime/PakFile/Public/IPlatformFilePak.h #tests compiled #ROBOMERGE-SOURCE: CL 2952388 in //Orion/Main/... #ROBOMERGE-BOT: ORION (Main -> Dev-General) Change 2952352 on 2016/04/21 by david.nikdel #ROBOMERGE-AUTHOR: jason.bestimt #ORION_MAIN - Merge 25 @ CL 2952347 #RB:none #Tests:none #ROBOMERGE-SOURCE: CL 2952351 in //Orion/Main/... #ROBOMERGE-BOT: ORION (Main -> Dev-General) Change 2952164 on 2016/04/21 by Leslie.Nivison Removing invalid characters, incorrect redirect from .tps #test none Change 2952092 on 2016/04/21 by David.Ratti Change Add to AddUnique for attribute initialization. This is to prevent adding attribute set twice in cases where people are initing attribute sets from DefaultStartingData #tests pie Change 2951671 on 2016/04/21 by Rob.Cannaday Clear Recently Completed User Ids list when we flush a completion delegate. #tests front end, parties, adding / removing friends Change 2951511 on 2016/04/21 by Robert.Manuszewski Added code to dump all running threads' stack traces to the log when DLL injection is detected. #tests Tested in cooked win64 client Change 2951384 on 2016/04/21 by Josh.Markiewicz #UE4 - fixed assert when using a dedicated server only function in PIE - too much of a pain to make this work properly, removing check #tests PIE #ROBOMERGE: MAIN, DUI Change 2951247 on 2016/04/21 by david.nikdel #ROBOMERGE-AUTHOR: jason.bestimt #ORION_24.1 - Merge 24 @ CL 2951213 #RB:none #Tests:none #ROBOMERGE-SOURCE: CL 2951241 in //Orion/Release-0.24.1/... via CL 2951245 #ROBOMERGE-BOT: ORION (Main -> Dev-General) Change 2950766 on 2016/04/20 by david.nikdel #ROBOMERGE-AUTHOR: jason.bestimt #ORION_MAIN - Merge UI @ CL 2950642 #RB:none #Tests:none [CodeReviewed]: matt.kuhlenschmidt, matt.schembari #ROBOMERGE-SOURCE: CL 2950765 in //Orion/Main/... #ROBOMERGE-BOT: ORION (Main -> Dev-General) Change 2950504 on 2016/04/20 by Jamie.Dale Added P4FileType.Utf8 #tests Built UAT Change 2950136 on 2016/04/20 by Andrew.Grant Fixed issue where config var HangDuration wasn't being used Now read from config every tick to be hotfix friendly #tests ran game [CL 2961397 by Andrew Grant in Main branch]
2016-04-29 15:14:04 -04:00
virtual bool OnVisualizeTooltip(const TSharedPtr<SWidget>& TooltipContent) override;
void TypeChar(const TCHAR InChar);
/**
* Changes visibility of widgets in the multibox
*
* @param InSearchText The search text to check against
*/
void UpdateSearch(const TCHAR);
/**
* Resets the search to be empty
*/
void ResetSearch();
void ReduceSearch();
/**
* Changes visibility of widgets in the multibox
*/
void FilterMultiBoxEntries();
/**
* Get the text to search by
*
* @return The text currently being searched
*/
FText GetSearchText() const;
/**
* Get the SSearchText widget holding the search text
*
* @return The widget to get
*/
TSharedPtr<STextBlock> GetSearchTextWidget();
/**
Copying //UE4/Dev-Editor to //UE4/Dev-Main (Source: //UE4/Dev-Editor @ 3082391) #lockdown Nick.Penwarden #rb none ========================== MAJOR FEATURES + CHANGES ========================== Change 3051464 on 2016/07/15 by Nick.Darnell Regression Testing - Several upgrades to the functional testing system, better tracking of failure cases, some source line failure detection, trying to make it easier to run a specific test on a map. Some UI improvements, easier access to the automation system. Lots more refactoring to come, lots of improvements are still needed in transmitting screenshots and just generally building a automation report we could dump from the build machines. Change 3051465 on 2016/07/15 by Nick.Darnell Adding the "Engine Test" project our one stop shope for running automation tests in the engine to try and reduce regressions. Change 3051847 on 2016/07/15 by Matt.Kuhlenschmidt Fixed material editor viewport messages being blocked by viewport toolbar Change 3052025 on 2016/07/15 by Nick.Darnell Moving the placement mode hooks out of functional testing module, moving them into the editor automation module. Change 3053508 on 2016/07/18 by Stephan.Jiang Copy,Cut,Paste tracks, not for mastertracks yet. #UE-31808 Change 3054723 on 2016/07/18 by Stephan.Jiang Small fixes for typo & comments Change 3055996 on 2016/07/19 by Trung.Le PIE: No longer auto resume game in PIE on focus received Change 3056106 on 2016/07/19 by Trung.Le Back out changelist 3055996. Build break. Change 3056108 on 2016/07/19 by Stephan.Jiang Updating "SoundConcurrency" asseticon Change 3056389 on 2016/07/19 by Trung.Le PIE: No longer auto resume game in PIE on focus received #jira UE-33339 Change 3056396 on 2016/07/19 by Matt.Kuhlenschmidt More perf selection improvements: - Static meshes now go through the static draw path when rendered for selection outline instead of just rendering using the dynamic path Change 3056758 on 2016/07/19 by Stephan.Jiang Update SelectedWidgets in WidgetblueprintEditor to match the selected tracks in sequencer. Change 3057519 on 2016/07/20 by Matt.Kuhlenschmidt Another fix for selecting lots of objects taking forever. This one is due to repeated Modify calls if there are groups in the selection. Each group actor selected iterates through each object selected during USelection::Modify! Change 3057635 on 2016/07/20 by Stephan.Jiang Updating visual logger icon UI Change 3057645 on 2016/07/20 by Richard.TalbotWatkin Fixed single player PIE so the window position is correctly fetched and saved, even when running a dedicated server. This does not interfere with stored positions for multiple PIE, which uses ULevelEditorPlaySettings::MultipleInstancePositions. #jira UE-33416 - New Editor PIE window does not center to screen when running with a dedicated server Change 3057868 on 2016/07/20 by Richard.TalbotWatkin Spline component improvements, both tools and runtime: - SplineComponentVisualizer now works within the Blueprint editor. This works via a generic extension added to the base ComponentVisualizer class which correctly propagates modified properties from the preview actor to the archetype, and then on to any instances whose properties are at the default value. - The above feature required a breaking change to USplineComponent - namely, the three FInterpCurve properties have been collected together into a struct and added as a single property. This is so that changes to the length of one of the FInterpCurves marks all three as dirty and needing rebuilding. - Added a custom version for SplineComponent and provded serialization fixes. - Added a details customization to SplineComponent to hide the raw FInterpCurve properties. - Added a custom detail builder category which polls the SplineComponentVisualizer each tick and provides numerical editing for spline points which are selected in the visualizer. - Relaxed the limitation that SplineComponent keys need to have an increment of 1.0. Now any SplineComponent key can be set. The details customization enforces that the sequence remains strictly ascending. - Allowed an explicit loop point to be specified for closed splines. - Allowed discontinuous splines by no longer forcing the ArriveTangent and LeaveTangent to be equal. - Added some new Blueprintable methods for building splines with an FSplinePoint struct, which allows all of a spline point's properties to be specified, and added to the FInterpCurves sorted by the input key. - Fixed the logic which determines whether the UCS has modified the spline curves. - Added UActorComponent::RemoveUCSModifiedProperties, which allows a component to remove any properties from the cached list which it doesn't want to be considered as 'modified'. This is used to distinguish the case of properties preserved by the SplineInstanceDataCache from those genuinely modified by the UCS. - Fixed "Apply Instance Changes to Blueprint" so that edited spline data can be applied to the archetype. - Fixed some issues with the spline component visualizer to make it generate appropriate up vectors if scale and rotation are enabled. #jira UETOOL-766 - Spline tool improvements #jira UE-33049 - Transform widget visible in blueprint viewport when editing spline points in editor viewport #jira UE-9062 - Spline editing: It would be nice to be able to type in a specific value for a point #jira UE-7476 - Add ability to edit SplineComponent in BP editor (not just instance in level) #jira UE-13082 - Users would like a snapping feature for splines #jira UE-13568 - Additional Spline Component Functionality #jira UE-17822 - It would be useful to be able to update a bp spline layout from the editor viewport. Change 3057895 on 2016/07/20 by Richard.TalbotWatkin Mesh paint bugfixes and improvements. Changes to RerunConstructionScript so that OnObjectsReplaced is called correctly on all components, whether they have been created by the SCS or the UCS. Previously, components created by the UCS were not being handled, and components created by the SCS were not always being matched. Now a serialized index is maintained for UCS-created objects, which is matched after the construction scripts have been executed. This will fix issues with the mesh paint tool, and any other editor tool which hooks into the OnObjectsReplaced callback in order to update its internal cache of component pointers, for example, the component visualizer render list. #jira UE-33010 - Crash changing mesh paint material in blueprint, then changing to a different mode tab #jira UE-32279 - Editor crashes when reselecting a mesh in paint mode #jira UE-31763 - [CrashReport] UE4Editor_MeshPaint!FMulticastDelegateBase<FWeakObjectPtr>::RemoveAll() [multicastdelegatebase.h:75] #jira UE-30661 - Vertex Painting changes collision complexity if the asset is saved while vertex painting Change 3057966 on 2016/07/20 by Richard.TalbotWatkin Renamed IsEditingArchetype to IsVisualizingArchetype in the ComponentVisualizer API. #jira UE-33049 - Transform widget visible in blueprint viewport when editing spline points in editor viewport Change 3058009 on 2016/07/20 by Richard.TalbotWatkin Fixed build failure due to changes to FComponentVisualizer API, as of CL 3057868. Change 3058047 on 2016/07/20 by Stephan.Jiang Fixing error on previous CL: 3056758 (extra qualification) Change 3058266 on 2016/07/20 by Nick.Darnell Automation - Work continues on automation integrating some ideas form a licensee. Continuing to work on the usability aspects, I've made it possible for tests to provide custom open commands, as well as have complex subclasses that do different things. The functional tests now have a custom open command they emit that makes it so clicking on a test opens not the C++ location where the functional test macro lives, but instead the map, AND focuses the functional test actor. Change 3058282 on 2016/07/20 by Matt.Kuhlenschmidt PR #2611: Fix spurious component diff when properties are in subcategories (Contributed by CA-ADuran) Change 3059214 on 2016/07/21 by Richard.TalbotWatkin Further fixes to visualizers following Component Visualizer API change. Change 3059260 on 2016/07/21 by Richard.TalbotWatkin Template specialization not allowed in class scope, but Visual Studio allows it anyway. Fixed for clang. Change 3059543 on 2016/07/21 by Stephan.Jiang Changeing level details icon Change 3059732 on 2016/07/21 by Stephan.Jiang Directional Light icon update Change 3060095 on 2016/07/21 by Stephan.Jiang Directional Light editor icon asset changed Change 3060129 on 2016/07/21 by Nick.Darnell Automation - The session browser now attempts to select the app instance if no other thing is selected when it refreshes. This is to try and make it easier to use when you first bring it up and nothing is selected when most of the time you're going to use it on your own instance. Change 3061735 on 2016/07/22 by Stephan.Jiang Improve UMG replace with in HierarchyView function #UE-33582 Change 3062059 on 2016/07/22 by Stephan.Jiang Strip off "b" in propertyname in replace with function for tracks. Change 3062146 on 2016/07/22 by Stephan.Jiang checkin with CL: 3061735 Change 3062182 on 2016/07/22 by Stephan.Jiang Change both animation bindings' widget name when renameing the widget so the slot content is still valid Change 3062257 on 2016/07/22 by Stephan.Jiang comments Change 3062381 on 2016/07/22 by Nick.Darnell Build - Adding #undef LOCTEXT_NAMESPACE to try and fix the build. Change 3062924 on 2016/07/25 by Chris.Wood Fix a crash in CrashReportClient that happens when the CrashReportReceiver is not responding to pings and there are no PendingReportDirectories. This is a change in the UE4 stream depot based on a fix in the Fortnite stream depot -> JIRA FORT-27570 Change 3063017 on 2016/07/25 by Matt.Kuhlenschmidt PR #2618: DebuggerCommand not recording PlayLocationString (Contributed by ungalyant) Change 3063021 on 2016/07/25 by Matt.Kuhlenschmidt PR #2619: added a search box to ModuleUI (Contributed by straymist) Change 3063084 on 2016/07/25 by Matt.Kuhlenschmidt Fix "YesToAll" when deleting referenced actors overriding the "YesToAll" state for other referenced messages. https://jira.ol.epicgames.net/browse/UE-33651 #jira UE-33651 Change 3063091 on 2016/07/25 by Alex.Delesky #jira UE-32949 - Truncating the hue inside the theme color block tooltip to only display whole numbers, to match how the color picker displays the hue value inside the hue scrubber. Change 3063388 on 2016/07/25 by Matt.Kuhlenschmidt Selection Perf: - Fix large FName creation time when selecting thousands of objects Change 3063568 on 2016/07/25 by Matt.Kuhlenschmidt Selection Perf: - Modified how USelection stores classes. Classes are now in a TSet and can be accessed efficiently using IsClassSelected. The old unused way of checking if a selection has a class by iterating through them is deprecated - USelection no longer directly checks if an item is already selected with a costly n^2 search. The check is done by using the already existing UObject selected annotation - Object property nodes no longer perform an n^2 check for object uniqueness when objects are added to details panels. This is now left up to the caller to avoid - Eliminated useless work on FObjectPropertyNode::GetReadAddressUncached. If a read address list is not passed in we'll not attempt to the work to populate it - Removed expensive checking for brush actors when any actor is selected Change 3063749 on 2016/07/25 by Stephan.Jiang Disallow naming the widgetanimation to the same name with a override function in uuserwidget, because it will trigger a breakpoint in Rename() #jira UE-33711 Change 3064585 on 2016/07/26 by Matt.Kuhlenschmidt Merging //UE4/Dev-Main to Dev-Editor (//UE4/Dev-Editor) Change 3064612 on 2016/07/26 by Alex.Delesky #jira UE-33712 - Deleting many assets at once will now batch SourceControl commands rather than executing one for each asset. Change 3064647 on 2016/07/26 by Alexis.Matte #jira UE-33274 dont hash the same file over and over when importing multiple asset from one fbx file. Change 3064739 on 2016/07/26 by Matt.Kuhlenschmidt Fixed typo Change 3064795 on 2016/07/26 by Jamie.Dale Fixed typo in FLocalizationModule::GetLocalizationTargetByName #jira UE-32961 Change 3066461 on 2016/07/27 by Jamie.Dale Enabled stable localization keys Change 3066463 on 2016/07/27 by Jamie.Dale Set "Build Engine Localization" to upload all cultures to ensure we don't lose translation due to the archive keying changes Change 3066467 on 2016/07/27 by Jamie.Dale Updated internationalization archives to store translations per-identity This allows translators to translate each instance of a piece of text based upon their context, rather than requiring a content producer to go back and give the entry a unique namespace. It also allows us to optionally compile out-of-date translations, as they are now mapped to their source identity (namespace + key) rather than their source text. Major changes: - Added FLocTextHelper. This acts as a high-level API for uncompiled localized text, and replaces all the old ad-hoc loading/saving of manifests and archives, ensuring that everything is consistently using source control, and that older archives can be upgraded correctly to the new format. It also takes care of some of the quirks of our archives, such as native translations. All major localization commandlets have been updated to use FLocTextHelper. - Moved FTextLocalizationResourceGenerator from Core to Internationalization. This also allows IJsonInternationalizationManifestSerializer and IJsonInternationalizationArchiveSerializer to be removed, and for FJsonInternationalizationManifestSerializer and FJsonInternationalizationArchiveSerializer to have all their functions become static. - FTextLocalizationResourceGenerator being moved from Core meant that FTextLocalizationManager::LoadFromManifestAndArchives was also removed. This functionality is now handled by FTextLocalizationResourceGenerator::GenerateAndUpdateLiveEntriesFromConfig. - The RepairLocalizationData commandlet has been removed. This existed to fix a change that pre-dated 4.0 so no such data should exist in the wild, and the commandlet couldn't be updated to work with the new API (we handle format upgrades in-place now). - Removed FInternationalizationArchive::FindEntryBySource as it is no-longer safe to use. All existing code has been updated to use FInternationalizationArchive::FindEntryByKey instead. Workflow changes: - Archive conditioning now only adds new entries if they don't exist in the archive. This allows us to persist any existing translations, even if they're for old source text (caveat: native archives still update existing entries if the source is changed). - PO export now sets the msgctx for each entry to be "namespace,key", rather than only doing it when the entry had key meta-data. - PO import will now update both the source and translation stored in the archive to match the current PO data. This is the primary method by which stale source->translation pairs are updated. - LocRes compilation may now optionally compile stale translations. There's an option controlling this (defaulted to off) that can be changed via the Localization Dashboard (or added to an existing config file). Format changes: - The archive version was bumped to 2. - Archive entries now use the "Key" entry to store the key from the source text. Previously this "Key" entry was used to store the key meta-data, but that now exists within a "MetaData" sub-object. Loading handles this correctly based upon the archive version. #jira UETOOL-897 #jira UETOOL-898 #jira UE-29481 Change 3066487 on 2016/07/27 by Matt.Kuhlenschmidt Attempt to fix linux compilation Change 3066504 on 2016/07/27 by Matt.Kuhlenschmidt Fixed data tables with structs crashing due to recent editor selection optimizations Change 3066886 on 2016/07/27 by Jamie.Dale Added required data to accurately detect TZ (needed for DST) #jira UE-28511 Change 3067122 on 2016/07/27 by Jamie.Dale Added AsTime, AsDateTime, and AsDate overrides to BP to let you format a UTC time in a given timezone (default is the local timezone). Previously you could only format times using the "invariant" timezone, which assumed that the time was already specified in the correct timezone for display. Change 3067227 on 2016/07/27 by Jamie.Dale Added a test to verify that the ICU timezone is set correctly to produce local time (including DST) Change 3067313 on 2016/07/27 by Richard.TalbotWatkin Fixed SplineComponent constructor so that old assets (prior to the property changes) load correctly if they had properties at default values. #jira UE-33669 - Crash in Dev-Editor Change 3067736 on 2016/07/27 by Stephan.Jiang Border changes for experimental classes warning Change 3067769 on 2016/07/27 by Stephan.Jiang HERE BE DRAGONS for experimental class warning #UE-33780 Change 3068192 on 2016/07/28 by Alexis.Matte #jira UE-33586 make sure we remove any false warning when running fbx automation test. Change 3068264 on 2016/07/28 by Jamie.Dale Removed some code that was no longer needed and could cause a crash #jira UE-33342 Change 3068293 on 2016/07/28 by Alex.Delesky #jira UE-33620 - Comments on constant and parameter nodes in the Material Editor will now persist when converting them. Change 3068481 on 2016/07/28 by Stephan.Jiang Adding Options to show/hide soft & hard references & dependencies in References Viewer #jira UE-33746 Change 3068585 on 2016/07/28 by Richard.TalbotWatkin Fix to Spline Mesh collision building so that geometry does not default to being auto-inflated in PhysX. Change 3068701 on 2016/07/28 by Matt.Kuhlenschmidt Fixed some issues with the selected classes not updating when objects are deselected Change 3069335 on 2016/07/28 by Jamie.Dale Fixed unintended error when trying to load a manifest/archive that didn't exist Fixed a warning when trying to load a PO file that didn't exist Change 3069408 on 2016/07/28 by Alex.Delesky #jira UE-33429 - The editor should no longer hit an ensure if the user attempts to drop a tab into a tab well before the tab well has a chance to acknowledge its been dragged into a tab well. Change 3069878 on 2016/07/29 by Jamie.Dale Fixed include casing #jira UE-33910 Change 3071807 on 2016/08/01 by Matt.Kuhlenschmidt PR #2654: Fix the spell'ing of "diff'ing" and "diff'd". (Contributed by geary) Change 3071813 on 2016/08/01 by Jamie.Dale Fixed include casing #jira UE-33936 Change 3072043 on 2016/08/01 by Jamie.Dale Fixed FText formatting of pre-Gregorian dates We now convert to an ICU UDate via an ICU GregorianCalendar, as UE4 and ICU have a different time scale for pre-Gregorian dates. #jira UE-14504 Change 3072066 on 2016/08/01 by Jamie.Dale PR #2590: FEATURE: Collapse/expand folders in the outliner (Contributed by projectgheist) Change 3072149 on 2016/08/01 by Jamie.Dale We no longer use the editor culture when running with -game Change 3072169 on 2016/08/01 by Richard.TalbotWatkin A couple of changes to the BSP code: * Fixed longstanding issue where sometimes BSP geometry is not rebuilt correctly after editing it. This was due to poly normals not being recalculated after translating vertices in Geometry Mode. * Fixed corruption to FPoly::iLink as it is overloaded to have two meanings: when building BSP, it represents the surface index of the next coplanar surface (and adding a new BSP node uses this to determine whether a new surface needs to be added or not). In other operations it represents an FPoly index, in general this is used more in editor geometry operations. This fixes various crashes which arose from rebuilding BSP resulting in invalid FPoly indices. #jira UE-12157 - BSP brushes break when non-standard subtractive bsp brushes are used #jira UE-32087 - Crash occurs when creating Static Mesh from Trigger Volume Change 3072221 on 2016/08/01 by Jamie.Dale Fixed "Launch On" not providing the correct cultures to StartCookByTheBookInEditor #jira UE-33001 Change 3073389 on 2016/08/02 by Matt.Kuhlenschmidt Added ability to vsync the editor. Disabled by default. Set r.VSyncEditor to 1 to enable it. Reimplemented this change from the siggraph demo stream Change 3073396 on 2016/08/02 by Matt.Kuhlenschmidt Removed unused code as suggested by a pull request Change 3073750 on 2016/08/02 by Richard.TalbotWatkin Fixed formatting (broken in CL 3057895) in anticipation of merge from Main. Change 3073789 on 2016/08/02 by Jamie.Dale Added a way to mark text in text properties as culture invariant This allows you to flag properties containing text that doesn't need to be gathered. #jira UE-33713 Change 3073825 on 2016/08/02 by Stephan.Jiang Material Editor: Highligh all Nodes connect to an input. #jira UE-32502 Change 3073947 on 2016/08/02 by Stephan.Jiang UMG Project settings to show/hide different classes and categories in Palette view. --under Project Settings ->Editor->UMG Editor Change 3074012 on 2016/08/02 by Stephan.Jiang Minor changes and comments for CL: 3073947 Change 3074029 on 2016/08/02 by Jamie.Dale Deleting folders in the Content Browser now removes the folder from disk #jira UE-24303 Change 3074054 on 2016/08/02 by Matt.Kuhlenschmidt Added missing stats to track pooled vertex and index buffer cpu memory A new slate allocator was added to track memory usage for this case. Change 3074056 on 2016/08/02 by Matt.Kuhlenschmidt Renamed a few slate stats for consistency Change 3074810 on 2016/08/02 by Matt.Kuhlenschmidt Moved geometry cache asset type to the animation category. It is not a basic asset type Change 3074826 on 2016/08/02 by Matt.Kuhlenschmidt Fix a few padding and sizing issues Change 3075322 on 2016/08/03 by Matt.Kuhlenschmidt Settings UI improvements * Added the ability to search through all settings at once * Settings files which are not checked out are no longer grayed out. The editor now attempts to check out the file automatically if connected to source control and if that fails it marks the settings file writiable so it can save the setting properly ------- * This change adds a refactor to the details panel to support multiple top level objects existing in the details panel at once instead of combining all passed in objects to a single common base class. This is disabled by default but can be turned on setting bAllowMultipleTopLevelObjects to true in FDetailsViewArgs when creating a details panel. * Each top level object in a details panel will get their own customization instance. This made it necessary to deprecate a IDetailsView::GetBaseClass since there is no longer guaranteed to be one base class. *Details panels can have their own customization for each "root object header" in order to customize the look of having multiple top level objects in the details panel. Change 3075369 on 2016/08/03 by Matt.Kuhlenschmidt Removed FBX scene as a top level option in asset filter menu in the content browser. Change 3075556 on 2016/08/03 by Matt.Kuhlenschmidt Mac warning fix Change 3075603 on 2016/08/03 by Nick.Darnell Adding two new plugins to engine, one for editor and one for runtime based testing. Currently the only consumer of these plugins is going to be the EngineTest project. Change 3075605 on 2016/08/03 by Nick.Darnell Functional Testing - Continued work on cleanup, reorganization, trying to improve the workflow for using the session browser. Change 3076084 on 2016/08/03 by Jamie.Dale Added basic support for localizing plugins You can now localize plugins! There's no localization dashboard integration for this so it has to be done manually. You need to define the localization targets your plugin uses in its .uplugin file, eg) "LocalizationTargets": [ { "Name": "Paper2D", "LoadingPolicy": "Always" } ] "Name" should match a localization config under the Config/Localization folder for your plugin. These configs are set-up the same as any other localization config. "LoadingPolicy" may be one of Never, Always, Editor, Game, PropertyNames, or ToolTips. This allows you to control under what conditions your localizations should be loaded (eg, if your plugin has both game and editor data, you can separate the editor data off into its own localization target that's only loaded by the editor). UAT has been updated to support gathering from plugins. You can use the "IncludePlugins" flag to have it gather all plugins, or you can specify a whitelist of plugins to gather as an argument to "IncludePlugins", or alternatively, may blacklist certain plugins via "ExcludePlugins". It can now also support out-of-source gathering via the "UEProjectRoot" argument (previously it assumed that everything would be under the UE4 install/checkout directory). UAT has been updated to support staging plugin LocRes files. It will stage any plugin targets that are enabled for a game/client build, and are also from a plugin that's enabled for your project. #jira UE-4217 Change 3076123 on 2016/08/03 by Stephan.Jiang Extend "Select all input nodes" function to general blueprint editor Change 3077103 on 2016/08/04 by Jamie.Dale Added support for underlined text rendering (including with drop-shadows) FTextBlockStyle can now specify a brush to use to draw an underline for text (a suitable default would be "DefaultTextUnderline" from FCoreStyle). When a brush is specified here, we inject FSlateTextUnderlineLineHighlighter highlights into the text layout to draw the underline under the relevant pieces of text, using the correct color, position, and thickness. FSlateFontCache::GetUnderlineMetrics and FSlateFontRenderer::GetUnderlineMetrics have been added to handle getting the underline metrics (which are slightly different to the baseline). This change also adds FTextLayout::RemoveRunRenderer and FTextLayout::RemoveLineHighlight to fix some bad assumptions that FSlateEditableTextLayout and FTextBlockLayout were making about ownership of run renderers and line highlighters that could cause them to remove instances they didn't own (such as the new underline highlighter) when updating things like the cursor position or highlight. Change 3077842 on 2016/08/04 by Jamie.Dale Fixed fallout from API changes Change 3077999 on 2016/08/04 by Jamie.Dale Ensured that BULKDATA_SingleUse is only set by UFontBulkData::Serialize when loading This prevents it being incorrectly set by other operations, such as counting memory used by font data. #jira UE-34252 Change 3078000 on 2016/08/04 by Trung.Le Categories VREditor-specific UMG widget assets as "VR Editor" #jira UE-34134 Change 3078056 on 2016/08/04 by Nick.Darnell Build - Fixing a mac compiler warning, reodering constructor initializers. Change 3078813 on 2016/08/05 by Nick.Darnell Reorganizing editor tests, establishing plugins in the EditorTest project that will house the tests. Change 3078818 on 2016/08/05 by Nick.Darnell Additional rename and cleanup associated with test moving. Change 3078819 on 2016/08/05 by Nick.Darnell Removing the Oculus performance automation test, not running, and was unclaimed. Change 3078842 on 2016/08/05 by Nick.Darnell Continued reorganizing tests. Change 3078897 on 2016/08/05 by Nick.Darnell Additional changes to get some moved tests compiling Change 3079157 on 2016/08/05 by Nick.Darnell Making it possible to browse provider names thorugh the source control module interface. Change 3079176 on 2016/08/05 by Stephan.Jiang Add shortcut Ctrl+Shift+Space to rotate through different viewport options #jira UE-34140 Change 3079208 on 2016/08/05 by Stephan.Jiang Fix new animation name check in UMG Change 3079278 on 2016/08/05 by Nick.Darnell Fixing the build Change 3080555 on 2016/08/08 by Matt.Kuhlenschmidt Merging //UE4/Dev-Main to Dev-Editor (//UE4/Dev-Editor) Change 3081155 on 2016/08/08 by Nick.Darnell Fixing some issues with the editor tests / runtime tests under certain build configs. Change 3081243 on 2016/08/08 by Stephan.Jiang Add gesture in LevelViewport to switch between Top/Bottom...etc. Change 3082226 on 2016/08/09 by Matt.Kuhlenschmidt Work around animations not playing in paragon due to bsp rebuilds (UE-34391) Change 3082254 on 2016/08/09 by Stephan.Jiang DragTool_ViewportChange init changes [CL 3082411 by Matt Kuhlenschmidt in Main branch]
2016-08-09 11:28:56 -04:00
* Set the block widget holding the search text
*
* @param BlockWidget The widget to set
*/
void SetSearchBlockWidget(TSharedPtr<SWidget>);
/**
* Adds a widget to SearchElement map, making the widget searchable
*
* @param BlockWidget The widget to add
* @param BlockDisplayText The display text of the widget to search by
*/
void AddSearchElement( TSharedPtr<SWidget>, FText );
private:
/** Adds a block Widget to this widget */
void AddBlockWidget( const FMultiBlock& Block, TSharedPtr<SHorizontalBox> HorizontalBox, TSharedPtr<SVerticalBox> VerticalBox, EMultiBlockLocation::Type InLocation, bool bSectionContainsIcons );
/**
* @return True if the passed in block is being dragged
*/
bool IsBlockBeingDragged( TSharedPtr<const FMultiBlock> Block ) const;
/**
* Updates the preview block being dragged. The drag area is where the users dragged block will be dropped
*/
void UpdateDropAreaPreviewBlock( TSharedRef<const FMultiBlock> MultiBlock, TSharedPtr<FUICommandDragDropOp> DragDropContent, const FGeometry& DragArea, const FVector2D& DragPos );
/**
* @return The visibility of customization widgets for a block
*/
EVisibility GetCustomizationVisibility( TWeakPtr<const FMultiBlock> BlockWeakPtr, TWeakPtr<SWidget> BlockWidgetWeakPtr ) const;
/** Called when a user clicks the delete button on a block */
FReply OnDeleteBlockClicked( TWeakPtr<const FMultiBlock> BlockWeakPtr );
private:
/** A preview of a block being dragged */
struct FDraggedMultiBlockPreview
{
/** Command being dragged */
TSharedPtr<const FUICommandInfo> UICommand;
/** Preview block for the command */
TSharedPtr<class FDropPreviewBlock> PreviewBlock;
/** Index into the block list where the block will be added*/
int32 InsertIndex;
// Vertical for menus and vertical toolbars, horizontally otherwise
EOrientation InsertOrientation;
FDraggedMultiBlockPreview()
: InsertIndex( INDEX_NONE )
{}
void Reset()
{
UICommand.Reset();
PreviewBlock.Reset();
InsertIndex = INDEX_NONE;
}
bool IsValid() const { return UICommand.IsValid() && PreviewBlock.IsValid() && InsertIndex != INDEX_NONE; }
};
/** The MultiBox we're associated with */
TSharedPtr< FMultiBox > MultiBox;
/** An array of widgets used for an STileView if used */
TArray< TSharedPtr<SWidget> > TileViewWidgets;
/** Specialized box widget to handle clipping of toolbars and menubars */
TSharedPtr<class SClippingHorizontalBox> ClippedHorizontalBox;
/** A preview of a block being dragged inside this box */
FDraggedMultiBlockPreview DragPreview;
/* The multibox widgets that should be search, linked with their display text */
TMap<TSharedPtr<SWidget>, FText > SearchElements;
/* The search widget to be displayed at the top of the multibox */
TSharedPtr<STextBlock> SearchTextWidget;
/* The search widget to be displayed at the top of the multibox */
TSharedPtr<SWidget> SearchBlockWidget;
/* The text being searched for */
FText SearchText;
/** Whether this multibox can be searched */
bool bSearchable;
};