aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlengine.h
blob: 9c2009061375a9921a73e0c25fa08e36d6f965b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only

#ifndef QQMLENGINE_H
#define QQMLENGINE_H

#include <QtCore/qurl.h>
#include <QtCore/qobject.h>
#include <QtCore/qmap.h>
#include <QtQml/qjsengine.h>
#include <QtQml/qqml.h>
#include <QtQml/qqmlerror.h>
#include <QtQml/qqmlabstracturlinterceptor.h>

QT_BEGIN_NAMESPACE

class Q_QML_EXPORT QQmlImageProviderBase : public QObject
{
    Q_OBJECT
public:
    enum ImageType : int {
        Invalid = 0,
        Image,
        Pixmap,
        Texture,
        ImageResponse,
    };

    enum Flag {
        ForceAsynchronousImageLoading  = 0x01
    };
    Q_DECLARE_FLAGS(Flags, Flag)

    virtual ~QQmlImageProviderBase();

    virtual ImageType imageType() const = 0;
    virtual Flags flags() const = 0;

private:
    friend class QQuickImageProvider;
    QQmlImageProviderBase();
};
Q_DECLARE_OPERATORS_FOR_FLAGS(QQmlImageProviderBase::Flags)

class QQmlComponent;
class QQmlEnginePrivate;
class QQmlExpression;
class QQmlContext;
class QQmlType;
class QUrl;
#if QT_CONFIG(qml_network)
class QNetworkAccessManager;
class QQmlNetworkAccessManagerFactory;
#endif
class QQmlIncubationController;
class Q_QML_EXPORT QQmlEngine : public QJSEngine
{
    Q_PROPERTY(QString offlineStoragePath READ offlineStoragePath WRITE setOfflineStoragePath NOTIFY offlineStoragePathChanged)
    Q_OBJECT
public:
    explicit QQmlEngine(QObject *p = nullptr);
    ~QQmlEngine() override;

    QQmlContext *rootContext() const;

    void clearComponentCache();
    void trimComponentCache();
    void clearSingletons();

    QStringList importPathList() const;
    void setImportPathList(const QStringList &paths);
    void addImportPath(const QString& dir);

    QStringList pluginPathList() const;
    void setPluginPathList(const QStringList &paths);
    void addPluginPath(const QString& dir);

#if QT_DEPRECATED_SINCE(6, 0)
    QT_DEPRECATED bool addNamedBundle(const QString &, const QString &) { return false; }
#endif

#if QT_CONFIG(library)
#if QT_DEPRECATED_SINCE(6, 4)
    QT_DEPRECATED_VERSION_X_6_4("Import the module from QML instead")
    bool importPlugin(const QString &filePath, const QString &uri, QList<QQmlError> *errors);
#endif
#endif

#if QT_CONFIG(qml_network)
    void setNetworkAccessManagerFactory(QQmlNetworkAccessManagerFactory *);
    QQmlNetworkAccessManagerFactory *networkAccessManagerFactory() const;

    QNetworkAccessManager *networkAccessManager() const;
#endif

#if QT_DEPRECATED_SINCE(6, 0)
    QT_DEPRECATED void setUrlInterceptor(QQmlAbstractUrlInterceptor* urlInterceptor)
    {
        addUrlInterceptor(urlInterceptor);
    }
    QT_DEPRECATED QQmlAbstractUrlInterceptor *urlInterceptor() const;
#endif

    void addUrlInterceptor(QQmlAbstractUrlInterceptor *urlInterceptor);
    void removeUrlInterceptor(QQmlAbstractUrlInterceptor *urlInterceptor);
    QList<QQmlAbstractUrlInterceptor *> urlInterceptors() const;
    QUrl interceptUrl(const QUrl &url, QQmlAbstractUrlInterceptor::DataType type) const;

    void addImageProvider(const QString &id, QQmlImageProviderBase *);
    QQmlImageProviderBase *imageProvider(const QString &id) const;
    void removeImageProvider(const QString &id);

    void setIncubationController(QQmlIncubationController *);
    QQmlIncubationController *incubationController() const;

    void setOfflineStoragePath(const QString& dir);
    QString offlineStoragePath() const;
    QString offlineStorageDatabaseFilePath(const QString &databaseName) const;

    QUrl baseUrl() const;
    void setBaseUrl(const QUrl &);

    bool outputWarningsToStandardError() const;
    void setOutputWarningsToStandardError(bool);

    void markCurrentFunctionAsTranslationBinding();

    template<typename T>
    T singletonInstance(int qmlTypeId);

    template<typename T>
    T singletonInstance(QAnyStringView moduleName, QAnyStringView typeName);

    void captureProperty(QObject *object, const QMetaProperty &property) const;

public Q_SLOTS:
    void retranslate();

Q_SIGNALS:
    void offlineStoragePathChanged();

public:
    static QQmlContext *contextForObject(const QObject *);
    static void setContextForObject(QObject *, QQmlContext *);

protected:
    QQmlEngine(QQmlEnginePrivate &dd, QObject *p);
    bool event(QEvent *) override;

Q_SIGNALS:
    void quit();
    void exit(int retCode);
    void warnings(const QList<QQmlError> &warnings);

private:
    Q_DISABLE_COPY(QQmlEngine)
    Q_DECLARE_PRIVATE(QQmlEngine)
};

template<>
Q_QML_EXPORT QJSValue QQmlEngine::singletonInstance<QJSValue>(int qmlTypeId);

template<typename T>
T QQmlEngine::singletonInstance(int qmlTypeId) {
    return qobject_cast<T>(singletonInstance<QJSValue>(qmlTypeId).toQObject());
}

template<>
Q_QML_EXPORT QJSValue QQmlEngine::singletonInstance<QJSValue>(QAnyStringView uri, QAnyStringView typeName);

template<typename T>
T QQmlEngine::singletonInstance(QAnyStringView uri, QAnyStringView typeName)
{
    return qobject_cast<T>(singletonInstance<QJSValue>(uri, typeName).toQObject());
}

QT_END_NAMESPACE

#endif // QQMLENGINE_H