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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
#pragma once
#include <QCheckBox>
#include <QComboBox>
#include <QLabel>
#include <QListWidget>
#include <QSpinBox>
#include <QTimer>
#include <QToolBar>
#include <QWidget>
#include <set>
#include "obs.h"
#include "obs-websocket-api.h"
typedef void (*get_transitions_callback_t)(void *data, struct obs_frontend_source_list *sources);
class LockedCheckBox : public QCheckBox {
Q_OBJECT
public:
LockedCheckBox();
explicit LockedCheckBox(QWidget *parent);
};
enum transitionType { match, show, hide, override };
class DownstreamKeyer : public QWidget {
Q_OBJECT
private:
QTimer hideTimer;
int outputChannel;
obs_source_t *transition;
obs_source_t *showTransition;
obs_source_t *hideTransition;
obs_source_t *overrideTransition;
QListWidget *scenesList;
QToolBar *scenesToolbar;
uint32_t transitionDuration;
uint32_t showTransitionDuration;
uint32_t hideTransitionDuration;
uint32_t overrideTransitionDuration;
uint32_t hideAfter;
LockedCheckBox *tie;
obs_hotkey_id null_hotkey_id;
obs_hotkey_pair_id tie_hotkey_id;
std::set<std::string> exclude_scenes;
obs_view_t *view = nullptr;
obs_canvas_t *canvas = nullptr;
get_transitions_callback_t get_transitions = nullptr;
void *get_transitions_data = nullptr;
static void source_rename(void *data, calldata_t *calldata);
static void source_remove(void *data, calldata_t *calldata);
static bool enable_DSK_hotkey(void *data, obs_hotkey_pair_id id, obs_hotkey_t *hotkey, bool pressed);
static bool disable_DSK_hotkey(void *data, obs_hotkey_pair_id id, obs_hotkey_t *hotkey, bool pressed);
static void null_hotkey(void *data, obs_hotkey_id id, obs_hotkey_t *hotkey, bool pressed);
static bool enable_tie_hotkey(void *data, obs_hotkey_pair_id id, obs_hotkey_t *hotkey, bool pressed);
static bool disable_tie_hotkey(void *data, obs_hotkey_pair_id id, obs_hotkey_t *hotkey, bool pressed);
void ChangeSceneIndex(bool relative, int idx, int invalidIdx);
private slots:
void on_actionAddScene_triggered();
void on_actionRemoveScene_triggered();
void on_actionSceneUp_triggered();
void on_actionSceneDown_triggered();
void on_actionSceneNull_triggered();
void apply_source(obs_source_t *newSource);
void apply_selected_source();
void on_scenesList_itemSelectionChanged();
signals:
public:
DownstreamKeyer(int channel, QString name, obs_view_t *view = nullptr, obs_canvas_t *canvas = nullptr,
get_transitions_callback_t get_transitions = nullptr, void *get_transitions_data = nullptr);
~DownstreamKeyer();
void Save(obs_data_t *data);
void Load(obs_data_t *data);
void SetTransition(const char *transition_name, enum transitionType transition_type = match);
std::string GetTransition(enum transitionType transition_type = match);
void SetTransitionDuration(int duration, enum transitionType transition_type = match);
int GetTransitionDuration(enum transitionType transition_type = match);
void SetHideAfter(int duration);
int GetHideAfter();
void SceneChanged(std::string scene);
void AddExcludeScene(const char *scene_name);
void RemoveExcludeScene(const char *scene_name);
bool IsSceneExcluded(const char *scene_name);
QString GetScene();
bool SwitchToScene(QString scene_name);
void add_scene(QString scene_name, obs_source_t *s, int insertBeforeRow);
bool AddScene(QString scene_name, int insertBeforeRow);
bool RemoveScene(QString scene_name);
void SetTie(bool tie);
void SetOutputChannel(int outputChannel);
};
|