// 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 &InitToolkitHost, class UComboActionGraph *Graph); class UComboActionGraphEditorSettings *GetSettings() const; #pragma region ToolkitInterface public: // IToolkit interface virtual void RegisterTabSpawners(const TSharedRef &InTabManager) override; virtual void UnregisterTabSpawners(const TSharedRef &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 GetToolbarBuilder() { return ToolbarBuilder; } void RegisterToolbarTab(const TSharedRef &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 CreateViewportWidget(); void BindCommands(); void CreateEdGraph(); void CreateCommandList(); TSharedPtr 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 &NewSelection); void OnNodeDoubleClicked(UEdGraphNode *Node); void OnFinishedChangingProperties(const FPropertyChangedEvent &PropertyChangedEvent); //void OnPackageSaved(const FString &PackageFileName, UObject *Outer); #pragma endregion #pragma region Variables private: TSharedRef SpawnTab_Viewport(const FSpawnTabArgs &Args); TSharedRef SpawnTab_Details(const FSpawnTabArgs &Args); TSharedRef SpawnTab_Search(const FSpawnTabArgs &Args); class UComboActionGraphEditorSettings *ComboActionGraphEditorSettings; class UComboActionGraph *EditingGraph; //Toolbar //TSharedPtr ToolbarBuilder; /** Handle to the registered OnPackageSave delegate */ FDelegateHandle OnPackageSavedDelegateHandle; TSharedPtr ViewportWidget; TSharedPtr PropertyWidget; //TSharedPtr FindResultsView; /** The command list for this editor */ TSharedPtr GraphEditorCommands; TSharedPtr ValidationWindow; #pragma endregion };