// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "BlueprintEditor.h" #include "Delegates/Delegate.h" #include "EdGraph/EdGraph.h" #include "EdGraph/EdGraphSchema.h" #include "Engine/TimelineTemplate.h" #include "HAL/PlatformMath.h" #include "Internationalization/Internationalization.h" #include "Internationalization/Text.h" #include "Math/Vector2D.h" #include "Misc/Attribute.h" #include "Misc/Guid.h" #include "Templates/SharedPointer.h" #include "UObject/Object.h" #include "UObject/WeakObjectPtrTemplates.h" #include "WorkflowOrientedApp/WorkflowTabFactory.h" #include "WorkflowOrientedApp/WorkflowTabManager.h" #include "WorkflowOrientedApp/WorkflowUObjectDocuments.h" class SDockTab; class SGraphEditor; class SWidget; class UBlueprint; struct FSlateBrush; #define LOCTEXT_NAMESPACE "BlueprintEditor" ///////////////////////////////////////////////////// // FLocalKismetCallbacks struct FLocalKismetCallbacks { static FText GetObjectName(UObject* Object) { return (Object != NULL) ? FText::FromString( Object->GetName() ) : LOCTEXT("UnknownObjectName", "UNKNOWN"); } static FText GetGraphDisplayName(const UEdGraph* Graph) { if (Graph) { if (const UEdGraphSchema* Schema = Graph->GetSchema()) { FGraphDisplayInfo Info; Schema->GetGraphDisplayInformation(*Graph, /*out*/ Info); return Info.DisplayName; } else { // if we don't have a schema, we're dealing with a malformed (or incomplete graph)... // possibly in the midst of some transaction - here we return the object's outer path // so we can at least get some context as to which graph we're referring return FText::FromString(Graph->GetPathName()); } } return LOCTEXT("UnknownGraphName", "UNKNOWN"); } }; ///////////////////////////////////////////////////// // FDefaultsEditorSummoner struct FDefaultsEditorSummoner : public FWorkflowTabFactory { public: FDefaultsEditorSummoner(TSharedPtr InHostingApp); virtual TSharedRef CreateTabBody(const FWorkflowTabSpawnInfo& Info) const override; virtual FText GetTabToolTipText(const FWorkflowTabSpawnInfo& Info) const override { return LOCTEXT("DefaultsEditorTooltip", "The class defaults editor lets you set the default value for all variables in your Blueprint."); } private: TSharedRef CreateOptionalDataOnlyMessage() const; TSharedRef CreateOptionalEditableWarning() const; void OnChangeBlueprintToNotDataOnly(); TWeakObjectPtr EditingBlueprint; }; ///////////////////////////////////////////////////// // FGraphTabHistory struct FGraphTabHistory : public FGenericTabHistory { public: /** * @param InFactory The factory used to regenerate the content * @param InPayload The payload object used to regenerate the content */ FGraphTabHistory(TSharedPtr InFactory, TSharedPtr InPayload) : FGenericTabHistory(InFactory, InPayload) , SavedLocation(FVector2f::ZeroVector) , SavedZoomAmount(INDEX_NONE) { } virtual void EvokeHistory(TSharedPtr InTabInfo, bool bPrevTabMatches) override; virtual void SaveHistory() override; virtual void RestoreHistory() override; private: /** The graph editor represented by this history node. While this node is inactive, the graph editor is invalid */ TWeakPtr< class SGraphEditor > GraphEditor; /** Saved location the graph editor was at when this history node was last visited */ FDeprecateSlateVector2D SavedLocation; /** Saved zoom the graph editor was at when this history node was last visited */ float SavedZoomAmount; /** Saved bookmark ID the graph editor was at when this history node was last visited */ FGuid SavedBookmarkId; }; ///////////////////////////////////////////////////// // FGraphEditorSummoner struct FGraphEditorSummoner : public FDocumentTabFactoryForObjects { public: DECLARE_DELEGATE_RetVal_TwoParams(TSharedRef, FOnCreateGraphEditorWidget, TSharedRef, UEdGraph*); public: FGraphEditorSummoner(TSharedPtr InBlueprintEditorPtr, FOnCreateGraphEditorWidget CreateGraphEditorWidgetCallback); virtual void OnTabActivated(TSharedPtr Tab) const override; virtual void OnTabBackgrounded(TSharedPtr Tab) const override; virtual void OnTabRefreshed(TSharedPtr Tab) const override; virtual void SaveState(TSharedPtr Tab, TSharedPtr Payload) const override; protected: virtual TAttribute ConstructTabNameForObject(UEdGraph* DocumentID) const override { return TAttribute::Create(TAttribute::FGetter::CreateStatic(&FLocalKismetCallbacks::GetGraphDisplayName, (const UEdGraph*)DocumentID)); } virtual TSharedRef CreateTabBodyForObject(const FWorkflowTabSpawnInfo& Info, UEdGraph* DocumentID) const override; virtual const FSlateBrush* GetTabIconForObject(const FWorkflowTabSpawnInfo& Info, UEdGraph* DocumentID) const override; virtual TSharedRef CreateTabHistoryNode(TSharedPtr Payload) override; protected: TWeakPtr BlueprintEditorPtr; FOnCreateGraphEditorWidget OnCreateGraphEditorWidget; }; ///////////////////////////////////////////////////// // FTimelineEditorSummoner struct FTimelineEditorSummoner : public FDocumentTabFactoryForObjects { public: FTimelineEditorSummoner(TSharedPtr InBlueprintEditorPtr); protected: virtual TAttribute ConstructTabNameForObject(UTimelineTemplate* DocumentID) const override; virtual TSharedRef CreateTabBodyForObject(const FWorkflowTabSpawnInfo& Info, UTimelineTemplate* DocumentID) const override; virtual const FSlateBrush* GetTabIconForObject(const FWorkflowTabSpawnInfo& Info, UTimelineTemplate* DocumentID) const override; virtual void SaveState(TSharedPtr Tab, TSharedPtr Payload) const override; // virtual void OnTabClosed(TSharedRef Tab, TSharedPtr Payload) const override // { // BlueprintEditorPtr.Pin()->RequestSaveEditedObjectState(); // } virtual void OnTabRefreshed(TSharedPtr Tab) const override; virtual FText GetTabToolTipText(const FWorkflowTabSpawnInfo& Info) const override { return LOCTEXT("TimelineEditorTooltip", "The Timeline editor lets you add tracks and visually keyframe values over time, to be used inside a Blueprint graph."); } protected: TWeakPtr BlueprintEditorPtr; }; ///////////////////////////////////////////////////// // FConstructionScriptEditorSummoner struct FConstructionScriptEditorSummoner : public FWorkflowTabFactory { public: FConstructionScriptEditorSummoner(TSharedPtr InHostingApp); virtual TSharedRef CreateTabBody(const FWorkflowTabSpawnInfo& Info) const override; virtual FText GetTabToolTipText(const FWorkflowTabSpawnInfo& Info) const override { return LOCTEXT("ComponentsTabTooltip", "The Components tab is for easily adding, selecting and attaching Components within your Blueprint."); } }; ///////////////////////////////////////////////////// // FConstructionScriptEditorSummoner struct FSCSViewportSummoner : public FWorkflowTabFactory { public: FSCSViewportSummoner(TSharedPtr InHostingApp); virtual TSharedRef CreateTabBody(const FWorkflowTabSpawnInfo& Info) const override; virtual TSharedRef SpawnTab(const FWorkflowTabSpawnInfo& Info) const override; }; ////////////////////////////////////////////////////////////////////////// // FPaletteSummoner struct FPaletteSummoner : public FWorkflowTabFactory { public: FPaletteSummoner(TSharedPtr InHostingApp); virtual TSharedRef CreateTabBody(const FWorkflowTabSpawnInfo& Info) const override; virtual FText GetTabToolTipText(const FWorkflowTabSpawnInfo& Info) const override { return LOCTEXT("PaletteTooltip", "The Palette tab provides access to _all_ nodes that can be placed (functions, variables, events etc)."); } }; ////////////////////////////////////////////////////////////////////////// // FBookmarksSummoner struct FBookmarksSummoner : public FWorkflowTabFactory { public: FBookmarksSummoner(TSharedPtr InHostingApp); virtual TSharedRef CreateTabBody(const FWorkflowTabSpawnInfo& Info) const override; virtual FText GetTabToolTipText(const FWorkflowTabSpawnInfo& Info) const override { return LOCTEXT("BookmarksTooltip", "The Bookmarks tab allows you to create, edit and select bookmarks associated with this Blueprint."); } }; ///////////////////////////////////////////////////// // FMyBlueprintSummoner struct FMyBlueprintSummoner : public FWorkflowTabFactory { public: FMyBlueprintSummoner(TSharedPtr InHostingApp); virtual TSharedRef CreateTabBody(const FWorkflowTabSpawnInfo& Info) const override; virtual FText GetTabToolTipText(const FWorkflowTabSpawnInfo& Info) const override { return LOCTEXT("MyBlueprintTooltip", "The MyBlueprint tab shows you elements that belong to _this_ Blueprint (variables, graphs etc.)"); } }; ///////////////////////////////////////////////////// // FReplaceNodeReferencesSummoner struct FReplaceNodeReferencesSummoner : public FWorkflowTabFactory { public: FReplaceNodeReferencesSummoner(TSharedPtr InHostingApp); virtual TSharedRef CreateTabBody(const FWorkflowTabSpawnInfo& Info) const override; virtual FText GetTabToolTipText(const FWorkflowTabSpawnInfo& Info) const override { return LOCTEXT("ReplaceNodeReferencesTooltip", "Allows the user to replace node references in all Blueprint graphs with another node reference."); } }; ////////////////////////////////////////////////////////////////////////// // FFindResultsSummoner struct FFindResultsSummoner : public FWorkflowTabFactory { public: FFindResultsSummoner(TSharedPtr InHostingApp); virtual TSharedRef CreateTabBody(const FWorkflowTabSpawnInfo& Info) const override; virtual FText GetTabToolTipText(const FWorkflowTabSpawnInfo& Info) const override { return LOCTEXT("FindResultsTooltip", "The find results tab shows results of searching this Blueprint (or all Blueprints)."); } }; #undef LOCTEXT_NAMESPACE