ImagingTools Core SDK
CQmlCodeMetaGeneratorComp.h
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ImtCore-Commercial
2#pragma once
3
4
5//Qt includes
6#include <QtCore/QFile>
7
8// ACF includes
9#include <QtCore/qstring.h>
10#include <istd/TDelPtr.h>
11#include <iproc/TSyncProcessorCompBase.h>
12#include <ifile/IFilePersistence.h>
13
14// ImtCore includes
15#include <imtsdl/ISdlProcessArgumentsParser.h>
16#include <imtsdl/ISdlTypeListProvider.h>
17#include <imtsdl/ISdlDocumentTypeListProvider.h>
18#include <imtsdl/CSdlTools.h>
19
20namespace imtsdlgenqml
21{
22
27 public iproc::CSyncProcessorCompBase,
28 private imtsdl::CSdlTools
29{
30
31public:
32 typedef iproc::CSyncProcessorCompBase BaseClass;
33
34 I_BEGIN_COMPONENT(CQmlCodeMetaGeneratorComp)
35 I_ASSIGN(m_qmlKeysFileSuffixAttrPtr, "QmlKeysFileSuffix", "QML Keys file's suffix for file name.", true, "TypeMetaInfo")
36 I_ASSIGN(m_collectionInfoFileMaskAttrPtr, "CollectionInfoFileNameMask", "Mask, used to name a collectio info QML file. \nSupported placeholders:\n\t$(Type); $(Subtype)", true, "$(Type)$(Subtype)CollectionInfo")
37 I_ASSIGN(m_qmlEnumValuesFileSuffixAttrPtr, "EnumValuesFileSuffix", "QML flie's suffix for the file name", true, "EnumValues")
38 I_ASSIGN(m_argumentParserCompPtr, "ArgumentParser", "Command line process argument parser", true, "ArgumentParser")
39 I_ASSIGN(m_sdlTypeListCompPtr, "SdlTypeListProvider", "SDL types used to create a code", true, "SdlTypeListProvider")
40 I_ASSIGN(m_sdlDocumentListCompPtr, "SdlDocumentListProvider", "SDL documents used to create a GraphQL wrap code", true, "SdlDocumentListProvider")
41 I_ASSIGN(m_qmldirFilePersistanceCompPtr, "QmldirFilePersistance", "Qmldir file persistance, used to update qmldir file with new modules", true, "QmldirFilePersistance")
42 I_ASSIGN(m_customSchemaParamsCompPtr, "CustomSchemaParams", "Custom schema parameters, that contains additional options", false, "CustomSchemaParams")
43 I_END_COMPONENT
44
45 //reimplemented(iproc::IProcessor)
46 virtual iproc::IProcessor::TaskState DoProcessing(
47 const iprm::IParamsSet* paramsPtr,
48 const istd::IPolymorphic* inputPtr,
49 istd::IChangeable* outputPtr,
50 ibase::IProgressManager* progressManagerPtr = NULL) override;
51
52private:
54 struct QmldirFileInfo
55 {
56 bool IsSingleton = false;
57 QString Type;
58 QString Version;
59 QString FileName;
60 };
61 static bool UpdateQmldirParams(iprm::IParamsSet& qmldirDataParams, const QList<QmldirFileInfo>& infoList);
62
63private:
64 bool ReOpenFiles();
65 bool CloseFiles();
66 bool BeginQmlFile(const imtsdl::CSdlType& sdlType);
67 bool EndQmlFile(const imtsdl::CSdlType& sdlType);
68 void AbortCurrentProcessing();
69 bool GenerateCollectionSchemaInfo();
70 bool GenerateCollectionSchemaInfoForType(const imtsdl::CSdlDocumentType& documentType, const QString& typeName, const QString& subtypeName);
71 [[nodiscard]] QString GetQmlKeysWrappedName(const QString& originalName) const;
72 [[nodiscard]] QString GetQmlCollectionInfoWrappedName(const QString& typeName, const QString& subtypeName) const;
73
74private:
75 I_ATTR(QString, m_qmlKeysFileSuffixAttrPtr);
76 I_ATTR(QString, m_collectionInfoFileMaskAttrPtr);
77 I_ATTR(QString, m_qmlEnumValuesFileSuffixAttrPtr);
78 I_REF(imtsdl::ISdlProcessArgumentsParser, m_argumentParserCompPtr);
79 I_REF(imtsdl::ISdlTypeListProvider, m_sdlTypeListCompPtr);
80 I_REF(imtsdl::ISdlDocumentTypeListProvider, m_sdlDocumentListCompPtr);
81 I_REF(ifile::IFilePersistence, m_qmldirFilePersistanceCompPtr);
82 I_REF(iprm::IParamsSet, m_customSchemaParamsCompPtr);
83
84 istd::TDelPtr<QFile> m_qmlKeysFilePtr;
85};
86
87
88} // namespace imtsdlgenqml
89