2016-01-07 08:17:16 -05:00
|
|
|
// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.
|
2014-03-14 14:13:41 -04:00
|
|
|
|
|
|
|
|
#include "OutputLogPrivatePCH.h"
|
|
|
|
|
#include "SOutputLog.h"
|
|
|
|
|
#include "SScrollBorder.h"
|
2014-11-12 05:28:51 -05:00
|
|
|
#include "GameFramework/GameMode.h"
|
|
|
|
|
#include "Engine/LocalPlayer.h"
|
|
|
|
|
#include "GameFramework/GameState.h"
|
2016-04-07 16:16:52 -04:00
|
|
|
#include "SSearchBox.h"
|
|
|
|
|
|
|
|
|
|
#define LOCTEXT_NAMESPACE "SOutputLog"
|
|
|
|
|
|
|
|
|
|
/** Expression context to test the given messages against the current text filter */
|
|
|
|
|
class FLogFilter_TextFilterExpressionContext : public ITextFilterExpressionContext
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
explicit FLogFilter_TextFilterExpressionContext(const FLogMessage& InMessage) : Message(&InMessage) {}
|
|
|
|
|
|
|
|
|
|
/** Test the given value against the strings extracted from the current item */
|
|
|
|
|
virtual bool TestBasicStringExpression(const FTextFilterString& InValue, const ETextFilterTextComparisonMode InTextComparisonMode) const override { return TextFilterUtils::TestBasicStringExpression(*Message->Message, InValue, InTextComparisonMode); }
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Perform a complex expression test for the current item
|
|
|
|
|
* No complex expressions in this case - always returns false
|
|
|
|
|
*/
|
|
|
|
|
virtual bool TestComplexExpression(const FName& InKey, const FTextFilterString& InValue, const ETextFilterComparisonOperation InComparisonOperation, const ETextFilterTextComparisonMode InTextComparisonMode) const override { return false; }
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
/** Message that is being filtered */
|
|
|
|
|
const FLogMessage* Message;
|
|
|
|
|
};
|
|
|
|
|
|
2014-09-04 10:49:55 -04:00
|
|
|
/** Custom console editable text box whose only purpose is to prevent some keys from being typed */
|
|
|
|
|
class SConsoleEditableTextBox : public SEditableTextBox
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
SLATE_BEGIN_ARGS( SConsoleEditableTextBox ) {}
|
|
|
|
|
|
|
|
|
|
/** Hint text that appears when there is no text in the text box */
|
|
|
|
|
SLATE_ATTRIBUTE(FText, HintText)
|
|
|
|
|
|
|
|
|
|
/** Called whenever the text is changed interactively by the user */
|
|
|
|
|
SLATE_EVENT(FOnTextChanged, OnTextChanged)
|
|
|
|
|
|
|
|
|
|
/** Called whenever the text is committed. This happens when the user presses enter or the text box loses focus. */
|
|
|
|
|
SLATE_EVENT(FOnTextCommitted, OnTextCommitted)
|
|
|
|
|
|
|
|
|
|
SLATE_END_ARGS()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Construct( const FArguments& InArgs )
|
|
|
|
|
{
|
|
|
|
|
SetStyle(&FCoreStyle::Get().GetWidgetStyle< FEditableTextBoxStyle >("NormalEditableTextBox"));
|
|
|
|
|
|
|
|
|
|
SBorder::Construct(SBorder::FArguments()
|
|
|
|
|
.BorderImage(this, &SConsoleEditableTextBox::GetConsoleBorder)
|
|
|
|
|
.BorderBackgroundColor(Style->BackgroundColor)
|
|
|
|
|
.ForegroundColor(Style->ForegroundColor)
|
|
|
|
|
.Padding(Style->Padding)
|
|
|
|
|
[
|
|
|
|
|
SAssignNew( EditableText, SConsoleEditableText )
|
|
|
|
|
.HintText( InArgs._HintText )
|
|
|
|
|
.OnTextChanged( InArgs._OnTextChanged )
|
|
|
|
|
.OnTextCommitted( InArgs._OnTextCommitted )
|
|
|
|
|
] );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
class SConsoleEditableText : public SEditableText
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
SLATE_BEGIN_ARGS( SConsoleEditableText ) {}
|
|
|
|
|
/** The text that appears when there is nothing typed into the search box */
|
|
|
|
|
SLATE_ATTRIBUTE(FText, HintText)
|
|
|
|
|
/** Called whenever the text is changed interactively by the user */
|
|
|
|
|
SLATE_EVENT(FOnTextChanged, OnTextChanged)
|
|
|
|
|
|
|
|
|
|
/** Called whenever the text is committed. This happens when the user presses enter or the text box loses focus. */
|
|
|
|
|
SLATE_EVENT(FOnTextCommitted, OnTextCommitted)
|
|
|
|
|
SLATE_END_ARGS()
|
|
|
|
|
|
|
|
|
|
void Construct( const FArguments& InArgs )
|
|
|
|
|
{
|
|
|
|
|
SEditableText::Construct
|
|
|
|
|
(
|
|
|
|
|
SEditableText::FArguments()
|
|
|
|
|
.HintText( InArgs._HintText )
|
|
|
|
|
.OnTextChanged( InArgs._OnTextChanged )
|
|
|
|
|
.OnTextCommitted( InArgs._OnTextCommitted )
|
|
|
|
|
.ClearKeyboardFocusOnCommit( false )
|
|
|
|
|
.IsCaretMovedWhenGainFocus( false )
|
|
|
|
|
.MinDesiredWidth( 400.0f )
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2014-10-30 12:29:36 -04:00
|
|
|
virtual FReply OnKeyDown( const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent )
|
2014-09-04 10:49:55 -04:00
|
|
|
{
|
|
|
|
|
// Special case handling. Intercept the tilde key. It is not suitable for typing in the console
|
2014-10-30 12:29:36 -04:00
|
|
|
if( InKeyEvent.GetKey() == EKeys::Tilde )
|
2014-09-04 10:49:55 -04:00
|
|
|
{
|
|
|
|
|
return FReply::Unhandled();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2014-10-30 12:29:36 -04:00
|
|
|
return SEditableText::OnKeyDown( MyGeometry, InKeyEvent );
|
2014-09-04 10:49:55 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
virtual FReply OnKeyChar( const FGeometry& MyGeometry, const FCharacterEvent& InCharacterEvent )
|
|
|
|
|
{
|
|
|
|
|
// Special case handling. Intercept the tilde key. It is not suitable for typing in the console
|
|
|
|
|
if( InCharacterEvent.GetCharacter() != 0x60 )
|
|
|
|
|
{
|
|
|
|
|
return SEditableText::OnKeyChar( MyGeometry, InCharacterEvent );
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return FReply::Unhandled();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/** @return Border image for the text box based on the hovered and focused state */
|
|
|
|
|
const FSlateBrush* GetConsoleBorder() const
|
|
|
|
|
{
|
|
|
|
|
if (EditableText->HasKeyboardFocus())
|
|
|
|
|
{
|
|
|
|
|
return &Style->BackgroundImageFocused;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (EditableText->IsHovered())
|
|
|
|
|
{
|
|
|
|
|
return &Style->BackgroundImageHovered;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return &Style->BackgroundImageNormal;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
2014-03-14 14:13:41 -04:00
|
|
|
SConsoleInputBox::SConsoleInputBox()
|
2014-07-31 15:43:08 -04:00
|
|
|
: SelectedSuggestion(-1)
|
|
|
|
|
, bIgnoreUIUpdate(false)
|
2014-03-14 14:13:41 -04:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
|
|
|
|
void SConsoleInputBox::Construct( const FArguments& InArgs )
|
|
|
|
|
{
|
2014-09-04 10:49:55 -04:00
|
|
|
OnConsoleCommandExecuted = InArgs._OnConsoleCommandExecuted;
|
2015-09-30 03:39:09 -04:00
|
|
|
ConsoleCommandCustomExec = InArgs._ConsoleCommandCustomExec;
|
2014-09-04 10:49:55 -04:00
|
|
|
|
2014-03-14 14:13:41 -04:00
|
|
|
ChildSlot
|
|
|
|
|
[
|
|
|
|
|
SAssignNew( SuggestionBox, SMenuAnchor )
|
|
|
|
|
.Placement( InArgs._SuggestionListPlacement )
|
|
|
|
|
[
|
2014-09-04 10:49:55 -04:00
|
|
|
SAssignNew(InputText, SConsoleEditableTextBox)
|
2014-03-14 14:13:41 -04:00
|
|
|
.OnTextCommitted(this, &SConsoleInputBox::OnTextCommitted)
|
|
|
|
|
.HintText( NSLOCTEXT( "ConsoleInputBox", "TypeInConsoleHint", "Enter console command" ) )
|
|
|
|
|
.OnTextChanged(this, &SConsoleInputBox::OnTextChanged)
|
|
|
|
|
]
|
|
|
|
|
.MenuContent
|
|
|
|
|
(
|
|
|
|
|
SNew(SBorder)
|
|
|
|
|
.BorderImage(FEditorStyle::GetBrush("Menu.Background"))
|
|
|
|
|
.Padding( FMargin(2) )
|
|
|
|
|
[
|
|
|
|
|
SNew(SBox)
|
|
|
|
|
.HeightOverride(250) // avoids flickering, ideally this would be adaptive to the content without flickering
|
|
|
|
|
[
|
|
|
|
|
SAssignNew(SuggestionListView, SListView< TSharedPtr<FString> >)
|
|
|
|
|
.ListItemsSource(&Suggestions)
|
|
|
|
|
.SelectionMode( ESelectionMode::Single ) // Ideally the mouse over would not highlight while keyboard controls the UI
|
|
|
|
|
.OnGenerateRow(this, &SConsoleInputBox::MakeSuggestionListItemWidget)
|
|
|
|
|
.OnSelectionChanged(this, &SConsoleInputBox::SuggestionSelectionChanged)
|
|
|
|
|
.ItemHeight(18)
|
|
|
|
|
]
|
|
|
|
|
]
|
|
|
|
|
)
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
void SConsoleInputBox::Tick( const FGeometry& AllottedGeometry, const double InCurrentTime, const float InDeltaTime )
|
|
|
|
|
{
|
|
|
|
|
if (!GIntraFrameDebuggingGameThread && !IsEnabled())
|
|
|
|
|
{
|
|
|
|
|
SetEnabled(true);
|
|
|
|
|
}
|
|
|
|
|
else if (GIntraFrameDebuggingGameThread && IsEnabled())
|
|
|
|
|
{
|
|
|
|
|
SetEnabled(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void SConsoleInputBox::SuggestionSelectionChanged(TSharedPtr<FString> NewValue, ESelectInfo::Type SelectInfo)
|
|
|
|
|
{
|
|
|
|
|
if(bIgnoreUIUpdate)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for(int32 i = 0; i < Suggestions.Num(); ++i)
|
|
|
|
|
{
|
|
|
|
|
if(NewValue == Suggestions[i])
|
|
|
|
|
{
|
|
|
|
|
SelectedSuggestion = i;
|
|
|
|
|
MarkActiveSuggestion();
|
|
|
|
|
|
|
|
|
|
// If the user selected this suggestion by clicking on it, then go ahead and close the suggestion
|
|
|
|
|
// box as they've chosen the suggestion they're interested in.
|
|
|
|
|
if( SelectInfo == ESelectInfo::OnMouseClick )
|
|
|
|
|
{
|
|
|
|
|
SuggestionBox->SetIsOpen( false );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Ideally this would set the focus back to the edit control
|
|
|
|
|
// FWidgetPath WidgetToFocusPath;
|
|
|
|
|
// FSlateApplication::Get().GeneratePathToWidgetUnchecked( InputText.ToSharedRef(), WidgetToFocusPath );
|
2014-10-30 12:29:36 -04:00
|
|
|
// FSlateApplication::Get().SetKeyboardFocus( WidgetToFocusPath, EFocusCause::SetDirectly );
|
2014-03-14 14:13:41 -04:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TSharedRef<ITableRow> SConsoleInputBox::MakeSuggestionListItemWidget(TSharedPtr<FString> Text, const TSharedRef<STableViewBase>& OwnerTable)
|
|
|
|
|
{
|
|
|
|
|
check(Text.IsValid());
|
|
|
|
|
|
|
|
|
|
FString Left, Right, Combined;
|
|
|
|
|
|
|
|
|
|
if(Text->Split(TEXT("\t"), &Left, &Right))
|
|
|
|
|
{
|
|
|
|
|
Combined = Left + Right;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Combined = *Text;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FText HighlightText = FText::FromString(Left);
|
|
|
|
|
|
|
|
|
|
return
|
|
|
|
|
SNew(STableRow< TSharedPtr<FString> >, OwnerTable)
|
|
|
|
|
[
|
|
|
|
|
SNew(SBox)
|
|
|
|
|
.WidthOverride(300) // to enforce some minimum width, ideally we define the minimum, not a fixed width
|
|
|
|
|
[
|
|
|
|
|
SNew(STextBlock)
|
2015-01-07 09:52:40 -05:00
|
|
|
.Text(FText::FromString(Combined))
|
2014-03-14 14:13:41 -04:00
|
|
|
.TextStyle( FEditorStyle::Get(), "Log.Normal")
|
|
|
|
|
.HighlightText(HighlightText)
|
|
|
|
|
]
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class FConsoleVariableAutoCompleteVisitor
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
// @param Name must not be 0
|
|
|
|
|
// @param CVar must not be 0
|
|
|
|
|
static void OnConsoleVariable(const TCHAR *Name, IConsoleObject* CVar,TArray<FString>& Sink)
|
|
|
|
|
{
|
|
|
|
|
#if (UE_BUILD_SHIPPING || UE_BUILD_TEST)
|
|
|
|
|
if(CVar->TestFlags(ECVF_Cheat))
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
#endif // (UE_BUILD_SHIPPING || UE_BUILD_TEST)
|
|
|
|
|
if(CVar->TestFlags(ECVF_Unregistered))
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Sink.Add(Name);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
void SConsoleInputBox::OnTextChanged(const FText& InText)
|
|
|
|
|
{
|
|
|
|
|
if(bIgnoreUIUpdate)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const FString& InputTextStr = InputText->GetText().ToString();
|
|
|
|
|
if(!InputTextStr.IsEmpty())
|
|
|
|
|
{
|
|
|
|
|
TArray<FString> AutoCompleteList;
|
|
|
|
|
|
|
|
|
|
// console variables
|
|
|
|
|
{
|
|
|
|
|
IConsoleManager::Get().ForEachConsoleObject(
|
|
|
|
|
FConsoleObjectVisitor::CreateStatic< TArray<FString>& >(
|
|
|
|
|
&FConsoleVariableAutoCompleteVisitor::OnConsoleVariable,
|
|
|
|
|
AutoCompleteList ), *InputTextStr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AutoCompleteList.Sort();
|
|
|
|
|
|
|
|
|
|
for(uint32 i = 0; i < (uint32)AutoCompleteList.Num(); ++i)
|
|
|
|
|
{
|
|
|
|
|
FString &ref = AutoCompleteList[i];
|
|
|
|
|
|
|
|
|
|
ref = ref.Left(InputTextStr.Len()) + TEXT("\t") + ref.RightChop(InputTextStr.Len());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SetSuggestions(AutoCompleteList, false);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ClearSuggestions();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SConsoleInputBox::OnTextCommitted( const FText& InText, ETextCommit::Type CommitInfo)
|
|
|
|
|
{
|
|
|
|
|
if (CommitInfo == ETextCommit::OnEnter)
|
|
|
|
|
{
|
|
|
|
|
if (!InText.IsEmpty())
|
|
|
|
|
{
|
|
|
|
|
IConsoleManager::Get().AddConsoleHistoryEntry( *InText.ToString() );
|
|
|
|
|
|
|
|
|
|
// Copy the exec text string out so we can clear the widget's contents. If the exec command spawns
|
|
|
|
|
// a new window it can cause the text box to lose focus, which will result in this function being
|
|
|
|
|
// re-entered. We want to make sure the text string is empty on re-entry, so we'll clear it out
|
|
|
|
|
const FString ExecString = InText.ToString();
|
|
|
|
|
|
|
|
|
|
// Clear the console input area
|
|
|
|
|
bIgnoreUIUpdate = true;
|
|
|
|
|
InputText->SetText(FText::GetEmpty());
|
|
|
|
|
bIgnoreUIUpdate = false;
|
|
|
|
|
|
|
|
|
|
// Exec!
|
2015-09-30 03:39:09 -04:00
|
|
|
if (ConsoleCommandCustomExec.IsBound())
|
|
|
|
|
{
|
|
|
|
|
ConsoleCommandCustomExec.Execute(ExecString);
|
|
|
|
|
}
|
|
|
|
|
else
|
2014-03-14 14:13:41 -04:00
|
|
|
{
|
|
|
|
|
bool bWasHandled = false;
|
|
|
|
|
UWorld* World = NULL;
|
|
|
|
|
UWorld* OldWorld = NULL;
|
|
|
|
|
|
|
|
|
|
// The play world needs to handle these commands if it exists
|
2014-10-30 10:18:39 -04:00
|
|
|
if( GIsEditor && GEditor->PlayWorld && !GIsPlayInEditorWorld )
|
2014-03-14 14:13:41 -04:00
|
|
|
{
|
|
|
|
|
World = GEditor->PlayWorld;
|
|
|
|
|
OldWorld = SetPlayInEditorWorld( GEditor->PlayWorld );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ULocalPlayer* Player = GEngine->GetDebugLocalPlayer();
|
|
|
|
|
if( Player )
|
|
|
|
|
{
|
|
|
|
|
UWorld* PlayerWorld = Player->GetWorld();
|
|
|
|
|
if( !World )
|
|
|
|
|
{
|
|
|
|
|
World = PlayerWorld;
|
|
|
|
|
}
|
|
|
|
|
bWasHandled = Player->Exec( PlayerWorld, *ExecString, *GLog );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if( !World )
|
|
|
|
|
{
|
|
|
|
|
World = GEditor->GetEditorWorldContext().World();
|
|
|
|
|
}
|
|
|
|
|
if( World )
|
|
|
|
|
{
|
|
|
|
|
if( !bWasHandled )
|
|
|
|
|
{
|
|
|
|
|
AGameMode* const GameMode = World->GetAuthGameMode();
|
|
|
|
|
if( GameMode && GameMode->ProcessConsoleExec( *ExecString, *GLog, NULL ) )
|
|
|
|
|
{
|
|
|
|
|
bWasHandled = true;
|
|
|
|
|
}
|
|
|
|
|
else if (World->GameState && World->GameState->ProcessConsoleExec(*ExecString, *GLog, NULL))
|
|
|
|
|
{
|
|
|
|
|
bWasHandled = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if( !bWasHandled && !Player)
|
|
|
|
|
{
|
|
|
|
|
if( GIsEditor )
|
|
|
|
|
{
|
|
|
|
|
bWasHandled = GEditor->Exec( World, *ExecString, *GLog );
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
bWasHandled = GEngine->Exec( World, *ExecString, *GLog );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// Restore the old world of there was one
|
|
|
|
|
if( OldWorld )
|
|
|
|
|
{
|
|
|
|
|
RestoreEditorWorld( OldWorld );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ClearSuggestions();
|
2014-09-04 10:49:55 -04:00
|
|
|
|
|
|
|
|
OnConsoleCommandExecuted.ExecuteIfBound();
|
2014-03-14 14:13:41 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2015-05-07 17:53:02 -04:00
|
|
|
FReply SConsoleInputBox::OnPreviewKeyDown(const FGeometry& MyGeometry, const FKeyEvent& KeyEvent)
|
2014-03-14 14:13:41 -04:00
|
|
|
{
|
|
|
|
|
if(SuggestionBox->IsOpen())
|
|
|
|
|
{
|
2014-10-30 12:29:36 -04:00
|
|
|
if(KeyEvent.GetKey() == EKeys::Up || KeyEvent.GetKey() == EKeys::Down)
|
2014-03-14 14:13:41 -04:00
|
|
|
{
|
2014-10-30 12:29:36 -04:00
|
|
|
if(KeyEvent.GetKey() == EKeys::Up)
|
2014-03-14 14:13:41 -04:00
|
|
|
{
|
|
|
|
|
if(SelectedSuggestion < 0)
|
|
|
|
|
{
|
|
|
|
|
// from edit control to end of list
|
|
|
|
|
SelectedSuggestion = Suggestions.Num() - 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// got one up, possibly back to edit control
|
|
|
|
|
--SelectedSuggestion;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2014-10-30 12:29:36 -04:00
|
|
|
if(KeyEvent.GetKey() == EKeys::Down)
|
2014-03-14 14:13:41 -04:00
|
|
|
{
|
|
|
|
|
if(SelectedSuggestion < Suggestions.Num() - 1)
|
|
|
|
|
{
|
|
|
|
|
// go one down, possibly from edit control to top
|
|
|
|
|
++SelectedSuggestion;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// back to edit control
|
|
|
|
|
SelectedSuggestion = -1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MarkActiveSuggestion();
|
|
|
|
|
|
|
|
|
|
return FReply::Handled();
|
|
|
|
|
}
|
2014-10-30 12:29:36 -04:00
|
|
|
else if (KeyEvent.GetKey() == EKeys::Tab)
|
2014-03-14 14:13:41 -04:00
|
|
|
{
|
|
|
|
|
if (Suggestions.Num())
|
|
|
|
|
{
|
|
|
|
|
if (SelectedSuggestion >= 0 && SelectedSuggestion < Suggestions.Num())
|
|
|
|
|
{
|
|
|
|
|
MarkActiveSuggestion();
|
|
|
|
|
OnTextCommitted(InputText->GetText(), ETextCommit::OnEnter);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
SelectedSuggestion = 0;
|
|
|
|
|
MarkActiveSuggestion();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return FReply::Handled();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2014-10-30 12:29:36 -04:00
|
|
|
if(KeyEvent.GetKey() == EKeys::Up)
|
2014-03-14 14:13:41 -04:00
|
|
|
{
|
|
|
|
|
TArray<FString> History;
|
|
|
|
|
|
|
|
|
|
IConsoleManager::Get().GetConsoleHistory(History);
|
|
|
|
|
|
|
|
|
|
SetSuggestions(History, true);
|
|
|
|
|
|
|
|
|
|
if(Suggestions.Num())
|
|
|
|
|
{
|
|
|
|
|
SelectedSuggestion = Suggestions.Num() - 1;
|
|
|
|
|
MarkActiveSuggestion();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return FReply::Handled();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return FReply::Unhandled();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SConsoleInputBox::SetSuggestions(TArray<FString>& Elements, bool bInHistoryMode)
|
|
|
|
|
{
|
|
|
|
|
FString SelectionText;
|
|
|
|
|
if (SelectedSuggestion >= 0 && SelectedSuggestion < Suggestions.Num())
|
|
|
|
|
{
|
|
|
|
|
SelectionText = *Suggestions[SelectedSuggestion];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SelectedSuggestion = -1;
|
|
|
|
|
Suggestions.Empty();
|
|
|
|
|
SelectedSuggestion = -1;
|
|
|
|
|
|
|
|
|
|
for(uint32 i = 0; i < (uint32)Elements.Num(); ++i)
|
|
|
|
|
{
|
|
|
|
|
Suggestions.Add(MakeShareable(new FString(Elements[i])));
|
|
|
|
|
|
|
|
|
|
if (Elements[i] == SelectionText)
|
|
|
|
|
{
|
|
|
|
|
SelectedSuggestion = i;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(Suggestions.Num())
|
|
|
|
|
{
|
|
|
|
|
// Ideally if the selection box is open the output window is not changing it's window title (flickers)
|
|
|
|
|
SuggestionBox->SetIsOpen(true, false);
|
|
|
|
|
SuggestionListView->RequestScrollIntoView(Suggestions.Last());
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
SuggestionBox->SetIsOpen(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2014-10-30 12:29:36 -04:00
|
|
|
void SConsoleInputBox::OnFocusLost( const FFocusEvent& InFocusEvent )
|
2014-03-14 14:13:41 -04:00
|
|
|
{
|
|
|
|
|
// SuggestionBox->SetIsOpen(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SConsoleInputBox::MarkActiveSuggestion()
|
|
|
|
|
{
|
|
|
|
|
bIgnoreUIUpdate = true;
|
|
|
|
|
if(SelectedSuggestion >= 0)
|
|
|
|
|
{
|
|
|
|
|
SuggestionListView->SetSelection(Suggestions[SelectedSuggestion]);
|
|
|
|
|
SuggestionListView->RequestScrollIntoView(Suggestions[SelectedSuggestion]); // Ideally this would only scroll if outside of the view
|
|
|
|
|
|
|
|
|
|
InputText->SetText(FText::FromString(GetSelectionText()));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
SuggestionListView->ClearSelection();
|
|
|
|
|
}
|
|
|
|
|
bIgnoreUIUpdate = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SConsoleInputBox::ClearSuggestions()
|
|
|
|
|
{
|
|
|
|
|
SelectedSuggestion = -1;
|
|
|
|
|
SuggestionBox->SetIsOpen(false);
|
|
|
|
|
Suggestions.Empty();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FString SConsoleInputBox::GetSelectionText() const
|
|
|
|
|
{
|
|
|
|
|
FString ret = *Suggestions[SelectedSuggestion];
|
|
|
|
|
|
|
|
|
|
ret = ret.Replace(TEXT("\t"), TEXT(""));
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
2016-04-07 16:16:52 -04:00
|
|
|
TSharedRef< FOutputLogTextLayoutMarshaller > FOutputLogTextLayoutMarshaller::Create(TArray< TSharedPtr<FLogMessage> > InMessages, FLogFilter* InFilter)
|
2014-09-15 07:10:02 -04:00
|
|
|
{
|
2016-04-07 16:16:52 -04:00
|
|
|
return MakeShareable(new FOutputLogTextLayoutMarshaller(MoveTemp(InMessages), InFilter));
|
2014-09-15 07:10:02 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FOutputLogTextLayoutMarshaller::~FOutputLogTextLayoutMarshaller()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FOutputLogTextLayoutMarshaller::SetText(const FString& SourceString, FTextLayout& TargetTextLayout)
|
|
|
|
|
{
|
|
|
|
|
TextLayout = &TargetTextLayout;
|
Merging //UE4/Release-4.11 to //UE4/Main (up to CL#2852902)
==========================
MAJOR FEATURES + CHANGES
==========================
Change 2835191 on 2016/01/19 by Nick.Whiting
Invert the y-axis on the SteamVR controllers to match the convention of the engine and the rest of the gamepads
#jira UE-22705
Change 2835686 on 2016/01/20 by Gareth.Martin
Fixed landscape material instances not being updated if holes are painted on a landscape that doesn't have the landscape visibility mask node in the material and then the visibility mask node is added to the material later.
#jira UE-18187
Change 2835767 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Added a cursor to TopDown template (C++ version) to match the BP version.
Change 2835772 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Adding the material asset for the C++ TopDown template's cursor.
Change 2835811 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25699 Added Validity Checks in BP logic, unchecked CDO for Pixel Ship, to Fix Log Warnings
#jira UE-25704 Adjusted Matinee to happen at Box Location
#jira UE-25688 Adjusted Player Starts
#jira UE-25693 Adjusted Player Starts
Change 2835863 on 2016/01/20 by Gareth.Martin
Fixed crash in the landscape ramp and mirror tools if the streaming level containing the landscape is hidden (or possibly if the landscape actor is deleted)
#jira UE-24883
Change 2835889 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25698 Enabled V-sync, also fixed up player Respawn Issue
Change 2835995 on 2016/01/20 by Jamie.Dale
The output log now hard-wraps lines to prevent long lines causing performance issues
#jira UE-24187
Change 2836052 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25675 Added Blocking Volume to prevent Player from Falling off map
#jira UE-25676 Added Blocking Volumes so that the Player doesn't get stucl at awkward corners under the Bridge
Change 2836137 on 2016/01/20 by Chad.Taylor
Vehicle and VehicleAdv template content fixes for new VR camera
#jira UE-25507
Change 2836166 on 2016/01/20 by Gareth.Martin
Fixed hiding a streaming level containing a landscape causing the landscape editor to switch to the "New Landscape" tool instead of exiting
#jira UE-25093
Change 2836174 on 2016/01/20 by Chad.Taylor
IHeadMountedDisplay crash fix associated with accessing a dangling pointer.
#jira UE-25272
Change 2836179 on 2016/01/20 by Jamie.Dale
Optimized FShapedGlyphSequence reverse look-up
There's now a reverse look-up map of cluster indices to their glyph data in order to avoid brute force looping
#jira UE-24187
Change 2836286 on 2016/01/20 by Chris.Babcock
Update Qualcomm TextureConverter for OSX
#jira UE-22092
#ue4
#android
Change 2836328 on 2016/01/20 by Nick.Darnell
Fixing a problem with widget components crashing on destruction with the render commands to pre/post render for window render commands needing access to the policy, but it potentially being deleted. Inserting a NoOp command that keeps the shared ptr alive through the RHI render process.
#jira UE-25752
Change 2836342 on 2016/01/20 by Nick.Darnell
Depending on shutdown order, the Slate Renderer may go away, and then render data handles may not be collected correctly because they are trying to reference a pointer that's no longer valid and cause a crash on exit. The correct approach would be to have render handles actually have a pointer back to who owns them, in this case the RHI Resource Manager, which is still alive and well at this point in the pipeline. Then if the resource manager is collected, it forces all handles to get cleaned up correctly, or if the handles are collected first, they can be sure they've got a valid pointer back to the resource manager.
#jira UE-25753
Change 2836358 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25710 Replaced Deprecated Nodes
Change 2836510 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25718 Adjsuted BP to make pointer decal rotate in the direction of surface
Change 2836564 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25716 Added bool to store last Moved Direction
Change 2836697 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25740 Removed unused VR Nodes to remove Log errors on Mac
Change 2836725 on 2016/01/20 by Peter.Sauerbrei
workaround for thread race when trying to release the TargetDeviceService endpoint after an unclaim message is sent
#jira UE-25123
Change 2836782 on 2016/01/20 by Jamie.Dale
Added FTextLayout::AddLines
This is similar to AddLine, however it allows you to add multiple lines in a single call, thus avoiding the re-justification cost associated with each call to AddLine.
AddLine has also been changed to take the same structure type as AddLines (which takes an array of these structures), and the existing version of AddLine has been deprecated.
#jira UE-24187
Change 2836801 on 2016/01/20 by Jeff.Campeau
[CL 2857187 by Matthew Griffin in Main branch]
2016-02-05 11:54:00 -05:00
|
|
|
AppendMessagesToTextLayout(Messages);
|
2014-09-15 07:10:02 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FOutputLogTextLayoutMarshaller::GetText(FString& TargetString, const FTextLayout& SourceTextLayout)
|
|
|
|
|
{
|
2014-09-24 09:59:43 -04:00
|
|
|
SourceTextLayout.GetAsText(TargetString);
|
2014-09-15 07:10:02 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool FOutputLogTextLayoutMarshaller::AppendMessage(const TCHAR* InText, const ELogVerbosity::Type InVerbosity, const FName& InCategory)
|
|
|
|
|
{
|
|
|
|
|
TArray< TSharedPtr<FLogMessage> > NewMessages;
|
|
|
|
|
if(SOutputLog::CreateLogMessages(InText, InVerbosity, InCategory, NewMessages))
|
|
|
|
|
{
|
2014-09-15 09:30:39 -04:00
|
|
|
const bool bWasEmpty = Messages.Num() == 0;
|
2014-09-15 07:10:02 -04:00
|
|
|
Messages.Append(NewMessages);
|
|
|
|
|
|
|
|
|
|
if(TextLayout)
|
|
|
|
|
{
|
2014-09-15 09:30:39 -04:00
|
|
|
// If we were previously empty, then we'd have inserted a dummy empty line into the document
|
|
|
|
|
// We need to remove this line now as it would cause the message indices to get out-of-sync with the line numbers, which would break auto-scrolling
|
|
|
|
|
if(bWasEmpty)
|
|
|
|
|
{
|
|
|
|
|
TextLayout->ClearLines();
|
|
|
|
|
}
|
|
|
|
|
|
2014-09-15 07:10:02 -04:00
|
|
|
// If we've already been given a text layout, then append these new messages rather than force a refresh of the entire document
|
Merging //UE4/Release-4.11 to //UE4/Main (up to CL#2852902)
==========================
MAJOR FEATURES + CHANGES
==========================
Change 2835191 on 2016/01/19 by Nick.Whiting
Invert the y-axis on the SteamVR controllers to match the convention of the engine and the rest of the gamepads
#jira UE-22705
Change 2835686 on 2016/01/20 by Gareth.Martin
Fixed landscape material instances not being updated if holes are painted on a landscape that doesn't have the landscape visibility mask node in the material and then the visibility mask node is added to the material later.
#jira UE-18187
Change 2835767 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Added a cursor to TopDown template (C++ version) to match the BP version.
Change 2835772 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Adding the material asset for the C++ TopDown template's cursor.
Change 2835811 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25699 Added Validity Checks in BP logic, unchecked CDO for Pixel Ship, to Fix Log Warnings
#jira UE-25704 Adjusted Matinee to happen at Box Location
#jira UE-25688 Adjusted Player Starts
#jira UE-25693 Adjusted Player Starts
Change 2835863 on 2016/01/20 by Gareth.Martin
Fixed crash in the landscape ramp and mirror tools if the streaming level containing the landscape is hidden (or possibly if the landscape actor is deleted)
#jira UE-24883
Change 2835889 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25698 Enabled V-sync, also fixed up player Respawn Issue
Change 2835995 on 2016/01/20 by Jamie.Dale
The output log now hard-wraps lines to prevent long lines causing performance issues
#jira UE-24187
Change 2836052 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25675 Added Blocking Volume to prevent Player from Falling off map
#jira UE-25676 Added Blocking Volumes so that the Player doesn't get stucl at awkward corners under the Bridge
Change 2836137 on 2016/01/20 by Chad.Taylor
Vehicle and VehicleAdv template content fixes for new VR camera
#jira UE-25507
Change 2836166 on 2016/01/20 by Gareth.Martin
Fixed hiding a streaming level containing a landscape causing the landscape editor to switch to the "New Landscape" tool instead of exiting
#jira UE-25093
Change 2836174 on 2016/01/20 by Chad.Taylor
IHeadMountedDisplay crash fix associated with accessing a dangling pointer.
#jira UE-25272
Change 2836179 on 2016/01/20 by Jamie.Dale
Optimized FShapedGlyphSequence reverse look-up
There's now a reverse look-up map of cluster indices to their glyph data in order to avoid brute force looping
#jira UE-24187
Change 2836286 on 2016/01/20 by Chris.Babcock
Update Qualcomm TextureConverter for OSX
#jira UE-22092
#ue4
#android
Change 2836328 on 2016/01/20 by Nick.Darnell
Fixing a problem with widget components crashing on destruction with the render commands to pre/post render for window render commands needing access to the policy, but it potentially being deleted. Inserting a NoOp command that keeps the shared ptr alive through the RHI render process.
#jira UE-25752
Change 2836342 on 2016/01/20 by Nick.Darnell
Depending on shutdown order, the Slate Renderer may go away, and then render data handles may not be collected correctly because they are trying to reference a pointer that's no longer valid and cause a crash on exit. The correct approach would be to have render handles actually have a pointer back to who owns them, in this case the RHI Resource Manager, which is still alive and well at this point in the pipeline. Then if the resource manager is collected, it forces all handles to get cleaned up correctly, or if the handles are collected first, they can be sure they've got a valid pointer back to the resource manager.
#jira UE-25753
Change 2836358 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25710 Replaced Deprecated Nodes
Change 2836510 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25718 Adjsuted BP to make pointer decal rotate in the direction of surface
Change 2836564 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25716 Added bool to store last Moved Direction
Change 2836697 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25740 Removed unused VR Nodes to remove Log errors on Mac
Change 2836725 on 2016/01/20 by Peter.Sauerbrei
workaround for thread race when trying to release the TargetDeviceService endpoint after an unclaim message is sent
#jira UE-25123
Change 2836782 on 2016/01/20 by Jamie.Dale
Added FTextLayout::AddLines
This is similar to AddLine, however it allows you to add multiple lines in a single call, thus avoiding the re-justification cost associated with each call to AddLine.
AddLine has also been changed to take the same structure type as AddLines (which takes an array of these structures), and the existing version of AddLine has been deprecated.
#jira UE-24187
Change 2836801 on 2016/01/20 by Jeff.Campeau
[CL 2857187 by Matthew Griffin in Main branch]
2016-02-05 11:54:00 -05:00
|
|
|
AppendMessagesToTextLayout(NewMessages);
|
2014-09-15 07:10:02 -04:00
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2016-04-07 16:16:52 -04:00
|
|
|
MarkMessagesCacheAsDirty();
|
2014-09-15 07:10:02 -04:00
|
|
|
MakeDirty();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
Merging //UE4/Release-4.11 to //UE4/Main (up to CL#2852902)
==========================
MAJOR FEATURES + CHANGES
==========================
Change 2835191 on 2016/01/19 by Nick.Whiting
Invert the y-axis on the SteamVR controllers to match the convention of the engine and the rest of the gamepads
#jira UE-22705
Change 2835686 on 2016/01/20 by Gareth.Martin
Fixed landscape material instances not being updated if holes are painted on a landscape that doesn't have the landscape visibility mask node in the material and then the visibility mask node is added to the material later.
#jira UE-18187
Change 2835767 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Added a cursor to TopDown template (C++ version) to match the BP version.
Change 2835772 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Adding the material asset for the C++ TopDown template's cursor.
Change 2835811 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25699 Added Validity Checks in BP logic, unchecked CDO for Pixel Ship, to Fix Log Warnings
#jira UE-25704 Adjusted Matinee to happen at Box Location
#jira UE-25688 Adjusted Player Starts
#jira UE-25693 Adjusted Player Starts
Change 2835863 on 2016/01/20 by Gareth.Martin
Fixed crash in the landscape ramp and mirror tools if the streaming level containing the landscape is hidden (or possibly if the landscape actor is deleted)
#jira UE-24883
Change 2835889 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25698 Enabled V-sync, also fixed up player Respawn Issue
Change 2835995 on 2016/01/20 by Jamie.Dale
The output log now hard-wraps lines to prevent long lines causing performance issues
#jira UE-24187
Change 2836052 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25675 Added Blocking Volume to prevent Player from Falling off map
#jira UE-25676 Added Blocking Volumes so that the Player doesn't get stucl at awkward corners under the Bridge
Change 2836137 on 2016/01/20 by Chad.Taylor
Vehicle and VehicleAdv template content fixes for new VR camera
#jira UE-25507
Change 2836166 on 2016/01/20 by Gareth.Martin
Fixed hiding a streaming level containing a landscape causing the landscape editor to switch to the "New Landscape" tool instead of exiting
#jira UE-25093
Change 2836174 on 2016/01/20 by Chad.Taylor
IHeadMountedDisplay crash fix associated with accessing a dangling pointer.
#jira UE-25272
Change 2836179 on 2016/01/20 by Jamie.Dale
Optimized FShapedGlyphSequence reverse look-up
There's now a reverse look-up map of cluster indices to their glyph data in order to avoid brute force looping
#jira UE-24187
Change 2836286 on 2016/01/20 by Chris.Babcock
Update Qualcomm TextureConverter for OSX
#jira UE-22092
#ue4
#android
Change 2836328 on 2016/01/20 by Nick.Darnell
Fixing a problem with widget components crashing on destruction with the render commands to pre/post render for window render commands needing access to the policy, but it potentially being deleted. Inserting a NoOp command that keeps the shared ptr alive through the RHI render process.
#jira UE-25752
Change 2836342 on 2016/01/20 by Nick.Darnell
Depending on shutdown order, the Slate Renderer may go away, and then render data handles may not be collected correctly because they are trying to reference a pointer that's no longer valid and cause a crash on exit. The correct approach would be to have render handles actually have a pointer back to who owns them, in this case the RHI Resource Manager, which is still alive and well at this point in the pipeline. Then if the resource manager is collected, it forces all handles to get cleaned up correctly, or if the handles are collected first, they can be sure they've got a valid pointer back to the resource manager.
#jira UE-25753
Change 2836358 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25710 Replaced Deprecated Nodes
Change 2836510 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25718 Adjsuted BP to make pointer decal rotate in the direction of surface
Change 2836564 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25716 Added bool to store last Moved Direction
Change 2836697 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25740 Removed unused VR Nodes to remove Log errors on Mac
Change 2836725 on 2016/01/20 by Peter.Sauerbrei
workaround for thread race when trying to release the TargetDeviceService endpoint after an unclaim message is sent
#jira UE-25123
Change 2836782 on 2016/01/20 by Jamie.Dale
Added FTextLayout::AddLines
This is similar to AddLine, however it allows you to add multiple lines in a single call, thus avoiding the re-justification cost associated with each call to AddLine.
AddLine has also been changed to take the same structure type as AddLines (which takes an array of these structures), and the existing version of AddLine has been deprecated.
#jira UE-24187
Change 2836801 on 2016/01/20 by Jeff.Campeau
[CL 2857187 by Matthew Griffin in Main branch]
2016-02-05 11:54:00 -05:00
|
|
|
void FOutputLogTextLayoutMarshaller::AppendMessageToTextLayout(const TSharedPtr<FLogMessage>& InMessage)
|
2014-09-15 07:10:02 -04:00
|
|
|
{
|
2016-04-07 16:16:52 -04:00
|
|
|
if (!Filter->IsMessageAllowed(InMessage))
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Increment the cached count
|
|
|
|
|
CachedNumMessages++;
|
|
|
|
|
|
Merging //UE4/Release-4.11 to //UE4/Main (up to CL#2852902)
==========================
MAJOR FEATURES + CHANGES
==========================
Change 2835191 on 2016/01/19 by Nick.Whiting
Invert the y-axis on the SteamVR controllers to match the convention of the engine and the rest of the gamepads
#jira UE-22705
Change 2835686 on 2016/01/20 by Gareth.Martin
Fixed landscape material instances not being updated if holes are painted on a landscape that doesn't have the landscape visibility mask node in the material and then the visibility mask node is added to the material later.
#jira UE-18187
Change 2835767 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Added a cursor to TopDown template (C++ version) to match the BP version.
Change 2835772 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Adding the material asset for the C++ TopDown template's cursor.
Change 2835811 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25699 Added Validity Checks in BP logic, unchecked CDO for Pixel Ship, to Fix Log Warnings
#jira UE-25704 Adjusted Matinee to happen at Box Location
#jira UE-25688 Adjusted Player Starts
#jira UE-25693 Adjusted Player Starts
Change 2835863 on 2016/01/20 by Gareth.Martin
Fixed crash in the landscape ramp and mirror tools if the streaming level containing the landscape is hidden (or possibly if the landscape actor is deleted)
#jira UE-24883
Change 2835889 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25698 Enabled V-sync, also fixed up player Respawn Issue
Change 2835995 on 2016/01/20 by Jamie.Dale
The output log now hard-wraps lines to prevent long lines causing performance issues
#jira UE-24187
Change 2836052 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25675 Added Blocking Volume to prevent Player from Falling off map
#jira UE-25676 Added Blocking Volumes so that the Player doesn't get stucl at awkward corners under the Bridge
Change 2836137 on 2016/01/20 by Chad.Taylor
Vehicle and VehicleAdv template content fixes for new VR camera
#jira UE-25507
Change 2836166 on 2016/01/20 by Gareth.Martin
Fixed hiding a streaming level containing a landscape causing the landscape editor to switch to the "New Landscape" tool instead of exiting
#jira UE-25093
Change 2836174 on 2016/01/20 by Chad.Taylor
IHeadMountedDisplay crash fix associated with accessing a dangling pointer.
#jira UE-25272
Change 2836179 on 2016/01/20 by Jamie.Dale
Optimized FShapedGlyphSequence reverse look-up
There's now a reverse look-up map of cluster indices to their glyph data in order to avoid brute force looping
#jira UE-24187
Change 2836286 on 2016/01/20 by Chris.Babcock
Update Qualcomm TextureConverter for OSX
#jira UE-22092
#ue4
#android
Change 2836328 on 2016/01/20 by Nick.Darnell
Fixing a problem with widget components crashing on destruction with the render commands to pre/post render for window render commands needing access to the policy, but it potentially being deleted. Inserting a NoOp command that keeps the shared ptr alive through the RHI render process.
#jira UE-25752
Change 2836342 on 2016/01/20 by Nick.Darnell
Depending on shutdown order, the Slate Renderer may go away, and then render data handles may not be collected correctly because they are trying to reference a pointer that's no longer valid and cause a crash on exit. The correct approach would be to have render handles actually have a pointer back to who owns them, in this case the RHI Resource Manager, which is still alive and well at this point in the pipeline. Then if the resource manager is collected, it forces all handles to get cleaned up correctly, or if the handles are collected first, they can be sure they've got a valid pointer back to the resource manager.
#jira UE-25753
Change 2836358 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25710 Replaced Deprecated Nodes
Change 2836510 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25718 Adjsuted BP to make pointer decal rotate in the direction of surface
Change 2836564 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25716 Added bool to store last Moved Direction
Change 2836697 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25740 Removed unused VR Nodes to remove Log errors on Mac
Change 2836725 on 2016/01/20 by Peter.Sauerbrei
workaround for thread race when trying to release the TargetDeviceService endpoint after an unclaim message is sent
#jira UE-25123
Change 2836782 on 2016/01/20 by Jamie.Dale
Added FTextLayout::AddLines
This is similar to AddLine, however it allows you to add multiple lines in a single call, thus avoiding the re-justification cost associated with each call to AddLine.
AddLine has also been changed to take the same structure type as AddLines (which takes an array of these structures), and the existing version of AddLine has been deprecated.
#jira UE-24187
Change 2836801 on 2016/01/20 by Jeff.Campeau
[CL 2857187 by Matthew Griffin in Main branch]
2016-02-05 11:54:00 -05:00
|
|
|
const FTextBlockStyle& MessageTextStyle = FEditorStyle::Get().GetWidgetStyle<FTextBlockStyle>(InMessage->Style);
|
2014-09-15 07:10:02 -04:00
|
|
|
|
Merging //UE4/Release-4.11 to //UE4/Main (up to CL#2852902)
==========================
MAJOR FEATURES + CHANGES
==========================
Change 2835191 on 2016/01/19 by Nick.Whiting
Invert the y-axis on the SteamVR controllers to match the convention of the engine and the rest of the gamepads
#jira UE-22705
Change 2835686 on 2016/01/20 by Gareth.Martin
Fixed landscape material instances not being updated if holes are painted on a landscape that doesn't have the landscape visibility mask node in the material and then the visibility mask node is added to the material later.
#jira UE-18187
Change 2835767 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Added a cursor to TopDown template (C++ version) to match the BP version.
Change 2835772 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Adding the material asset for the C++ TopDown template's cursor.
Change 2835811 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25699 Added Validity Checks in BP logic, unchecked CDO for Pixel Ship, to Fix Log Warnings
#jira UE-25704 Adjusted Matinee to happen at Box Location
#jira UE-25688 Adjusted Player Starts
#jira UE-25693 Adjusted Player Starts
Change 2835863 on 2016/01/20 by Gareth.Martin
Fixed crash in the landscape ramp and mirror tools if the streaming level containing the landscape is hidden (or possibly if the landscape actor is deleted)
#jira UE-24883
Change 2835889 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25698 Enabled V-sync, also fixed up player Respawn Issue
Change 2835995 on 2016/01/20 by Jamie.Dale
The output log now hard-wraps lines to prevent long lines causing performance issues
#jira UE-24187
Change 2836052 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25675 Added Blocking Volume to prevent Player from Falling off map
#jira UE-25676 Added Blocking Volumes so that the Player doesn't get stucl at awkward corners under the Bridge
Change 2836137 on 2016/01/20 by Chad.Taylor
Vehicle and VehicleAdv template content fixes for new VR camera
#jira UE-25507
Change 2836166 on 2016/01/20 by Gareth.Martin
Fixed hiding a streaming level containing a landscape causing the landscape editor to switch to the "New Landscape" tool instead of exiting
#jira UE-25093
Change 2836174 on 2016/01/20 by Chad.Taylor
IHeadMountedDisplay crash fix associated with accessing a dangling pointer.
#jira UE-25272
Change 2836179 on 2016/01/20 by Jamie.Dale
Optimized FShapedGlyphSequence reverse look-up
There's now a reverse look-up map of cluster indices to their glyph data in order to avoid brute force looping
#jira UE-24187
Change 2836286 on 2016/01/20 by Chris.Babcock
Update Qualcomm TextureConverter for OSX
#jira UE-22092
#ue4
#android
Change 2836328 on 2016/01/20 by Nick.Darnell
Fixing a problem with widget components crashing on destruction with the render commands to pre/post render for window render commands needing access to the policy, but it potentially being deleted. Inserting a NoOp command that keeps the shared ptr alive through the RHI render process.
#jira UE-25752
Change 2836342 on 2016/01/20 by Nick.Darnell
Depending on shutdown order, the Slate Renderer may go away, and then render data handles may not be collected correctly because they are trying to reference a pointer that's no longer valid and cause a crash on exit. The correct approach would be to have render handles actually have a pointer back to who owns them, in this case the RHI Resource Manager, which is still alive and well at this point in the pipeline. Then if the resource manager is collected, it forces all handles to get cleaned up correctly, or if the handles are collected first, they can be sure they've got a valid pointer back to the resource manager.
#jira UE-25753
Change 2836358 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25710 Replaced Deprecated Nodes
Change 2836510 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25718 Adjsuted BP to make pointer decal rotate in the direction of surface
Change 2836564 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25716 Added bool to store last Moved Direction
Change 2836697 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25740 Removed unused VR Nodes to remove Log errors on Mac
Change 2836725 on 2016/01/20 by Peter.Sauerbrei
workaround for thread race when trying to release the TargetDeviceService endpoint after an unclaim message is sent
#jira UE-25123
Change 2836782 on 2016/01/20 by Jamie.Dale
Added FTextLayout::AddLines
This is similar to AddLine, however it allows you to add multiple lines in a single call, thus avoiding the re-justification cost associated with each call to AddLine.
AddLine has also been changed to take the same structure type as AddLines (which takes an array of these structures), and the existing version of AddLine has been deprecated.
#jira UE-24187
Change 2836801 on 2016/01/20 by Jeff.Campeau
[CL 2857187 by Matthew Griffin in Main branch]
2016-02-05 11:54:00 -05:00
|
|
|
TSharedRef<FString> LineText = InMessage->Message;
|
2014-09-15 07:10:02 -04:00
|
|
|
|
|
|
|
|
TArray<TSharedRef<IRun>> Runs;
|
|
|
|
|
Runs.Add(FSlateTextRun::Create(FRunInfo(), LineText, MessageTextStyle));
|
|
|
|
|
|
Merging //UE4/Release-4.11 to //UE4/Main (up to CL#2852902)
==========================
MAJOR FEATURES + CHANGES
==========================
Change 2835191 on 2016/01/19 by Nick.Whiting
Invert the y-axis on the SteamVR controllers to match the convention of the engine and the rest of the gamepads
#jira UE-22705
Change 2835686 on 2016/01/20 by Gareth.Martin
Fixed landscape material instances not being updated if holes are painted on a landscape that doesn't have the landscape visibility mask node in the material and then the visibility mask node is added to the material later.
#jira UE-18187
Change 2835767 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Added a cursor to TopDown template (C++ version) to match the BP version.
Change 2835772 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Adding the material asset for the C++ TopDown template's cursor.
Change 2835811 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25699 Added Validity Checks in BP logic, unchecked CDO for Pixel Ship, to Fix Log Warnings
#jira UE-25704 Adjusted Matinee to happen at Box Location
#jira UE-25688 Adjusted Player Starts
#jira UE-25693 Adjusted Player Starts
Change 2835863 on 2016/01/20 by Gareth.Martin
Fixed crash in the landscape ramp and mirror tools if the streaming level containing the landscape is hidden (or possibly if the landscape actor is deleted)
#jira UE-24883
Change 2835889 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25698 Enabled V-sync, also fixed up player Respawn Issue
Change 2835995 on 2016/01/20 by Jamie.Dale
The output log now hard-wraps lines to prevent long lines causing performance issues
#jira UE-24187
Change 2836052 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25675 Added Blocking Volume to prevent Player from Falling off map
#jira UE-25676 Added Blocking Volumes so that the Player doesn't get stucl at awkward corners under the Bridge
Change 2836137 on 2016/01/20 by Chad.Taylor
Vehicle and VehicleAdv template content fixes for new VR camera
#jira UE-25507
Change 2836166 on 2016/01/20 by Gareth.Martin
Fixed hiding a streaming level containing a landscape causing the landscape editor to switch to the "New Landscape" tool instead of exiting
#jira UE-25093
Change 2836174 on 2016/01/20 by Chad.Taylor
IHeadMountedDisplay crash fix associated with accessing a dangling pointer.
#jira UE-25272
Change 2836179 on 2016/01/20 by Jamie.Dale
Optimized FShapedGlyphSequence reverse look-up
There's now a reverse look-up map of cluster indices to their glyph data in order to avoid brute force looping
#jira UE-24187
Change 2836286 on 2016/01/20 by Chris.Babcock
Update Qualcomm TextureConverter for OSX
#jira UE-22092
#ue4
#android
Change 2836328 on 2016/01/20 by Nick.Darnell
Fixing a problem with widget components crashing on destruction with the render commands to pre/post render for window render commands needing access to the policy, but it potentially being deleted. Inserting a NoOp command that keeps the shared ptr alive through the RHI render process.
#jira UE-25752
Change 2836342 on 2016/01/20 by Nick.Darnell
Depending on shutdown order, the Slate Renderer may go away, and then render data handles may not be collected correctly because they are trying to reference a pointer that's no longer valid and cause a crash on exit. The correct approach would be to have render handles actually have a pointer back to who owns them, in this case the RHI Resource Manager, which is still alive and well at this point in the pipeline. Then if the resource manager is collected, it forces all handles to get cleaned up correctly, or if the handles are collected first, they can be sure they've got a valid pointer back to the resource manager.
#jira UE-25753
Change 2836358 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25710 Replaced Deprecated Nodes
Change 2836510 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25718 Adjsuted BP to make pointer decal rotate in the direction of surface
Change 2836564 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25716 Added bool to store last Moved Direction
Change 2836697 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25740 Removed unused VR Nodes to remove Log errors on Mac
Change 2836725 on 2016/01/20 by Peter.Sauerbrei
workaround for thread race when trying to release the TargetDeviceService endpoint after an unclaim message is sent
#jira UE-25123
Change 2836782 on 2016/01/20 by Jamie.Dale
Added FTextLayout::AddLines
This is similar to AddLine, however it allows you to add multiple lines in a single call, thus avoiding the re-justification cost associated with each call to AddLine.
AddLine has also been changed to take the same structure type as AddLines (which takes an array of these structures), and the existing version of AddLine has been deprecated.
#jira UE-24187
Change 2836801 on 2016/01/20 by Jeff.Campeau
[CL 2857187 by Matthew Griffin in Main branch]
2016-02-05 11:54:00 -05:00
|
|
|
TextLayout->AddLine(FSlateTextLayout::FNewLineData(MoveTemp(LineText), MoveTemp(Runs)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FOutputLogTextLayoutMarshaller::AppendMessagesToTextLayout(const TArray<TSharedPtr<FLogMessage>>& InMessages)
|
|
|
|
|
{
|
|
|
|
|
TArray<FTextLayout::FNewLineData> LinesToAdd;
|
|
|
|
|
LinesToAdd.Reserve(InMessages.Num());
|
|
|
|
|
|
|
|
|
|
for (const auto& CurrentMessage : InMessages)
|
|
|
|
|
{
|
2016-04-07 16:16:52 -04:00
|
|
|
if (!Filter->IsMessageAllowed(CurrentMessage))
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Increment the cached count
|
|
|
|
|
CachedNumMessages++;
|
|
|
|
|
|
Merging //UE4/Release-4.11 to //UE4/Main (up to CL#2852902)
==========================
MAJOR FEATURES + CHANGES
==========================
Change 2835191 on 2016/01/19 by Nick.Whiting
Invert the y-axis on the SteamVR controllers to match the convention of the engine and the rest of the gamepads
#jira UE-22705
Change 2835686 on 2016/01/20 by Gareth.Martin
Fixed landscape material instances not being updated if holes are painted on a landscape that doesn't have the landscape visibility mask node in the material and then the visibility mask node is added to the material later.
#jira UE-18187
Change 2835767 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Added a cursor to TopDown template (C++ version) to match the BP version.
Change 2835772 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Adding the material asset for the C++ TopDown template's cursor.
Change 2835811 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25699 Added Validity Checks in BP logic, unchecked CDO for Pixel Ship, to Fix Log Warnings
#jira UE-25704 Adjusted Matinee to happen at Box Location
#jira UE-25688 Adjusted Player Starts
#jira UE-25693 Adjusted Player Starts
Change 2835863 on 2016/01/20 by Gareth.Martin
Fixed crash in the landscape ramp and mirror tools if the streaming level containing the landscape is hidden (or possibly if the landscape actor is deleted)
#jira UE-24883
Change 2835889 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25698 Enabled V-sync, also fixed up player Respawn Issue
Change 2835995 on 2016/01/20 by Jamie.Dale
The output log now hard-wraps lines to prevent long lines causing performance issues
#jira UE-24187
Change 2836052 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25675 Added Blocking Volume to prevent Player from Falling off map
#jira UE-25676 Added Blocking Volumes so that the Player doesn't get stucl at awkward corners under the Bridge
Change 2836137 on 2016/01/20 by Chad.Taylor
Vehicle and VehicleAdv template content fixes for new VR camera
#jira UE-25507
Change 2836166 on 2016/01/20 by Gareth.Martin
Fixed hiding a streaming level containing a landscape causing the landscape editor to switch to the "New Landscape" tool instead of exiting
#jira UE-25093
Change 2836174 on 2016/01/20 by Chad.Taylor
IHeadMountedDisplay crash fix associated with accessing a dangling pointer.
#jira UE-25272
Change 2836179 on 2016/01/20 by Jamie.Dale
Optimized FShapedGlyphSequence reverse look-up
There's now a reverse look-up map of cluster indices to their glyph data in order to avoid brute force looping
#jira UE-24187
Change 2836286 on 2016/01/20 by Chris.Babcock
Update Qualcomm TextureConverter for OSX
#jira UE-22092
#ue4
#android
Change 2836328 on 2016/01/20 by Nick.Darnell
Fixing a problem with widget components crashing on destruction with the render commands to pre/post render for window render commands needing access to the policy, but it potentially being deleted. Inserting a NoOp command that keeps the shared ptr alive through the RHI render process.
#jira UE-25752
Change 2836342 on 2016/01/20 by Nick.Darnell
Depending on shutdown order, the Slate Renderer may go away, and then render data handles may not be collected correctly because they are trying to reference a pointer that's no longer valid and cause a crash on exit. The correct approach would be to have render handles actually have a pointer back to who owns them, in this case the RHI Resource Manager, which is still alive and well at this point in the pipeline. Then if the resource manager is collected, it forces all handles to get cleaned up correctly, or if the handles are collected first, they can be sure they've got a valid pointer back to the resource manager.
#jira UE-25753
Change 2836358 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25710 Replaced Deprecated Nodes
Change 2836510 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25718 Adjsuted BP to make pointer decal rotate in the direction of surface
Change 2836564 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25716 Added bool to store last Moved Direction
Change 2836697 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25740 Removed unused VR Nodes to remove Log errors on Mac
Change 2836725 on 2016/01/20 by Peter.Sauerbrei
workaround for thread race when trying to release the TargetDeviceService endpoint after an unclaim message is sent
#jira UE-25123
Change 2836782 on 2016/01/20 by Jamie.Dale
Added FTextLayout::AddLines
This is similar to AddLine, however it allows you to add multiple lines in a single call, thus avoiding the re-justification cost associated with each call to AddLine.
AddLine has also been changed to take the same structure type as AddLines (which takes an array of these structures), and the existing version of AddLine has been deprecated.
#jira UE-24187
Change 2836801 on 2016/01/20 by Jeff.Campeau
[CL 2857187 by Matthew Griffin in Main branch]
2016-02-05 11:54:00 -05:00
|
|
|
const FTextBlockStyle& MessageTextStyle = FEditorStyle::Get().GetWidgetStyle<FTextBlockStyle>(CurrentMessage->Style);
|
|
|
|
|
|
|
|
|
|
TSharedRef<FString> LineText = CurrentMessage->Message;
|
|
|
|
|
|
|
|
|
|
TArray<TSharedRef<IRun>> Runs;
|
|
|
|
|
Runs.Add(FSlateTextRun::Create(FRunInfo(), LineText, MessageTextStyle));
|
|
|
|
|
|
|
|
|
|
LinesToAdd.Emplace(MoveTemp(LineText), MoveTemp(Runs));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TextLayout->AddLines(LinesToAdd);
|
2014-09-15 07:10:02 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FOutputLogTextLayoutMarshaller::ClearMessages()
|
|
|
|
|
{
|
|
|
|
|
Messages.Empty();
|
|
|
|
|
MakeDirty();
|
|
|
|
|
}
|
|
|
|
|
|
2016-04-07 16:16:52 -04:00
|
|
|
void FOutputLogTextLayoutMarshaller::CountMessages()
|
|
|
|
|
{
|
|
|
|
|
// Do not re-count if not dirty
|
|
|
|
|
if (!bNumMessagesCacheDirty)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CachedNumMessages = 0;
|
|
|
|
|
|
|
|
|
|
for (const auto& CurrentMessage : Messages)
|
|
|
|
|
{
|
|
|
|
|
if (Filter->IsMessageAllowed(CurrentMessage))
|
|
|
|
|
{
|
|
|
|
|
CachedNumMessages++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Cache re-built, remove dirty flag
|
|
|
|
|
bNumMessagesCacheDirty = false;
|
|
|
|
|
}
|
|
|
|
|
|
2014-09-15 07:10:02 -04:00
|
|
|
int32 FOutputLogTextLayoutMarshaller::GetNumMessages() const
|
|
|
|
|
{
|
|
|
|
|
return Messages.Num();
|
|
|
|
|
}
|
|
|
|
|
|
2016-04-07 16:16:52 -04:00
|
|
|
int32 FOutputLogTextLayoutMarshaller::GetNumFilteredMessages()
|
|
|
|
|
{
|
|
|
|
|
// No need to filter the messages if the filter is not set
|
|
|
|
|
if (!Filter->IsFilterSet())
|
|
|
|
|
{
|
|
|
|
|
return GetNumMessages();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Re-count messages if filter changed before we refresh
|
|
|
|
|
if (bNumMessagesCacheDirty)
|
|
|
|
|
{
|
|
|
|
|
CountMessages();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return CachedNumMessages;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FOutputLogTextLayoutMarshaller::MarkMessagesCacheAsDirty()
|
|
|
|
|
{
|
|
|
|
|
bNumMessagesCacheDirty = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FOutputLogTextLayoutMarshaller::FOutputLogTextLayoutMarshaller(TArray< TSharedPtr<FLogMessage> > InMessages, FLogFilter* InFilter)
|
2014-09-15 07:10:02 -04:00
|
|
|
: Messages(MoveTemp(InMessages))
|
2016-04-07 16:16:52 -04:00
|
|
|
, Filter(InFilter)
|
2014-09-15 07:10:02 -04:00
|
|
|
, TextLayout(nullptr)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2014-03-14 14:13:41 -04:00
|
|
|
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
|
|
|
|
void SOutputLog::Construct( const FArguments& InArgs )
|
|
|
|
|
{
|
2016-04-07 16:16:52 -04:00
|
|
|
MessagesTextMarshaller = FOutputLogTextLayoutMarshaller::Create(MoveTemp(InArgs._Messages), &Filter);
|
2014-03-14 14:13:41 -04:00
|
|
|
|
2014-09-15 07:10:02 -04:00
|
|
|
MessagesTextBox = SNew(SMultiLineEditableTextBox)
|
|
|
|
|
.Style(FEditorStyle::Get(), "Log.TextBox")
|
|
|
|
|
.TextStyle(FEditorStyle::Get(), "Log.Normal")
|
2015-03-09 15:56:34 -04:00
|
|
|
.ForegroundColor(FLinearColor::Gray)
|
2014-09-15 07:10:02 -04:00
|
|
|
.Marshaller(MessagesTextMarshaller)
|
|
|
|
|
.IsReadOnly(true)
|
2014-09-22 09:46:08 -04:00
|
|
|
.AlwaysShowScrollbars(true)
|
2014-12-17 02:15:54 -05:00
|
|
|
.OnVScrollBarUserScrolled(this, &SOutputLog::OnUserScrolled)
|
2014-09-15 07:10:02 -04:00
|
|
|
.ContextMenuExtender(this, &SOutputLog::ExtendTextBoxMenu);
|
2014-08-22 10:04:10 -04:00
|
|
|
|
2014-03-14 14:13:41 -04:00
|
|
|
ChildSlot
|
|
|
|
|
[
|
|
|
|
|
SNew(SVerticalBox)
|
|
|
|
|
|
2016-04-07 16:16:52 -04:00
|
|
|
// Console output and filters
|
|
|
|
|
+SVerticalBox::Slot()
|
|
|
|
|
[
|
|
|
|
|
SNew(SBorder)
|
|
|
|
|
.Padding(3)
|
|
|
|
|
.BorderImage(FEditorStyle::GetBrush("ToolPanel.GroupBorder"))
|
2014-03-14 14:13:41 -04:00
|
|
|
[
|
2016-04-07 16:16:52 -04:00
|
|
|
SNew(SVerticalBox)
|
2016-04-07 14:48:06 -04:00
|
|
|
|
2016-04-07 16:16:52 -04:00
|
|
|
// Output Log Filter
|
|
|
|
|
+SVerticalBox::Slot()
|
|
|
|
|
.AutoHeight()
|
|
|
|
|
.Padding(FMargin(0.0f, 0.0f, 0.0f, 4.0f))
|
|
|
|
|
[
|
|
|
|
|
SNew(SHorizontalBox)
|
|
|
|
|
|
|
|
|
|
+SHorizontalBox::Slot()
|
|
|
|
|
.AutoWidth()
|
|
|
|
|
[
|
|
|
|
|
SNew(SComboButton)
|
|
|
|
|
.ComboButtonStyle(FEditorStyle::Get(), "OutputLog.Filters.Style")
|
|
|
|
|
.ForegroundColor(FLinearColor::White)
|
|
|
|
|
.ContentPadding(0)
|
|
|
|
|
.ToolTipText(LOCTEXT("AddFilterToolTip", "Add an output log filter."))
|
|
|
|
|
.OnGetMenuContent(this, &SOutputLog::MakeAddFilterMenu)
|
|
|
|
|
.HasDownArrow(true)
|
|
|
|
|
.ContentPadding(FMargin(1, 0))
|
|
|
|
|
.ButtonContent()
|
|
|
|
|
[
|
|
|
|
|
SNew(SHorizontalBox)
|
|
|
|
|
|
|
|
|
|
+SHorizontalBox::Slot()
|
|
|
|
|
.AutoWidth()
|
|
|
|
|
[
|
|
|
|
|
SNew(STextBlock)
|
|
|
|
|
.TextStyle(FEditorStyle::Get(), "OutputLog.Filters.Text")
|
|
|
|
|
.Font(FEditorStyle::Get().GetFontStyle("FontAwesome.9"))
|
|
|
|
|
.Text(FText::FromString(FString(TEXT("\xf0b0"))) /*fa-filter*/)
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
+SHorizontalBox::Slot()
|
|
|
|
|
.AutoWidth()
|
|
|
|
|
.Padding(2, 0, 0, 0)
|
|
|
|
|
[
|
|
|
|
|
SNew(STextBlock)
|
|
|
|
|
.TextStyle(FEditorStyle::Get(), "OutputLog.Filters.Text")
|
|
|
|
|
.Text(LOCTEXT("Filters", "Filters"))
|
|
|
|
|
]
|
|
|
|
|
]
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
+SHorizontalBox::Slot()
|
|
|
|
|
.Padding(4, 1, 0, 0)
|
|
|
|
|
[
|
|
|
|
|
SAssignNew(FilterTextBox, SSearchBox)
|
|
|
|
|
.HintText(LOCTEXT("SearchLogHint", "Search Log"))
|
|
|
|
|
.OnTextChanged(this, &SOutputLog::OnFilterTextChanged)
|
|
|
|
|
.DelayChangeNotificationsWhileTyping(true)
|
|
|
|
|
]
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
// Output log area
|
|
|
|
|
+SVerticalBox::Slot()
|
|
|
|
|
.FillHeight(1)
|
|
|
|
|
[
|
|
|
|
|
MessagesTextBox.ToSharedRef()
|
|
|
|
|
]
|
2016-04-07 14:58:54 -04:00
|
|
|
]
|
2016-04-07 16:16:52 -04:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
// The console input box
|
|
|
|
|
+SVerticalBox::Slot()
|
|
|
|
|
.AutoHeight()
|
|
|
|
|
.Padding(FMargin(0.0f, 4.0f, 0.0f, 0.0f))
|
|
|
|
|
[
|
|
|
|
|
SNew(SConsoleInputBox)
|
|
|
|
|
.OnConsoleCommandExecuted(this, &SOutputLog::OnConsoleCommandExecuted)
|
|
|
|
|
|
|
|
|
|
// Always place suggestions above the input line for the output log widget
|
|
|
|
|
.SuggestionListPlacement(MenuPlacement_AboveAnchor)
|
|
|
|
|
]
|
2014-03-14 14:13:41 -04:00
|
|
|
];
|
|
|
|
|
|
|
|
|
|
GLog->AddOutputDevice(this);
|
2014-09-23 06:03:13 -04:00
|
|
|
|
2014-12-17 02:15:54 -05:00
|
|
|
bIsUserScrolled = false;
|
2014-09-23 06:03:13 -04:00
|
|
|
RequestForceScroll();
|
2014-03-14 14:13:41 -04:00
|
|
|
}
|
|
|
|
|
END_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
|
|
|
|
|
|
|
|
|
SOutputLog::~SOutputLog()
|
|
|
|
|
{
|
|
|
|
|
if (GLog != NULL)
|
|
|
|
|
{
|
|
|
|
|
GLog->RemoveOutputDevice(this);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool SOutputLog::CreateLogMessages( const TCHAR* V, ELogVerbosity::Type Verbosity, const class FName& Category, TArray< TSharedPtr<FLogMessage> >& OutMessages )
|
|
|
|
|
{
|
|
|
|
|
if (Verbosity == ELogVerbosity::SetColor)
|
|
|
|
|
{
|
|
|
|
|
// Skip Color Events
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
FName Style;
|
|
|
|
|
if (Category == NAME_Cmd)
|
|
|
|
|
{
|
2014-09-15 07:10:02 -04:00
|
|
|
Style = FName(TEXT("Log.Command"));
|
2014-03-14 14:13:41 -04:00
|
|
|
}
|
|
|
|
|
else if (Verbosity == ELogVerbosity::Error)
|
|
|
|
|
{
|
2014-09-15 07:10:02 -04:00
|
|
|
Style = FName(TEXT("Log.Error"));
|
2014-03-14 14:13:41 -04:00
|
|
|
}
|
|
|
|
|
else if (Verbosity == ELogVerbosity::Warning)
|
|
|
|
|
{
|
2014-09-15 07:10:02 -04:00
|
|
|
Style = FName(TEXT("Log.Warning"));
|
2014-03-14 14:13:41 -04:00
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2014-09-15 07:10:02 -04:00
|
|
|
Style = FName(TEXT("Log.Normal"));
|
2014-03-14 14:13:41 -04:00
|
|
|
}
|
|
|
|
|
|
2014-11-10 18:29:57 -05:00
|
|
|
// Determine how to format timestamps
|
2014-11-12 20:01:49 -05:00
|
|
|
static ELogTimes::Type LogTimestampMode = ELogTimes::None;
|
|
|
|
|
if (UObjectInitialized() && !GExitPurge)
|
2014-11-10 18:29:57 -05:00
|
|
|
{
|
|
|
|
|
// Logging can happen very late during shutdown, even after the UObject system has been torn down, hence the init check above
|
|
|
|
|
LogTimestampMode = GetDefault<UEditorStyleSettings>()->LogTimestampMode;
|
|
|
|
|
}
|
2014-11-10 15:13:41 -05:00
|
|
|
|
2014-09-15 07:10:02 -04:00
|
|
|
const int32 OldNumMessages = OutMessages.Num();
|
|
|
|
|
|
2014-03-14 14:13:41 -04:00
|
|
|
// handle multiline strings by breaking them apart by line
|
2014-09-15 07:10:02 -04:00
|
|
|
TArray<FTextRange> LineRanges;
|
2014-03-14 14:13:41 -04:00
|
|
|
FString CurrentLogDump = V;
|
2014-09-15 07:10:02 -04:00
|
|
|
FTextRange::CalculateLineRangesFromString(CurrentLogDump, LineRanges);
|
2014-03-14 14:13:41 -04:00
|
|
|
|
2014-09-15 07:10:02 -04:00
|
|
|
bool bIsFirstLineInMessage = true;
|
|
|
|
|
for (const FTextRange& LineRange : LineRanges)
|
2014-03-14 14:13:41 -04:00
|
|
|
{
|
2014-11-10 15:13:41 -05:00
|
|
|
if (!LineRange.IsEmpty())
|
|
|
|
|
{
|
|
|
|
|
FString Line = CurrentLogDump.Mid(LineRange.BeginIndex, LineRange.Len());
|
|
|
|
|
Line = Line.ConvertTabsToSpaces(4);
|
2014-09-15 07:10:02 -04:00
|
|
|
|
Merging //UE4/Release-4.11 to //UE4/Main (up to CL#2852902)
==========================
MAJOR FEATURES + CHANGES
==========================
Change 2835191 on 2016/01/19 by Nick.Whiting
Invert the y-axis on the SteamVR controllers to match the convention of the engine and the rest of the gamepads
#jira UE-22705
Change 2835686 on 2016/01/20 by Gareth.Martin
Fixed landscape material instances not being updated if holes are painted on a landscape that doesn't have the landscape visibility mask node in the material and then the visibility mask node is added to the material later.
#jira UE-18187
Change 2835767 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Added a cursor to TopDown template (C++ version) to match the BP version.
Change 2835772 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Adding the material asset for the C++ TopDown template's cursor.
Change 2835811 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25699 Added Validity Checks in BP logic, unchecked CDO for Pixel Ship, to Fix Log Warnings
#jira UE-25704 Adjusted Matinee to happen at Box Location
#jira UE-25688 Adjusted Player Starts
#jira UE-25693 Adjusted Player Starts
Change 2835863 on 2016/01/20 by Gareth.Martin
Fixed crash in the landscape ramp and mirror tools if the streaming level containing the landscape is hidden (or possibly if the landscape actor is deleted)
#jira UE-24883
Change 2835889 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25698 Enabled V-sync, also fixed up player Respawn Issue
Change 2835995 on 2016/01/20 by Jamie.Dale
The output log now hard-wraps lines to prevent long lines causing performance issues
#jira UE-24187
Change 2836052 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25675 Added Blocking Volume to prevent Player from Falling off map
#jira UE-25676 Added Blocking Volumes so that the Player doesn't get stucl at awkward corners under the Bridge
Change 2836137 on 2016/01/20 by Chad.Taylor
Vehicle and VehicleAdv template content fixes for new VR camera
#jira UE-25507
Change 2836166 on 2016/01/20 by Gareth.Martin
Fixed hiding a streaming level containing a landscape causing the landscape editor to switch to the "New Landscape" tool instead of exiting
#jira UE-25093
Change 2836174 on 2016/01/20 by Chad.Taylor
IHeadMountedDisplay crash fix associated with accessing a dangling pointer.
#jira UE-25272
Change 2836179 on 2016/01/20 by Jamie.Dale
Optimized FShapedGlyphSequence reverse look-up
There's now a reverse look-up map of cluster indices to their glyph data in order to avoid brute force looping
#jira UE-24187
Change 2836286 on 2016/01/20 by Chris.Babcock
Update Qualcomm TextureConverter for OSX
#jira UE-22092
#ue4
#android
Change 2836328 on 2016/01/20 by Nick.Darnell
Fixing a problem with widget components crashing on destruction with the render commands to pre/post render for window render commands needing access to the policy, but it potentially being deleted. Inserting a NoOp command that keeps the shared ptr alive through the RHI render process.
#jira UE-25752
Change 2836342 on 2016/01/20 by Nick.Darnell
Depending on shutdown order, the Slate Renderer may go away, and then render data handles may not be collected correctly because they are trying to reference a pointer that's no longer valid and cause a crash on exit. The correct approach would be to have render handles actually have a pointer back to who owns them, in this case the RHI Resource Manager, which is still alive and well at this point in the pipeline. Then if the resource manager is collected, it forces all handles to get cleaned up correctly, or if the handles are collected first, they can be sure they've got a valid pointer back to the resource manager.
#jira UE-25753
Change 2836358 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25710 Replaced Deprecated Nodes
Change 2836510 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25718 Adjsuted BP to make pointer decal rotate in the direction of surface
Change 2836564 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25716 Added bool to store last Moved Direction
Change 2836697 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25740 Removed unused VR Nodes to remove Log errors on Mac
Change 2836725 on 2016/01/20 by Peter.Sauerbrei
workaround for thread race when trying to release the TargetDeviceService endpoint after an unclaim message is sent
#jira UE-25123
Change 2836782 on 2016/01/20 by Jamie.Dale
Added FTextLayout::AddLines
This is similar to AddLine, however it allows you to add multiple lines in a single call, thus avoiding the re-justification cost associated with each call to AddLine.
AddLine has also been changed to take the same structure type as AddLines (which takes an array of these structures), and the existing version of AddLine has been deprecated.
#jira UE-24187
Change 2836801 on 2016/01/20 by Jeff.Campeau
[CL 2857187 by Matthew Griffin in Main branch]
2016-02-05 11:54:00 -05:00
|
|
|
// Hard-wrap lines to avoid them being too long
|
|
|
|
|
static const int32 HardWrapLen = 360;
|
|
|
|
|
for (int32 CurrentStartIndex = 0; CurrentStartIndex < Line.Len();)
|
|
|
|
|
{
|
|
|
|
|
int32 HardWrapLineLen = 0;
|
|
|
|
|
if (bIsFirstLineInMessage)
|
|
|
|
|
{
|
2016-04-28 13:50:05 -04:00
|
|
|
FString MessagePrefix = FOutputDeviceHelper::FormatLogLine(Verbosity, Category, nullptr, LogTimestampMode);
|
Merging //UE4/Release-4.11 to //UE4/Main (up to CL#2852902)
==========================
MAJOR FEATURES + CHANGES
==========================
Change 2835191 on 2016/01/19 by Nick.Whiting
Invert the y-axis on the SteamVR controllers to match the convention of the engine and the rest of the gamepads
#jira UE-22705
Change 2835686 on 2016/01/20 by Gareth.Martin
Fixed landscape material instances not being updated if holes are painted on a landscape that doesn't have the landscape visibility mask node in the material and then the visibility mask node is added to the material later.
#jira UE-18187
Change 2835767 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Added a cursor to TopDown template (C++ version) to match the BP version.
Change 2835772 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Adding the material asset for the C++ TopDown template's cursor.
Change 2835811 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25699 Added Validity Checks in BP logic, unchecked CDO for Pixel Ship, to Fix Log Warnings
#jira UE-25704 Adjusted Matinee to happen at Box Location
#jira UE-25688 Adjusted Player Starts
#jira UE-25693 Adjusted Player Starts
Change 2835863 on 2016/01/20 by Gareth.Martin
Fixed crash in the landscape ramp and mirror tools if the streaming level containing the landscape is hidden (or possibly if the landscape actor is deleted)
#jira UE-24883
Change 2835889 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25698 Enabled V-sync, also fixed up player Respawn Issue
Change 2835995 on 2016/01/20 by Jamie.Dale
The output log now hard-wraps lines to prevent long lines causing performance issues
#jira UE-24187
Change 2836052 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25675 Added Blocking Volume to prevent Player from Falling off map
#jira UE-25676 Added Blocking Volumes so that the Player doesn't get stucl at awkward corners under the Bridge
Change 2836137 on 2016/01/20 by Chad.Taylor
Vehicle and VehicleAdv template content fixes for new VR camera
#jira UE-25507
Change 2836166 on 2016/01/20 by Gareth.Martin
Fixed hiding a streaming level containing a landscape causing the landscape editor to switch to the "New Landscape" tool instead of exiting
#jira UE-25093
Change 2836174 on 2016/01/20 by Chad.Taylor
IHeadMountedDisplay crash fix associated with accessing a dangling pointer.
#jira UE-25272
Change 2836179 on 2016/01/20 by Jamie.Dale
Optimized FShapedGlyphSequence reverse look-up
There's now a reverse look-up map of cluster indices to their glyph data in order to avoid brute force looping
#jira UE-24187
Change 2836286 on 2016/01/20 by Chris.Babcock
Update Qualcomm TextureConverter for OSX
#jira UE-22092
#ue4
#android
Change 2836328 on 2016/01/20 by Nick.Darnell
Fixing a problem with widget components crashing on destruction with the render commands to pre/post render for window render commands needing access to the policy, but it potentially being deleted. Inserting a NoOp command that keeps the shared ptr alive through the RHI render process.
#jira UE-25752
Change 2836342 on 2016/01/20 by Nick.Darnell
Depending on shutdown order, the Slate Renderer may go away, and then render data handles may not be collected correctly because they are trying to reference a pointer that's no longer valid and cause a crash on exit. The correct approach would be to have render handles actually have a pointer back to who owns them, in this case the RHI Resource Manager, which is still alive and well at this point in the pipeline. Then if the resource manager is collected, it forces all handles to get cleaned up correctly, or if the handles are collected first, they can be sure they've got a valid pointer back to the resource manager.
#jira UE-25753
Change 2836358 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25710 Replaced Deprecated Nodes
Change 2836510 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25718 Adjsuted BP to make pointer decal rotate in the direction of surface
Change 2836564 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25716 Added bool to store last Moved Direction
Change 2836697 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25740 Removed unused VR Nodes to remove Log errors on Mac
Change 2836725 on 2016/01/20 by Peter.Sauerbrei
workaround for thread race when trying to release the TargetDeviceService endpoint after an unclaim message is sent
#jira UE-25123
Change 2836782 on 2016/01/20 by Jamie.Dale
Added FTextLayout::AddLines
This is similar to AddLine, however it allows you to add multiple lines in a single call, thus avoiding the re-justification cost associated with each call to AddLine.
AddLine has also been changed to take the same structure type as AddLines (which takes an array of these structures), and the existing version of AddLine has been deprecated.
#jira UE-24187
Change 2836801 on 2016/01/20 by Jeff.Campeau
[CL 2857187 by Matthew Griffin in Main branch]
2016-02-05 11:54:00 -05:00
|
|
|
|
|
|
|
|
HardWrapLineLen = FMath::Min(HardWrapLen - MessagePrefix.Len(), Line.Len() - CurrentStartIndex);
|
|
|
|
|
FString HardWrapLine = Line.Mid(CurrentStartIndex, HardWrapLineLen);
|
2014-09-15 07:10:02 -04:00
|
|
|
|
2016-04-07 16:16:52 -04:00
|
|
|
OutMessages.Add(MakeShareable(new FLogMessage(MakeShareable(new FString(MessagePrefix + HardWrapLine)), Verbosity, Style)));
|
Merging //UE4/Release-4.11 to //UE4/Main (up to CL#2852902)
==========================
MAJOR FEATURES + CHANGES
==========================
Change 2835191 on 2016/01/19 by Nick.Whiting
Invert the y-axis on the SteamVR controllers to match the convention of the engine and the rest of the gamepads
#jira UE-22705
Change 2835686 on 2016/01/20 by Gareth.Martin
Fixed landscape material instances not being updated if holes are painted on a landscape that doesn't have the landscape visibility mask node in the material and then the visibility mask node is added to the material later.
#jira UE-18187
Change 2835767 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Added a cursor to TopDown template (C++ version) to match the BP version.
Change 2835772 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Adding the material asset for the C++ TopDown template's cursor.
Change 2835811 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25699 Added Validity Checks in BP logic, unchecked CDO for Pixel Ship, to Fix Log Warnings
#jira UE-25704 Adjusted Matinee to happen at Box Location
#jira UE-25688 Adjusted Player Starts
#jira UE-25693 Adjusted Player Starts
Change 2835863 on 2016/01/20 by Gareth.Martin
Fixed crash in the landscape ramp and mirror tools if the streaming level containing the landscape is hidden (or possibly if the landscape actor is deleted)
#jira UE-24883
Change 2835889 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25698 Enabled V-sync, also fixed up player Respawn Issue
Change 2835995 on 2016/01/20 by Jamie.Dale
The output log now hard-wraps lines to prevent long lines causing performance issues
#jira UE-24187
Change 2836052 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25675 Added Blocking Volume to prevent Player from Falling off map
#jira UE-25676 Added Blocking Volumes so that the Player doesn't get stucl at awkward corners under the Bridge
Change 2836137 on 2016/01/20 by Chad.Taylor
Vehicle and VehicleAdv template content fixes for new VR camera
#jira UE-25507
Change 2836166 on 2016/01/20 by Gareth.Martin
Fixed hiding a streaming level containing a landscape causing the landscape editor to switch to the "New Landscape" tool instead of exiting
#jira UE-25093
Change 2836174 on 2016/01/20 by Chad.Taylor
IHeadMountedDisplay crash fix associated with accessing a dangling pointer.
#jira UE-25272
Change 2836179 on 2016/01/20 by Jamie.Dale
Optimized FShapedGlyphSequence reverse look-up
There's now a reverse look-up map of cluster indices to their glyph data in order to avoid brute force looping
#jira UE-24187
Change 2836286 on 2016/01/20 by Chris.Babcock
Update Qualcomm TextureConverter for OSX
#jira UE-22092
#ue4
#android
Change 2836328 on 2016/01/20 by Nick.Darnell
Fixing a problem with widget components crashing on destruction with the render commands to pre/post render for window render commands needing access to the policy, but it potentially being deleted. Inserting a NoOp command that keeps the shared ptr alive through the RHI render process.
#jira UE-25752
Change 2836342 on 2016/01/20 by Nick.Darnell
Depending on shutdown order, the Slate Renderer may go away, and then render data handles may not be collected correctly because they are trying to reference a pointer that's no longer valid and cause a crash on exit. The correct approach would be to have render handles actually have a pointer back to who owns them, in this case the RHI Resource Manager, which is still alive and well at this point in the pipeline. Then if the resource manager is collected, it forces all handles to get cleaned up correctly, or if the handles are collected first, they can be sure they've got a valid pointer back to the resource manager.
#jira UE-25753
Change 2836358 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25710 Replaced Deprecated Nodes
Change 2836510 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25718 Adjsuted BP to make pointer decal rotate in the direction of surface
Change 2836564 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25716 Added bool to store last Moved Direction
Change 2836697 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25740 Removed unused VR Nodes to remove Log errors on Mac
Change 2836725 on 2016/01/20 by Peter.Sauerbrei
workaround for thread race when trying to release the TargetDeviceService endpoint after an unclaim message is sent
#jira UE-25123
Change 2836782 on 2016/01/20 by Jamie.Dale
Added FTextLayout::AddLines
This is similar to AddLine, however it allows you to add multiple lines in a single call, thus avoiding the re-justification cost associated with each call to AddLine.
AddLine has also been changed to take the same structure type as AddLines (which takes an array of these structures), and the existing version of AddLine has been deprecated.
#jira UE-24187
Change 2836801 on 2016/01/20 by Jeff.Campeau
[CL 2857187 by Matthew Griffin in Main branch]
2016-02-05 11:54:00 -05:00
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
HardWrapLineLen = FMath::Min(HardWrapLen, Line.Len() - CurrentStartIndex);
|
|
|
|
|
FString HardWrapLine = Line.Mid(CurrentStartIndex, HardWrapLineLen);
|
|
|
|
|
|
2016-04-07 16:16:52 -04:00
|
|
|
OutMessages.Add(MakeShareable(new FLogMessage(MakeShareable(new FString(MoveTemp(HardWrapLine))), Verbosity, Style)));
|
Merging //UE4/Release-4.11 to //UE4/Main (up to CL#2852902)
==========================
MAJOR FEATURES + CHANGES
==========================
Change 2835191 on 2016/01/19 by Nick.Whiting
Invert the y-axis on the SteamVR controllers to match the convention of the engine and the rest of the gamepads
#jira UE-22705
Change 2835686 on 2016/01/20 by Gareth.Martin
Fixed landscape material instances not being updated if holes are painted on a landscape that doesn't have the landscape visibility mask node in the material and then the visibility mask node is added to the material later.
#jira UE-18187
Change 2835767 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Added a cursor to TopDown template (C++ version) to match the BP version.
Change 2835772 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Adding the material asset for the C++ TopDown template's cursor.
Change 2835811 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25699 Added Validity Checks in BP logic, unchecked CDO for Pixel Ship, to Fix Log Warnings
#jira UE-25704 Adjusted Matinee to happen at Box Location
#jira UE-25688 Adjusted Player Starts
#jira UE-25693 Adjusted Player Starts
Change 2835863 on 2016/01/20 by Gareth.Martin
Fixed crash in the landscape ramp and mirror tools if the streaming level containing the landscape is hidden (or possibly if the landscape actor is deleted)
#jira UE-24883
Change 2835889 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25698 Enabled V-sync, also fixed up player Respawn Issue
Change 2835995 on 2016/01/20 by Jamie.Dale
The output log now hard-wraps lines to prevent long lines causing performance issues
#jira UE-24187
Change 2836052 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25675 Added Blocking Volume to prevent Player from Falling off map
#jira UE-25676 Added Blocking Volumes so that the Player doesn't get stucl at awkward corners under the Bridge
Change 2836137 on 2016/01/20 by Chad.Taylor
Vehicle and VehicleAdv template content fixes for new VR camera
#jira UE-25507
Change 2836166 on 2016/01/20 by Gareth.Martin
Fixed hiding a streaming level containing a landscape causing the landscape editor to switch to the "New Landscape" tool instead of exiting
#jira UE-25093
Change 2836174 on 2016/01/20 by Chad.Taylor
IHeadMountedDisplay crash fix associated with accessing a dangling pointer.
#jira UE-25272
Change 2836179 on 2016/01/20 by Jamie.Dale
Optimized FShapedGlyphSequence reverse look-up
There's now a reverse look-up map of cluster indices to their glyph data in order to avoid brute force looping
#jira UE-24187
Change 2836286 on 2016/01/20 by Chris.Babcock
Update Qualcomm TextureConverter for OSX
#jira UE-22092
#ue4
#android
Change 2836328 on 2016/01/20 by Nick.Darnell
Fixing a problem with widget components crashing on destruction with the render commands to pre/post render for window render commands needing access to the policy, but it potentially being deleted. Inserting a NoOp command that keeps the shared ptr alive through the RHI render process.
#jira UE-25752
Change 2836342 on 2016/01/20 by Nick.Darnell
Depending on shutdown order, the Slate Renderer may go away, and then render data handles may not be collected correctly because they are trying to reference a pointer that's no longer valid and cause a crash on exit. The correct approach would be to have render handles actually have a pointer back to who owns them, in this case the RHI Resource Manager, which is still alive and well at this point in the pipeline. Then if the resource manager is collected, it forces all handles to get cleaned up correctly, or if the handles are collected first, they can be sure they've got a valid pointer back to the resource manager.
#jira UE-25753
Change 2836358 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25710 Replaced Deprecated Nodes
Change 2836510 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25718 Adjsuted BP to make pointer decal rotate in the direction of surface
Change 2836564 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25716 Added bool to store last Moved Direction
Change 2836697 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25740 Removed unused VR Nodes to remove Log errors on Mac
Change 2836725 on 2016/01/20 by Peter.Sauerbrei
workaround for thread race when trying to release the TargetDeviceService endpoint after an unclaim message is sent
#jira UE-25123
Change 2836782 on 2016/01/20 by Jamie.Dale
Added FTextLayout::AddLines
This is similar to AddLine, however it allows you to add multiple lines in a single call, thus avoiding the re-justification cost associated with each call to AddLine.
AddLine has also been changed to take the same structure type as AddLines (which takes an array of these structures), and the existing version of AddLine has been deprecated.
#jira UE-24187
Change 2836801 on 2016/01/20 by Jeff.Campeau
[CL 2857187 by Matthew Griffin in Main branch]
2016-02-05 11:54:00 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bIsFirstLineInMessage = false;
|
|
|
|
|
CurrentStartIndex += HardWrapLineLen;
|
|
|
|
|
}
|
2014-11-10 15:13:41 -05:00
|
|
|
}
|
2014-03-14 14:13:41 -04:00
|
|
|
}
|
|
|
|
|
|
2014-09-15 07:10:02 -04:00
|
|
|
return OldNumMessages != OutMessages.Num();
|
2014-03-14 14:13:41 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2016-04-07 16:16:52 -04:00
|
|
|
void SOutputLog::Serialize(const TCHAR* V, ELogVerbosity::Type Verbosity, const class FName& Category)
|
2014-03-14 14:13:41 -04:00
|
|
|
{
|
2014-09-15 07:10:02 -04:00
|
|
|
if ( MessagesTextMarshaller->AppendMessage(V, Verbosity, Category) )
|
2014-03-14 14:13:41 -04:00
|
|
|
{
|
|
|
|
|
// Don't scroll to the bottom automatically when the user is scrolling the view or has scrolled it away from the bottom.
|
2014-12-17 02:15:54 -05:00
|
|
|
if( !bIsUserScrolled )
|
2014-03-14 14:13:41 -04:00
|
|
|
{
|
2016-04-07 16:16:52 -04:00
|
|
|
RequestForceScroll();
|
2014-03-14 14:13:41 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2014-09-15 07:10:02 -04:00
|
|
|
void SOutputLog::ExtendTextBoxMenu(FMenuBuilder& Builder)
|
2014-03-14 14:13:41 -04:00
|
|
|
{
|
2014-09-15 07:10:02 -04:00
|
|
|
FUIAction ClearOutputLogAction(
|
|
|
|
|
FExecuteAction::CreateRaw( this, &SOutputLog::OnClearLog ),
|
|
|
|
|
FCanExecuteAction::CreateSP( this, &SOutputLog::CanClearLog )
|
|
|
|
|
);
|
2014-03-14 14:13:41 -04:00
|
|
|
|
2014-09-15 07:10:02 -04:00
|
|
|
Builder.AddMenuEntry(
|
|
|
|
|
NSLOCTEXT("OutputLog", "ClearLogLabel", "Clear Log"),
|
|
|
|
|
NSLOCTEXT("OutputLog", "ClearLogTooltip", "Clears all log messages"),
|
|
|
|
|
FSlateIcon(),
|
|
|
|
|
ClearOutputLogAction
|
|
|
|
|
);
|
2014-03-14 14:13:41 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SOutputLog::OnClearLog()
|
|
|
|
|
{
|
2014-09-15 07:10:02 -04:00
|
|
|
// Make sure the cursor is back at the start of the log before we clear it
|
|
|
|
|
MessagesTextBox->GoTo(FTextLocation(0));
|
|
|
|
|
|
|
|
|
|
MessagesTextMarshaller->ClearMessages();
|
|
|
|
|
MessagesTextBox->Refresh();
|
2014-12-17 02:15:54 -05:00
|
|
|
bIsUserScrolled = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SOutputLog::OnUserScrolled(float ScrollOffset)
|
|
|
|
|
{
|
|
|
|
|
bIsUserScrolled = !FMath::IsNearlyEqual(ScrollOffset, 1.0f);
|
2014-03-14 14:13:41 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool SOutputLog::CanClearLog() const
|
|
|
|
|
{
|
2014-09-15 07:10:02 -04:00
|
|
|
return MessagesTextMarshaller->GetNumMessages() > 0;
|
2014-03-14 14:13:41 -04:00
|
|
|
}
|
2014-09-22 09:46:08 -04:00
|
|
|
|
|
|
|
|
void SOutputLog::OnConsoleCommandExecuted()
|
|
|
|
|
{
|
|
|
|
|
RequestForceScroll();
|
|
|
|
|
}
|
2014-09-23 06:03:13 -04:00
|
|
|
|
|
|
|
|
void SOutputLog::RequestForceScroll()
|
|
|
|
|
{
|
2016-04-07 16:16:52 -04:00
|
|
|
if (MessagesTextMarshaller->GetNumFilteredMessages() > 0)
|
2014-09-23 06:03:13 -04:00
|
|
|
{
|
2016-04-07 16:16:52 -04:00
|
|
|
MessagesTextBox->ScrollTo(FTextLocation(MessagesTextMarshaller->GetNumFilteredMessages() - 1));
|
2014-12-17 02:15:54 -05:00
|
|
|
bIsUserScrolled = false;
|
2014-09-23 06:03:13 -04:00
|
|
|
}
|
|
|
|
|
}
|
2016-04-07 16:16:52 -04:00
|
|
|
|
|
|
|
|
void SOutputLog::Refresh()
|
|
|
|
|
{
|
|
|
|
|
// Re-count messages if filter changed before we refresh
|
|
|
|
|
MessagesTextMarshaller->CountMessages();
|
|
|
|
|
|
|
|
|
|
MessagesTextBox->GoTo(FTextLocation(0));
|
|
|
|
|
MessagesTextMarshaller->MakeDirty();
|
|
|
|
|
MessagesTextBox->Refresh();
|
|
|
|
|
RequestForceScroll();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SOutputLog::OnFilterTextChanged(const FText& InFilterText)
|
|
|
|
|
{
|
|
|
|
|
// Flag the messages count as dirty
|
|
|
|
|
MessagesTextMarshaller->MarkMessagesCacheAsDirty();
|
|
|
|
|
|
|
|
|
|
// Set filter phrases
|
|
|
|
|
Filter.SetFilterText(InFilterText);
|
|
|
|
|
|
|
|
|
|
// Report possible syntax errors back to the user
|
|
|
|
|
FilterTextBox->SetError(Filter.GetSyntaxErrors());
|
|
|
|
|
|
|
|
|
|
// Repopulate the list to show only what has not been filtered out.
|
|
|
|
|
Refresh();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TSharedRef<SWidget> SOutputLog::MakeAddFilterMenu()
|
|
|
|
|
{
|
|
|
|
|
FMenuBuilder MenuBuilder(/*bInShouldCloseWindowAfterMenuSelection=*/true, nullptr);
|
|
|
|
|
FillVerbosityEntries(MenuBuilder);
|
|
|
|
|
return MenuBuilder.MakeWidget();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SOutputLog::FillVerbosityEntries(FMenuBuilder& MenuBuilder)
|
|
|
|
|
{
|
|
|
|
|
MenuBuilder.BeginSection("OutputLogVerbosityEntries");
|
|
|
|
|
{
|
|
|
|
|
MenuBuilder.AddMenuEntry(
|
|
|
|
|
LOCTEXT("ShowMessages", "Messages"),
|
|
|
|
|
LOCTEXT("ShowMessages_Tooltip", "Filter the Output Log to show messages"),
|
|
|
|
|
FSlateIcon(),
|
|
|
|
|
FUIAction(FExecuteAction::CreateSP(this, &SOutputLog::MenuLogs_Execute),
|
|
|
|
|
FCanExecuteAction::CreateSP(this, &SOutputLog::Menu_CanExecute),
|
|
|
|
|
FIsActionChecked::CreateSP(this, &SOutputLog::MenuLogs_IsChecked)),
|
|
|
|
|
NAME_None,
|
|
|
|
|
EUserInterfaceActionType::ToggleButton
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
MenuBuilder.AddMenuEntry(
|
|
|
|
|
LOCTEXT("ShowWarnings", "Warnings"),
|
|
|
|
|
LOCTEXT("ShowWarnings_Tooltip", "Filter the Output Log to show warnings"),
|
|
|
|
|
FSlateIcon(),
|
|
|
|
|
FUIAction(FExecuteAction::CreateSP(this, &SOutputLog::MenuWarnings_Execute),
|
|
|
|
|
FCanExecuteAction::CreateSP(this, &SOutputLog::Menu_CanExecute),
|
|
|
|
|
FIsActionChecked::CreateSP(this, &SOutputLog::MenuWarnings_IsChecked)),
|
|
|
|
|
NAME_None,
|
|
|
|
|
EUserInterfaceActionType::ToggleButton
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
MenuBuilder.AddMenuEntry(
|
|
|
|
|
LOCTEXT("ShowErrors", "Errors"),
|
|
|
|
|
LOCTEXT("ShowErrors_Tooltip", "Filter the Output Log to show errors"),
|
|
|
|
|
FSlateIcon(),
|
|
|
|
|
FUIAction(FExecuteAction::CreateSP(this, &SOutputLog::MenuErrors_Execute),
|
|
|
|
|
FCanExecuteAction::CreateSP(this, &SOutputLog::Menu_CanExecute),
|
|
|
|
|
FIsActionChecked::CreateSP(this, &SOutputLog::MenuErrors_IsChecked)),
|
|
|
|
|
NAME_None,
|
|
|
|
|
EUserInterfaceActionType::ToggleButton
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
MenuBuilder.EndSection();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool SOutputLog::Menu_CanExecute() const
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool SOutputLog::MenuLogs_IsChecked() const
|
|
|
|
|
{
|
|
|
|
|
return Filter.bShowLogs;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool SOutputLog::MenuWarnings_IsChecked() const
|
|
|
|
|
{
|
|
|
|
|
return Filter.bShowWarnings;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool SOutputLog::MenuErrors_IsChecked() const
|
|
|
|
|
{
|
|
|
|
|
return Filter.bShowErrors;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SOutputLog::MenuLogs_Execute()
|
|
|
|
|
{
|
|
|
|
|
Filter.bShowLogs = !Filter.bShowLogs;
|
|
|
|
|
|
|
|
|
|
// Flag the messages count as dirty
|
|
|
|
|
MessagesTextMarshaller->MarkMessagesCacheAsDirty();
|
|
|
|
|
|
|
|
|
|
Refresh();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SOutputLog::MenuWarnings_Execute()
|
|
|
|
|
{
|
|
|
|
|
Filter.bShowWarnings = !Filter.bShowWarnings;
|
|
|
|
|
|
|
|
|
|
// Flag the messages count as dirty
|
|
|
|
|
MessagesTextMarshaller->MarkMessagesCacheAsDirty();
|
|
|
|
|
|
|
|
|
|
Refresh();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SOutputLog::MenuErrors_Execute()
|
|
|
|
|
{
|
|
|
|
|
Filter.bShowErrors = !Filter.bShowErrors;
|
|
|
|
|
|
|
|
|
|
// Flag the messages count as dirty
|
|
|
|
|
MessagesTextMarshaller->MarkMessagesCacheAsDirty();
|
|
|
|
|
|
|
|
|
|
Refresh();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool FLogFilter::IsMessageAllowed(const TSharedPtr<FLogMessage>& Message)
|
|
|
|
|
{
|
|
|
|
|
// Filter Verbosity
|
|
|
|
|
{
|
|
|
|
|
if (Message->Verbosity == ELogVerbosity::Error && !bShowErrors)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (Message->Verbosity == ELogVerbosity::Warning && !bShowWarnings)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (Message->Verbosity != ELogVerbosity::Error && Message->Verbosity != ELogVerbosity::Warning && !bShowLogs)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Filter search phrase
|
|
|
|
|
{
|
|
|
|
|
if (!TextFilterExpressionEvaluator.TestTextFilter(FLogFilter_TextFilterExpressionContext(*Message)))
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|