summaryrefslogtreecommitdiffstats
path: root/src/core/desktop_media_controller.h
blob: 0cb7412250a351c22710cc413f7d9d33d99513e0 (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
// Copyright (C) 2023 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 DESKTOP_MEDIA_CONTROLLER_H
#define DESKTOP_MEDIA_CONTROLLER_H

#include <QtWebEngineCore/private/qtwebenginecoreglobal_p.h>
#include <QtCore/QObject>

#include <QString>

namespace QtWebEngineCore {
class DesktopMediaListQtPrivate;
class DesktopMediaControllerPrivate;

enum DesktopMediaType { Screen = 0, Window };

class Q_WEBENGINECORE_EXPORT DesktopMediaListQt : public QObject
{
    Q_OBJECT
public:
    ~DesktopMediaListQt() override;

    QString getSourceName(int index) const;
    int getSourceCount() const;

Q_SIGNALS:
    void initialized();
    void itemSelected(int index);
    void sourceAdded(int index);
    void sourceRemoved(int index);
    void sourceMoved(int oldIndex, int newIndex);
    void sourceNameChanged(int index);

private:
    friend class DesktopMediaController;
    friend class DesktopMediaControllerPrivate;
    bool isInitialized() const;
    explicit DesktopMediaListQt(DesktopMediaType type);
    std::unique_ptr<DesktopMediaListQtPrivate> d;
};

class Q_WEBENGINECORE_EXPORT DesktopMediaController : public QObject
{
    Q_OBJECT
public:
    explicit DesktopMediaController(DesktopMediaControllerPrivate *dd);
    ~DesktopMediaController() override;

    DesktopMediaListQt *screens() const;
    DesktopMediaListQt *windows() const;

    void selectScreen(int index);
    void selectWindow(int index);
    void cancel();

Q_SIGNALS:
    void mediaListsInitialized();

private:
    std::unique_ptr<DesktopMediaControllerPrivate> d;
};

} // namespace QtWebEngineCore
#endif // DESKTOP_MEDIA_CONTROLLER_H