// Copyright (c) 2012-2017 VideoStitch SAS // Copyright (c) 2018 stitchEm #pragma once #include "libvideostitch-gui/caps/guistatecaps.hpp" #include #include #include #include class VS_GUI_EXPORT IFreezableWidget : public QWidget, protected GUIStateCaps { Q_OBJECT public: explicit IFreezableWidget(const QString& name, QWidget* parent = nullptr); /** * @brief Activate the widget. */ virtual void activate(); /** * @brief Deactivate the widget, freezing and hiding it. */ virtual void deactivate(); /** * @brief if active, opengl is unloaded when the widget is hidden (not active). */ void setIsLowPerformance(bool isLowPerformance); signals: void reqPreviousState(); void reqChangeState(GUIStateCaps::State) override; void reqFreeze(); void reqUnfreeze(); void glViewReady(); void unloaded(); public slots: /** * @brief Changes the widget's stats to the given state. * @param s State you want to switch to. */ virtual void changeState(GUIStateCaps::State s) override; /** * @brief Set the widget's device writer. * @param writer Device writer. */ // void setDeviceWriter(QtDeviceWriter* writer); protected slots: void disconnectFromDeviceWriter(); virtual void clearScreenshot() = 0; protected: virtual void updateOnState(); virtual void unload(); virtual void freeze() = 0; virtual void unfreeze() = 0; virtual void showGLView() = 0; virtual void connectToDeviceWriter() = 0; std::atomic isActive; std::atomic isLowPerformance; // QPointer deviceWriter; QList connections; private slots: void onStateUnloadedEntered(); void onStateFrozenEntered(); void onStateWaitForGLEntered(); void onStateNormalEntered(); private: void initializeStateMachine(); QStateMachine stateMachine; QString name; };