ImagingTools Core SDK
CQmlEnumGeneratorComp.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 <istd/TDelPtr.h>
10#include <iproc/TSyncProcessorCompBase.h>
11#include <ifile/IFilePersistence.h>
12#include <iprm/IParamsManager.h>
13
14// ImtCore includes
15#include <imtsdl/ISdlProcessArgumentsParser.h>
16#include <imtsdl/ISdlDocumentTypeListProvider.h>
17#include <imtsdl/CSdlTools.h>
18
19namespace iprm
20{
21class CParamsSet;
22}
23
24
25namespace imtsdlgenqml
26{
27
32 public iproc::CSyncProcessorCompBase,
33 private imtsdl::CSdlTools
34{
35
36public:
37 typedef iproc::CSyncProcessorCompBase BaseClass;
38
39 I_BEGIN_COMPONENT(CQmlEnumGeneratorComp)
40 I_ASSIGN(m_qmlFileSuffixAttrPtr, "QmlFileSuffix", "QML file's suffix for file name.", true, "Enum")
41 I_ASSIGN(m_argumentParserCompPtr, "ArgumentParser", "Command line process argument parser", true, "ArgumentParser")
42 I_ASSIGN(m_sdlEnumListCompPtr, "SdlTypeListProvider", "SDL types used to create a code", true, "SdlTypeListProvider")
43 I_ASSIGN(m_qmldirFilePersistanceCompPtr, "QmldirFilePersistance", "Qmldir file persistance, used to update qmldir file with new modules", true, "QmldirFilePersistance")
44 I_ASSIGN(m_qrcFilePersistanceCompPtr, "QrResourceFilePersistance", "QRC file persistance, used to update file with new modules", true, "QrResourceFilePersistance")
45 I_ASSIGN(m_customSchemaParamsCompPtr, "CustomSchemaParams", "Custom schema parameters, that contains additional options", false, "CustomSchemaParams")
46 I_ASSIGN(m_paramsFactComp, "QrcParamsFactory", "Qt resource model, used to update resource file with new modules", true, "QrcParamsFactory")
47 I_END_COMPONENT
48
49 //reimplemented(iproc::IProcessor)
50 virtual iproc::IProcessor::TaskState DoProcessing(
51 const iprm::IParamsSet* paramsPtr,
52 const istd::IPolymorphic* inputPtr,
53 istd::IChangeable* outputPtr,
54 ibase::IProgressManager* progressManagerPtr = NULL) override;
55
56private:
58 struct QmldirFileInfo
59 {
60 bool IsSingleton = false;
61 QString Type;
62 QString Version;
63 QString FileName;
64 };
65 static bool UpdateQmldirParams(iprm::IParamsSet& qrcParamsPtr, const QList<QmldirFileInfo>& infoList);
66
67private:
68 bool ReOpenFiles();
69 bool CloseFiles();
70 bool ProcessQmlFile(const imtsdl::CSdlEnum& sdlEnum);
71 void AbortCurrentProcessing();
72 [[nodiscard]] QString GetQmlWrappedName(const QString& originalName) const;
73 [[nodiscard]] QString GetQmlFileName(const QString& originalName) const;
74 [[nodiscard]] QString GetQmlFilePath(const QString& originalName) const;
76 bool AddQrcEntry(const imtsdl::CSdlEnum& sdlEnum, iprm::CParamsSet& qmldirDataParams) const;
77 bool AddQmldirEntry(const imtsdl::CSdlEnum& sdlEnum, iprm::IParamsManager& qrcParamsPtr) const;
78
79private:
80 I_ATTR(QString, m_qmlFileSuffixAttrPtr);
81 I_REF(imtsdl::ISdlProcessArgumentsParser, m_argumentParserCompPtr);
82 I_REF(imtsdl::ISdlEnumListProvider, m_sdlEnumListCompPtr);
83 I_REF(ifile::IFilePersistence, m_qmldirFilePersistanceCompPtr);
84 I_REF(ifile::IFilePersistence, m_qrcFilePersistanceCompPtr);
85 I_REF(iprm::IParamsSet, m_customSchemaParamsCompPtr);
86 I_FACT(iprm::IParamsManager, m_paramsFactComp);
87
88 istd::TDelPtr<QFile> m_qmlFilePtr;
89};
90
91
92} // namespace imtsdlgenqml
93