Skip to content

Commit cfb97f1

Browse files
committed
re-import support (from both actions and toolkit)
1 parent bb17414 commit cfb97f1

File tree

6 files changed

+121
-9
lines changed

6 files changed

+121
-9
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#include "TextAsset.h"
2+
#include "EditorFramework/AssetImportData.h"
3+
// #include "UObjectBaseUtility.h"
4+
5+
void UTextAsset::PostInitProperties()
6+
{
7+
#if WITH_EDITORONLY_DATA
8+
if (!HasAnyFlags(RF_ClassDefaultObject))
9+
{
10+
AssetImportData = NewObject<UAssetImportData>(this, TEXT("AssetImportData"));
11+
}
12+
#endif
13+
Super::PostInitProperties();
14+
}

Source/TextAsset/Public/TextAsset.h

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
#include "Internationalization/Text.h"
66
#include "UObject/Object.h"
7+
#include "EditorFramework/AssetImportData.h"
78
#include "UObject/ObjectMacros.h"
89

910
#include "TextAsset.generated.h"
@@ -21,7 +22,25 @@ class TEXTASSET_API UTextAsset
2122

2223
public:
2324

25+
26+
virtual void PostInitProperties() override;
27+
28+
#if WITH_EDITORONLY_DATA
29+
30+
virtual void GetAssetRegistryTags(TArray<FAssetRegistryTag>& OutTags) const override
31+
{
32+
if (AssetImportData)
33+
{
34+
OutTags.Add(FAssetRegistryTag(SourceFileTagName(), AssetImportData->GetSourceData().ToJson(), FAssetRegistryTag::TT_Hidden));
35+
}
36+
37+
Super::GetAssetRegistryTags(OutTags);
38+
}
39+
40+
UPROPERTY(VisibleAnywhere, Instanced, Category = ImportSettings)
41+
UAssetImportData* AssetImportData;
42+
#endif
2443
/** Holds the stored text. */
25-
UPROPERTY(BlueprintReadOnly, EditAnywhere, Category="TextAsset")
26-
FText Text;
44+
UPROPERTY(BlueprintReadOnly, EditAnywhere, Category="TextAsset")
45+
FText Text;
2746
};

Source/TextAsset/TextAsset.Build.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public TextAsset(ReadOnlyTargetRules Target) : base(Target)
1212
new string[] {
1313
"Core",
1414
"CoreUObject",
15+
"Engine"
1516
});
1617

