summaryrefslogtreecommitdiffstats
path: root/src/runtime/api/q3dspresentation.h
blob: 3ee3aaf167fc86d9c0bd9d3d605829d8a446e4f8 (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
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt 3D Studio.
**
** $QT_BEGIN_LICENSE:GPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/

#ifndef Q3DSPRESENTATION_H
#define Q3DSPRESENTATION_H

#include <Qt3DStudioRuntime2/q3dsruntimeglobal.h>
#include <QtCore/qobject.h>
#include <QtCore/qurl.h>
#include <QtCore/qvariant.h>

QT_BEGIN_NAMESPACE

class Q3DSPresentationPrivate;
class QKeyEvent;
class QMouseEvent;
class QWheelEvent;
class QTouchEvent;
class QTabletEvent;
class Q3DSEngine;

// hack. no clue why Cpp.ignoretokens does not work.
#ifdef Q_CLANG_QDOC
#define Q3DSV_EXPORT
#endif

class Q3DSV_EXPORT Q3DSPresentation : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
    Q_PROPERTY(bool profilingEnabled READ isProfilingEnabled WRITE setProfilingEnabled NOTIFY profilingEnabledChanged)
    Q_PROPERTY(bool profileUiVisible READ isProfileUiVisible WRITE setProfileUiVisible NOTIFY profileUiVisibleChanged)
    Q_PROPERTY(float profileUiScale READ profileUiScale WRITE setProfileUiScale NOTIFY profileUiScaleChanged)
    Q_PROPERTY(bool dragonRenderAspectEnabled READ isDragonRenderAspectEnabled WRITE setDragonRenderAspectEnabled NOTIFY dragonRenderAspectEnabledChanged)

public:
    explicit Q3DSPresentation(QObject *parent = nullptr);
    ~Q3DSPresentation();

    QUrl source() const;
    void setSource(const QUrl &source);

    bool isProfilingEnabled() const;
    void setProfilingEnabled(bool enable);

    bool isProfileUiVisible() const;
    void setProfileUiVisible(bool visible);

    float profileUiScale() const;
    void setProfileUiScale(float scale);

    bool isDragonRenderAspectEnabled() const;
    void setDragonRenderAspectEnabled(bool dragonRenderAspectEnabled);

    Q_INVOKABLE void reload();

    Q_INVOKABLE void setDataInputValue(const QString &name, const QVariant &value);

    Q_INVOKABLE void fireEvent(const QString &elementPath, const QString &eventName);

    Q_INVOKABLE void goToTime(const QString &elementPath, float timeSeconds);
    Q_INVOKABLE void goToSlide(const QString &elementPath, const QString &name);
    Q_INVOKABLE void goToSlide(const QString &elementPath, int index);
    Q_INVOKABLE void goToSlide(const QString &elementPath, bool next, bool wrap);

    Q_INVOKABLE QVariant getAttribute(const QString &elementPath, const QString &attributeName);
    Q_INVOKABLE void setAttribute(const QString &elementPath, const QString &attributeName, const QVariant &value);

    void keyPressEvent(QKeyEvent *e);
    void keyReleaseEvent(QKeyEvent *e);
    void mousePressEvent(QMouseEvent *e);
    void mouseMoveEvent(QMouseEvent *e);
    void mouseReleaseEvent(QMouseEvent *e);
    void mouseDoubleClickEvent(QMouseEvent *e);
#if QT_CONFIG(wheelevent)
    void wheelEvent(QWheelEvent *e);
#endif
    void touchEvent(QTouchEvent *e);
#if QT_CONFIG(tabletevent)
    void tabletEvent(QTabletEvent *e);
#endif

    Q3DSEngine *engine() const;

Q_SIGNALS:
    void sourceChanged();
    void profilingEnabledChanged();
    void profileUiVisibleChanged();
    void profileUiScaleChanged();
    void customSignalEmitted(const QString &elementPath, const QString &name);
    void slideEntered(const QString &elementPath, int index, const QString &name);
    void slideExited(const QString &elementPath, int index, const QString &name);
    void dragonRenderAspectEnabledChanged();

protected:
    Q3DSPresentation(Q3DSPresentationPrivate &dd, QObject *parent);

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

QT_END_NAMESPACE

#endif // Q3DSPRESENTATION_H