diff --git a/advanced-scene-switcher-win.cpp b/advanced-scene-switcher-win.cpp index bebcd4e9..7e3b05b8 100644 --- a/advanced-scene-switcher-win.cpp +++ b/advanced-scene-switcher-win.cpp @@ -4,7 +4,7 @@ using namespace std; -static bool GetWindowTitle(HWND window, string &title) +static bool GetWindowTitle(HWND window, string& title) { size_t len = (size_t)GetWindowTextLengthW(window); wstring wtitle; @@ -32,7 +32,7 @@ static bool WindowValid(HWND window) return false; GetClientRect(window, &rect); - styles = GetWindowLongPtr(window, GWL_STYLE); + styles = GetWindowLongPtr(window, GWL_STYLE); ex_styles = GetWindowLongPtr(window, GWL_EXSTYLE); if (ex_styles & WS_EX_TOOLWINDOW) @@ -43,11 +43,12 @@ static bool WindowValid(HWND window) return true; } -void GetWindowList(vector &windows) +void GetWindowList(vector& windows) { HWND window = GetWindow(GetDesktopWindow(), GW_CHILD); - while (window) { + while (window) + { string title; if (WindowValid(window) && GetWindowTitle(window, title)) windows.emplace_back(title); @@ -55,24 +56,27 @@ void GetWindowList(vector &windows) } } -void GetCurrentWindowTitle(string &title) +void GetCurrentWindowTitle(string& title) { HWND window = GetForegroundWindow(); DWORD id; GetWindowTitle(window, title); } -pair getCursorPos() { +pair getCursorPos() +{ pair pos(0, 0); POINT cursorPos; - if (GetPhysicalCursorPos(&cursorPos)) { + if (GetPhysicalCursorPos(&cursorPos)) + { pos.first = cursorPos.x; pos.second = cursorPos.y; } return pos; } -bool isFullscreen() { +bool isFullscreen() +{ RECT appBounds; RECT rc; GetWindowRect(GetDesktopWindow(), &rc); @@ -80,7 +84,8 @@ bool isFullscreen() { if (hwnd != GetDesktopWindow() && hwnd != GetShellWindow()) { GetWindowRect(hwnd, &appBounds); - if (rc.bottom == appBounds.bottom && rc.top == appBounds.top && rc.left == appBounds.left && rc.right == appBounds.right) + if (rc.bottom == appBounds.bottom && rc.top == appBounds.top && rc.left == appBounds.left + && rc.right == appBounds.right) { return true; } diff --git a/advanced-scene-switcher.cpp b/advanced-scene-switcher.cpp index d555fae9..5f087fef 100644 --- a/advanced-scene-switcher.cpp +++ b/advanced-scene-switcher.cpp @@ -2,6 +2,7 @@ #include #include #include + #include #include #include @@ -9,7 +10,6 @@ #include #include #include -#include "advanced-scene-switcher.hpp" #include #include @@ -20,83 +20,110 @@ #include #include +#include "advanced-scene-switcher.hpp" + using namespace std; #define DEFAULT_INTERVAL 300 -struct SceneSwitch { +struct SceneSwitch +{ OBSWeakSource scene; string window; OBSWeakSource transition; bool fullscreen; - inline SceneSwitch(OBSWeakSource scene_, const char *window_, OBSWeakSource transition_, bool fullscreen_) - : scene(scene_), window(window_), transition(transition_), fullscreen(fullscreen_) + inline SceneSwitch( + OBSWeakSource scene_, const char* window_, OBSWeakSource transition_, bool fullscreen_) + : scene(scene_) + , window(window_) + , transition(transition_) + , fullscreen(fullscreen_) { } }; -struct ScreenRegionSwitch { +struct ScreenRegionSwitch +{ OBSWeakSource scene; OBSWeakSource transition; int minX, minY, maxX, maxY; string regionStr; - inline ScreenRegionSwitch(OBSWeakSource scene_, OBSWeakSource transition_, int minX_, int minY_, int maxX_, int maxY_, string regionStr_) - : scene(scene_), transition(transition_), minX(minX_), minY(minY_), maxX(maxX_), maxY(maxY_), regionStr(regionStr_) + inline ScreenRegionSwitch(OBSWeakSource scene_, OBSWeakSource transition_, int minX_, int minY_, + int maxX_, int maxY_, string regionStr_) + : scene(scene_) + , transition(transition_) + , minX(minX_) + , minY(minY_) + , maxX(maxX_) + , maxY(maxY_) + , regionStr(regionStr_) { } }; -struct SceneRoundTripSwitch { +struct SceneRoundTripSwitch +{ OBSWeakSource scene1; OBSWeakSource scene2; OBSWeakSource transition; int delay; string sceneRoundTripStr; - inline SceneRoundTripSwitch(OBSWeakSource scene1_, OBSWeakSource scene2_, OBSWeakSource transition_, int delay_, string str) - : scene1(scene1_), scene2(scene2_), transition(transition_), delay(delay_), sceneRoundTripStr(str) + inline SceneRoundTripSwitch(OBSWeakSource scene1_, OBSWeakSource scene2_, + OBSWeakSource transition_, int delay_, string str) + : scene1(scene1_) + , scene2(scene2_) + , transition(transition_) + , delay(delay_) + , sceneRoundTripStr(str) { } }; -struct SceneTransition { +struct SceneTransition +{ OBSWeakSource scene1; OBSWeakSource scene2; OBSWeakSource transition; string sceneTransitionStr; - inline SceneTransition(OBSWeakSource scene1_, OBSWeakSource scene2_, OBSWeakSource transition_, string sceneTransitionStr_) - : scene1(scene1_), scene2(scene2_), transition(transition_), sceneTransitionStr(sceneTransitionStr_) + inline SceneTransition(OBSWeakSource scene1_, OBSWeakSource scene2_, OBSWeakSource transition_, + string sceneTransitionStr_) + : scene1(scene1_) + , scene2(scene2_) + , transition(transition_) + , sceneTransitionStr(sceneTransitionStr_) { } }; -struct FileIOData { +struct FileIOData +{ bool readEnabled; string readPath; bool writeEnabled; string writePath; }; - -static inline bool WeakSourceValid(obs_weak_source_t *ws) +static inline bool WeakSourceValid(obs_weak_source_t* ws) { - obs_source_t *source = obs_weak_source_get_source(ws); + obs_source_t* source = obs_weak_source_get_source(ws); if (source) obs_source_release(source); return !!source; } -struct SwitcherData { +struct SwitcherData +{ thread th; condition_variable cv; mutex m; mutex threadEndMutex; mutex waitMutex; - //mutex transitionWaitMutex; - //mutex transitionWaitMutex2; + // mutex transitionWaitMutex; + // mutex transitionWaitMutex2; condition_variable transitionCv; bool stop = true; @@ -128,38 +155,46 @@ struct SwitcherData { void Prune() { - for (size_t i = 0; i < switches.size(); i++) { - SceneSwitch &s = switches[i]; + for (size_t i = 0; i < switches.size(); i++) + { + SceneSwitch& s = switches[i]; if (!WeakSourceValid(s.scene) || !WeakSourceValid(s.transition)) switches.erase(switches.begin() + i--); } - if (nonMatchingScene && !WeakSourceValid(nonMatchingScene)) { + if (nonMatchingScene && !WeakSourceValid(nonMatchingScene)) + { switchIfNotMatching = false; nonMatchingScene = nullptr; } - for (size_t i = 0; i < screenRegionSwitches.size(); i++) { - ScreenRegionSwitch &s = screenRegionSwitches[i]; + for (size_t i = 0; i < screenRegionSwitches.size(); i++) + { + ScreenRegionSwitch& s = screenRegionSwitches[i]; if (!WeakSourceValid(s.scene) || !WeakSourceValid(s.transition)) screenRegionSwitches.erase(screenRegionSwitches.begin() + i--); } - for (size_t i = 0; i < pauseScenesSwitches.size(); i++) { - OBSWeakSource &scene = pauseScenesSwitches[i]; + for (size_t i = 0; i < pauseScenesSwitches.size(); i++) + { + OBSWeakSource& scene = pauseScenesSwitches[i]; if (!WeakSourceValid(scene)) pauseScenesSwitches.erase(pauseScenesSwitches.begin() + i--); } - for (size_t i = 0; i < sceneRoundTripSwitches.size(); i++) { - SceneRoundTripSwitch &s = sceneRoundTripSwitches[i]; - if (!WeakSourceValid(s.scene1) || !WeakSourceValid(s.scene2) || !WeakSourceValid(s.transition)) + for (size_t i = 0; i < sceneRoundTripSwitches.size(); i++) + { + SceneRoundTripSwitch& s = sceneRoundTripSwitches[i]; + if (!WeakSourceValid(s.scene1) || !WeakSourceValid(s.scene2) + || !WeakSourceValid(s.transition)) sceneRoundTripSwitches.erase(sceneRoundTripSwitches.begin() + i--); } - for (size_t i = 0; i < sceneTransitions.size(); i++) { - SceneTransition &s = sceneTransitions[i]; - if (!WeakSourceValid(s.scene1) || !WeakSourceValid(s.scene2) || !WeakSourceValid(s.transition)) + for (size_t i = 0; i < sceneTransitions.size(); i++) + { + SceneTransition& s = sceneTransitions[i]; + if (!WeakSourceValid(s.scene1) || !WeakSourceValid(s.scene2) + || !WeakSourceValid(s.transition)) sceneTransitions.erase(sceneTransitions.begin() + i--); } } @@ -170,44 +205,48 @@ struct SwitcherData { } }; -static SwitcherData *switcher = nullptr; +static SwitcherData* switcher = nullptr; -static inline QString MakeSwitchName(const QString &scene, - const QString &value, const QString &transition, bool fullscreen) +static inline QString MakeSwitchName( + const QString& scene, const QString& value, const QString& transition, bool fullscreen) { if (!fullscreen) - return QStringLiteral("[") + scene + QStringLiteral(", ") + transition + QStringLiteral("]: ") + - value; - return QStringLiteral("[") + scene + QStringLiteral(", ") + transition + QStringLiteral("]: ") + - value + QStringLiteral(" (only if window is fullscreen)"); + return QStringLiteral("[") + scene + QStringLiteral(", ") + transition + + QStringLiteral("]: ") + value; + return QStringLiteral("[") + scene + QStringLiteral(", ") + transition + QStringLiteral("]: ") + + value + QStringLiteral(" (only if window is fullscreen)"); } -static inline QString MakeScreenRegionSwitchName(const QString &scene, const QString &transition, - int minX, int minY, int maxX, int maxY) +static inline QString MakeScreenRegionSwitchName( + const QString& scene, const QString& transition, int minX, int minY, int maxX, int maxY) { - return QStringLiteral("[") + scene + QStringLiteral(", ") + transition + QStringLiteral("]: ") + - QString::number(minX) + QStringLiteral(", ") + QString::number(minY) + QStringLiteral(" x ") + QString::number(maxX) + QStringLiteral(", ") + QString::number(maxY); + return QStringLiteral("[") + scene + QStringLiteral(", ") + transition + QStringLiteral("]: ") + + QString::number(minX) + QStringLiteral(", ") + QString::number(minY) + + QStringLiteral(" x ") + QString::number(maxX) + QStringLiteral(", ") + + QString::number(maxY); } -static inline QString MakeSceneRoundTripSwitchName(const QString &scene1, - const QString &scene2, const QString &transition, int delay) +static inline QString MakeSceneRoundTripSwitchName( + const QString& scene1, const QString& scene2, const QString& transition, int delay) { - return scene1 + QStringLiteral(" -> wait for ") + QString::number(delay) + QStringLiteral(" seconds -> ") + scene2 + QStringLiteral(" (using ") + transition + QStringLiteral(" transition)"); + return scene1 + QStringLiteral(" -> wait for ") + QString::number(delay) + + QStringLiteral(" seconds -> ") + scene2 + QStringLiteral(" (using ") + transition + + QStringLiteral(" transition)"); } -static inline QString MakeSceneTransitionName(const QString &scene1, - const QString &scene2, const QString &transition) +static inline QString MakeSceneTransitionName( + const QString& scene1, const QString& scene2, const QString& transition) { return scene1 + QStringLiteral(" --- ") + transition + QStringLiteral(" --> ") + scene2; } - -static inline string GetWeakSourceName(obs_weak_source_t *weak_source) +static inline string GetWeakSourceName(obs_weak_source_t* weak_source) { string name; - obs_source_t *source = obs_weak_source_get_source(weak_source); - if (source) { + obs_source_t* source = obs_weak_source_get_source(weak_source); + if (source) + { name = obs_source_get_name(source); obs_source_release(source); } @@ -215,11 +254,12 @@ static inline string GetWeakSourceName(obs_weak_source_t *weak_source) return name; } -static inline OBSWeakSource GetWeakSourceByName(const char *name) +static inline OBSWeakSource GetWeakSourceByName(const char* name) { OBSWeakSource weak; - obs_source_t *source = obs_get_source_by_name(name); - if (source) { + obs_source_t* source = obs_get_source_by_name(name); + if (source) + { weak = obs_source_get_weak_source(source); obs_weak_source_release(weak); obs_source_release(source); @@ -228,29 +268,32 @@ static inline OBSWeakSource GetWeakSourceByName(const char *name) return weak; } -static inline OBSWeakSource GetWeakSourceByQString(const QString &name) +static inline OBSWeakSource GetWeakSourceByQString(const QString& name) { return GetWeakSourceByName(name.toUtf8().constData()); } -static inline OBSWeakSource GetWeakTransitionByName(const char *transitionName) +static inline OBSWeakSource GetWeakTransitionByName(const char* transitionName) { OBSWeakSource weak; - obs_source_t *source; + obs_source_t* source; - if (strcmp(transitionName, "Default") == 0){ + if (strcmp(transitionName, "Default") == 0) + { source = obs_frontend_get_current_transition(); weak = obs_source_get_weak_source(source); obs_weak_source_release(weak); return weak; } - obs_frontend_source_list *transitions = new obs_frontend_source_list(); + obs_frontend_source_list* transitions = new obs_frontend_source_list(); obs_frontend_get_transitions(transitions); - for (size_t i = 0; i < transitions->sources.num; i++){ - const char *name = obs_source_get_name(transitions->sources.array[i]); - if (strcmp(transitionName, name) == 0){ + for (size_t i = 0; i < transitions->sources.num; i++) + { + const char* name = obs_source_get_name(transitions->sources.array[i]); + if (strcmp(transitionName, name) == 0) + { source = transitions->sources.array[i]; break; } @@ -264,13 +307,14 @@ static inline OBSWeakSource GetWeakTransitionByName(const char *transitionName) return weak; } -static inline OBSWeakSource GetWeakTransitionByQString(const QString &name){ +static inline OBSWeakSource GetWeakTransitionByQString(const QString& name) +{ return GetWeakTransitionByName(name.toUtf8().constData()); } -SceneSwitcher::SceneSwitcher(QWidget *parent) - : QDialog(parent), - ui(new Ui_SceneSwitcher) +SceneSwitcher::SceneSwitcher(QWidget* parent) + : QDialog(parent) + , ui(new Ui_SceneSwitcher) { ui->setupUi(this); @@ -279,9 +323,10 @@ SceneSwitcher::SceneSwitcher(QWidget *parent) switcher->Prune(); BPtr scenes = obs_frontend_get_scene_names(); - char **temp = scenes; - while (*temp) { - const char *name = *temp; + char** temp = scenes; + while (*temp) + { + const char* name = *temp; ui->scenes->addItem(name); ui->noMatchSwitchScene->addItem(name); ui->screenRegionScenes->addItem(name); @@ -294,24 +339,25 @@ SceneSwitcher::SceneSwitcher(QWidget *parent) temp++; } - obs_frontend_source_list *transitions = new obs_frontend_source_list(); + obs_frontend_source_list* transitions = new obs_frontend_source_list(); obs_frontend_get_transitions(transitions); - //ui->transitions->addItem("Default"); - //ui->screenRegionsTransitions->addItem("Default"); - //ui->sceneRoundTripTransitions->addItem("Default"); + // ui->transitions->addItem("Default"); + // ui->screenRegionsTransitions->addItem("Default"); + // ui->sceneRoundTripTransitions->addItem("Default"); - for (size_t i = 0; i < transitions->sources.num; i++){ - const char *name = obs_source_get_name(transitions->sources.array[i]); + for (size_t i = 0; i < transitions->sources.num; i++) + { + const char* name = obs_source_get_name(transitions->sources.array[i]); ui->transitions->addItem(name); ui->screenRegionsTransitions->addItem(name); ui->sceneRoundTripTransitions->addItem(name); ui->transitionsTransitions->addItem(name); } - //ui->transitions->addItem("Random"); - //ui->screenRegionsTransitions->addItem("Random"); - //ui->sceneRoundTripTransitions->addItem("Random"); + // ui->transitions->addItem("Random"); + // ui->screenRegionsTransitions->addItem("Random"); + // ui->sceneRoundTripTransitions->addItem("Random"); obs_frontend_source_list_free(transitions); @@ -320,99 +366,99 @@ SceneSwitcher::SceneSwitcher(QWidget *parent) else ui->noMatchDontSwitch->setChecked(true); - ui->noMatchSwitchScene->setCurrentText( - GetWeakSourceName(switcher->nonMatchingScene).c_str()); + ui->noMatchSwitchScene->setCurrentText(GetWeakSourceName(switcher->nonMatchingScene).c_str()); ui->checkInterval->setValue(switcher->interval); vector windows; GetWindowList(windows); - for (string &window : windows){ + for (string& window : windows) + { ui->windows->addItem(window.c_str()); ui->ignoreWindowsWindows->addItem(window.c_str()); ui->pauseWindowsWindows->addItem(window.c_str()); } - for (auto &s : switcher->switches) { + for (auto& s : switcher->switches) + { string sceneName = GetWeakSourceName(s.scene); string transitionName = GetWeakSourceName(s.transition); - QString text = MakeSwitchName(sceneName.c_str(), s.window.c_str(), - transitionName.c_str(), s.fullscreen); + QString text = MakeSwitchName( + sceneName.c_str(), s.window.c_str(), transitionName.c_str(), s.fullscreen); - QListWidgetItem *item = new QListWidgetItem(text, - ui->switches); + QListWidgetItem* item = new QListWidgetItem(text, ui->switches); item->setData(Qt::UserRole, s.window.c_str()); } - for (auto &s : switcher->screenRegionSwitches) { + for (auto& s : switcher->screenRegionSwitches) + { string sceneName = GetWeakSourceName(s.scene); string transitionName = GetWeakSourceName(s.transition); - QString text = MakeScreenRegionSwitchName(sceneName.c_str(), transitionName.c_str(), - s.minX, s.minY, s.maxX, s.maxY); + QString text = MakeScreenRegionSwitchName( + sceneName.c_str(), transitionName.c_str(), s.minX, s.minY, s.maxX, s.maxY); - QListWidgetItem *item = new QListWidgetItem(text, - ui->screenRegions); + QListWidgetItem* item = new QListWidgetItem(text, ui->screenRegions); item->setData(Qt::UserRole, s.regionStr.c_str()); } ui->autoStopSceneCheckBox->setChecked(switcher->autoStopEnable); - ui->autoStopScenes->setCurrentText( - GetWeakSourceName(switcher->autoStopScene).c_str()); + ui->autoStopScenes->setCurrentText(GetWeakSourceName(switcher->autoStopScene).c_str()); - if (ui->autoStopSceneCheckBox->checkState()){ + if (ui->autoStopSceneCheckBox->checkState()) + { ui->autoStopScenes->setDisabled(false); } - else{ + else + { ui->autoStopScenes->setDisabled(true); } - for (auto &scene : switcher->pauseScenesSwitches) { + for (auto& scene : switcher->pauseScenesSwitches) + { string sceneName = GetWeakSourceName(scene); QString text = QString::fromStdString(sceneName); - QListWidgetItem *item = new QListWidgetItem(text, - ui->pauseScenes); + QListWidgetItem* item = new QListWidgetItem(text, ui->pauseScenes); item->setData(Qt::UserRole, text); } - for (auto &window : switcher->pauseWindowsSwitches) { + for (auto& window : switcher->pauseWindowsSwitches) + { QString text = QString::fromStdString(window); - QListWidgetItem *item = new QListWidgetItem(text, - ui->pauseWindows); + QListWidgetItem* item = new QListWidgetItem(text, ui->pauseWindows); item->setData(Qt::UserRole, text); } - for (auto &window : switcher->ignoreWindowsSwitches) { + for (auto& window : switcher->ignoreWindowsSwitches) + { QString text = QString::fromStdString(window); - QListWidgetItem *item = new QListWidgetItem(text, - ui->ignoreWindows); + QListWidgetItem* item = new QListWidgetItem(text, ui->ignoreWindows); item->setData(Qt::UserRole, text); } - for (auto &s : switcher->sceneRoundTripSwitches) { + for (auto& s : switcher->sceneRoundTripSwitches) + { string sceneName1 = GetWeakSourceName(s.scene1); string sceneName2 = GetWeakSourceName(s.scene2); string transitionName = GetWeakSourceName(s.transition); - QString text = MakeSceneRoundTripSwitchName(sceneName1.c_str(), - sceneName2.c_str(), transitionName.c_str(), - s.delay); + QString text = MakeSceneRoundTripSwitchName( + sceneName1.c_str(), sceneName2.c_str(), transitionName.c_str(), s.delay); - QListWidgetItem *item = new QListWidgetItem(text, - ui->sceneRoundTrips); + QListWidgetItem* item = new QListWidgetItem(text, ui->sceneRoundTrips); item->setData(Qt::UserRole, text); } - for (auto &s : switcher->sceneTransitions) { + for (auto& s : switcher->sceneTransitions) + { string sceneName1 = GetWeakSourceName(s.scene1); string sceneName2 = GetWeakSourceName(s.scene2); string transitionName = GetWeakSourceName(s.transition); - QString text = MakeSceneTransitionName(sceneName1.c_str(), - sceneName2.c_str(), transitionName.c_str()); + QString text = MakeSceneTransitionName( + sceneName1.c_str(), sceneName2.c_str(), transitionName.c_str()); - QListWidgetItem *item = new QListWidgetItem(text, - ui->sceneTransitions); + QListWidgetItem* item = new QListWidgetItem(text, ui->sceneTransitions); item->setData(Qt::UserRole, text); } @@ -420,11 +466,13 @@ SceneSwitcher::SceneSwitcher(QWidget *parent) ui->readFileCheckBox->setChecked(switcher->fileIO.readEnabled); ui->writePathLineEdit->setText(QString::fromStdString(switcher->fileIO.writePath.c_str())); - if (ui->readFileCheckBox->checkState()){ + if (ui->readFileCheckBox->checkState()) + { ui->browseButton_2->setDisabled(false); ui->readPathLineEdit->setDisabled(false); } - else{ + else + { ui->browseButton_2->setDisabled(true); ui->readPathLineEdit->setDisabled(true); } @@ -436,8 +484,8 @@ SceneSwitcher::SceneSwitcher(QWidget *parent) loading = false; - //screen region cursor position - QTimer *screenRegionTimer = new QTimer(this); + // screen region cursor position + QTimer* screenRegionTimer = new QTimer(this); connect(screenRegionTimer, SIGNAL(timeout()), this, SLOT(updateScreenRegionCursorPos())); screenRegionTimer->start(1000); } @@ -447,17 +495,18 @@ void SceneSwitcher::closeEvent(QCloseEvent*) obs_frontend_save(); } -int SceneSwitcher::FindByData(const QString &window) +int SceneSwitcher::FindByData(const QString& window) { int count = ui->switches->count(); int idx = -1; - for (int i = 0; i < count; i++) { - QListWidgetItem *item = ui->switches->item(i); - QString itemWindow = - item->data(Qt::UserRole).toString(); + for (int i = 0; i < count; i++) + { + QListWidgetItem* item = ui->switches->item(i); + QString itemWindow = item->data(Qt::UserRole).toString(); - if (itemWindow == window) { + if (itemWindow == window) + { idx = i; break; } @@ -466,17 +515,18 @@ int SceneSwitcher::FindByData(const QString &window) return idx; } -int SceneSwitcher::ScreenRegionFindByData(const QString ®ion) +int SceneSwitcher::ScreenRegionFindByData(const QString& region) { int count = ui->screenRegions->count(); int idx = -1; - for (int i = 0; i < count; i++) { - QListWidgetItem *item = ui->screenRegions->item(i); - QString itemRegion = - item->data(Qt::UserRole).toString(); + for (int i = 0; i < count; i++) + { + QListWidgetItem* item = ui->screenRegions->item(i); + QString itemRegion = item->data(Qt::UserRole).toString(); - if (itemRegion == region) { + if (itemRegion == region) + { idx = i; break; } @@ -485,17 +535,18 @@ int SceneSwitcher::ScreenRegionFindByData(const QString ®ion) return idx; } -int SceneSwitcher::PauseScenesFindByData(const QString ®ion) +int SceneSwitcher::PauseScenesFindByData(const QString& region) { int count = ui->pauseScenes->count(); int idx = -1; - for (int i = 0; i < count; i++) { - QListWidgetItem *item = ui->pauseScenes->item(i); - QString itemRegion = - item->data(Qt::UserRole).toString(); + for (int i = 0; i < count; i++) + { + QListWidgetItem* item = ui->pauseScenes->item(i); + QString itemRegion = item->data(Qt::UserRole).toString(); - if (itemRegion == region) { + if (itemRegion == region) + { idx = i; break; } @@ -504,17 +555,18 @@ int SceneSwitcher::PauseScenesFindByData(const QString ®ion) return idx; } -int SceneSwitcher::PauseWindowsFindByData(const QString ®ion) +int SceneSwitcher::PauseWindowsFindByData(const QString& region) { int count = ui->pauseWindows->count(); int idx = -1; - for (int i = 0; i < count; i++) { - QListWidgetItem *item = ui->pauseWindows->item(i); - QString itemRegion = - item->data(Qt::UserRole).toString(); + for (int i = 0; i < count; i++) + { + QListWidgetItem* item = ui->pauseWindows->item(i); + QString itemRegion = item->data(Qt::UserRole).toString(); - if (itemRegion == region) { + if (itemRegion == region) + { idx = i; break; } @@ -523,17 +575,18 @@ int SceneSwitcher::PauseWindowsFindByData(const QString ®ion) return idx; } -int SceneSwitcher::IgnoreWindowsFindByData(const QString ®ion) +int SceneSwitcher::IgnoreWindowsFindByData(const QString& region) { int count = ui->ignoreWindows->count(); int idx = -1; - for (int i = 0; i < count; i++) { - QListWidgetItem *item = ui->ignoreWindows->item(i); - QString itemRegion = - item->data(Qt::UserRole).toString(); + for (int i = 0; i < count; i++) + { + QListWidgetItem* item = ui->ignoreWindows->item(i); + QString itemRegion = item->data(Qt::UserRole).toString(); - if (itemRegion == region) { + if (itemRegion == region) + { idx = i; break; } @@ -542,18 +595,19 @@ int SceneSwitcher::IgnoreWindowsFindByData(const QString ®ion) return idx; } -int SceneSwitcher::SceneRoundTripFindByData(const QString &scene1) +int SceneSwitcher::SceneRoundTripFindByData(const QString& scene1) { QRegExp rx(scene1 + " -> wait for [0-9]* seconds -> .*"); int count = ui->sceneRoundTrips->count(); int idx = -1; - for (int i = 0; i < count; i++) { - QListWidgetItem *item = ui->sceneRoundTrips->item(i); - QString itemString = - item->data(Qt::UserRole).toString(); + for (int i = 0; i < count; i++) + { + QListWidgetItem* item = ui->sceneRoundTrips->item(i); + QString itemString = item->data(Qt::UserRole).toString(); - if (rx.exactMatch(itemString)) { + if (rx.exactMatch(itemString)) + { idx = i; break; } @@ -562,18 +616,19 @@ int SceneSwitcher::SceneRoundTripFindByData(const QString &scene1) return idx; } -int SceneSwitcher::SceneTransitionsFindByData(const QString &scene1, const QString &scene2) +int SceneSwitcher::SceneTransitionsFindByData(const QString& scene1, const QString& scene2) { QRegExp rx(scene1 + " --- .* --> " + scene2); int count = ui->sceneTransitions->count(); int idx = -1; - for (int i = 0; i < count; i++) { - QListWidgetItem *item = ui->sceneTransitions->item(i); - QString itemString = - item->data(Qt::UserRole).toString(); + for (int i = 0; i < count; i++) + { + QListWidgetItem* item = ui->sceneTransitions->item(i); + QString itemString = item->data(Qt::UserRole).toString(); - if (rx.exactMatch(itemString)) { + if (rx.exactMatch(itemString)) + { idx = i; break; } @@ -589,13 +644,15 @@ void SceneSwitcher::on_switches_currentRowChanged(int idx) if (idx == -1) return; - QListWidgetItem *item = ui->switches->item(idx); + QListWidgetItem* item = ui->switches->item(idx); QString window = item->data(Qt::UserRole).toString(); lock_guard lock(switcher->m); - for (auto &s : switcher->switches) { - if (window.compare(s.window.c_str()) == 0) { + for (auto& s : switcher->switches) + { + if (window.compare(s.window.c_str()) == 0) + { string name = GetWeakSourceName(s.scene); string transitionName = GetWeakSourceName(s.transition); ui->scenes->setCurrentText(name.c_str()); @@ -614,13 +671,15 @@ void SceneSwitcher::on_screenRegions_currentRowChanged(int idx) if (idx == -1) return; - QListWidgetItem *item = ui->screenRegions->item(idx); + QListWidgetItem* item = ui->screenRegions->item(idx); QString region = item->data(Qt::UserRole).toString(); lock_guard lock(switcher->m); - for (auto &s : switcher->screenRegionSwitches) { - if (region.compare(s.regionStr.c_str()) == 0) { + for (auto& s : switcher->screenRegionSwitches) + { + if (region.compare(s.regionStr.c_str()) == 0) + { string name = GetWeakSourceName(s.scene); string transitionName = GetWeakSourceName(s.transition); ui->screenRegionScenes->setCurrentText(name.c_str()); @@ -641,14 +700,16 @@ void SceneSwitcher::on_pauseScenes_currentRowChanged(int idx) if (idx == -1) return; - QListWidgetItem *item = ui->pauseScenes->item(idx); + QListWidgetItem* item = ui->pauseScenes->item(idx); QString scene = item->data(Qt::UserRole).toString(); lock_guard lock(switcher->m); - for (auto &s : switcher->pauseScenesSwitches) { + for (auto& s : switcher->pauseScenesSwitches) + { string name = GetWeakSourceName(s); - if (scene.compare(name.c_str()) == 0) { + if (scene.compare(name.c_str()) == 0) + { ui->pauseScenesScenes->setCurrentText(name.c_str()); break; } @@ -662,13 +723,15 @@ void SceneSwitcher::on_pauseWindows_currentRowChanged(int idx) if (idx == -1) return; - QListWidgetItem *item = ui->pauseWindows->item(idx); + QListWidgetItem* item = ui->pauseWindows->item(idx); QString window = item->data(Qt::UserRole).toString(); lock_guard lock(switcher->m); - for (auto &s : switcher->pauseWindowsSwitches) { - if (window.compare(s.c_str()) == 0) { + for (auto& s : switcher->pauseWindowsSwitches) + { + if (window.compare(s.c_str()) == 0) + { ui->pauseWindowsWindows->setCurrentText(s.c_str()); break; } @@ -682,13 +745,15 @@ void SceneSwitcher::on_ignoreWindows_currentRowChanged(int idx) if (idx == -1) return; - QListWidgetItem *item = ui->ignoreWindows->item(idx); + QListWidgetItem* item = ui->ignoreWindows->item(idx); QString window = item->data(Qt::UserRole).toString(); lock_guard lock(switcher->m); - for (auto &s : switcher->ignoreWindowsSwitches) { - if (window.compare(s.c_str()) == 0) { + for (auto& s : switcher->ignoreWindowsSwitches) + { + if (window.compare(s.c_str()) == 0) + { ui->ignoreWindowsWindows->setCurrentText(s.c_str()); break; } @@ -702,13 +767,15 @@ void SceneSwitcher::on_sceneRoundTrips_currentRowChanged(int idx) if (idx == -1) return; - QListWidgetItem *item = ui->sceneRoundTrips->item(idx); + QListWidgetItem* item = ui->sceneRoundTrips->item(idx); QString sceneRoundTrip = item->data(Qt::UserRole).toString(); lock_guard lock(switcher->m); - for (auto &s : switcher->sceneRoundTripSwitches) { - if (sceneRoundTrip.compare(s.sceneRoundTripStr.c_str()) == 0) { + for (auto& s : switcher->sceneRoundTripSwitches) + { + if (sceneRoundTrip.compare(s.sceneRoundTripStr.c_str()) == 0) + { string scene1 = GetWeakSourceName(s.scene1); string scene2 = GetWeakSourceName(s.scene2); string transitionName = GetWeakSourceName(s.transition); @@ -729,13 +796,15 @@ void SceneSwitcher::on_sceneTransitions_currentRowChanged(int idx) if (idx == -1) return; - QListWidgetItem *item = ui->sceneTransitions->item(idx); + QListWidgetItem* item = ui->sceneTransitions->item(idx); QString sceneTransition = item->data(Qt::UserRole).toString(); lock_guard lock(switcher->m); - for (auto &s : switcher->sceneTransitions) { - if (sceneTransition.compare(s.sceneTransitionStr.c_str()) == 0) { + for (auto& s : switcher->sceneTransitions) + { + if (sceneTransition.compare(s.sceneTransitionStr.c_str()) == 0) + { string scene1 = GetWeakSourceName(s.scene1); string scene2 = GetWeakSourceName(s.scene2); string transitionName = GetWeakSourceName(s.transition); @@ -770,25 +839,28 @@ void SceneSwitcher::on_add_clicked() int idx = FindByData(windowName); - if (idx == -1) { + if (idx == -1) + { lock_guard lock(switcher->m); - switcher->switches.emplace_back(source, - windowName.toUtf8().constData(), transition, fullscreen); + switcher->switches.emplace_back( + source, windowName.toUtf8().constData(), transition, fullscreen); - QListWidgetItem *item = new QListWidgetItem(text, - ui->switches); + QListWidgetItem* item = new QListWidgetItem(text, ui->switches); item->setData(Qt::UserRole, v); } - else { - QListWidgetItem *item = ui->switches->item(idx); + else + { + QListWidgetItem* item = ui->switches->item(idx); item->setText(text); string window = windowName.toUtf8().constData(); { lock_guard lock(switcher->m); - for (auto &s : switcher->switches) { - if (s.window == window) { + for (auto& s : switcher->switches) + { + if (s.window == window) + { s.scene = source; s.transition = transition; s.fullscreen = fullscreen; @@ -803,21 +875,22 @@ void SceneSwitcher::on_add_clicked() void SceneSwitcher::on_remove_clicked() { - QListWidgetItem *item = ui->switches->currentItem(); + QListWidgetItem* item = ui->switches->currentItem(); if (!item) return; - string window = - item->data(Qt::UserRole).toString().toUtf8().constData(); + string window = item->data(Qt::UserRole).toString().toUtf8().constData(); { lock_guard lock(switcher->m); - auto &switches = switcher->switches; + auto& switches = switcher->switches; - for (auto it = switches.begin(); it != switches.end(); ++it) { - auto &s = *it; + for (auto it = switches.begin(); it != switches.end(); ++it) + { + auto& s = *it; - if (s.window == window) { + if (s.window == window) + { switches.erase(it); break; } @@ -827,7 +900,6 @@ void SceneSwitcher::on_remove_clicked() delete item; } - void SceneSwitcher::on_screenRegionAdd_clicked() { QString sceneName = ui->screenRegionScenes->currentText(); @@ -841,7 +913,8 @@ void SceneSwitcher::on_screenRegionAdd_clicked() int maxX = ui->screenRegionMaxX->value(); int maxY = ui->screenRegionMaxY->value(); - string regionStr = to_string(minX) + ", " + to_string(minY) + " x " + to_string(maxX) + ", " + to_string(maxY); + string regionStr = to_string(minX) + ", " + to_string(minY) + " x " + to_string(maxX) + ", " + + to_string(maxY); QString region = QString::fromStdString(regionStr); OBSWeakSource source = GetWeakSourceByQString(sceneName); @@ -852,25 +925,28 @@ void SceneSwitcher::on_screenRegionAdd_clicked() int idx = ScreenRegionFindByData(region); - if (idx == -1) { - QListWidgetItem *item = new QListWidgetItem(text, - ui->screenRegions); + if (idx == -1) + { + QListWidgetItem* item = new QListWidgetItem(text, ui->screenRegions); item->setData(Qt::UserRole, v); lock_guard lock(switcher->m); - switcher->screenRegionSwitches.emplace_back(source, transition, - minX, minY, maxX, maxY, regionStr); + switcher->screenRegionSwitches.emplace_back( + source, transition, minX, minY, maxX, maxY, regionStr); } - else { - QListWidgetItem *item = ui->screenRegions->item(idx); + else + { + QListWidgetItem* item = ui->screenRegions->item(idx); item->setText(text); string curRegion = region.toUtf8().constData(); { lock_guard lock(switcher->m); - for (auto &s : switcher->screenRegionSwitches) { - if (s.regionStr == curRegion) { + for (auto& s : switcher->screenRegionSwitches) + { + if (s.regionStr == curRegion) + { s.scene = source; s.transition = transition; break; @@ -884,21 +960,22 @@ void SceneSwitcher::on_screenRegionAdd_clicked() void SceneSwitcher::on_screenRegionRemove_clicked() { - QListWidgetItem *item = ui->screenRegions->currentItem(); + QListWidgetItem* item = ui->screenRegions->currentItem(); if (!item) return; - string region = - item->data(Qt::UserRole).toString().toUtf8().constData(); + string region = item->data(Qt::UserRole).toString().toUtf8().constData(); { lock_guard lock(switcher->m); - auto &switches = switcher->screenRegionSwitches; + auto& switches = switcher->screenRegionSwitches; - for (auto it = switches.begin(); it != switches.end(); ++it) { - auto &s = *it; + for (auto it = switches.begin(); it != switches.end(); ++it) + { + auto& s = *it; - if (s.regionStr == region) { + if (s.regionStr == region) + { switches.erase(it); break; } @@ -918,11 +995,11 @@ void SceneSwitcher::on_pauseScenesAdd_clicked() OBSWeakSource source = GetWeakSourceByQString(sceneName); QVariant v = QVariant::fromValue(sceneName); - QList items = ui->pauseScenes->findItems(sceneName, Qt::MatchExactly); + QList items = ui->pauseScenes->findItems(sceneName, Qt::MatchExactly); - if (items.size() == 0) { - QListWidgetItem *item = new QListWidgetItem(sceneName, - ui->pauseScenes); + if (items.size() == 0) + { + QListWidgetItem* item = new QListWidgetItem(sceneName, ui->pauseScenes); item->setData(Qt::UserRole, v); lock_guard lock(switcher->m); @@ -933,21 +1010,22 @@ void SceneSwitcher::on_pauseScenesAdd_clicked() void SceneSwitcher::on_pauseScenesRemove_clicked() { - QListWidgetItem *item = ui->pauseScenes->currentItem(); + QListWidgetItem* item = ui->pauseScenes->currentItem(); if (!item) return; - QString pauseScene = - item->data(Qt::UserRole).toString(); + QString pauseScene = item->data(Qt::UserRole).toString(); { lock_guard lock(switcher->m); - auto &switches = switcher->pauseScenesSwitches; + auto& switches = switcher->pauseScenesSwitches; - for (auto it = switches.begin(); it != switches.end(); ++it) { - auto &s = *it; + for (auto it = switches.begin(); it != switches.end(); ++it) + { + auto& s = *it; - if (s == GetWeakSourceByQString(pauseScene)) { + if (s == GetWeakSourceByQString(pauseScene)) + { switches.erase(it); break; } @@ -966,11 +1044,11 @@ void SceneSwitcher::on_pauseWindowsAdd_clicked() QVariant v = QVariant::fromValue(windowName); - QList items = ui->pauseWindows->findItems(windowName, Qt::MatchExactly); + QList items = ui->pauseWindows->findItems(windowName, Qt::MatchExactly); - if (items.size() == 0) { - QListWidgetItem *item = new QListWidgetItem(windowName, - ui->pauseWindows); + if (items.size() == 0) + { + QListWidgetItem* item = new QListWidgetItem(windowName, ui->pauseWindows); item->setData(Qt::UserRole, v); lock_guard lock(switcher->m); @@ -981,21 +1059,22 @@ void SceneSwitcher::on_pauseWindowsAdd_clicked() void SceneSwitcher::on_pauseWindowsRemove_clicked() { - QListWidgetItem *item = ui->pauseWindows->currentItem(); + QListWidgetItem* item = ui->pauseWindows->currentItem(); if (!item) return; - QString windowName = - item->data(Qt::UserRole).toString(); + QString windowName = item->data(Qt::UserRole).toString(); { lock_guard lock(switcher->m); - auto &switches = switcher->pauseWindowsSwitches; + auto& switches = switcher->pauseWindowsSwitches; - for (auto it = switches.begin(); it != switches.end(); ++it) { - auto &s = *it; + for (auto it = switches.begin(); it != switches.end(); ++it) + { + auto& s = *it; - if (s == windowName.toUtf8().constData()) { + if (s == windowName.toUtf8().constData()) + { switches.erase(it); break; } @@ -1014,11 +1093,11 @@ void SceneSwitcher::on_ignoreWindowsAdd_clicked() QVariant v = QVariant::fromValue(windowName); - QList items = ui->ignoreWindows->findItems(windowName, Qt::MatchExactly); + QList items = ui->ignoreWindows->findItems(windowName, Qt::MatchExactly); - if (items.size() == 0) { - QListWidgetItem *item = new QListWidgetItem(windowName, - ui->ignoreWindows); + if (items.size() == 0) + { + QListWidgetItem* item = new QListWidgetItem(windowName, ui->ignoreWindows); item->setData(Qt::UserRole, v); lock_guard lock(switcher->m); @@ -1029,21 +1108,22 @@ void SceneSwitcher::on_ignoreWindowsAdd_clicked() void SceneSwitcher::on_ignoreWindowsRemove_clicked() { - QListWidgetItem *item = ui->ignoreWindows->currentItem(); + QListWidgetItem* item = ui->ignoreWindows->currentItem(); if (!item) return; - QString windowName = - item->data(Qt::UserRole).toString(); + QString windowName = item->data(Qt::UserRole).toString(); { lock_guard lock(switcher->m); - auto &switches = switcher->ignoreWindowsSwitches; + auto& switches = switcher->ignoreWindowsSwitches; - for (auto it = switches.begin(); it != switches.end(); ++it) { - auto &s = *it; + for (auto it = switches.begin(); it != switches.end(); ++it) + { + auto& s = *it; - if (s == windowName.toUtf8().constData()) { + if (s == windowName.toUtf8().constData()) + { switches.erase(it); break; } @@ -1076,22 +1156,26 @@ void SceneSwitcher::on_sceneRoundTripAdd_clicked() int idx = SceneRoundTripFindByData(scene1Name); - if (idx == -1) { - QListWidgetItem *item = new QListWidgetItem(text, - ui->sceneRoundTrips); + if (idx == -1) + { + QListWidgetItem* item = new QListWidgetItem(text, ui->sceneRoundTrips); item->setData(Qt::UserRole, v); lock_guard lock(switcher->m); - switcher->sceneRoundTripSwitches.emplace_back(source1, source2, transition, delay, text.toUtf8().constData()); + switcher->sceneRoundTripSwitches.emplace_back( + source1, source2, transition, delay, text.toUtf8().constData()); } - else { - QListWidgetItem *item = ui->sceneRoundTrips->item(idx); + else + { + QListWidgetItem* item = ui->sceneRoundTrips->item(idx); item->setText(text); { lock_guard lock(switcher->m); - for (auto &s : switcher->sceneRoundTripSwitches) { - if (s.scene1 == source1 && s.scene2 == source2) { + for (auto& s : switcher->sceneRoundTripSwitches) + { + if (s.scene1 == source1 && s.scene2 == source2) + { s.delay = delay; s.transition = transition; s.sceneRoundTripStr = text.toUtf8().constData(); @@ -1106,21 +1190,22 @@ void SceneSwitcher::on_sceneRoundTripAdd_clicked() void SceneSwitcher::on_sceneRoundTripRemove_clicked() { - QListWidgetItem *item = ui->sceneRoundTrips->currentItem(); + QListWidgetItem* item = ui->sceneRoundTrips->currentItem(); if (!item) return; - string text = - item->data(Qt::UserRole).toString().toUtf8().constData(); + string text = item->data(Qt::UserRole).toString().toUtf8().constData(); { lock_guard lock(switcher->m); - auto &switches = switcher->sceneRoundTripSwitches; + auto& switches = switcher->sceneRoundTripSwitches; - for (auto it = switches.begin(); it != switches.end(); ++it) { - auto &s = *it; + for (auto it = switches.begin(); it != switches.end(); ++it) + { + auto& s = *it; - if (s.sceneRoundTripStr == text) { + if (s.sceneRoundTripStr == text) + { switches.erase(it); break; } @@ -1136,21 +1221,22 @@ void SceneSwitcher::on_autoStopSceneCheckBox_stateChanged(int state) return; lock_guard lock(switcher->m); - if (!state){ + if (!state) + { ui->autoStopScenes->setDisabled(true); switcher->autoStopEnable = false; } - else{ + else + { ui->autoStopScenes->setDisabled(false); switcher->autoStopEnable = true; } } -void SceneSwitcher::UpdateAutoStopScene(const QString &name) +void SceneSwitcher::UpdateAutoStopScene(const QString& name) { - obs_source_t *scene = obs_get_source_by_name( - name.toUtf8().constData()); - obs_weak_source_t *ws = obs_source_get_weak_source(scene); + obs_source_t* scene = obs_get_source_by_name(name.toUtf8().constData()); + obs_weak_source_t* ws = obs_source_get_weak_source(scene); switcher->autoStopScene = ws; @@ -1158,8 +1244,7 @@ void SceneSwitcher::UpdateAutoStopScene(const QString &name) obs_source_release(scene); } -void SceneSwitcher::on_autoStopScenes_currentTextChanged( - const QString &text) +void SceneSwitcher::on_autoStopScenes_currentTextChanged(const QString& text) { if (loading) return; @@ -1189,22 +1274,26 @@ void SceneSwitcher::on_transitionsAdd_clicked() int idx = SceneTransitionsFindByData(scene1Name, scene2Name); - if (idx == -1) { - QListWidgetItem *item = new QListWidgetItem(text, - ui->sceneTransitions); + if (idx == -1) + { + QListWidgetItem* item = new QListWidgetItem(text, ui->sceneTransitions); item->setData(Qt::UserRole, v); lock_guard lock(switcher->m); - switcher->sceneTransitions.emplace_back(source1, source2, transition, text.toUtf8().constData()); + switcher->sceneTransitions.emplace_back( + source1, source2, transition, text.toUtf8().constData()); } - else { - QListWidgetItem *item = ui->sceneTransitions->item(idx); + else + { + QListWidgetItem* item = ui->sceneTransitions->item(idx); item->setText(text); { lock_guard lock(switcher->m); - for (auto &s : switcher->sceneTransitions) { - if (s.scene1 == source1 && s.scene2 == source2) { + for (auto& s : switcher->sceneTransitions) + { + if (s.scene1 == source1 && s.scene2 == source2) + { s.transition = transition; s.sceneTransitionStr = text.toUtf8().constData(); break; @@ -1218,21 +1307,22 @@ void SceneSwitcher::on_transitionsAdd_clicked() void SceneSwitcher::on_transitionsRemove_clicked() { - QListWidgetItem *item = ui->sceneTransitions->currentItem(); + QListWidgetItem* item = ui->sceneTransitions->currentItem(); if (!item) return; - string text = - item->data(Qt::UserRole).toString().toUtf8().constData(); + string text = item->data(Qt::UserRole).toString().toUtf8().constData(); { lock_guard lock(switcher->m); - auto &switches = switcher->sceneTransitions; + auto& switches = switcher->sceneTransitions; - for (auto it = switches.begin(); it != switches.end(); ++it) { - auto &s = *it; + for (auto it = switches.begin(); it != switches.end(); ++it) + { + auto& s = *it; - if (s.sceneTransitionStr == text) { + if (s.sceneTransitionStr == text) + { switches.erase(it); break; } @@ -1244,8 +1334,8 @@ void SceneSwitcher::on_transitionsRemove_clicked() void SceneSwitcher::on_browseButton_clicked() { - QString directory = QFileDialog::getOpenFileName(this, - tr("Select a file to write to ..."), QDir::currentPath(), tr("Text files (*.txt)")); + QString directory = QFileDialog::getOpenFileName( + this, tr("Select a file to write to ..."), QDir::currentPath(), tr("Text files (*.txt)")); if (!directory.isEmpty()) ui->writePathLineEdit->setText(directory); } @@ -1256,25 +1346,28 @@ void SceneSwitcher::on_readFileCheckBox_stateChanged(int state) return; lock_guard lock(switcher->m); - if (!state){ + if (!state) + { ui->browseButton_2->setDisabled(true); ui->readPathLineEdit->setDisabled(true); switcher->fileIO.readEnabled = false; } - else{ + else + { ui->browseButton_2->setDisabled(false); ui->readPathLineEdit->setDisabled(false); switcher->fileIO.readEnabled = true; } } -void SceneSwitcher::on_readPathLineEdit_textChanged(const QString & text) +void SceneSwitcher::on_readPathLineEdit_textChanged(const QString& text) { if (loading) return; lock_guard lock(switcher->m); - if (text.isEmpty()){ + if (text.isEmpty()) + { switcher->fileIO.readEnabled = false; return; } @@ -1282,13 +1375,14 @@ void SceneSwitcher::on_readPathLineEdit_textChanged(const QString & text) switcher->fileIO.readPath = text.toUtf8().constData(); } -void SceneSwitcher::on_writePathLineEdit_textChanged(const QString & text) +void SceneSwitcher::on_writePathLineEdit_textChanged(const QString& text) { if (loading) return; lock_guard lock(switcher->m); - if (text.isEmpty()){ + if (text.isEmpty()) + { switcher->fileIO.writeEnabled = false; return; } @@ -1298,8 +1392,8 @@ void SceneSwitcher::on_writePathLineEdit_textChanged(const QString & text) void SceneSwitcher::on_browseButton_2_clicked() { - QString directory = QFileDialog::getOpenFileName(this, - tr("Select a file to read from ..."), QDir::currentPath(), tr("Text files (*.txt)")); + QString directory = QFileDialog::getOpenFileName( + this, tr("Select a file to read from ..."), QDir::currentPath(), tr("Text files (*.txt)")); if (!directory.isEmpty()) ui->readPathLineEdit->setText(directory); } @@ -1313,11 +1407,10 @@ void SceneSwitcher::on_startAtLaunch_toggled(bool value) switcher->startAtLaunch = value; } -void SceneSwitcher::UpdateNonMatchingScene(const QString &name) +void SceneSwitcher::UpdateNonMatchingScene(const QString& name) { - obs_source_t *scene = obs_get_source_by_name( - name.toUtf8().constData()); - obs_weak_source_t *ws = obs_source_get_weak_source(scene); + obs_source_t* scene = obs_get_source_by_name(name.toUtf8().constData()); + obs_weak_source_t* ws = obs_source_get_weak_source(scene); switcher->nonMatchingScene = ws; @@ -1344,8 +1437,7 @@ void SceneSwitcher::on_noMatchSwitch_clicked() UpdateNonMatchingScene(ui->noMatchSwitchScene->currentText()); } -void SceneSwitcher::on_noMatchSwitchScene_currentTextChanged( - const QString &text) +void SceneSwitcher::on_noMatchSwitchScene_currentTextChanged(const QString& text) { if (loading) return; @@ -1377,55 +1469,57 @@ void SceneSwitcher::SetStopped() void SceneSwitcher::on_toggleStartButton_clicked() { - if (switcher->th.joinable()) { + if (switcher->th.joinable()) + { switcher->Stop(); SetStopped(); } - else if (switcher->stop){ + else if (switcher->stop) + { switcher->Start(); SetStarted(); } } -void SceneSwitcher::updateScreenRegionCursorPos(){ - pairposition = getCursorPos(); - ui->cursorXPosition->setText(QString::number(position.first));; +void SceneSwitcher::updateScreenRegionCursorPos() +{ + pair position = getCursorPos(); + ui->cursorXPosition->setText(QString::number(position.first)); + ; ui->cursorYPosition->setText(QString::number(position.second)); } -//TODO rename the save values (clears settings!) -static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) +// TODO rename the save values (clears settings!) +static void SaveSceneSwitcher(obs_data_t* save_data, bool saving, void*) { - if (saving) { + if (saving) + { lock_guard lock(switcher->m); - obs_data_t *obj = obs_data_create(); - obs_data_array_t *array = obs_data_array_create(); - obs_data_array_t *screenRegionArray = obs_data_array_create(); - obs_data_array_t *pauseScenesArray = obs_data_array_create(); - obs_data_array_t *pauseWindowsArray = obs_data_array_create(); - obs_data_array_t *ignoreWindowsArray = obs_data_array_create(); - obs_data_array_t *sceneRoundTripArray = obs_data_array_create(); - obs_data_array_t *sceneTransitionsArray = obs_data_array_create(); + obs_data_t* obj = obs_data_create(); + obs_data_array_t* array = obs_data_array_create(); + obs_data_array_t* screenRegionArray = obs_data_array_create(); + obs_data_array_t* pauseScenesArray = obs_data_array_create(); + obs_data_array_t* pauseWindowsArray = obs_data_array_create(); + obs_data_array_t* ignoreWindowsArray = obs_data_array_create(); + obs_data_array_t* sceneRoundTripArray = obs_data_array_create(); + obs_data_array_t* sceneTransitionsArray = obs_data_array_create(); switcher->Prune(); - for (SceneSwitch &s : switcher->switches) { - obs_data_t *array_obj = obs_data_create(); + for (SceneSwitch& s : switcher->switches) + { + obs_data_t* array_obj = obs_data_create(); - obs_source_t *source = obs_weak_source_get_source( - s.scene); - obs_source_t *transition = obs_weak_source_get_source( - s.transition); - if (source) { - const char *sceneName = obs_source_get_name(source); - const char *transitionName = obs_source_get_name(transition); + obs_source_t* source = obs_weak_source_get_source(s.scene); + obs_source_t* transition = obs_weak_source_get_source(s.transition); + if (source) + { + const char* sceneName = obs_source_get_name(source); + const char* transitionName = obs_source_get_name(transition); obs_data_set_string(array_obj, "scene", sceneName); - obs_data_set_string(array_obj, "transition", - transitionName); - obs_data_set_string(array_obj, "window_title", - s.window.c_str()); - obs_data_set_bool(array_obj, "fullscreen", - s.fullscreen); + obs_data_set_string(array_obj, "transition", transitionName); + obs_data_set_string(array_obj, "window_title", s.window.c_str()); + obs_data_set_bool(array_obj, "fullscreen", s.fullscreen); obs_data_array_push_back(array, array_obj); obs_source_release(source); obs_source_release(transition); @@ -1434,29 +1528,23 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) obs_data_release(array_obj); } - for (ScreenRegionSwitch &s : switcher->screenRegionSwitches) { - obs_data_t *array_obj = obs_data_create(); + for (ScreenRegionSwitch& s : switcher->screenRegionSwitches) + { + obs_data_t* array_obj = obs_data_create(); - obs_source_t *source = obs_weak_source_get_source( - s.scene); - obs_source_t *transition = obs_weak_source_get_source( - s.transition); - if (source) { - const char *sceneName = obs_source_get_name(source); - const char *transitionName = obs_source_get_name(transition); + obs_source_t* source = obs_weak_source_get_source(s.scene); + obs_source_t* transition = obs_weak_source_get_source(s.transition); + if (source) + { + const char* sceneName = obs_source_get_name(source); + const char* transitionName = obs_source_get_name(transition); obs_data_set_string(array_obj, "screenRegionScene", sceneName); - obs_data_set_string(array_obj, "transition", - transitionName); - obs_data_set_int(array_obj, "minX", - s.minX); - obs_data_set_int(array_obj, "minY", - s.minY); - obs_data_set_int(array_obj, "maxX", - s.maxX); - obs_data_set_int(array_obj, "maxY", - s.maxY); - obs_data_set_string(array_obj, "screenRegionStr", - s.regionStr.c_str()); + obs_data_set_string(array_obj, "transition", transitionName); + obs_data_set_int(array_obj, "minX", s.minX); + obs_data_set_int(array_obj, "minY", s.minY); + obs_data_set_int(array_obj, "maxX", s.maxX); + obs_data_set_int(array_obj, "maxY", s.maxY); + obs_data_set_string(array_obj, "screenRegionStr", s.regionStr.c_str()); obs_data_array_push_back(screenRegionArray, array_obj); obs_source_release(source); obs_source_release(transition); @@ -1465,13 +1553,14 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) obs_data_release(array_obj); } - for (OBSWeakSource &scene : switcher->pauseScenesSwitches) { - obs_data_t *array_obj = obs_data_create(); + for (OBSWeakSource& scene : switcher->pauseScenesSwitches) + { + obs_data_t* array_obj = obs_data_create(); - obs_source_t *source = obs_weak_source_get_source( - scene); - if (source) { - const char *n = obs_source_get_name(source); + obs_source_t* source = obs_weak_source_get_source(scene); + if (source) + { + const char* n = obs_source_get_name(source); obs_data_set_string(array_obj, "pauseScene", n); obs_data_array_push_back(pauseScenesArray, array_obj); obs_source_release(source); @@ -1480,39 +1569,38 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) obs_data_release(array_obj); } - for (string &window : switcher->pauseWindowsSwitches) { - obs_data_t *array_obj = obs_data_create(); + for (string& window : switcher->pauseWindowsSwitches) + { + obs_data_t* array_obj = obs_data_create(); obs_data_set_string(array_obj, "pauseWindow", window.c_str()); obs_data_array_push_back(pauseWindowsArray, array_obj); obs_data_release(array_obj); } - for (string &window : switcher->ignoreWindowsSwitches) { - obs_data_t *array_obj = obs_data_create(); + for (string& window : switcher->ignoreWindowsSwitches) + { + obs_data_t* array_obj = obs_data_create(); obs_data_set_string(array_obj, "ignoreWindow", window.c_str()); obs_data_array_push_back(ignoreWindowsArray, array_obj); obs_data_release(array_obj); } - for (SceneRoundTripSwitch &s : switcher->sceneRoundTripSwitches) { - obs_data_t *array_obj = obs_data_create(); + for (SceneRoundTripSwitch& s : switcher->sceneRoundTripSwitches) + { + obs_data_t* array_obj = obs_data_create(); - obs_source_t *source1 = obs_weak_source_get_source( - s.scene1); - obs_source_t *source2 = obs_weak_source_get_source( - s.scene2); - obs_source_t *transition = obs_weak_source_get_source( - s.transition); - if (source1 && source2) { - const char *sceneName1 = obs_source_get_name(source1); - const char *sceneName2 = obs_source_get_name(source2); - const char *transitionName = obs_source_get_name(transition); + obs_source_t* source1 = obs_weak_source_get_source(s.scene1); + obs_source_t* source2 = obs_weak_source_get_source(s.scene2); + obs_source_t* transition = obs_weak_source_get_source(s.transition); + if (source1 && source2) + { + const char* sceneName1 = obs_source_get_name(source1); + const char* sceneName2 = obs_source_get_name(source2); + const char* transitionName = obs_source_get_name(transition); obs_data_set_string(array_obj, "sceneRoundTripScene1", sceneName1); obs_data_set_string(array_obj, "sceneRoundTripScene2", sceneName2); - obs_data_set_string(array_obj, "transition", - transitionName); - obs_data_set_int(array_obj, "sceneRoundTripDelay", - s.delay); + obs_data_set_string(array_obj, "transition", transitionName); + obs_data_set_int(array_obj, "sceneRoundTripDelay", s.delay); obs_data_set_string(array_obj, "sceneRoundTripStr", s.sceneRoundTripStr.c_str()); obs_data_array_push_back(sceneRoundTripArray, array_obj); obs_source_release(source1); @@ -1523,23 +1611,21 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) obs_data_release(array_obj); } - for (SceneTransition &s : switcher->sceneTransitions) { - obs_data_t *array_obj = obs_data_create(); + for (SceneTransition& s : switcher->sceneTransitions) + { + obs_data_t* array_obj = obs_data_create(); - obs_source_t *source1 = obs_weak_source_get_source( - s.scene1); - obs_source_t *source2 = obs_weak_source_get_source( - s.scene2); - obs_source_t *transition = obs_weak_source_get_source( - s.transition); - if (source1 && source2) { - const char *sceneName1 = obs_source_get_name(source1); - const char *sceneName2 = obs_source_get_name(source2); - const char *transitionName = obs_source_get_name(transition); + obs_source_t* source1 = obs_weak_source_get_source(s.scene1); + obs_source_t* source2 = obs_weak_source_get_source(s.scene2); + obs_source_t* transition = obs_weak_source_get_source(s.transition); + if (source1 && source2) + { + const char* sceneName1 = obs_source_get_name(source1); + const char* sceneName2 = obs_source_get_name(source2); + const char* transitionName = obs_source_get_name(transition); obs_data_set_string(array_obj, "Scene1", sceneName1); obs_data_set_string(array_obj, "Scene2", sceneName2); - obs_data_set_string(array_obj, "transition", - transitionName); + obs_data_set_string(array_obj, "transition", transitionName); obs_data_set_string(array_obj, "Str", s.sceneTransitionStr.c_str()); obs_data_array_push_back(sceneTransitionsArray, array_obj); obs_source_release(source1); @@ -1550,14 +1636,11 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) obs_data_release(array_obj); } - string nonMatchingSceneName = - GetWeakSourceName(switcher->nonMatchingScene); + string nonMatchingSceneName = GetWeakSourceName(switcher->nonMatchingScene); obs_data_set_int(obj, "interval", switcher->interval); - obs_data_set_string(obj, "non_matching_scene", - nonMatchingSceneName.c_str()); - obs_data_set_bool(obj, "switch_if_not_matching", - switcher->switchIfNotMatching); + obs_data_set_string(obj, "non_matching_scene", nonMatchingSceneName.c_str()); + obs_data_set_bool(obj, "switch_if_not_matching", switcher->switchIfNotMatching); obs_data_set_bool(obj, "active", switcher->th.joinable()); obs_data_set_array(obj, "switches", array); @@ -1568,8 +1651,7 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) obs_data_set_array(obj, "sceneRoundTrip", sceneRoundTripArray); obs_data_set_array(obj, "sceneTransitions", sceneTransitionsArray); - string autoStopSceneName = - GetWeakSourceName(switcher->autoStopScene); + string autoStopSceneName = GetWeakSourceName(switcher->autoStopScene); obs_data_set_bool(obj, "autoStopEnable", switcher->autoStopEnable); obs_data_set_string(obj, "autoStopSceneName", autoStopSceneName.c_str()); @@ -1590,18 +1672,18 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) obs_data_release(obj); } - else { + else + { switcher->m.lock(); - obs_data_t *obj = obs_data_get_obj(save_data, - "advanced-scene-switcher"); - obs_data_array_t *array = obs_data_get_array(obj, "switches"); - obs_data_array_t *screenRegionArray = obs_data_get_array(obj, "screenRegion"); - obs_data_array_t *pauseScenesArray = obs_data_get_array(obj, "pauseScenes"); - obs_data_array_t *pauseWindowsArray = obs_data_get_array(obj, "pauseWindows"); - obs_data_array_t *ignoreWindowsArray = obs_data_get_array(obj, "ignoreWindows"); - obs_data_array_t *sceneRoundTripArray = obs_data_get_array(obj, "sceneRoundTrip"); - obs_data_array_t *sceneTransitionsArray = obs_data_get_array(obj, "sceneTransitions"); + obs_data_t* obj = obs_data_get_obj(save_data, "advanced-scene-switcher"); + obs_data_array_t* array = obs_data_get_array(obj, "switches"); + obs_data_array_t* screenRegionArray = obs_data_get_array(obj, "screenRegion"); + obs_data_array_t* pauseScenesArray = obs_data_get_array(obj, "pauseScenes"); + obs_data_array_t* pauseWindowsArray = obs_data_get_array(obj, "pauseWindows"); + obs_data_array_t* ignoreWindowsArray = obs_data_get_array(obj, "ignoreWindows"); + obs_data_array_t* sceneRoundTripArray = obs_data_get_array(obj, "sceneRoundTrip"); + obs_data_array_t* sceneTransitionsArray = obs_data_get_array(obj, "sceneTransitions"); if (!obj) obj = obs_data_create(); @@ -1609,33 +1691,26 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) obs_data_set_default_int(obj, "interval", DEFAULT_INTERVAL); switcher->interval = obs_data_get_int(obj, "interval"); - switcher->switchIfNotMatching = - obs_data_get_bool(obj, "switch_if_not_matching"); - string nonMatchingScene = - obs_data_get_string(obj, "non_matching_scene"); + switcher->switchIfNotMatching = obs_data_get_bool(obj, "switch_if_not_matching"); + string nonMatchingScene = obs_data_get_string(obj, "non_matching_scene"); bool active = obs_data_get_bool(obj, "active"); - switcher->nonMatchingScene = - GetWeakSourceByName(nonMatchingScene.c_str()); + switcher->nonMatchingScene = GetWeakSourceByName(nonMatchingScene.c_str()); switcher->switches.clear(); size_t count = obs_data_array_count(array); - for (size_t i = 0; i < count; i++) { - obs_data_t *array_obj = obs_data_array_item(array, i); + for (size_t i = 0; i < count; i++) + { + obs_data_t* array_obj = obs_data_array_item(array, i); - const char *scene = - obs_data_get_string(array_obj, "scene"); - const char *transition = - obs_data_get_string(array_obj, "transition"); - const char *window = - obs_data_get_string(array_obj, "window_title"); - bool fullscreen = - obs_data_get_bool(array_obj, "fullscreen"); + const char* scene = obs_data_get_string(array_obj, "scene"); + const char* transition = obs_data_get_string(array_obj, "transition"); + const char* window = obs_data_get_string(array_obj, "window_title"); + bool fullscreen = obs_data_get_bool(array_obj, "fullscreen"); - switcher->switches.emplace_back( - GetWeakSourceByName(scene), - window, GetWeakTransitionByName(transition), fullscreen); + switcher->switches.emplace_back(GetWeakSourceByName(scene), window, + GetWeakTransitionByName(transition), fullscreen); obs_data_release(array_obj); } @@ -1643,24 +1718,20 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) switcher->screenRegionSwitches.clear(); count = obs_data_array_count(screenRegionArray); - for (size_t i = 0; i < count; i++) { - obs_data_t *array_obj = obs_data_array_item(screenRegionArray, i); + for (size_t i = 0; i < count; i++) + { + obs_data_t* array_obj = obs_data_array_item(screenRegionArray, i); - const char *scene = - obs_data_get_string(array_obj, "screenRegionScene"); - const char *transition = - obs_data_get_string(array_obj, "transition"); + const char* scene = obs_data_get_string(array_obj, "screenRegionScene"); + const char* transition = obs_data_get_string(array_obj, "transition"); int minX = obs_data_get_int(array_obj, "minX"); int minY = obs_data_get_int(array_obj, "minY"); int maxX = obs_data_get_int(array_obj, "maxX"); int maxY = obs_data_get_int(array_obj, "maxY"); - string regionStr = - obs_data_get_string(array_obj, "screenRegionStr"); + string regionStr = obs_data_get_string(array_obj, "screenRegionStr"); - switcher->screenRegionSwitches.emplace_back( - GetWeakSourceByName(scene), - GetWeakTransitionByName(transition), - minX, minY, maxX, maxY, regionStr); + switcher->screenRegionSwitches.emplace_back(GetWeakSourceByName(scene), + GetWeakTransitionByName(transition), minX, minY, maxX, maxY, regionStr); obs_data_release(array_obj); } @@ -1668,11 +1739,11 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) switcher->pauseScenesSwitches.clear(); count = obs_data_array_count(pauseScenesArray); - for (size_t i = 0; i < count; i++) { - obs_data_t *array_obj = obs_data_array_item(pauseScenesArray, i); + for (size_t i = 0; i < count; i++) + { + obs_data_t* array_obj = obs_data_array_item(pauseScenesArray, i); - const char *scene = - obs_data_get_string(array_obj, "pauseScene"); + const char* scene = obs_data_get_string(array_obj, "pauseScene"); switcher->pauseScenesSwitches.emplace_back(GetWeakSourceByName(scene)); @@ -1682,11 +1753,11 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) switcher->pauseWindowsSwitches.clear(); count = obs_data_array_count(pauseWindowsArray); - for (size_t i = 0; i < count; i++) { - obs_data_t *array_obj = obs_data_array_item(pauseWindowsArray, i); + for (size_t i = 0; i < count; i++) + { + obs_data_t* array_obj = obs_data_array_item(pauseWindowsArray, i); - const char *window = - obs_data_get_string(array_obj, "pauseWindow"); + const char* window = obs_data_get_string(array_obj, "pauseWindow"); switcher->pauseWindowsSwitches.emplace_back(window); @@ -1698,11 +1769,11 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) switcher->ignoreWindowsSwitches.clear(); count = obs_data_array_count(ignoreWindowsArray); - for (size_t i = 0; i < count; i++) { - obs_data_t *array_obj = obs_data_array_item(ignoreWindowsArray, i); + for (size_t i = 0; i < count; i++) + { + obs_data_t* array_obj = obs_data_array_item(ignoreWindowsArray, i); - const char *window = - obs_data_get_string(array_obj, "ignoreWindow"); + const char* window = obs_data_get_string(array_obj, "ignoreWindow"); switcher->ignoreWindowsSwitches.emplace_back(window); @@ -1712,24 +1783,18 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) switcher->sceneRoundTripSwitches.clear(); count = obs_data_array_count(sceneRoundTripArray); - for (size_t i = 0; i < count; i++) { - obs_data_t *array_obj = obs_data_array_item(sceneRoundTripArray, i); + for (size_t i = 0; i < count; i++) + { + obs_data_t* array_obj = obs_data_array_item(sceneRoundTripArray, i); - const char *scene1 = - obs_data_get_string(array_obj, "sceneRoundTripScene1"); - const char *scene2 = - obs_data_get_string(array_obj, "sceneRoundTripScene2"); - const char *transition = - obs_data_get_string(array_obj, "transition"); + const char* scene1 = obs_data_get_string(array_obj, "sceneRoundTripScene1"); + const char* scene2 = obs_data_get_string(array_obj, "sceneRoundTripScene2"); + const char* transition = obs_data_get_string(array_obj, "transition"); int delay = obs_data_get_int(array_obj, "sceneRoundTripDelay"); - const char *sceneRoundTripStr = - obs_data_get_string(array_obj, "sceneRoundTripStr"); + const char* sceneRoundTripStr = obs_data_get_string(array_obj, "sceneRoundTripStr"); - switcher->sceneRoundTripSwitches.emplace_back( - GetWeakSourceByName(scene1), - GetWeakSourceByName(scene2), - GetWeakTransitionByName(transition), - delay, + switcher->sceneRoundTripSwitches.emplace_back(GetWeakSourceByName(scene1), + GetWeakSourceByName(scene2), GetWeakTransitionByName(transition), delay, sceneRoundTripStr); obs_data_release(array_obj); @@ -1738,30 +1803,24 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) switcher->sceneTransitions.clear(); count = obs_data_array_count(sceneTransitionsArray); - for (size_t i = 0; i < count; i++) { - obs_data_t *array_obj = obs_data_array_item(sceneTransitionsArray, i); + for (size_t i = 0; i < count; i++) + { + obs_data_t* array_obj = obs_data_array_item(sceneTransitionsArray, i); - const char *scene1 = - obs_data_get_string(array_obj, "Scene1"); - const char *scene2 = - obs_data_get_string(array_obj, "Scene2"); - const char *transition = - obs_data_get_string(array_obj, "transition"); - const char *sceneTransitionsStr = - obs_data_get_string(array_obj, "Str"); + const char* scene1 = obs_data_get_string(array_obj, "Scene1"); + const char* scene2 = obs_data_get_string(array_obj, "Scene2"); + const char* transition = obs_data_get_string(array_obj, "transition"); + const char* sceneTransitionsStr = obs_data_get_string(array_obj, "Str"); - switcher->sceneTransitions.emplace_back( - GetWeakSourceByName(scene1), - GetWeakSourceByName(scene2), - GetWeakTransitionByName(transition), + switcher->sceneTransitions.emplace_back(GetWeakSourceByName(scene1), + GetWeakSourceByName(scene2), GetWeakTransitionByName(transition), sceneTransitionsStr); obs_data_release(array_obj); } string autoStopScene = obs_data_get_string(obj, "autoStopSceneName"); - switcher->autoStopEnable = obs_data_get_bool(obj,"autoStopEnable"); - switcher->autoStopScene = GetWeakSourceByName( - autoStopScene.c_str()); + switcher->autoStopEnable = obs_data_get_bool(obj, "autoStopEnable"); + switcher->autoStopScene = GetWeakSourceByName(autoStopScene.c_str()); switcher->fileIO.readEnabled = obs_data_get_bool(obj, "readEnabled"); switcher->fileIO.readPath = obs_data_get_string(obj, "readPath"); @@ -1789,69 +1848,71 @@ static void SaveSceneSwitcher(obs_data_t *save_data, bool saving, void *) static inline OBSWeakSource getNextTransition(OBSWeakSource scene1, OBSWeakSource scene2) { OBSWeakSource ws; - for (SceneTransition &t : switcher->sceneTransitions){ - if (t.scene1 == scene1 && t.scene2 == scene2) ws = t.transition; + for (SceneTransition& t : switcher->sceneTransitions) + { + if (t.scene1 == scene1 && t.scene2 == scene2) + ws = t.transition; } return ws; } void SwitcherData::Thread() { - chrono::duration duration = - chrono::milliseconds(interval); + chrono::duration duration = chrono::milliseconds(interval); string lastTitle; string title; - while (true) { + while (true) + { unique_lock lock(waitMutex); - //unique_lock transitionLock(transitionWaitMutex); + // unique_lock transitionLock(transitionWaitMutex); OBSWeakSource scene; OBSWeakSource transition; - //obs_source_t *oldTransition = obs_frontend_get_current_transition(); + // obs_source_t *oldTransition = obs_frontend_get_current_transition(); bool match = false; bool fullscreen = false; bool pause = false; bool sceneRoundTripActive = false; - obs_source_t *currentSource = - obs_frontend_get_current_scene(); + // Files + // TODO add transitions to output file / read them in the input file + obs_source_t* currentSource = obs_frontend_get_current_scene(); - //Files - //TODO add transitions to output file / read them in the input file - if (fileIO.writeEnabled){ + if (fileIO.writeEnabled) + { QFile file(QString::fromStdString(fileIO.writePath)); - if (file.open(QIODevice::WriteOnly)){ - const char *msg = obs_source_get_name(currentSource); + if (file.open(QIODevice::WriteOnly)) + { + const char* msg = obs_source_get_name(currentSource); file.write(msg, qstrlen(msg)); file.close(); } } + obs_source_release(currentSource); + cv.wait_for(lock, duration); { lock_guard lock(threadEndMutex); - if (stop) { - obs_source_release(currentSource); + if (stop) + { break; } } - //threadEndMutex.lock(); - //if (stop) { - // threadEndMutex.unlock(); - // break; - //} - //else threadEndMutex.unlock(); - if (fileIO.readEnabled){ + currentSource = obs_frontend_get_current_scene(); + + if (fileIO.readEnabled) + { QFile file(QString::fromStdString(fileIO.readPath)); - if (file.open(QIODevice::ReadOnly)){ + if (file.open(QIODevice::ReadOnly)) + { QTextStream in(&file); QString sceneStr = in.readLine(); - obs_source_t *scene = - obs_get_source_by_name(sceneStr.toUtf8().constData()); + obs_source_t* scene = obs_get_source_by_name(sceneStr.toUtf8().constData()); if (scene && scene != currentSource) - //add transitions check here too + // add transitions check here too obs_frontend_set_current_scene(scene); file.close(); obs_source_release(scene); @@ -1860,12 +1921,13 @@ void SwitcherData::Thread() continue; } - //End Files + // End Files - //Auto stop streaming/recording + // Auto stop streaming/recording OBSWeakSource ws = obs_source_get_weak_source(currentSource); - if (autoStopScene == ws) { + if (autoStopScene == ws) + { if (obs_frontend_streaming_active()) obs_frontend_streaming_stop(); if (obs_frontend_recording_active()) @@ -1873,13 +1935,15 @@ void SwitcherData::Thread() } obs_weak_source_release(ws); - //End auto stop streaming/recording + // End auto stop streaming/recording - //Pause + // Pause - for (OBSWeakSource &s : pauseScenesSwitches) { + for (OBSWeakSource& s : pauseScenesSwitches) + { OBSWeakSource ws = obs_source_get_weak_source(currentSource); - if (s == ws) { + if (s == ws) + { pause = true; obs_weak_source_release(ws); break; @@ -1887,45 +1951,55 @@ void SwitcherData::Thread() obs_weak_source_release(ws); } - if (!pause){ + if (!pause) + { GetCurrentWindowTitle(title); - for (string &window : pauseWindowsSwitches) { - if (window == title) { + for (string& window : pauseWindowsSwitches) + { + if (window == title) + { pause = true; break; } } } - if (!pause){ + if (!pause) + { GetCurrentWindowTitle(title); - for (string &window : pauseWindowsSwitches) { - try { - bool matches = regex_match( - title, regex(window)); - if (matches) { + for (string& window : pauseWindowsSwitches) + { + try + { + bool matches = regex_match(title, regex(window)); + if (matches) + { pause = true; break; } } - catch (const regex_error &) {} + catch (const regex_error&) + { + } } } - if (pause){ + if (pause) + { obs_source_release(currentSource); continue; } - //End Pause + // End Pause - //Scene Round Trip + // Scene Round Trip - for (SceneRoundTripSwitch &s : sceneRoundTripSwitches) + for (SceneRoundTripSwitch& s : sceneRoundTripSwitches) { OBSWeakSource ws = obs_source_get_weak_source(currentSource); - if (s.scene1 == ws) { + if (s.scene1 == ws) + { sceneRoundTripActive = true; int dur = s.delay * 1000 - interval; if (dur > 30) @@ -1933,14 +2007,13 @@ void SwitcherData::Thread() else cv.wait_for(lock, chrono::milliseconds(30)); - obs_source_t *source = - obs_weak_source_get_source(s.scene2); - obs_source_t *currentSource2 = - obs_frontend_get_current_scene(); + obs_source_t* source = obs_weak_source_get_source(s.scene2); + obs_source_t* currentSource2 = obs_frontend_get_current_scene(); - //don't switch if user changed scene manually - if (currentSource == currentSource2){ - obs_source_t *transition; + // don't switch if user changed scene manually + if (currentSource == currentSource2) + { + obs_source_t* transition; OBSWeakSource transitionWs = getNextTransition(s.scene1, s.scene2); if (transitionWs) @@ -1949,12 +2022,12 @@ void SwitcherData::Thread() transition = obs_weak_source_get_source(s.transition); obs_frontend_set_current_transition(transition); - //transitionWaitMutex2.lock(); + // transitionWaitMutex2.lock(); obs_frontend_set_current_scene(source); - //transitionWaitMutex2.unlock(); - //longest transition duration 10s - //transitionCv.wait_for(transitionLock,chrono::seconds(10)); - //obs_frontend_set_current_transition(oldTransition); + // transitionWaitMutex2.unlock(); + // longest transition duration 10s + // transitionCv.wait_for(transitionLock,chrono::seconds(10)); + // obs_frontend_set_current_transition(oldTransition); obs_source_release(transition); } @@ -1970,21 +2043,24 @@ void SwitcherData::Thread() obs_source_release(currentSource); - if (sceneRoundTripActive){ - //obs_source_release(oldTransition); + if (sceneRoundTripActive) + { + // obs_source_release(oldTransition); continue; } - //End Scene Round Trip + // End Scene Round Trip duration = chrono::milliseconds(interval); GetCurrentWindowTitle(title); - //Ignore Windows + // Ignore Windows - for (auto &window : ignoreWindowsSwitches){ - if (window == title){ + for (auto& window : ignoreWindowsSwitches) + { + if (window == title) + { title = lastTitle; break; } @@ -1992,14 +2068,16 @@ void SwitcherData::Thread() lastTitle = title; - //End Ignore Windows + // End Ignore Windows - //Regular switch + // Regular switch switcher->Prune(); - for (SceneSwitch &s : switches) { - if (s.window == title) { + for (SceneSwitch& s : switches) + { + if (s.window == title) + { match = true; scene = s.scene; transition = s.transition; @@ -2009,13 +2087,15 @@ void SwitcherData::Thread() } /* try regex */ - if (!match) { - for (SceneSwitch &s : switches) { - try { - - bool matches = regex_match( - title, regex(s.window)); - if (matches) { + if (!match) + { + for (SceneSwitch& s : switches) + { + try + { + bool matches = regex_match(title, regex(s.window)); + if (matches) + { match = true; scene = s.scene; transition = s.transition; @@ -2023,20 +2103,25 @@ void SwitcherData::Thread() break; } } - catch (const regex_error &) {} + catch (const regex_error&) + { + } } } - //End regular switch + // End regular switch - //Screen Region + // Screen Region - if (!match){ + if (!match) + { pair cursorPos = getCursorPos(); int minRegionSize = 99999; - for (auto &s : screenRegionSwitches){ - if (cursorPos.first >= s.minX && cursorPos.second >= s.minY && cursorPos.first <= s.maxX && cursorPos.second <= s.maxY) + for (auto& s : screenRegionSwitches) + { + if (cursorPos.first >= s.minX && cursorPos.second >= s.minY + && cursorPos.first <= s.maxX && cursorPos.second <= s.maxY) { int regionSize = (s.maxX - s.minX) + (s.maxY - s.minY); if (regionSize < minRegionSize) @@ -2050,75 +2135,79 @@ void SwitcherData::Thread() } } - //End Screen Region + // End Screen Region - //Fullscreen + // Fullscreen match = match && (!fullscreen || (fullscreen && isFullscreen())); - //End fullscreen + // End fullscreen - //Backup Scene + // Backup Scene - if (!match && switchIfNotMatching && - nonMatchingScene) { + if (!match && switchIfNotMatching && nonMatchingScene) + { match = true; scene = nonMatchingScene; } - //End Backup Scene + // End Backup Scene - //Switch scene + // Switch scene - if (match) { - obs_source_t *source = - obs_weak_source_get_source(scene); - obs_source_t *currentSource = - obs_frontend_get_current_scene(); + if (match) + { + obs_source_t* source = obs_weak_source_get_source(scene); + obs_source_t* currentSource = obs_frontend_get_current_scene(); - if (source && source != currentSource){ - obs_source_t *nextTransition; + if (source && source != currentSource) + { + obs_source_t* nextTransition; OBSWeakSource currentScene = obs_source_get_weak_source(currentSource); obs_weak_source_release(currentScene); OBSWeakSource nextTransitionWs = getNextTransition(currentScene, scene); - if (nextTransitionWs){ - obs_source_t *nextTransition = obs_weak_source_get_source(nextTransitionWs); + if (nextTransitionWs) + { + obs_source_t* nextTransition = obs_weak_source_get_source(nextTransitionWs); obs_frontend_set_current_transition(nextTransition); obs_source_release(nextTransition); } - else if (transition){ - obs_source_t *nextTransition = obs_weak_source_get_source(transition); + else if (transition) + { + obs_source_t* nextTransition = obs_weak_source_get_source(transition); obs_frontend_set_current_transition(nextTransition); obs_source_release(nextTransition); } - //transitionWaitMutex2.lock(); + // transitionWaitMutex2.lock(); obs_frontend_set_current_scene(source); - //transitionWaitMutex2.unlock(); - //longest transition duration 10s - //transitionCv.wait_for(transitionLock, chrono::seconds(10)); - //obs_frontend_set_current_transition(oldTransition); - + // transitionWaitMutex2.unlock(); + // longest transition duration 10s + // transitionCv.wait_for(transitionLock, chrono::seconds(10)); + // obs_frontend_set_current_transition(oldTransition); } obs_source_release(currentSource); obs_source_release(source); } - //End switch scene - - //obs_source_release(oldTransition); + // End switch scene + // obs_source_release(oldTransition); } } void SwitcherData::Start() { - if (!th.joinable()){ + if (!th.joinable()) + { threadEndMutex.lock(); stop = false; threadEndMutex.unlock(); - switcher->th = thread([]() {switcher->Thread(); }); + switcher->th = thread([]() + { + switcher->Thread(); + }); } } @@ -2132,9 +2221,9 @@ void SwitcherData::Stop() th.join(); } -//HOTKEY +// HOTKEY -void startStopHotkeyFunc(void *data, obs_hotkey_id id, obs_hotkey_t *hotkey, bool pressed) +void startStopHotkeyFunc(void* data, obs_hotkey_id id, obs_hotkey_t* hotkey, bool pressed) { UNUSED_PARAMETER(data); UNUSED_PARAMETER(hotkey); @@ -2147,16 +2236,19 @@ void startStopHotkeyFunc(void *data, obs_hotkey_id id, obs_hotkey_t *hotkey, boo switcher->Start(); } - obs_data_array *hotkeyData = obs_hotkey_save(id); + obs_data_array* hotkeyData = obs_hotkey_save(id); - if (hotkeyData != NULL) { - char *path = obs_module_config_path(""); + if (hotkeyData != NULL) + { + char* path = obs_module_config_path(""); ofstream file; file.open(string(path).append("hotkey.txt"), ofstream::trunc); - if (file.is_open()) { + if (file.is_open()) + { size_t num = obs_data_array_count(hotkeyData); - for (size_t i = 0; i < num; i++) { - obs_data_t *data = obs_data_array_item(hotkeyData, i); + for (size_t i = 0; i < num; i++) + { + obs_data_t* data = obs_data_array_item(hotkeyData, i); string temp = obs_data_get_json(data); obs_data_release(data); file << temp; @@ -2168,10 +2260,10 @@ void startStopHotkeyFunc(void *data, obs_hotkey_id id, obs_hotkey_t *hotkey, boo obs_data_array_release(hotkeyData); } -string loadConfigFile(string filename) +string loadConfigFile(string filename) { ifstream settingsFile; - char *path = obs_module_config_path(""); + char* path = obs_module_config_path(""); string value; settingsFile.open(string(path).append(filename)); @@ -2187,13 +2279,13 @@ string loadConfigFile(string filename) return value; } -void loadKeybinding(obs_hotkey_id hotkeyId) +void loadKeybinding(obs_hotkey_id hotkeyId) { string bindings = loadConfigFile("hotkey.txt"); if (!bindings.empty()) { - obs_data_array_t *hotkeyData = obs_data_array_create(); - obs_data_t *data = obs_data_create_from_json(bindings.c_str()); + obs_data_array_t* hotkeyData = obs_data_array_create(); + obs_data_t* data = obs_data_create_from_json(bindings.c_str()); obs_data_array_insert(hotkeyData, 0, data); obs_data_release(data); obs_hotkey_load(hotkeyId, hotkeyData); @@ -2201,7 +2293,7 @@ void loadKeybinding(obs_hotkey_id hotkeyId) } } -//END HOTKEY +// END HOTKEY extern "C" void FreeSceneSwitcher() { @@ -2209,28 +2301,29 @@ extern "C" void FreeSceneSwitcher() switcher = nullptr; } -static void OBSEvent(enum obs_frontend_event event, void * switcher) +static void OBSEvent(enum obs_frontend_event event, void* switcher) { - if (event == OBS_FRONTEND_EVENT_EXIT){ + if (event == OBS_FRONTEND_EVENT_EXIT) + { FreeSceneSwitcher(); } - //needed to reset the transition, but buggy now - //if (event == OBS_FRONTEND_EVENT_TRANSITION_STOPPED){ + // needed to reset the transition, but buggy now + // if (event == OBS_FRONTEND_EVENT_TRANSITION_STOPPED){ // SwitcherData *test = (SwitcherData*)switcher; // test->transitionWaitMutex2.lock(); - // this_thread::sleep_for(chrono::milliseconds(100)); //seems necesssary since the transition is not always done + // this_thread::sleep_for(chrono::milliseconds(100)); //seems necesssary + // since the transition is not always done // test->transitionCv.notify_one(); // test->transitionWaitMutex2.unlock(); - // + // //} } extern "C" void InitSceneSwitcher() { - QAction *action = (QAction*)obs_frontend_add_tools_menu_qaction( - obs_module_text("Advanced Scene Switcher")); - + QAction* action + = (QAction*)obs_frontend_add_tools_menu_qaction(obs_module_text("Advanced Scene Switcher")); switcher = new SwitcherData; @@ -2238,8 +2331,7 @@ extern "C" void InitSceneSwitcher() { obs_frontend_push_ui_translation(obs_module_get_string); - QMainWindow *window = - (QMainWindow*)obs_frontend_get_main_window(); + QMainWindow* window = (QMainWindow*)obs_frontend_get_main_window(); SceneSwitcher ss(window); ss.exec(); @@ -2252,13 +2344,15 @@ extern "C" void InitSceneSwitcher() action->connect(action, &QAction::triggered, cb); - char *path = obs_module_config_path(""); + char* path = obs_module_config_path(""); QDir dir(path); - if (!dir.exists()){ + if (!dir.exists()) + { dir.mkpath("."); } bfree(path); - obs_hotkey_id pauseHotkeyId = obs_hotkey_register_frontend("startStopSwitcherHotkey", "Toggle Start/Stop for the Advanced Scene Switcher", startStopHotkeyFunc, NULL); + obs_hotkey_id pauseHotkeyId = obs_hotkey_register_frontend("startStopSwitcherHotkey", + "Toggle Start/Stop for the Advanced Scene Switcher", startStopHotkeyFunc, NULL); loadKeybinding(pauseHotkeyId); } \ No newline at end of file