aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/effectcomposer/effectcomposerwidget.h
blob: 69c5ee1a009f822a12a85bd6c316f428b47aa5b4 (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
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0

#pragma once

#include <qmldesigner/components/propertyeditor/qmlanchorbindingproxy.h>
#include <qmldesigner/components/propertyeditor/qmlmodelnodeproxy.h>

#include <coreplugin/icontext.h>

#include <QFrame>
#include <QFuture>
#include <QUrl>

class StudioQuickWidget;

QT_BEGIN_NAMESPACE
class QTimer;
QT_END_NAMESPACE

namespace EffectComposer {

class EffectComposerView;
class EffectComposerModel;
class EffectComposerNodesModel;

class EffectComposerWidget : public QFrame
{
    Q_OBJECT

public:
    EffectComposerWidget(EffectComposerView *view);
    ~EffectComposerWidget() = default;

    void contextHelp(const Core::IContext::HelpCallback &callback) const;

    static QString qmlSourcesPath();
    void clearSearchFilter();

    void delayedUpdateModel();
    void updateModel();
    void initView();
    void openComposition(const QString &path);

    StudioQuickWidget *quickWidget() const;
    QPointer<EffectComposerModel> effectComposerModel() const;
    QPointer<EffectComposerNodesModel> effectComposerNodesModel() const;

    Q_INVOKABLE void addEffectNode(const QString &nodeQenPath);
    Q_INVOKABLE void removeEffectNodeFromLibrary(const QString &nodeName);
    Q_INVOKABLE void focusSection(int section);
    Q_INVOKABLE void doOpenComposition();
    Q_INVOKABLE QRect screenRect() const;
    Q_INVOKABLE QPoint globalPos(const QPoint &point) const;
    Q_INVOKABLE QString uniformDefaultImage(const QString &nodeName,
                                            const QString &uniformName) const;
    Q_INVOKABLE QString imagesPath() const;
    Q_INVOKABLE bool isEffectAsset(const QUrl &url) const;
    Q_INVOKABLE void dropAsset(const QUrl &url);
    Q_INVOKABLE bool isEffectNode(const QByteArray &mimeData) const;
    Q_INVOKABLE void dropNode(const QByteArray &mimeData);
    Q_INVOKABLE void updateCanBeAdded();
    Q_INVOKABLE bool isMCUProject() const;

    QSize sizeHint() const override;

private:
    void reloadQmlSource();
    void handleImportScanTimer();

    QPointer<EffectComposerModel> m_effectComposerModel;
    QPointer<EffectComposerView> m_effectComposerView;
    QPointer<StudioQuickWidget> m_quickWidget;
    QmlDesigner::QmlModelNodeProxy m_backendModelNode;
    QmlDesigner::QmlAnchorBindingProxy m_backendAnchorBinding;

    struct ImportScanData {
        QFuture<void> future;
        int counter = 0;
        QTimer *timer = nullptr;
        QmlDesigner::TypeName type;
        Utils::FilePath path;
    };

    ImportScanData m_importScan;
    QString m_compositionPath;
};

} // namespace EffectComposer