Plasma Engine  2.0
Loading...
Searching...
No Matches
AssetDocumentGenerator.h
1#pragma once
2
3#include <EditorFramework/EditorFrameworkDLL.h>
4#include <Foundation/Reflection/Reflection.h>
5#include <Foundation/Types/Status.h>
6
7class plDocument;
8
9enum class plAssetDocGeneratorPriority
10{
11 Undecided,
12 LowPriority,
13 DefaultPriority,
14 HighPriority,
15 ENUM_COUNT
16};
17
22class PL_EDITORFRAMEWORK_DLL plAssetDocumentGenerator : public plReflectedClass
23{
24 PL_ADD_DYNAMIC_REFLECTION(plAssetDocumentGenerator, plReflectedClass);
25
26public:
29
35 {
36 plAssetDocumentGenerator* m_pGenerator = nullptr;
37 plAssetDocGeneratorPriority m_Priority = plAssetDocGeneratorPriority::Undecided;
38 plString m_sName;
39 plString m_sIcon;
40 };
41
44 static void GetSupportsFileTypes(plSet<plString>& out_extensions);
45
49 static void ImportAssets();
50
52 static void ImportAssets(const plDynamicArray<plString>& filesToImport);
53
55 plStatus Import(plStringView sInputFileAbs, plStringView sMode, bool bOpenDocument);
56
60 virtual void GetImportModes(plStringView sAbsInputFile, plDynamicArray<ImportMode>& out_modes) const = 0;
61
64
66 virtual plStringView GetGeneratorGroup() const = 0;
67
69 virtual plStatus Generate(plStringView sInputFileAbs, plStringView sMode, plDynamicArray<plDocument*>& out_generatedDocuments) = 0;
70
72 bool SupportsFileType(plStringView sFile) const;
73
75 static void CreateGenerators(plHybridArray<plAssetDocumentGenerator*, 16>& out_generators);
76
78 static void DestroyGenerators(const plHybridArray<plAssetDocumentGenerator*, 16>& generators);
79
80protected:
81 void AddSupportedFileType(plStringView sExtension);
82
83private:
84 void BuildFileDialogFilterString(plStringBuilder& out_sFilter) const;
85 void AppendFileFilterStrings(plStringBuilder& out_sFilter, bool& ref_bSemicolon) const;
86
87 friend class plQtAssetImportDlg;
88
89 struct ImportGroupOptions
90 {
91 plString m_sGroup;
92 plString m_sInputFileRelative;
93 plString m_sInputFileAbsolute;
94 plInt32 m_iSelectedOption = -1;
95
97 };
98
99 static void SortAndSelectBestImportOption(plDynamicArray<plAssetDocumentGenerator::ImportGroupOptions>& allImports);
100 static void CreateImportOptionList(const plDynamicArray<plString>& filesToImport, plDynamicArray<plAssetDocumentGenerator::ImportGroupOptions>& allImports, const plHybridArray<plAssetDocumentGenerator*, 16>& generators);
101
102 plHybridArray<plString, 16> m_SupportedFileTypes;
103};
Provides functionality for importing files as asset documents.
Definition AssetDocumentGenerator.h:23
virtual void GetImportModes(plStringView sAbsInputFile, plDynamicArray< ImportMode > &out_modes) const =0
Used to fill out which import modes may be available for the given asset.
virtual plStatus Generate(plStringView sInputFileAbs, plStringView sMode, plDynamicArray< plDocument * > &out_generatedDocuments)=0
Tells the generator to create a new asset document with the chosen mode.
virtual plStringView GetDocumentExtension() const =0
Returns the target asset document file extension.
virtual plStringView GetGeneratorGroup() const =0
Allows to merge the import modes of multiple generators in the UI in one group.
Definition Document.h:57
Definition DynamicArray.h:81
A hybrid array uses in-place storage to handle the first few elements without any allocation....
Definition HybridArray.h:12
Definition AssetImportDlg.moc.h:9
All classes that should be dynamically reflectable, need to be derived from this base class.
Definition DynamicRTTI.h:86
Definition Set.h:238
plStringBuilder is a class that is meant for creating and modifying strings.
Definition StringBuilder.h:35
plStringView represent a read-only sub-string of a larger string, as it can store a dedicated string ...
Definition StringView.h:34
Describes one option to import an asset.
Definition AssetDocumentGenerator.h:35
An plResult with an additional message for the reason of failure.
Definition Status.h:12