mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-03-22 01:44:49 -05:00
90 lines
2.4 KiB
C++
90 lines
2.4 KiB
C++
/******************************************************************************
|
|
Note: Long-term goal is to remove this tab / file.
|
|
Most functionality shall be moved to the Macro tab instead.
|
|
|
|
So if you plan to make changes here, please consider applying them to the
|
|
corresponding macro tab functionality instead.
|
|
******************************************************************************/
|
|
#pragma once
|
|
#include "switch-generic.hpp"
|
|
|
|
namespace advss {
|
|
|
|
constexpr auto media_func = 6;
|
|
|
|
typedef enum {
|
|
TIME_RESTRICTION_NONE,
|
|
TIME_RESTRICTION_SHORTER,
|
|
TIME_RESTRICTION_LONGER,
|
|
TIME_RESTRICTION_REMAINING_SHORTER,
|
|
TIME_RESTRICTION_REMAINING_LONGER,
|
|
} time_restriction;
|
|
|
|
struct MediaSwitch : SceneSwitcherEntry {
|
|
static bool pause;
|
|
OBSWeakSource source = nullptr;
|
|
int state = OBS_MEDIA_STATE_NONE;
|
|
bool anyState = false;
|
|
time_restriction restriction = TIME_RESTRICTION_NONE;
|
|
int64_t time = 0;
|
|
|
|
// Trigger scene change only once even if media state might trigger repeatedly
|
|
bool matched = false;
|
|
|
|
std::atomic_bool stopped = {false};
|
|
std::atomic_bool ended = {false};
|
|
|
|
// Workaround to enable use of "ended" to specify end of VLC playlist
|
|
bool previousStateEnded = false;
|
|
|
|
bool playedToEnd = false;
|
|
|
|
const char *getType() { return "media"; }
|
|
bool initialized();
|
|
bool valid();
|
|
void save(obs_data_t *obj);
|
|
void load(obs_data_t *obj);
|
|
|
|
void clearSignalHandler();
|
|
void resetSignalHandler();
|
|
static void MediaStopped(void *data, calldata_t *);
|
|
static void MediaEnded(void *data, calldata_t *);
|
|
|
|
inline MediaSwitch(){};
|
|
|
|
MediaSwitch(const MediaSwitch &other);
|
|
MediaSwitch(MediaSwitch &&other) noexcept;
|
|
~MediaSwitch();
|
|
MediaSwitch &operator=(const MediaSwitch &other);
|
|
MediaSwitch &operator=(MediaSwitch &&other) noexcept;
|
|
friend void swap(MediaSwitch &first, MediaSwitch &second);
|
|
};
|
|
|
|
class MediaSwitchWidget : public SwitchWidget {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
MediaSwitchWidget(QWidget *parent, MediaSwitch *s);
|
|
MediaSwitch *getSwitchData();
|
|
void setSwitchData(MediaSwitch *s);
|
|
|
|
static void swapSwitchData(MediaSwitchWidget *s1,
|
|
MediaSwitchWidget *s2);
|
|
|
|
private slots:
|
|
void SourceChanged(const QString &text);
|
|
void StateChanged(int index);
|
|
void TimeRestrictionChanged(int index);
|
|
void TimeChanged(int time);
|
|
|
|
private:
|
|
QComboBox *mediaSources;
|
|
QComboBox *states;
|
|
QComboBox *timeRestrictions;
|
|
QSpinBox *time;
|
|
|
|
MediaSwitch *switchData;
|
|
};
|
|
|
|
} // namespace advss
|