Explorar o código

Tab相关内容

maboren hai 3 meses
pai
achega
d1610f9728

+ 7 - 6
Ability/Plugins/EzAbility/Source/EzAbilityEditor/Private/AssetDefinition_EZAbilityAsset.cpp

@@ -9,12 +9,6 @@
 
 #define LOCTEXT_NAMESPACE "AssetDefinition_AbilityAsset"
 
-// UThumbnailInfo* UAssetDefinition_AbilityAsset::LoadThumbnailInfo(const FAssetData& InAssetData) const
-// {
-// 	return UE::Editor::FindOrCreateThumbnailInfo(InAssetData.GetAsset(), USceneThumbnailInfo::StaticClass());
-// }
-
-
 FText UAssetDefinition_EZAbilityAsset::GetAssetDisplayName() const
 {
 	/* 在没有缩略图的情况下写在图标上的 */
@@ -61,3 +55,10 @@ EAssetCommandResult UAssetDefinition_EZAbilityAsset::OpenAssets(const FAssetOpen
 }
 
 #undef LOCTEXT_NAMESPACE
+
+
+
+// UThumbnailInfo* UAssetDefinition_AbilityAsset::LoadThumbnailInfo(const FAssetData& InAssetData) const
+// {
+// 	return UE::Editor::FindOrCreateThumbnailInfo(InAssetData.GetAsset(), USceneThumbnailInfo::StaticClass());
+// }

+ 73 - 0
Ability/Plugins/EzAbility/Source/EzAbilityEditor/Private/EzAbilityEditorApplicationMode.cpp

@@ -0,0 +1,73 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#include "EzAbilityEditorApplicationMode.h"
+#include "EzAbilityGraphEditor.h"
+#include "SBlueprintEditorToolbar.h"
+#include "BlueprintEditorTabs.h"
+#include "SBlueprintEditorToolbar.h"
+#include "EzAbilityViewModule.h"
+#include "Modules/ModuleManager.h"
+#include "../Public/EzAbilityEditor.h"
+
+//#include "ModuleManager.h"
+
+#define LOCTEXT_NAMESPACE "EzAbilityEditorApplicationModeh"
+
+
+//FEzAbilityEditorApplicationMode::FEzAbilityEditorApplicationMode(TSharedPtr<class FEzAbilityEditor> InEzAbilityEditor)
+//: FBlueprintEditorApplicationMode(InEzAbilityEditor, FEzAbilityEditor::EzAbilityEditorMode, FEzAbilityEditor::GetLocalizedMode, false , false)
+FEzAbilityEditorApplicationMode::FEzAbilityEditorApplicationMode(const TSharedRef<class FWorkflowCentricApplication>& InHostingApp, TSharedPtr<class FEzAbilityEditor> InEzAbilityEditor)
+	: FBlueprintEditorApplicationMode(InEzAbilityEditor, FEzAbilityEditor::EzAbilityEditorMode, FEzAbilityEditor::GetLocalizedMode, false , false)
+{
+	EzAbilityEditor		= InEzAbilityEditor;
+	HostingAppPtr		= InHostingApp;
+
+	FEzAbilityViewModule& AbilityViewModule = FModuleManager::LoadModuleChecked<FEzAbilityViewModule>("AbilityView");
+
+	//EzAbilityEditorTabFactories.RegisterFactory(AbilityViewModule.CreateAdvancedPreviewSceneTabFactory(EzAbilityEditor, ));
+
+}
+
+
+void FEzAbilityEditorApplicationMode::RegisterTabFactories(TSharedPtr<class FTabManager> InTabManager)
+{
+	
+  	TSharedPtr<FEzAbilityEditor> EzAbilityEditorPtr = EzAbilityEditor.Pin();
+	EzAbilityEditorPtr->RegisterToolbarTab(InTabManager.ToSharedRef());
+	EzAbilityEditorPtr->PushTabFactories(EzAbilityEditorTabFactories);
+
+//  	EzAbilityEditorPtr->RegisterTabSpawners(InTabManager.ToSharedRef());
+// 	EzAbilityEditorPtr->PushTabFactories(EzAbilityEditorTabFactories);
+// 	TSharedPtr<FWorkflowCentricApplication> HostingApp = HostingAppPtr.Pin();
+// 	HostingApp->RegisterTabSpawners(InTabManager.ToSharedRef());
+// 	HostingApp->PushTabFactories(EzAbilityEditorTabFactories);
+
+// 	FBlueprintEditorApplicationMode::RegisterTabFactories(InTabManager);
+// 	check(DialogueDeductionGraphEditor.IsValid());
+// 	TSharedPtr<FDialogueDeductionGraphEditor> DialogueEditorPtr = DialogueDeductionGraphEditor.Pin();
+// 
+// 	DialogueEditorPtr->RegisterToolbarTab(InTabManager.ToSharedRef());
+// 
+// 	DialogueEditorPtr->DocumentManager->RegisterDocumentFactory(MakeShareable(new FDialogueGaraphEditorSummoner(DialogueEditorPtr)));
+// 
+// 	// Mode-specific setup
+// 	DialogueEditorPtr->PushTabFactories(DialogueEditorTabFactories);
+// 
+	//FApplicationMode::RegisterTabFactories(InTabManager);
+ 	//FBlueprintEditorApplicationMode::RegisterTabFactories(InTabManager);
+}
+
+void FEzAbilityEditorApplicationMode::AddTabFactory(FCreateWorkflowTabFactory FactoryCreator)
+{
+	if (FactoryCreator.IsBound())
+	{
+		EzAbilityEditorTabFactories.RegisterFactory(FactoryCreator.Execute(EzAbilityEditor.Pin()));
+	}
+}
+
+void FEzAbilityEditorApplicationMode::RemoveTabFactory(FName TabFactoryID)
+{
+	EzAbilityEditorTabFactories.UnregisterFactory(TabFactoryID);
+}
+
+#undef LOCTEXT_NAMESPACE

+ 35 - 0
Ability/Plugins/EzAbility/Source/EzAbilityEditor/Private/EzAbilityGraphEditor.cpp

@@ -27,6 +27,9 @@ const FName FEzAbilityEditor::EzAbilityEditorMode(TEXT("AbilityEditor"));
 // }
 
 
+const FName EzAbilityEditorTabs::DetailsTab(TEXT("DetailsTab"));
+const FName EzAbilityEditorTabs::ViewportTab(TEXT("ViewPort"));
+
 FEzAbilityEditor::FEzAbilityEditor()
 {
 }
@@ -39,6 +42,7 @@ void FEzAbilityEditor::InitEzAbilityEditor(const EToolkitMode::Type Mode, const
 {
 	EzAbilityDataAsset = InEzAbilityAsset;
 
+	/* 这里面需要注册FPersonaModule 之类的东西 */
 	if (!Toolbar.IsValid())
 	{
 		Toolbar = MakeShareable(new FBlueprintEditorToolbar(SharedThis(this)));
@@ -47,7 +51,9 @@ void FEzAbilityEditor::InitEzAbilityEditor(const EToolkitMode::Type Mode, const
 	GetToolkitCommands()->Append(FPlayWorldCommands::GlobalPlayWorldActions.ToSharedRef());
 
 	CreateDefaultCommands();
+	
 	//BindCommands();
+	
 	RegisterMenus();
 
 	//CreateInternalWidgets();
@@ -66,6 +72,8 @@ void FEzAbilityEditor::InitEzAbilityEditor(const EToolkitMode::Type Mode, const
 
 	CommonInitialization(EditedBlueprints, false);		/* 构建Tab 没有的情况下 CreateDefaultTabContents 下个智能指针会崩溃*/
 
+	AddApplicationMode(EzAbilityEditorMode,
+		MakeShareable(new FEzAbilityEditorApplicationMode(SharedThis(this), SharedThis(this))));
 	//AddApplicationMode(EzAbilityEditorMode, MakeShareable(new FDialogueDeEditorApplicationMode(SharedThis(this))));
 
 	RegenerateMenusAndToolbars();
@@ -75,6 +83,33 @@ void FEzAbilityEditor::InitEzAbilityEditor(const EToolkitMode::Type Mode, const
 	PostLayoutBlueprintEditorInitialization();
 }
 
+// void FEzAbilityEditor::RegisterTabSpawners(const TSharedRef<class FTabManager>& InTabManager)
+// {
+// 	WorkspaceMenuCategory = InTabManager->AddLocalWorkspaceMenuCategory(LOCTEXT("WorkspaceMenu_AbilityEditor", "Ability Editor"));
+// 
+// 	FAssetEditorToolkit::RegisterTabSpawners(InTabManager);
+// }
+// 
+// void FEzAbilityEditor::UnregisterTabSpawners(const TSharedRef<class FTabManager>& InTabManager)
+// {
+// 	FAssetEditorToolkit::UnregisterTabSpawners(InTabManager);
+// }
+
+FText FEzAbilityEditor::GetLocalizedMode(FName InMode)
+{
+	static TMap< FName, FText > LocModes;
+
+	if (LocModes.Num() == 0)
+	{
+		LocModes.Add(EzAbilityEditorMode, LOCTEXT("EzAbilityEditorMode", "Ability Editor"));
+	}
+
+	check(InMode != NAME_None);
+	const FText* OutDesc = LocModes.Find(InMode);
+	check(OutDesc);
+	return *OutDesc;
+}
+
 // void FDialogueDeductionGraphEditor::CreateInternalWidgets()
 // {
 // 	FPropertyEditorModule& PropertyEditorModule = FModuleManager::GetModuleChecked<FPropertyEditorModule>("PropertyEditor");

+ 67 - 0
Ability/Plugins/EzAbility/Source/EzAbilityEditor/Private/EzAbilityTabSpawners.cpp

@@ -0,0 +1,67 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+#include "EzAbilityTabSpawners.h"
+#include "Widgets/Input/SCheckBox.h"
+#include "Widgets/Layout/SBorder.h"
+#include "Widgets/Text/STextBlock.h"
+#include "Styling/AppStyle.h"
+#include "Styling/CoreStyle.h"
+
+#define LOCTEXT_NAMESPACE "AbilityModes"
+
+/////////////////////////////////////////////////////
+// FAdvancedPreviewSceneTabSummoner
+
+const FName FAbilityTabs::EzAdvancedPreviewSceneSettingsID("EzAdvancedPreviewTab");
+
+FEzAdvancedPreviewSceneTabSummoner::FEzAdvancedPreviewSceneTabSummoner(TSharedPtr<class FAssetEditorToolkit> InHostingApp, const TSharedRef<IPersonaPreviewScene>& InPreviewScene)
+	: FWorkflowTabFactory(FAbilityTabs::EzAdvancedPreviewSceneSettingsID, InHostingApp)
+	, PreviewScene(InPreviewScene)
+{
+	TabLabel = LOCTEXT("PreviewSceneSettingsTab", "Preview Scene Settings");
+	TabIcon = FSlateIcon(FAppStyle::GetAppStyleSetName(), "LevelEditor.Tabs.Details");	
+	bIsSingleton = true;
+	
+	ViewMenuDescription = LOCTEXT("AdvancedPreviewScene", "Preview Scene Settings");
+	ViewMenuTooltip = LOCTEXT("AdvancedPreviewScene_ToolTip", "Shows the advanced preview scene settings");
+}
+
+// TSharedRef<class IDetailCustomization> FEzAdvancedPreviewSceneTabSummoner::CustomizePreviewSceneDescription()
+// {
+// 	TSharedRef<IPersonaPreviewScene> PreviewSceneRef = PreviewScene.Pin().ToSharedRef();
+// 	FString SkeletonName;
+// 	TSharedPtr<IEditableSkeleton> EditableSkeleton = PreviewSceneRef->GetPersonaToolkit()->GetEditableSkeleton();
+// 	if(EditableSkeleton.IsValid())
+// 	{
+// 		SkeletonName = FAssetData(&EditableSkeleton->GetSkeleton()).GetExportTextName();
+// 	}
+// 	return MakeShareable(new FPreviewSceneDescriptionCustomization(SkeletonName, PreviewSceneRef->GetPersonaToolkit()));
+// }
+
+// TSharedRef<class IPropertyTypeCustomization> FEzAdvancedPreviewSceneTabSummoner::CustomizePreviewMeshCollectionEntry()
+// {
+// 	return MakeShareable(new FPreviewMeshCollectionEntryCustomization(PreviewScene.Pin().ToSharedRef()));
+// }
+
+// TSharedRef<SWidget> FEzAdvancedPreviewSceneTabSummoner::CreateTabBody(const FWorkflowTabSpawnInfo& Info) const
+// {
+// 	return SNew();
+// // 	TSharedRef<FAnimationEditorPreviewScene> PreviewSceneRef = StaticCastSharedRef<FAnimationEditorPreviewScene>(PreviewScene.Pin().ToSharedRef());
+// // 
+// // 	TArray<FAdvancedPreviewSceneModule::FDetailCustomizationInfo> DetailsCustomizations;
+// // 	TArray<FAdvancedPreviewSceneModule::FPropertyTypeCustomizationInfo> PropertyTypeCustomizations;
+// // 
+// // 	DetailsCustomizations.Add({ UPersonaPreviewSceneDescription::StaticClass(), FOnGetDetailCustomizationInstance::CreateSP(const_cast<FAdvancedPreviewSceneTabSummoner*>(this), &FAdvancedPreviewSceneTabSummoner::CustomizePreviewSceneDescription) });
+// // 	PropertyTypeCustomizations.Add({ FPreviewMeshCollectionEntry::StaticStruct()->GetFName(), FOnGetPropertyTypeCustomizationInstance::CreateSP(const_cast<FAdvancedPreviewSceneTabSummoner*>(this), &FAdvancedPreviewSceneTabSummoner::CustomizePreviewMeshCollectionEntry) });
+// // 
+// // 	FAdvancedPreviewSceneModule& AdvancedPreviewSceneModule = FModuleManager::LoadModuleChecked<FAdvancedPreviewSceneModule>("AdvancedPreviewScene");
+// // 	return AdvancedPreviewSceneModule.CreateAdvancedPreviewSceneSettingsWidget(PreviewSceneRef, PreviewSceneRef->GetPreviewSceneDescription(), DetailsCustomizations, PropertyTypeCustomizations);
+// }
+
+FText FEzAdvancedPreviewSceneTabSummoner::GetTabToolTipText(const FWorkflowTabSpawnInfo& Info) const
+{
+	return LOCTEXT("AdvancedPreviewSettingsToolTip", "The Advanced Preview Settings tab will let you alter the preview scene's settings.");
+}
+
+#undef LOCTEXT_NAMESPACE
+

+ 19 - 0
Ability/Plugins/EzAbility/Source/EzAbilityEditor/Private/EzAbilityViewModule.cpp

@@ -0,0 +1,19 @@
+#include "EzAbilityViewModule.h"
+#include "EzAbilityTabSpawners.h"
+
+#define LOCTEXT_NAMESPACE "EzAbilityViewModule"
+
+void FEzAbilityViewModule::StartupModule()
+{
+	
+}
+
+void FEzAbilityViewModule::ShutdownModule()
+{
+	
+}
+
+TSharedRef<class FWorkflowTabFactory> FEzAbilityViewModule::CreateAdvancedPreviewSceneTabFactory(const TSharedRef<class FWorkflowCentricApplication>& InHostingApp, const TSharedRef<IPersonaPreviewScene>& InPreviewScene) const
+{
+	return MakeShareable(new FEzAdvancedPreviewSceneTabSummoner(InHostingApp, InPreviewScene));
+}

+ 30 - 0
Ability/Plugins/EzAbility/Source/EzAbilityEditor/Public/EzAbilityEditorApplicationMode.h

@@ -0,0 +1,30 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "WorkflowOrientedApp/WorkflowTabManager.h"
+#include "WorkflowOrientedApp/ApplicationMode.h"
+#include "BlueprintEditorModes.h"
+
+/**
+ * 
+ */
+class  FEzAbilityEditorApplicationMode : public FBlueprintEditorApplicationMode
+{
+public:
+	//FEzAbilityEditorApplicationMode(TSharedPtr<class FEzAbilityEditor> InEzAbilityEditor);
+	FEzAbilityEditorApplicationMode(const TSharedRef<class FWorkflowCentricApplication>& InHostingApp, TSharedPtr<class FEzAbilityEditor> InEzAbilityEditor);
+
+	virtual void RegisterTabFactories(TSharedPtr<class FTabManager> InTabManager) override;
+
+protected:
+
+	virtual void AddTabFactory(FCreateWorkflowTabFactory FactoryCreator) override;
+	virtual void RemoveTabFactory(FName TabFactoryID) override;
+protected:
+	TWeakPtr<class FEzAbilityEditor> EzAbilityEditor;
+	TWeakPtr<class FWorkflowCentricApplication>	HostingAppPtr;
+	// Set of spawnable tabs in behavior tree editing mode
+	FWorkflowAllowedTabSet EzAbilityEditorTabFactories;
+};

+ 23 - 3
Ability/Plugins/EzAbility/Source/EzAbilityEditor/Public/EzAbilityGraphEditor.h

@@ -6,12 +6,21 @@
 #include "BlueprintEditor.h"
 //#include "SDialogueEditorViewport.h"
 #include "Widgets/Input/SButton.h"
+#include "IPersonaToolkit.h"
 /**
  * 
  */
  class UEzAbility;
  class UEZAbilityBlueprint;
 
+
+ namespace EzAbilityEditorTabs
+ {
+	// Tab identifiers
+	extern const FName DetailsTab;
+	extern const FName ViewportTab;
+ }
+
 class  FEzAbilityEditor : public FBlueprintEditor
 {
 public:
@@ -20,18 +29,29 @@ public:
 
 	void InitEzAbilityEditor(const EToolkitMode::Type Mode, const TSharedPtr< class IToolkitHost >& InitToolkitHost,  UEZAbilityBlueprint* InEzAbilityAsset);
 
-private:
+// 	/** IToolkit interface */
+// 	virtual void RegisterTabSpawners(const TSharedRef<class FTabManager>& TabManager) override;
+// 	virtual void UnregisterTabSpawners(const TSharedRef<class FTabManager>& TabManager) override;
+
+	static FText GetLocalizedMode(FName InMode);
+
+	TSharedRef<IPersonaToolkit> GetPersonaToolkit() const { return PersonaToolkit.ToSharedRef(); }
+
+public:
 
 	TObjectPtr<UEZAbilityBlueprint>		EzAbilityDataAsset;
 
 	static const FName					EzAbilityEditorMode;
+
+	/** Persona toolkit used to support skeletal mesh preview */
+	TSharedPtr<IPersonaToolkit>			PersonaToolkit;
+
+
 // 	/* ͼ±í */
 // 	void RestoreEzAbilityGraph();
 // 
 // 	//virtual void RegisterTabSpawners(const TSharedRef<class FTabManager>& InTabManager) override;
 // private:
-// 	/**The Dialogue asset being edited*/
-// 	UMBRData* TestDataAsset;
 // 
 // 	/** Creates all internal widgets for the tabs to point at */
 // 	void CreateInternalWidgets();

+ 59 - 0
Ability/Plugins/EzAbility/Source/EzAbilityEditor/Public/EzAbilityTabSpawners.h

@@ -0,0 +1,59 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "Input/Reply.h"
+#include "Layout/Visibility.h"
+#include "Widgets/SWidget.h"
+#include "Widgets/DeclarativeSyntaxSupport.h"
+#include "IPersonaViewport.h"
+#include "Toolkits/AssetEditorToolkit.h"
+#include "WorkflowOrientedApp/WorkflowTabFactory.h"
+#include "WorkflowOrientedApp/WorkflowTabManager.h"
+#include "BlueprintEditor.h"
+#include "WorkflowOrientedApp/ApplicationMode.h"
+#include "IDocumentation.h"
+#include "PersonaModule.h"
+#include "IPersonaPreviewScene.h"
+#include "AnimationEditorViewportClient.h"
+#include "SSingleObjectDetailsPanel.h"
+#include "PersonaTabs.h"
+
+#define LOCTEXT_NAMESPACE "AbilityMode"
+
+class IEditableSkeleton;
+class IPersonaToolkit;
+class ISkeletonTree;
+class SPersonaDetails;
+class SToolTip;
+
+struct FAbilityTabs
+{
+	 static const FName EzAdvancedPreviewSceneSettingsID;
+};
+
+
+/////////////////////////////////////////////////////
+// FAdvancedPreviewSceneTabSummoner
+
+struct FEzAdvancedPreviewSceneTabSummoner : public FWorkflowTabFactory
+{
+public:
+ 	FEzAdvancedPreviewSceneTabSummoner(TSharedPtr<class FAssetEditorToolkit> InHostingApp, const TSharedRef<IPersonaPreviewScene>& InPreviewScene); 
+	//virtual TSharedRef<SWidget> CreateTabBody(const FWorkflowTabSpawnInfo& Info) const override;
+	virtual FText GetTabToolTipText(const FWorkflowTabSpawnInfo& Info) const override;
+
+private:
+	/** Customize the details of the scene setup object */
+	TSharedRef<class IDetailCustomization> CustomizePreviewSceneDescription();
+
+	/** Customize a preview mesh collection entry */
+	TSharedRef<class IPropertyTypeCustomization> CustomizePreviewMeshCollectionEntry();
+
+private:
+	TWeakPtr<class IPersonaPreviewScene> PreviewScene;
+};
+
+
+#undef LOCTEXT_NAMESPACE

+ 64 - 0
Ability/Plugins/EzAbility/Source/EzAbilityEditor/Public/EzAbilityViewModule.h

@@ -0,0 +1,64 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "Widgets/SWidget.h"
+#include "Modules/ModuleInterface.h"
+#include "Toolkits/AssetEditorToolkit.h"
+#include "Animation/AnimSequence.h"
+#include "Editor.h"
+#include "PersonaDelegates.h"
+#include "Factories/FbxImportUI.h"
+#include "SPersonaToolBox.h"
+
+class FBlueprintEditor;
+class IDetailsView;
+class IEditableSkeleton;
+class IPersonaPreviewScene;
+class IPersonaToolkit;
+class UAnimBlueprint;
+class USkeletalMeshComponent;
+class UPhysicsAsset;
+class IPinnedCommandList;
+class FWorkflowAllowedTabSet;
+class IAssetFamily;
+class FWorkflowTabFactory;
+class UBlendSpace;
+class IAnimSequenceCurveEditor;
+class IAnimationEditor;
+class IDetailLayoutBuilder;
+class FPreviewSceneDescriptionCustomization;
+struct FAnimAssetFindReplaceConfig;
+
+class FEzAbilityViewModule : public IModuleInterface,
+	public IHasMenuExtensibility
+{
+
+
+private:
+	TSharedPtr<FExtensibilityManager> MenuExtensibilityManager;
+	TSharedPtr<FExtensibilityManager> ToolBarExtensibilityManager;
+
+public:
+	/**
+	 * Called right after the module's DLL has been loaded and the module object has been created
+	 */
+	virtual void StartupModule();
+
+	/**
+	 * Called before the module is unloaded, right before the module object is destroyed.
+	 */
+	virtual void ShutdownModule();
+
+	/** Create a tab factory used to configure preview scene settings */
+	virtual TSharedRef<FWorkflowTabFactory> CreateAdvancedPreviewSceneTabFactory(
+											const TSharedRef<class FWorkflowCentricApplication>& InHostingApp,
+											const TSharedRef<IPersonaPreviewScene>& InPreviewScene
+											) const;
+
+	/** Gets the extensibility managers for outside entities to extend persona editor's menus and toolbars */
+	virtual TSharedPtr<FExtensibilityManager> GetMenuExtensibilityManager() { return MenuExtensibilityManager; }
+	virtual TSharedPtr<FExtensibilityManager> GetToolBarExtensibilityManager() { return ToolBarExtensibilityManager; }
+};
+