Files
UnrealEngineUWP/Engine/Source/Editor/GameProjectGeneration/Private/GameProjectGenerationModule.cpp
Andrew Rodham 1a1cc8ee53 Reworked the new project dialog
* Categorized templates into Blueprint/C++ templates and organized them into tabs
 * New categories can be specified in the templatedefs.ini file of a template project using a Category tag:
         Category=NewCategory
 * New category types can be registered with a proper description and icon in code through FGameProjectGenerationModule::RegisterTemplateCategory.
 * Added preview images to templates
 * Generally tidied the UI

This addresses TTP#321302 - EDITOR: Project Browser: Reduce Thumbnail size of Templates
Reviewed by Matt.Kuhlenschmidt

[CL 2260660 by Andrew Rodham in Main branch]
2014-08-18 06:48:04 -04:00

135 lines
4.4 KiB
C++

// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.
#include "GameProjectGenerationPrivatePCH.h"
#include "ModuleManager.h"
#include "GameProjectGenerationModule.h"
#include "TemplateCategory.h"
#include "SourceCodeNavigation.h"
IMPLEMENT_MODULE( FGameProjectGenerationModule, GameProjectGeneration );
DEFINE_LOG_CATEGORY(LogGameProjectGeneration);
#define LOCTEXT_NAMESPACE "GameProjectGeneration"
FName FTemplateCategory::BlueprintCategoryName = "Blueprint";
FName FTemplateCategory::CodeCategoryName = "C++";
void FGameProjectGenerationModule::StartupModule()
{
RegisterTemplateCategory(
FTemplateCategory::BlueprintCategoryName,
LOCTEXT("BlueprintCategory_Name", "Blueprint"),
LOCTEXT("BlueprintCategory_Description", "Blueprint templates require no programming knowledge.\nAll game mechanics can be implemented using Blueprint visual scripting.\nEach template includes a basic set of blueprints to use as a starting point for your game."),
FEditorStyle::GetBrush("GameProjectDialog.BlueprintImage"));
RegisterTemplateCategory(
FTemplateCategory::CodeCategoryName,
LOCTEXT("CodeCategory_Name", "C++"),
FText::Format(
LOCTEXT("CodeCategory_Description", "C++ templates offer a good example of how to work with some of the core concepts of the Engine from code.\nYou still have the option of adding your own blueprints to the project at a later date if you want.\nChoosing this template type requires you to have {0} installed."),
FSourceCodeNavigation::GetSuggestedSourceCodeIDE()
),
FEditorStyle::GetBrush("GameProjectDialog.CodeImage"));
}
void FGameProjectGenerationModule::ShutdownModule()
{
}
TSharedRef<class SWidget> FGameProjectGenerationModule::CreateGameProjectDialog(bool bAllowProjectOpening, bool bAllowProjectCreate)
{
return SNew(SGameProjectDialog)
.AllowProjectOpening(bAllowProjectOpening)
.AllowProjectCreate(bAllowProjectCreate);
}
TSharedRef<class SWidget> FGameProjectGenerationModule::CreateNewClassDialog(class UClass* InClass)
{
return SNew(SNewClassDialog).Class(InClass);
}
void FGameProjectGenerationModule::OpenAddCodeToProjectDialog()
{
GameProjectUtils::OpenAddCodeToProjectDialog();
AddCodeToProjectDialogOpenedEvent.Broadcast();
}
void FGameProjectGenerationModule::TryMakeProjectFileWriteable(const FString& ProjectFile)
{
GameProjectUtils::TryMakeProjectFileWriteable(ProjectFile);
}
void FGameProjectGenerationModule::CheckForOutOfDateGameProjectFile()
{
GameProjectUtils::CheckForOutOfDateGameProjectFile();
}
bool FGameProjectGenerationModule::UpdateGameProject(const FString& ProjectFile, const FString& EngineIdentifier, FText& OutFailReason)
{
return GameProjectUtils::UpdateGameProject(ProjectFile, EngineIdentifier, OutFailReason);
}
bool FGameProjectGenerationModule::UpdateCodeProject(FText& OutFailReason)
{
const bool bAllowNewSlowTask = true;
FScopedSlowTask SlowTaskMessage( LOCTEXT( "UpdatingCodeProject", "Updating code project..." ), bAllowNewSlowTask );
return GameProjectUtils::GenerateCodeProjectFiles(FPaths::GetProjectFilePath(), OutFailReason);
}
int32 FGameProjectGenerationModule::GetProjectCodeFileCount()
{
return GameProjectUtils::GetProjectCodeFileCount();
}
bool FGameProjectGenerationModule::UpdateCodeResourceFiles(TArray<FString>& OutCreatedFiles, FText& OutFailReason)
{
const FString GameModuleSourcePath = FPaths::GetPath(FPaths::GetProjectFilePath()) / TEXT("Source") / FApp::GetGameName();
return GameProjectUtils::GenerateGameResourceFiles(GameModuleSourcePath, FApp::GetGameName(), OutCreatedFiles, OutFailReason);
}
void FGameProjectGenerationModule::CheckAndWarnProjectFilenameValid()
{
GameProjectUtils::CheckAndWarnProjectFilenameValid();
}
void FGameProjectGenerationModule::UpdateSupportedTargetPlatforms(const FName& InPlatformName, const bool bIsSupported)
{
GameProjectUtils::UpdateSupportedTargetPlatforms(InPlatformName, bIsSupported);
}
void FGameProjectGenerationModule::ClearSupportedTargetPlatforms()
{
GameProjectUtils::ClearSupportedTargetPlatforms();
}
bool FGameProjectGenerationModule::RegisterTemplateCategory(FName Type, FText Name, FText Description, const FSlateBrush* Thumbnail)
{
if (TemplateCategories.Contains(Type))
{
return false;
}
FTemplateCategory Category = { Name, Description, Thumbnail, Type };
TemplateCategories.Add(Type, MakeShareable(new FTemplateCategory(Category)));
return true;
}
void FGameProjectGenerationModule::UnRegisterTemplateCategory(FName Type)
{
TemplateCategories.Remove(Type);
}
#undef LOCTEXT_NAMESPACE