#pragma once #include #include #include #include #include class QRect; namespace AudioVideoManagement { class AvsApp; class AvaControl; class AVMSHARED_EXPORT ObjectWrapper : public QObject { Q_OBJECT public: ObjectWrapper(QObject *parent) : QObject(parent) {} signals: void signalVisible(); void signalPause(); void signalResume(); }; class AVMSHARED_EXPORT PlaybackApp { public: enum class AppType { Normal = 1, AutoHide, AlwaysHidden }; PlaybackApp(const QString &dialogId, AvaControl *avaControl, AppType); virtual ~PlaybackApp(); ObjectWrapper *objectWrapper() { return m_objectWrapper; } const QString &dialogId() const { return m_dialogId; } bool inUse() const { return m_inUse; } void acquire(); void acquire(const QRect &geometry); void setGeometry(const QRect &geometry); void release(); void hide(bool andClose); private: const QString m_dialogId; bool m_inUse{false}; bool m_autoHide; std::unique_ptr m_app; ObjectWrapper *m_objectWrapper { nullptr }; }; class AVMSHARED_EXPORT PlaybackAppHandle { public: PlaybackAppHandle() = default; explicit PlaybackAppHandle(PlaybackApp *app); PlaybackAppHandle(PlaybackApp *app, const QRect &geometry); operator bool() const { return m_app.get() != nullptr; } const QString &dialogId() const { return m_app->dialogId(); } void hide(bool andClose = false) { m_app->hide(andClose); } ObjectWrapper *objectWrapper() { return m_app->objectWrapper(); } private: using Releaser = std::function; std::unique_ptr m_app; }; }