1// Copyright (C) 2023 basysKom GmbH, opensource@basyskom.com
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#pragma once
5
6#include "visitor.h"
7
8#include <QtCore/qlist.h>
9#include <QtCore/qtextstream.h>
10
11class DataTypeFileWriter : public Visitor
12{
13public:
14 enum GeneratingError { NoError, UnableToWrite };
15 DataTypeFileWriter(const QString &path,
16 const QString &prefix,
17 const QString &header);
18 ~DataTypeFileWriter() override = default;
19
20 void visit(EnumeratedType *enumeratedType) override;
21 void visit(EnumeratedValue *enumeratedValue) override;
22 void visit(Field *field) override;
23 void visit(Import *import) override;
24 void visit(StructuredType *structuredType) override;
25 void visit(TypeDictionary *typeDictionary) override;
26 void visit(XmlElement *xmlElement) override;
27
28 GeneratingError generateFile(const XmlElement *type, const QString &fileExtension);
29 GeneratingError generateTypes(const QList<XmlElement *> &types);
30
31 QList<XmlElement *> generateMapping() const;
32 void setGenerateMapping(const QList<XmlElement *> &generateMapping);
33
34private:
35 QString m_path;
36 QString m_prefix;
37 QString m_header;
38 QList<QString> m_generatedEnumeratedTypeFilenames;
39 QList<QString> m_generatedStructuredTypeFilenames;
40 QList<XmlElement *> m_generateMapping;
41 QList<EnumeratedType *> m_enumeratedTypes;
42
43 void writeLicenseHeader(QTextStream &output);
44
45 void writeStructuredTypeCpp(const StructuredType *structuredType, QTextStream &output);
46 void writeStructuredTypeCppClassComment(const StructuredType *structuredType,
47 QTextStream &output);
48 void writeStructuredTypeCppDataClass(const StructuredType *structuredType, QTextStream &output);
49 void writeStructuredTypeCppDataClassMember(const StructuredType *structuredType,
50 QTextStream &output);
51 void writeStructuredTypeCppConstructors(const StructuredType *structuredType,
52 QTextStream &output);
53 void writeStructuredTypeCppOperatorAssignment(const StructuredType *structuredType,
54 QTextStream &output);
55 void writeStructuredTypeCppOperatorEquality(const StructuredType *structuredType,
56 QTextStream &output);
57 void writeStructuredTypeCppQVariant(const StructuredType *structuredType, QTextStream &output);
58 void writeStructuredTypeCppDestructor(const StructuredType *structuredType, QTextStream &output);
59 void writeStructuredTypeCppGetterSetter(const StructuredType *structuredType,
60 QTextStream &output);
61 void writeStructuredTypeCppGetter(const StructuredType *structuredType, QTextStream &output);
62 void writeStructuredTypeCppSetter(const Field *field,
63 const StructuredType *structuredType,
64 QTextStream &output);
65
66 void writeStructuredTypeHeader(const StructuredType *structuredType, QTextStream &output);
67 void writeStructuredTypeHeaderIncludes(const StructuredType *structuredType,
68 QTextStream &output);
69 void writeStructuredTypeHeaderUnion(const StructuredType *structuredType, QTextStream &output);
70 void writeStructuredTypeHeaderGetterSetter(const StructuredType *structuredType,
71 QTextStream &output);
72
73 void writeStructuredTypeHeaderDebug(const StructuredType *structuredType,
74 QTextStream &output);
75 void writeStructuredTypeCppDebug(const StructuredType *structuredType,
76 QTextStream &output);
77
78 void writeEnumeratedType(const EnumeratedType *enumeratedType, QTextStream &output);
79 GeneratingError writeEnumeratedTypes();
80};
81

Provided by KDAB

Privacy Policy
Start learning QML with our Intro Training
Find out more

source code of qtopcua/tools/datatypecodegenerator/datatypefilewriter.h