#pragma once #include #include #include #include #include #include #include #include #include #include #include namespace AudioVideoManagement { enum class AvaStreamType; class ScreenPlacementHelper : public QWidget { Q_OBJECT public: ScreenPlacementHelper(QWidget *parent = nullptr) : QWidget(parent) { setWindowTitle(QStringLiteral("Topic Replay Screen Placement Helper")); setWindowFlags(Qt::FramelessWindowHint); setAttribute(Qt::WA_TranslucentBackground); activateWindow(); show(); } protected: void moveEvent(QMoveEvent *) override { emitNewGeometry(); } void resizeEvent(QResizeEvent *) override { emitNewGeometry(); } void emitNewGeometry() { emit widgetPlaced(geometry()); } signals: void widgetPlaced(const QRect &geometry); }; class DataInterface; class AvaControl; class VdControl; struct AvaScriptEntry; class TopicReplay final : public QObject, public ::TopicReplay::Interface { Q_OBJECT public: TopicReplay(DataInterface *dataIfc, bool isAudio); ~TopicReplay(); QWidget *createWidget() override; bool playbackInit(const QJsonObject &attributes) override; bool playbackStart(int secondsOffset) override; bool playbackPause() override; bool playbackStop() override; bool exportTopic(const QJsonObject &attributes, const QString &folderPath, TopicEditorBase::ExportNotifier *pExportNotifier) override; private slots: void onWidgetPlaced(const QRect &geometry); void avScriptFinished(const QString &exportDir, AvaStreamType streamType, bool success); void slotSetScriptResponse(const AvaStreamInfo &, AvaStreamState); private: AvaControl* getAvaControl(); VdControl* getVdControl(); class ExportScript; const bool m_isAudio; PlaybackAppHandle m_appHandle; DataInterface *m_dataIfc; QString m_scriptName; bool m_isPlaying{false}; QScopedPointer m_screenPlacementHelper; boost::optional m_dialogGeometry; QScopedPointer m_exportScript; LOGGER_T m_logger; QJsonObject m_playbackAttributes; }; }