1718
PrivateIncludePaths.AddRange(

Source/TextAssetEditor/Private/AssetTools/TextAssetActions.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
#include "TextAssetActions.h"
44

5+
6+
#include "EditorReimportHandler.h"
57
#include "Framework/MultiBox/MultiBoxBuilder.h"
68
#include "TextAsset.h"
79
#include "Styling/SlateStyle.h"
@@ -35,6 +37,23 @@ void FTextAssetActions::GetActions(const TArray<UObject*>& InObjects, FMenuBuild
3537

3638
auto TextAssets = GetTypedWeakObjectPtrs<UTextAsset>(InObjects);
3739

40+
MenuBuilder.AddMenuEntry(
41+
LOCTEXT("TextAsset_ReImportText", "Re-Import Text"),
42+
LOCTEXT("TextAsset_ReImportTextToolTip", "Re Import text from disk."),
43+
FSlateIcon(),
44+
FUIAction(
45+
FExecuteAction::CreateLambda([=]
46+
{
47+
for (auto &TextAsset : TextAssets) {
48+
FReimportManager::Instance()->Reimport(TextAsset.Get(), true);
49+
}
50+
}),
51+
FCanExecuteAction::CreateLambda([=]
52+
{
53+
return true;
54+
}
55+
)));
56+
3857
MenuBuilder.AddMenuEntry(
3958
LOCTEXT("TextAsset_ReverseText", "Reverse Text"),
4059
LOCTEXT("TextAsset_ReverseTextToolTip", "Reverse the text stored in the selected text asset(s)."),

Source/TextAssetEditor/Private/Factories/TextAssetFactory.cpp

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,65 @@ UObject* UTextAssetFactory::FactoryCreateFile(UClass* InClass, UObject* InParent
4848
{
4949
TextAsset = NewObject<UTextAsset>(InParent, InClass, InName, Flags);
5050
TextAsset->Text = FText::FromString(TextString);
51+
TextAsset->AssetImportData->AddFileName(Filename, 0);
5152
}
5253

5354
bOutOperationCanceled = false;
5455

5556
return TextAsset;
5657
}
58+
59+
60+
61+
bool UTextAssetFactory::CanReimport(UObject * Obj, TArray<FString>& OutFilenames)
62+
{
63+
UTextAsset* pTextAsset = Cast<UTextAsset>(Obj);
64+
65+
if (pTextAsset)
66+
{
67+
pTextAsset->AssetImportData->ExtractFilenames(OutFilenames);
68+
return true;
69+
}
70+
71+
return false;
72+
}
73+
74+
void UTextAssetFactory::SetReimportPaths(UObject * Obj, const TArray<FString>& NewReimportPaths)
75+
{
76+
UTextAsset* pTextAsset = Cast<UTextAsset>(Obj);
77+
78+
//TextAsset can only own one pertaining file.
79+
if (pTextAsset && ensure(NewReimportPaths.Num() == 1))
80+
{
81+
pTextAsset->AssetImportData->UpdateFilenameOnly(NewReimportPaths[0]);
82+
}
83+
}
84+
85+
EReimportResult::Type UTextAssetFactory::Reimport(UObject * Obj)
86+
{
87+
//Actually do reimport;
88+
if (!Obj || !Obj->IsA(UTextAsset::StaticClass()))
89+
{
90+
return EReimportResult::Failed;
91+
}
92+
93+
UTextAsset* pTextAsset = Cast<UTextAsset>(Obj);
94+
const FString ResolvedSourceFilePath = pTextAsset->AssetImportData->GetFirstFilename();
95+
96+
if (!ResolvedSourceFilePath.Len())
97+
{
98+
return EReimportResult::Failed;
99+
}
100+
101+
FString NewText;
102+
103+
if (FFileHelper::LoadFileToString(NewText, *ResolvedSourceFilePath))
104+
{
105+
pTextAsset->Text = FText::FromString(NewText);
106+
pTextAsset->Modify();
107+
return EReimportResult::Succeeded;
108+
}
109+
110+
return EReimportResult::Failed;
111+
}
112+

Source/TextAssetEditor/Private/Factories/TextAssetFactory.h

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#pragma once
44

5+
#include "EditorReimportHandler.h"
56
#include "Factories/Factory.h"
67
#include "UObject/ObjectMacros.h"
78

@@ -13,14 +14,16 @@
1314
*/
1415
UCLASS(hidecategories=Object)
1516
class UTextAssetFactory
16-
: public UFactory
17-
{
18-
GENERATED_UCLASS_BODY()
17+
: public UFactory, public FReimportHandler {
18+
GENERATED_UCLASS_BODY()
1919

20-
public:
20+
public:
2121

22-
//~ UFactory Interface
22+
//~ UFactory Interface
2323

24-
// virtual UObject* FactoryCreateBinary(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, UObject* Context, const TCHAR* Type, const uint8*& Buffer, const uint8* BufferEnd, FFeedbackContext* Warn) override;
25-
virtual UObject* FactoryCreateFile(UClass* InClass, UObject* InParent, FName InName, EObjectFlags Flags, const FString& Filename, const TCHAR* Parms, FFeedbackContext* Warn, bool& bOutOperationCanceled) override;
24+
// virtual UObject* FactoryCreateBinary(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, UObject* Context, const TCHAR* Type, const uint8*& Buffer, const uint8* BufferEnd, FFeedbackContext* Warn) override;
25+
virtual UObject* FactoryCreateFile(UClass* InClass, UObject* InParent, FName InName, EObjectFlags Flags, const FString& Filename, const TCHAR* Parms, FFeedbackContext* Warn, bool& bOutOperationCanceled) override;
26+
virtual bool CanReimport(UObject* Obj, TArray<FString>& OutFilenames) override;
27+
virtual void SetReimportPaths(UObject* Obj, const TArray<FString>& NewReimportPaths) override;
28+
virtual EReimportResult::Type Reimport(UObject* Obj) override;
2629
};

0 commit comments

Comments
 (0)