ImagingTools Core SDK
CPythonScriptEngineComp.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/QUuid>
7
8// ACF includes
9#include <ilog/TLoggerCompWrap.h>
10#include <iattr/CAttributesManager.h>
11#include <iprm/COptionsManager.h>
12
13// ImtCore includes
14#include <imtpy/IScriptEngine.h>
15
16
17namespace imtpy
18{
19
20
21class CPythonScriptEngineComp:
22 public ilog::CLoggerComponentBase,
23 virtual public IScriptEngine
24{
25public:
26 typedef ilog::CLoggerComponentBase BaseClass;
27 typedef iattr::CAttributesManager BaseClass2;
28
29 I_BEGIN_COMPONENT(CPythonScriptEngineComp);
30 I_REGISTER_INTERFACE(IScriptEngine);
31 I_ASSIGN(m_rootFolderParamIdAttrPtr, "RootFolderParamId", "ID of the root folder parameter in the parameter set", true, "ScriptFolder");
32 I_ASSIGN(m_defaultParamsCompPtr, "DefaultEngineParams", "Default parameters used for engine initialization", false, "DefaultEngineParams");
33 I_END_COMPONENT;
34
35 // reimplemented (IScriptEngine)
36 virtual bool InitializeEngine(const iprm::IParamsSet* paramsPtr = nullptr) override;
37 virtual const iprm::IOptionsList& GetScriptInfoList() const override;
38 virtual QByteArray RegisterScript(const QString& scriptFilePath, IScriptRunner* runnerPtr = nullptr) override;
39 virtual void UnregisterScript(const QByteArray& scriptId) override;
40 virtual const iattr::IAttributesMetaInfoProvider* GetAttributeMetaInfoManager(const QByteArray& scriptId) const override;
41 virtual iattr::IAttributesProvider* GetAttributeManager(const QByteArray& scriptId) const override;
42 virtual bool SetAttributeValue(const QByteArray& scriptId, const QByteArray& attributeId, const iser::IObject* valuePtr) override;
43 virtual int ExecuteScript(const QByteArray& scriptId, ibase::IProgressManager* progressPtr, ilog::IMessageConsumer* logPtr) const override;
44
45protected:
46 struct Script: public iattr::CAttributesManager, virtual public iattr::IAttributesMetaInfoProvider
47 {
48 Script()
49 {
50 uuid = QUuid::createUuid().toByteArray();
51 }
52
53 QString filePath;
54 QByteArray uuid;
55 QString moduleName;
56 QString functionName;
57
58 // reimplemented (IAttributesMetaInfoProvider)
59 virtual iattr::IAttributesProvider::AttributeIds GetAttributeMetaIds() const override;
60 virtual const iattr::IAttributeMetaInfo* GetAttributeMetaInfo(const QByteArray& attributeId) const override;
61 };
62
63 typedef istd::TSmartPtr<Script> ScriptPtr;
64 typedef QVector<ScriptPtr> Scripts;
65
66protected:
67 ScriptPtr FindScriptById(const QByteArray& scriptId) const;
68
69 static void AddSearchPath(const QString& path);
70
71 // reimplemented (icomp::CComponentBase)
72 virtual void OnComponentCreated() override;
73
74private:
75 Scripts m_scripts;
76 iprm::COptionsManager m_scriptInfoList;
77
78 typedef QMap<QByteArray, IScriptRunner*> ScriptManagerMap;
79 ScriptManagerMap m_scriptManagerMap;
80
81 I_ATTR(QByteArray, m_rootFolderParamIdAttrPtr);
82 I_REF(iprm::IParamsSet, m_defaultParamsCompPtr);
83};
84
85
86} // namespace imtpy
87
88