1 /*
2     This file is part of the Okteta Kasten Framework, made within the KDE community.
3 
4     SPDX-FileCopyrightText: 2011, 2012 Alex Richardson <alex.richardson@gmx.de>
5 
6     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
7 */
8 
9 #ifndef KASTEN_SCRIPTHANDLERINFO_HPP
10 #define KASTEN_SCRIPTHANDLERINFO_HPP
11 
12 #include <QtGlobal>
13 #include <QScopedPointer>
14 
15 class EnumScriptClass;
16 class StructUnionScriptClass;
17 class ArrayScriptClass;
18 class PrimitiveScriptClass;
19 class StringScriptClass;
20 class BitfieldScriptClass;
21 class PointerScriptClass;
22 class QScriptEngine;
23 class ScriptLogger;
24 
25 class ScriptHandlerInfo
26 {
27 public:
28     explicit ScriptHandlerInfo(QScriptEngine* engine, ScriptLogger* logger);
29     ~ScriptHandlerInfo();
30 
31     /** The type of function that is being evaluated (most writing is only allowed when updating) */
32     enum class Mode
33     {
34         None = 0,
35         Validating = 1,
36         Updating = 2,
37         DeterminingLength = 4,
38         TaggedUnionSelection = 8,
39         CustomToString = 16,
40         InterpretingPointer = 32,
41     };
42 
43     QScopedPointer<ArrayScriptClass> mArrayClass;
44     QScopedPointer<PrimitiveScriptClass> mPrimitiveClass;
45     QScopedPointer<EnumScriptClass> mEnumClass;
46     QScopedPointer<StructUnionScriptClass> mStructUnionClass;
47     QScopedPointer<StringScriptClass> mStringClass;
48     QScopedPointer<BitfieldScriptClass> mBitfieldClass;
49     QScopedPointer<PointerScriptClass> mPointerClass;
50 
51     /** @return The mode this handler is currently in (determines which properties are accessible */
52     Mode mode() const;
53     void setMode(Mode m);
54     ScriptLogger* logger() const;
55 
56 private:
57     ScriptLogger* mLogger;
58     Mode mMode = Mode::None;
59 
60     Q_DISABLE_COPY(ScriptHandlerInfo)
61 };
62 
63 #endif // KASTEN_SCRIPTHANDLERINFO_HPP
64