// Copyright Epic Games, Inc. All Rights Reserved. #include "CoreMinimal.h" #include "Modules/ModuleManager.h" #include "Engine/Texture.h" #include "Toolkits/AssetEditorToolkit.h" #include "Interfaces/ITextureEditorToolkit.h" #include "Interfaces/ITextureEditorModule.h" #include "PropertyEditorModule.h" #include "TextureEditorSettings.h" #include "TextureEditorToolkit.h" #include "ISettingsModule.h" #include "Customizations/TextureDetailsCustomization.h" #include "Customizations/CurveLinearColorAtlasDetailsCustomization.h" #define LOCTEXT_NAMESPACE "FTextureEditorModule" extern const FName TextureEditorAppIdentifier = FName(TEXT("TextureEditorApp")); /*----------------------------------------------------------------------------- FTextureEditorModule -----------------------------------------------------------------------------*/ class FTextureEditorModule : public ITextureEditorModule { public: // ITextureEditorModule interface virtual TSharedRef CreateTextureEditor( const EToolkitMode::Type Mode, const TSharedPtr< IToolkitHost >& InitToolkitHost, UTexture* Texture ) override { TSharedRef NewTextureEditor(new FTextureEditorToolkit()); Texture->bMarkAsEditorStreamingPool = true; NewTextureEditor->InitTextureEditor(Mode, InitToolkitHost, Texture); return NewTextureEditor; } virtual TSharedPtr GetMenuExtensibilityManager( ) override { return MenuExtensibilityManager; } virtual TSharedPtr GetToolBarExtensibilityManager( ) override { return ToolBarExtensibilityManager; } public: // IModuleInterface interface virtual void StartupModule( ) override { // register menu extensions MenuExtensibilityManager = MakeShareable(new FExtensibilityManager); ToolBarExtensibilityManager = MakeShareable(new FExtensibilityManager); // register settings ISettingsModule* SettingsModule = FModuleManager::GetModulePtr("Settings"); if (SettingsModule != nullptr) { SettingsModule->RegisterSettings("Editor", "ContentEditors", "TextureEditor", LOCTEXT("TextureEditorSettingsName", "Texture Editor"), LOCTEXT("TextureEditorSettingsDescription", "Configure the look and feel of the Texture Editor."), GetMutableDefault() ); } FPropertyEditorModule& PropertyModule = FModuleManager::GetModuleChecked("PropertyEditor"); PropertyModule.RegisterCustomClassLayout("Texture", FOnGetDetailCustomizationInstance::CreateStatic(&FTextureDetails::MakeInstance)); PropertyModule.RegisterCustomClassLayout("CurveLinearColorAtlas", FOnGetDetailCustomizationInstance::CreateStatic(&FCurveLinearColorAtlasDetails::MakeInstance)); } virtual void ShutdownModule( ) override { // unregister settings ISettingsModule* SettingsModule = FModuleManager::GetModulePtr("Settings"); if (SettingsModule != nullptr) { SettingsModule->UnregisterSettings("Editor", "ContentEditors", "TextureEditor"); } // unregister menu extensions MenuExtensibilityManager.Reset(); ToolBarExtensibilityManager.Reset(); FPropertyEditorModule& PropertyModule = FModuleManager::GetModuleChecked("PropertyEditor"); PropertyModule.UnregisterCustomClassLayout("Texture"); PropertyModule.UnregisterCustomClassLayout("CurveLinearColorAtlas"); } private: // Holds the menu extensibility manager. TSharedPtr MenuExtensibilityManager; // Holds the tool bar extensibility manager. TSharedPtr ToolBarExtensibilityManager; }; IMPLEMENT_MODULE(FTextureEditorModule, TextureEditor); #undef LOCTEXT_NAMESPACE