// Copyright Epic Games, Inc. All Rights Reserved. #include "CoreMinimal.h" #include "Modules/ModuleManager.h" #include "Widgets/SWidget.h" #include "Application/SlateWindowHelper.h" #include "Toolkits/AssetEditorToolkit.h" #include "ISkeletonEditor.h" #include "ISkeletonTree.h" #include "ISkeletonEditorModule.h" #include "SkeletonEditor.h" #include "IEditableSkeleton.h" #include "EditableSkeleton.h" #include "SkeletonTreeManager.h" #include "SkeletonTreeSummoner.h" #include "BoneProxy.h" #include "BoneProxyDetailsCustomization.h" #include "PropertyEditorModule.h" class FSkeletonEditorModule : public ISkeletonEditorModule { public: /** Constructor, set up console commands and variables **/ FSkeletonEditorModule() { } /** Called right after the module DLL has been loaded and the module object has been created */ virtual void StartupModule() override { MenuExtensibilityManager = MakeShareable(new FExtensibilityManager); ToolBarExtensibilityManager = MakeShareable(new FExtensibilityManager); FPropertyEditorModule& PropertyModule = FModuleManager::LoadModuleChecked("PropertyEditor"); PropertyModule.RegisterCustomClassLayout(UBoneProxy::StaticClass()->GetFName(), FOnGetDetailCustomizationInstance::CreateStatic(&FBoneProxyDetailsCustomization::MakeInstance)); } /** Called before the module is unloaded, right before the module object is destroyed. */ virtual void ShutdownModule() override { MenuExtensibilityManager.Reset(); ToolBarExtensibilityManager.Reset(); if (FModuleManager::Get().IsModuleLoaded(TEXT("PropertyEditor"))) { FPropertyEditorModule& PropertyModule = FModuleManager::LoadModuleChecked("PropertyEditor"); if (UObjectInitialized()) { PropertyModule.UnregisterCustomClassLayout(UBoneProxy::StaticClass()->GetFName()); } } } virtual TSharedRef CreateSkeletonEditor(const EToolkitMode::Type Mode, const TSharedPtr& InitToolkitHost, USkeleton* InSkeleton) override { TSharedRef SkeletonEditor(new FSkeletonEditor()); SkeletonEditor->InitSkeletonEditor(Mode, InitToolkitHost, InSkeleton); return SkeletonEditor; } virtual TSharedRef CreateSkeletonTree(USkeleton* InSkeleton, const FSkeletonTreeArgs& InSkeletonTreeArgs) override { return FSkeletonTreeManager::Get().CreateSkeletonTree(InSkeleton, InSkeletonTreeArgs); } virtual TSharedRef CreateSkeletonTree(const TSharedRef& InEditableSkeleton, const FSkeletonTreeArgs& InSkeletonTreeArgs) override { return FSkeletonTreeManager::Get().CreateSkeletonTree(InEditableSkeleton, InSkeletonTreeArgs); } virtual TSharedRef CreateSkeletonTreeTabFactory(const TSharedRef& InHostingApp, const TSharedRef& InSkeletonTree) override { return MakeShareable(new FSkeletonTreeSummoner(InHostingApp, InSkeletonTree)); } virtual TSharedRef CreateEditableSkeleton(USkeleton* InSkeleton) override { return FSkeletonTreeManager::Get().CreateEditableSkeleton(InSkeleton); } virtual TSharedRef CreateBlendProfilePicker(USkeleton* InSkeleton, const FBlendProfilePickerArgs& InArgs) override { TSharedRef EditableSkeleton = FSkeletonTreeManager::Get().CreateEditableSkeleton(InSkeleton); return EditableSkeleton->CreateBlendProfilePicker(InArgs); } virtual TArray& GetAllSkeletonEditorToolbarExtenders() override { return SkeletonEditorToolbarExtenders; } /** Gets the extensibility managers for outside entities to extend this editor's menus and toolbars */ virtual TSharedPtr GetMenuExtensibilityManager() override { return MenuExtensibilityManager; } virtual TSharedPtr GetToolBarExtensibilityManager() override { return ToolBarExtensibilityManager; } private: /** Extensibility managers */ TSharedPtr MenuExtensibilityManager; TSharedPtr ToolBarExtensibilityManager; TArray SkeletonEditorToolbarExtenders; }; IMPLEMENT_MODULE(FSkeletonEditorModule, SkeletonEditor);