ComboInput/Source/ComboInputEditor/Private/Ed/AssetEditor_ComboActionGraph.h

168 lines
4.5 KiB
C++

// Copyright Dominik Pavlicek 2023. All Rights Reserved.
#pragma once
//#include "Search/SComboActionSearch.h"
DECLARE_LOG_CATEGORY_EXTERN(LogAssetEditorComboActionGraph, Log, All);
class COMBOINPUTEDITOR_API FAssetEditor_ComboActionGraph : public FAssetEditorToolkit, public FNotifyHook, public FGCObject
{
public:
FAssetEditor_ComboActionGraph();
virtual ~FAssetEditor_ComboActionGraph() override;
void OnPackageSaved(const FString &String, UPackage *Package, FObjectPostSaveContext ObjectPostSaveContext);
void InitComboActionGraphAssetEditor(const EToolkitMode::Type Mode, const TSharedPtr<IToolkitHost> &InitToolkitHost, class UComboActionGraph *Graph);
class UComboActionGraphEditorSettings *GetSettings() const;
#pragma region ToolkitInterface
public:
// IToolkit interface
virtual void RegisterTabSpawners(const TSharedRef<FTabManager> &InTabManager) override;
virtual void UnregisterTabSpawners(const TSharedRef<FTabManager> &InTabManager) override;
virtual bool CloseWindow() override;
// End of IToolkit interface
#pragma endregion
#pragma region AssetEditorToolkit
virtual FName GetToolkitFName() const override;
virtual FText GetBaseToolkitName() const override;
virtual FText GetToolkitName() const override;
virtual FText GetToolkitToolTipText() const override;
virtual FLinearColor GetWorldCentricTabColorScale() const override;
virtual FString GetWorldCentricTabPrefix() const override;
virtual FString GetDocumentationLink() const override;
virtual void SaveAsset_Execute() override;
#pragma endregion
#pragma region Toolbar
void UpdateToolbar();
//TSharedPtr<FAssetEditorToolbarComboActionGraph> GetToolbarBuilder() { return ToolbarBuilder; }
void RegisterToolbarTab(const TSharedRef<class FTabManager> &InTabManager);
#pragma endregion
#pragma region SerializableObjectInterface
virtual void AddReferencedObjects(FReferenceCollector &Collector) override;
#pragma endregion
#pragma region FGCObject
virtual FString GetReferencerName() const override;
#pragma endregion
// Gets/Sets the dialogue being edited
class UComboActionGraph *GetEditingGraphSafe()
{
check(EditingGraph);
return EditingGraph;
}
void SetDialogueBeingEdited(class UComboActionGraph *NewDialogue);
virtual void JumpToNode(const class UEdGraphNode *JumpToMe, bool bRequestRename = false, bool bSelectNode = true)
{
if (this->ViewportWidget.IsValid())
{
this->ViewportWidget->JumpToNode(JumpToMe, bRequestRename, bSelectNode);
}
}
private:
void CreateInternalWidgets();
TSharedRef<SGraphEditor> CreateViewportWidget();
void BindCommands();
void CreateEdGraph();
void CreateCommandList();
TSharedPtr<SGraphEditor> GetCurrentGraphEditor() const;
FGraphPanelSelectionSet GetSelectedNodes() const;
void RebuildComboActionGraph();
void SummonSearchUI(FString NewSearch = FString(), bool bSelectFirstResult = false);
#pragma region GraphEditorCommands
void SelectAllNodes();
bool CanSelectAllNodes();
void DeleteSelectedNodes();
bool CanDeleteNodes();
void DeleteSelectedDuplicatableNodes();
void CutSelectedNodes();
bool CanCutNodes();
void CopySelectedNodes();
bool CanCopyNodes();
void PasteNodes();
void PasteNodesHere(const FVector2D &Location);
bool CanPasteNodes();
void DuplicateNodes();
bool CanDuplicateNodes();
void AutoArrange();
bool CanAutoArrange() const;
void ValidateGraph();
bool CanValidateGraph() const;
void OnRenameNode();
bool CanRenameNodes() const;
#pragma endregion
#pragma region GraphEditorEvents
void OnSelectedNodesChanged(const TSet<class UObject*> &NewSelection);
void OnNodeDoubleClicked(UEdGraphNode *Node);
void OnFinishedChangingProperties(const FPropertyChangedEvent &PropertyChangedEvent);
//void OnPackageSaved(const FString &PackageFileName, UObject *Outer);
#pragma endregion
#pragma region Variables
private:
TSharedRef<SDockTab> SpawnTab_Viewport(const FSpawnTabArgs &Args);
TSharedRef<SDockTab> SpawnTab_Details(const FSpawnTabArgs &Args);
TSharedRef<SDockTab> SpawnTab_Search(const FSpawnTabArgs &Args);
class UComboActionGraphEditorSettings *ComboActionGraphEditorSettings;
class UComboActionGraph *EditingGraph;
//Toolbar
//TSharedPtr<FAssetEditorToolbarComboActionGraph> ToolbarBuilder;
/** Handle to the registered OnPackageSave delegate */
FDelegateHandle OnPackageSavedDelegateHandle;
TSharedPtr<SGraphEditor> ViewportWidget;
TSharedPtr<class IDetailsView> PropertyWidget;
//TSharedPtr<SComboActionSearch> FindResultsView;
/** The command list for this editor */
TSharedPtr<FUICommandList> GraphEditorCommands;
TSharedPtr<SWindow> ValidationWindow;
#pragma endregion
};