mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-09-08 01:26:04 -05:00
allow pause individual switching methods (#90)
* allow pausing individual switching methods * clean up pause tab * allow import of old pauseScenes and pauseWindows
This commit is contained in:
@@ -54,6 +54,7 @@ if(BUILD_OUT_OF_TREE)
|
||||
src/headers/switch-file.hpp
|
||||
src/headers/switch-idle.hpp
|
||||
src/headers/switch-media.hpp
|
||||
src/headers/switch-pause.hpp
|
||||
src/headers/switch-random.hpp
|
||||
src/headers/switch-screen-region.hpp
|
||||
src/headers/switch-time.hpp
|
||||
@@ -206,6 +207,7 @@ else ()
|
||||
src/headers/switch-file.hpp
|
||||
src/headers/switch-idle.hpp
|
||||
src/headers/switch-media.hpp
|
||||
src/headers/switch-pause.hpp
|
||||
src/headers/switch-random.hpp
|
||||
src/headers/switch-screen-region.hpp
|
||||
src/headers/switch-time.hpp
|
||||
|
||||
@@ -59,10 +59,14 @@ AdvSceneSwitcher.transitionTab.entry="Switch from {{scenes}} to {{scenes2}} usin
|
||||
AdvSceneSwitcher.transitionTab.defaultTransitionEntry="When scene {{scenes}} is active change default scene transition to {{transitions}}"
|
||||
|
||||
; Pause Scenes Tab
|
||||
AdvSceneSwitcher.pauseScenesTab.title="Pause"
|
||||
AdvSceneSwitcher.pauseScenesTab.pauseOnScene="Pause the Scene Switcher on scene"
|
||||
AdvSceneSwitcher.pauseScenesTab.pauseInFocus1="Pause the Scene Switcher when "
|
||||
AdvSceneSwitcher.pauseScenesTab.pauseInFocus2="is in focus"
|
||||
AdvSceneSwitcher.pauseTab.title="Pause"
|
||||
AdvSceneSwitcher.pauseTab.pauseOnScene="Pause the Scene Switcher on scene"
|
||||
AdvSceneSwitcher.pauseTab.pauseInFocus1="Pause the Scene Switcher when "
|
||||
AdvSceneSwitcher.pauseTab.pauseInFocus2="is in focus"
|
||||
AdvSceneSwitcher.pauseTab.pauseTypeScene="scene is active"
|
||||
AdvSceneSwitcher.pauseTab.pauseTypeWindow="window is in focus"
|
||||
AdvSceneSwitcher.pauseTab.pauseTargetAll="all"
|
||||
AdvSceneSwitcher.pauseTab.pauseEntry="Pause {{pauseTargets}} checks when {{pauseTypes}} {{scenes}} {{windows}}"
|
||||
|
||||
; Window Title Tab
|
||||
AdvSceneSwitcher.windowTitleTab.title="Title"
|
||||
|
||||
@@ -60,10 +60,10 @@ AdvSceneSwitcher.transitionTab.entry="从场景 {{scenes}} 切换到场景 {{sce
|
||||
AdvSceneSwitcher.transitionTab.defaultTransitionEntry="当场景 {{scenes}} 被激活时更改默认转场特效为 {{transitions}}"
|
||||
|
||||
; Pause Scenes Tab
|
||||
AdvSceneSwitcher.pauseScenesTab.title="暂停"
|
||||
AdvSceneSwitcher.pauseScenesTab.pauseOnScene="当切换到这个场景时暂停场景切换器"
|
||||
AdvSceneSwitcher.pauseScenesTab.pauseInFocus1="当窗口"
|
||||
AdvSceneSwitcher.pauseScenesTab.pauseInFocus2="获得焦点时暂停场景切换器"
|
||||
AdvSceneSwitcher.pauseTab.title="暂停"
|
||||
AdvSceneSwitcher.pauseTab.pauseOnScene="当切换到这个场景时暂停场景切换器"
|
||||
AdvSceneSwitcher.pauseTab.pauseInFocus1="当窗口"
|
||||
AdvSceneSwitcher.pauseTab.pauseInFocus2="获得焦点时暂停场景切换器"
|
||||
|
||||
; Window Title Tab
|
||||
AdvSceneSwitcher.windowTitleTab.title="窗口标题"
|
||||
|
||||
@@ -944,53 +944,13 @@
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="pauseScenesTab">
|
||||
<widget class="QWidget" name="pauseTab">
|
||||
<attribute name="title">
|
||||
<string>AdvSceneSwitcher.pauseScenesTab.title</string>
|
||||
<string>AdvSceneSwitcher.pauseTab.title</string>
|
||||
</attribute>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_7">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>AdvSceneSwitcher.pauseScenesTab.pauseOnScene</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="pauseScenesScenes">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_5">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QListWidget" name="pauseScenes">
|
||||
<widget class="QListWidget" name="pauseEntries">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
@@ -998,17 +958,17 @@
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="sortingEnabled">
|
||||
<bool>true</bool>
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_17">
|
||||
<property name="spacing">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pauseScenesAdd">
|
||||
<widget class="QPushButton" name="pauseAdd">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>22</width>
|
||||
@@ -1024,7 +984,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pauseScenesRemove">
|
||||
<widget class="QPushButton" name="pauseRemove">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>22</width>
|
||||
@@ -1040,126 +1000,92 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<spacer name="horizontalSpacer_46">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<width>5</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Line" name="line_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_34">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_37">
|
||||
<property name="text">
|
||||
<string>AdvSceneSwitcher.pauseScenesTab.pauseInFocus1</string>
|
||||
<widget class="Line" name="line_15">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="pauseWindowsWindows">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="editable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_38">
|
||||
<property name="text">
|
||||
<string>AdvSceneSwitcher.pauseScenesTab.pauseInFocus2</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_33">
|
||||
<spacer name="horizontalSpacer_57">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<width>5</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QListWidget" name="pauseWindows">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="sortingEnabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_21">
|
||||
<item>
|
||||
<widget class="QPushButton" name="pauseWindowsAdd">
|
||||
<widget class="QPushButton" name="pauseUp">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>22</width>
|
||||
<height>22</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>../../../forms/images/up.svg</normaloff>../../../forms/images/up.svg</iconset>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="themeID" stdset="0">
|
||||
<string notr="true">addIconSmall</string>
|
||||
<string>upArrowIconSmall</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pauseWindowsRemove">
|
||||
<widget class="QPushButton" name="pauseDown">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>22</width>
|
||||
<height>22</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normaloff>../../../forms/images/down.svg</normaloff>../../../forms/images/down.svg</iconset>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="themeID" stdset="0">
|
||||
<string notr="true">removeIconSmall</string>
|
||||
<string>downArrowIconSmall</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_32">
|
||||
<spacer name="horizontalSpacer_11">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
|
||||
@@ -385,7 +385,7 @@ int findTabIndex(QTabWidget *tabWidget, int pos)
|
||||
tabName = "transitionsTab";
|
||||
break;
|
||||
case 2:
|
||||
tabName = "pauseScenesTab";
|
||||
tabName = "pauseTab";
|
||||
break;
|
||||
case 3:
|
||||
tabName = "windowTitleTab";
|
||||
|
||||
@@ -31,8 +31,6 @@ public:
|
||||
void SetHideFrames();
|
||||
void clearFrames(QListWidget *list);
|
||||
|
||||
int PauseScenesFindByData(const QString &scene);
|
||||
int PauseWindowsFindByData(const QString &window);
|
||||
int IgnoreWindowsFindByData(const QString &window);
|
||||
int IgnoreIdleWindowsFindByData(const QString &window);
|
||||
|
||||
@@ -104,13 +102,10 @@ public slots:
|
||||
void on_screenRegionUp_clicked();
|
||||
void on_screenRegionDown_clicked();
|
||||
|
||||
void on_pauseScenes_currentRowChanged(int idx);
|
||||
void on_pauseScenesAdd_clicked();
|
||||
void on_pauseScenesRemove_clicked();
|
||||
|
||||
void on_pauseWindows_currentRowChanged(int idx);
|
||||
void on_pauseWindowsAdd_clicked();
|
||||
void on_pauseWindowsRemove_clicked();
|
||||
void on_pauseUp_clicked();
|
||||
void on_pauseDown_clicked();
|
||||
void on_pauseAdd_clicked();
|
||||
void on_pauseRemove_clicked();
|
||||
|
||||
void on_ignoreWindows_currentRowChanged(int idx);
|
||||
void on_ignoreWindowsAdd_clicked();
|
||||
|
||||
@@ -13,6 +13,7 @@ typedef enum {
|
||||
} audioCondition;
|
||||
|
||||
struct AudioSwitch : virtual SceneSwitcherEntry {
|
||||
static bool pause;
|
||||
OBSWeakSource audioSource = nullptr;
|
||||
int volumeThreshold = 0;
|
||||
audioCondition condition = ABOVE;
|
||||
|
||||
@@ -6,6 +6,7 @@ constexpr auto exe_func = 3;
|
||||
constexpr auto default_priority_3 = exe_func;
|
||||
|
||||
struct ExecutableSwitch : SceneSwitcherEntry {
|
||||
static bool pause;
|
||||
QString exe = "";
|
||||
bool inFocus = false;
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ typedef enum {
|
||||
} file_type;
|
||||
|
||||
struct FileSwitch : SceneSwitcherEntry {
|
||||
static bool pause;
|
||||
std::string file = obs_module_text("AdvSceneSwitcher.enterPath");
|
||||
std::string text = obs_module_text("AdvSceneSwitcher.enterText");
|
||||
bool remote = false;
|
||||
|
||||
@@ -6,6 +6,7 @@ constexpr auto idle_func = 2;
|
||||
constexpr auto default_priority_2 = idle_func;
|
||||
|
||||
struct IdleData : SceneSwitcherEntry {
|
||||
static bool pause;
|
||||
bool idleEnable = false;
|
||||
int time = default_idle_time;
|
||||
bool alreadySwitched = false;
|
||||
|
||||
@@ -13,6 +13,7 @@ typedef enum {
|
||||
} time_restriction;
|
||||
|
||||
struct MediaSwitch : SceneSwitcherEntry {
|
||||
static bool pause;
|
||||
OBSWeakSource source = nullptr;
|
||||
obs_media_state state = OBS_MEDIA_STATE_NONE;
|
||||
bool anyState = false;
|
||||
|
||||
64
src/headers/switch-pause.hpp
Normal file
64
src/headers/switch-pause.hpp
Normal file
@@ -0,0 +1,64 @@
|
||||
#pragma once
|
||||
#include "switch-generic.hpp"
|
||||
|
||||
enum class PauseType {
|
||||
Scene,
|
||||
Window,
|
||||
};
|
||||
|
||||
enum class PauseTarget {
|
||||
All,
|
||||
Transition,
|
||||
Window,
|
||||
Executable,
|
||||
Region,
|
||||
Media,
|
||||
File,
|
||||
Random,
|
||||
Time,
|
||||
Idle,
|
||||
Sequence,
|
||||
Audio,
|
||||
};
|
||||
|
||||
struct PauseEntry : SceneSwitcherEntry {
|
||||
PauseType pauseType = PauseType::Scene;
|
||||
PauseTarget pauseTarget = PauseTarget::All;
|
||||
std::string window = "";
|
||||
|
||||
const char *getType() { return "pause"; }
|
||||
bool valid();
|
||||
|
||||
inline PauseEntry(){};
|
||||
inline PauseEntry(OBSWeakSource scene_, PauseType pauseType_,
|
||||
PauseTarget pauseTarget_, const std::string &window_)
|
||||
: SceneSwitcherEntry(scene_, nullptr),
|
||||
pauseType(pauseType_),
|
||||
pauseTarget(pauseTarget_),
|
||||
window(window_)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
class PauseEntryWidget : public SwitchWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
PauseEntryWidget(PauseEntry *s);
|
||||
PauseEntry *getSwitchData();
|
||||
void setSwitchData(PauseEntry *s);
|
||||
|
||||
static void swapSwitchData(PauseEntryWidget *s1, PauseEntryWidget *s2);
|
||||
|
||||
private slots:
|
||||
void PauseTypeChanged(int index);
|
||||
void PauseTargetChanged(int index);
|
||||
void WindowChanged(const QString &text);
|
||||
|
||||
private:
|
||||
QComboBox *pauseTypes;
|
||||
QComboBox *pauseTargets;
|
||||
QComboBox *windows;
|
||||
|
||||
PauseEntry *switchData;
|
||||
};
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "switch-generic.hpp"
|
||||
|
||||
struct RandomSwitch : SceneSwitcherEntry {
|
||||
static bool pause;
|
||||
double delay = 0.0;
|
||||
|
||||
const char *getType() { return "random"; }
|
||||
|
||||
@@ -6,6 +6,7 @@ constexpr auto screen_region_func = 4;
|
||||
constexpr auto default_priority_4 = screen_region_func;
|
||||
|
||||
struct ScreenRegionSwitch : SceneSwitcherEntry {
|
||||
static bool pause;
|
||||
int minX = 0, minY = 0, maxX = 0, maxY = 0;
|
||||
|
||||
const char *getType() { return "region"; }
|
||||
|
||||
@@ -11,6 +11,7 @@ typedef enum {
|
||||
} delay_units;
|
||||
|
||||
struct SceneSequenceSwitch : SceneSwitcherEntry {
|
||||
static bool pause;
|
||||
OBSWeakSource startScene = nullptr;
|
||||
double delay = 0;
|
||||
int delayMultiplier = 1;
|
||||
|
||||
@@ -19,6 +19,7 @@ typedef enum {
|
||||
} timeTrigger;
|
||||
|
||||
struct TimeSwitch : SceneSwitcherEntry {
|
||||
static bool pause;
|
||||
timeTrigger trigger = ANY_DAY;
|
||||
QTime time = QTime(0, 0);
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ struct SceneTransition : SceneSwitcherEntry {
|
||||
};
|
||||
|
||||
struct DefaultSceneTransition : SceneSwitcherEntry {
|
||||
static bool pause;
|
||||
|
||||
const char *getType() { return "def_transition"; }
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ constexpr auto window_title_func = 5;
|
||||
constexpr auto default_priority_5 = window_title_func;
|
||||
|
||||
struct WindowSwitch : SceneSwitcherEntry {
|
||||
static bool pause;
|
||||
std::string window = "";
|
||||
bool fullscreen = false;
|
||||
bool maximized = false;
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "switch-file.hpp"
|
||||
#include "switch-idle.hpp"
|
||||
#include "switch-media.hpp"
|
||||
#include "switch-pause.hpp"
|
||||
#include "switch-random.hpp"
|
||||
#include "switch-screen-region.hpp"
|
||||
#include "switch-time.hpp"
|
||||
@@ -73,10 +74,6 @@ struct SwitcherData {
|
||||
|
||||
std::deque<ScreenRegionSwitch> screenRegionSwitches;
|
||||
|
||||
std::vector<OBSWeakSource> pauseScenesSwitches;
|
||||
|
||||
std::vector<std::string> pauseWindowsSwitches;
|
||||
|
||||
std::vector<std::string> ignoreWindowsSwitches;
|
||||
|
||||
std::deque<SceneSequenceSwitch> sceneSequenceSwitches;
|
||||
@@ -105,6 +102,8 @@ struct SwitcherData {
|
||||
|
||||
std::deque<MediaSwitch> mediaSwitches;
|
||||
|
||||
std::deque<PauseEntry> pauseEntries;
|
||||
|
||||
std::deque<TimeSwitch> timeSwitches;
|
||||
QDateTime liveTime;
|
||||
|
||||
@@ -207,6 +206,7 @@ struct SwitcherData {
|
||||
void loadWindowTitleSwitches(obs_data_t *obj);
|
||||
void loadScreenRegionSwitches(obs_data_t *obj);
|
||||
void loadPauseSwitches(obs_data_t *obj);
|
||||
void loadOldPauseSwitches(obs_data_t *obj);
|
||||
void loadSceneSequenceSwitches(obs_data_t *obj);
|
||||
void loadSceneTransitions(obs_data_t *obj);
|
||||
void loadIdleSwitches(obs_data_t *obj);
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "headers/volume-control.hpp"
|
||||
#include "headers/utility.hpp"
|
||||
|
||||
bool AudioSwitch::pause = false;
|
||||
static QMetaObject::Connection addPulse;
|
||||
|
||||
void AdvSceneSwitcher::on_audioAdd_clicked()
|
||||
@@ -74,7 +75,7 @@ void AdvSceneSwitcher::on_audioDown_clicked()
|
||||
void SwitcherData::checkAudioSwitch(bool &match, OBSWeakSource &scene,
|
||||
OBSWeakSource &transition)
|
||||
{
|
||||
if (audioSwitches.size() == 0)
|
||||
if (AudioSwitch::pause)
|
||||
return;
|
||||
|
||||
for (AudioSwitch &s : audioSwitches) {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "headers/advanced-scene-switcher.hpp"
|
||||
#include "headers/utility.hpp"
|
||||
|
||||
bool ExecutableSwitch::pause = false;
|
||||
static QMetaObject::Connection addPulse;
|
||||
|
||||
void AdvSceneSwitcher::on_executableAdd_clicked()
|
||||
@@ -74,6 +75,9 @@ void AdvSceneSwitcher::on_executableDown_clicked()
|
||||
void SwitcherData::checkExeSwitch(bool &match, OBSWeakSource &scene,
|
||||
OBSWeakSource &transition)
|
||||
{
|
||||
if (executableSwitches.size() == 0 || ExecutableSwitch::pause)
|
||||
return;
|
||||
|
||||
std::string title;
|
||||
QStringList runningProcesses;
|
||||
bool ignored = false;
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "headers/curl-helper.hpp"
|
||||
#include "headers/utility.hpp"
|
||||
|
||||
bool FileSwitch::pause = false;
|
||||
static QMetaObject::Connection addPulse;
|
||||
static std::hash<std::string> strHash;
|
||||
|
||||
@@ -229,6 +230,9 @@ bool checkLocalFileContent(FileSwitch &s)
|
||||
void SwitcherData::checkFileContent(bool &match, OBSWeakSource &scene,
|
||||
OBSWeakSource &transition)
|
||||
{
|
||||
if (FileSwitch::pause)
|
||||
return;
|
||||
|
||||
for (FileSwitch &s : fileSwitches) {
|
||||
if (!s.initialized())
|
||||
continue;
|
||||
|
||||
@@ -3,10 +3,12 @@
|
||||
#include "headers/advanced-scene-switcher.hpp"
|
||||
#include "headers/utility.hpp"
|
||||
|
||||
bool IdleData::pause = false;
|
||||
|
||||
void SwitcherData::checkIdleSwitch(bool &match, OBSWeakSource &scene,
|
||||
OBSWeakSource &transition)
|
||||
{
|
||||
if (!idleData.idleEnable)
|
||||
if (!idleData.idleEnable || IdleData::pause)
|
||||
return;
|
||||
|
||||
std::string title;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "headers/advanced-scene-switcher.hpp"
|
||||
#include "headers/utility.hpp"
|
||||
|
||||
bool MediaSwitch::pause = false;
|
||||
static QMetaObject::Connection addPulse;
|
||||
|
||||
constexpr auto media_played_to_end_idx = 8;
|
||||
@@ -76,6 +77,9 @@ void AdvSceneSwitcher::on_mediaDown_clicked()
|
||||
void SwitcherData::checkMediaSwitch(bool &match, OBSWeakSource &scene,
|
||||
OBSWeakSource &transition)
|
||||
{
|
||||
if (MediaSwitch::pause)
|
||||
return;
|
||||
|
||||
for (MediaSwitch &mediaSwitch : mediaSwitches) {
|
||||
if (!mediaSwitch.initialized())
|
||||
continue;
|
||||
|
||||
@@ -3,264 +3,265 @@
|
||||
#include "headers/advanced-scene-switcher.hpp"
|
||||
#include "headers/utility.hpp"
|
||||
|
||||
void AdvSceneSwitcher::on_pauseScenesAdd_clicked()
|
||||
static QMetaObject::Connection addPulse;
|
||||
|
||||
void AdvSceneSwitcher::on_pauseAdd_clicked()
|
||||
{
|
||||
QString sceneName = ui->pauseScenesScenes->currentText();
|
||||
std::lock_guard<std::mutex> lock(switcher->m);
|
||||
switcher->pauseEntries.emplace_back();
|
||||
|
||||
if (sceneName.isEmpty())
|
||||
return;
|
||||
|
||||
OBSWeakSource source = GetWeakSourceByQString(sceneName);
|
||||
QVariant v = QVariant::fromValue(sceneName);
|
||||
|
||||
QList<QListWidgetItem *> items =
|
||||
ui->pauseScenes->findItems(sceneName, Qt::MatchExactly);
|
||||
|
||||
if (items.size() == 0) {
|
||||
QListWidgetItem *item =
|
||||
new QListWidgetItem(sceneName, ui->pauseScenes);
|
||||
item->setData(Qt::UserRole, v);
|
||||
|
||||
std::lock_guard<std::mutex> lock(switcher->m);
|
||||
switcher->pauseScenesSwitches.emplace_back(source);
|
||||
ui->pauseScenes->sortItems();
|
||||
}
|
||||
listAddClicked(ui->pauseEntries,
|
||||
new PauseEntryWidget(&switcher->pauseEntries.back()),
|
||||
ui->pauseAdd, &addPulse);
|
||||
}
|
||||
|
||||
void AdvSceneSwitcher::on_pauseScenesRemove_clicked()
|
||||
void AdvSceneSwitcher::on_pauseRemove_clicked()
|
||||
{
|
||||
QListWidgetItem *item = ui->pauseScenes->currentItem();
|
||||
QListWidgetItem *item = ui->pauseEntries->currentItem();
|
||||
if (!item)
|
||||
return;
|
||||
|
||||
QString pauseScene = item->data(Qt::UserRole).toString();
|
||||
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(switcher->m);
|
||||
auto &switches = switcher->pauseScenesSwitches;
|
||||
|
||||
for (auto it = switches.begin(); it != switches.end(); ++it) {
|
||||
auto &s = *it;
|
||||
|
||||
if (s == GetWeakSourceByQString(pauseScene)) {
|
||||
switches.erase(it);
|
||||
break;
|
||||
}
|
||||
}
|
||||
int idx = ui->pauseEntries->currentRow();
|
||||
auto &switches = switcher->pauseEntries;
|
||||
switches.erase(switches.begin() + idx);
|
||||
}
|
||||
|
||||
delete item;
|
||||
}
|
||||
|
||||
void AdvSceneSwitcher::on_pauseWindowsAdd_clicked()
|
||||
void AdvSceneSwitcher::on_pauseUp_clicked()
|
||||
{
|
||||
QString windowName = ui->pauseWindowsWindows->currentText();
|
||||
|
||||
if (windowName.isEmpty())
|
||||
int index = ui->pauseEntries->currentRow();
|
||||
if (!listMoveUp(ui->pauseEntries))
|
||||
return;
|
||||
|
||||
QVariant v = QVariant::fromValue(windowName);
|
||||
|
||||
QList<QListWidgetItem *> items =
|
||||
ui->pauseWindows->findItems(windowName, Qt::MatchExactly);
|
||||
|
||||
if (items.size() == 0) {
|
||||
QListWidgetItem *item =
|
||||
new QListWidgetItem(windowName, ui->pauseWindows);
|
||||
item->setData(Qt::UserRole, v);
|
||||
|
||||
std::lock_guard<std::mutex> lock(switcher->m);
|
||||
switcher->pauseWindowsSwitches.emplace_back(
|
||||
windowName.toUtf8().constData());
|
||||
ui->pauseWindows->sortItems();
|
||||
}
|
||||
}
|
||||
|
||||
void AdvSceneSwitcher::on_pauseWindowsRemove_clicked()
|
||||
{
|
||||
QListWidgetItem *item = ui->pauseWindows->currentItem();
|
||||
if (!item)
|
||||
return;
|
||||
|
||||
QString windowName = item->data(Qt::UserRole).toString();
|
||||
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(switcher->m);
|
||||
auto &switches = switcher->pauseWindowsSwitches;
|
||||
|
||||
for (auto it = switches.begin(); it != switches.end(); ++it) {
|
||||
auto &s = *it;
|
||||
|
||||
if (s == windowName.toUtf8().constData()) {
|
||||
switches.erase(it);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
delete item;
|
||||
}
|
||||
|
||||
void AdvSceneSwitcher::on_pauseScenes_currentRowChanged(int idx)
|
||||
{
|
||||
if (loading)
|
||||
return;
|
||||
if (idx == -1)
|
||||
return;
|
||||
|
||||
QListWidgetItem *item = ui->pauseScenes->item(idx);
|
||||
|
||||
QString scene = item->data(Qt::UserRole).toString();
|
||||
PauseEntryWidget *s1 = (PauseEntryWidget *)ui->pauseEntries->itemWidget(
|
||||
ui->pauseEntries->item(index));
|
||||
PauseEntryWidget *s2 = (PauseEntryWidget *)ui->pauseEntries->itemWidget(
|
||||
ui->pauseEntries->item(index - 1));
|
||||
PauseEntryWidget::swapSwitchData(s1, s2);
|
||||
|
||||
std::lock_guard<std::mutex> lock(switcher->m);
|
||||
for (auto &s : switcher->pauseScenesSwitches) {
|
||||
std::string name = GetWeakSourceName(s);
|
||||
if (scene.compare(name.c_str()) == 0) {
|
||||
ui->pauseScenesScenes->setCurrentText(name.c_str());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
std::swap(switcher->pauseEntries[index],
|
||||
switcher->pauseEntries[index - 1]);
|
||||
}
|
||||
|
||||
void AdvSceneSwitcher::on_pauseWindows_currentRowChanged(int idx)
|
||||
void AdvSceneSwitcher::on_pauseDown_clicked()
|
||||
{
|
||||
if (loading)
|
||||
return;
|
||||
if (idx == -1)
|
||||
int index = ui->pauseEntries->currentRow();
|
||||
|
||||
if (!listMoveDown(ui->pauseEntries))
|
||||
return;
|
||||
|
||||
QListWidgetItem *item = ui->pauseWindows->item(idx);
|
||||
|
||||
QString window = item->data(Qt::UserRole).toString();
|
||||
PauseEntryWidget *s1 = (PauseEntryWidget *)ui->pauseEntries->itemWidget(
|
||||
ui->pauseEntries->item(index));
|
||||
PauseEntryWidget *s2 = (PauseEntryWidget *)ui->pauseEntries->itemWidget(
|
||||
ui->pauseEntries->item(index + 1));
|
||||
PauseEntryWidget::swapSwitchData(s1, s2);
|
||||
|
||||
std::lock_guard<std::mutex> lock(switcher->m);
|
||||
for (auto &s : switcher->pauseWindowsSwitches) {
|
||||
if (window.compare(s.c_str()) == 0) {
|
||||
ui->pauseWindowsWindows->setCurrentText(s.c_str());
|
||||
break;
|
||||
}
|
||||
|
||||
std::swap(switcher->pauseEntries[index],
|
||||
switcher->pauseEntries[index + 1]);
|
||||
}
|
||||
|
||||
void resetPause()
|
||||
{
|
||||
DefaultSceneTransition::pause = false;
|
||||
WindowSwitch::pause = false;
|
||||
ExecutableSwitch::pause = false;
|
||||
ScreenRegionSwitch::pause = false;
|
||||
MediaSwitch::pause = false;
|
||||
FileSwitch::pause = false;
|
||||
RandomSwitch::pause = false;
|
||||
TimeSwitch::pause = false;
|
||||
IdleData::pause = false;
|
||||
SceneSequenceSwitch::pause = false;
|
||||
AudioSwitch::pause = false;
|
||||
}
|
||||
|
||||
void setPauseTarget(PauseTarget &target, bool &verbose)
|
||||
{
|
||||
switch (target) {
|
||||
case PauseTarget::All:
|
||||
if (verbose)
|
||||
blog(LOG_INFO, "pause all switching");
|
||||
break;
|
||||
case PauseTarget::Transition:
|
||||
if (verbose)
|
||||
blog(LOG_INFO, "pause def_transition switching");
|
||||
DefaultSceneTransition::pause = true;
|
||||
break;
|
||||
case PauseTarget::Window:
|
||||
if (verbose)
|
||||
blog(LOG_INFO, "pause window switching");
|
||||
WindowSwitch::pause = true;
|
||||
break;
|
||||
case PauseTarget::Executable:
|
||||
if (verbose)
|
||||
blog(LOG_INFO, "pause exec switching");
|
||||
ExecutableSwitch::pause = true;
|
||||
break;
|
||||
case PauseTarget::Region:
|
||||
if (verbose)
|
||||
blog(LOG_INFO, "pause region switching");
|
||||
ScreenRegionSwitch::pause = true;
|
||||
break;
|
||||
case PauseTarget::Media:
|
||||
if (verbose)
|
||||
blog(LOG_INFO, "pause media switching");
|
||||
MediaSwitch::pause = true;
|
||||
break;
|
||||
case PauseTarget::File:
|
||||
if (verbose)
|
||||
blog(LOG_INFO, "pause file switching");
|
||||
FileSwitch::pause = true;
|
||||
break;
|
||||
case PauseTarget::Random:
|
||||
if (verbose)
|
||||
blog(LOG_INFO, "pause random switching");
|
||||
RandomSwitch::pause = true;
|
||||
break;
|
||||
case PauseTarget::Time:
|
||||
if (verbose)
|
||||
blog(LOG_INFO, "pause time switching");
|
||||
TimeSwitch::pause = true;
|
||||
break;
|
||||
case PauseTarget::Idle:
|
||||
if (verbose)
|
||||
blog(LOG_INFO, "pause idle switching");
|
||||
IdleData::pause = true;
|
||||
break;
|
||||
case PauseTarget::Sequence:
|
||||
if (verbose)
|
||||
blog(LOG_INFO, "pause sequence switching");
|
||||
SceneSequenceSwitch::pause = true;
|
||||
break;
|
||||
case PauseTarget::Audio:
|
||||
if (verbose)
|
||||
blog(LOG_INFO, "pause audio switching");
|
||||
AudioSwitch::pause = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int AdvSceneSwitcher::PauseScenesFindByData(const QString &scene)
|
||||
bool checkPauseScene(obs_weak_source_t *currentScene, obs_weak_source_t *scene,
|
||||
PauseTarget &target, bool &verbose)
|
||||
{
|
||||
int count = ui->pauseScenes->count();
|
||||
int idx = -1;
|
||||
if (currentScene != scene)
|
||||
return false;
|
||||
|
||||
for (int i = 0; i < count; i++) {
|
||||
QListWidgetItem *item = ui->pauseScenes->item(i);
|
||||
QString itemRegion = item->data(Qt::UserRole).toString();
|
||||
|
||||
if (itemRegion == scene) {
|
||||
idx = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return idx;
|
||||
setPauseTarget(target, verbose);
|
||||
if (target == PauseTarget::All)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
int AdvSceneSwitcher::PauseWindowsFindByData(const QString &window)
|
||||
bool checkPauseWindow(std::string ¤tTitle, std::string &title,
|
||||
PauseTarget &target, bool &verbose)
|
||||
{
|
||||
int count = ui->pauseWindows->count();
|
||||
int idx = -1;
|
||||
if (currentTitle != title)
|
||||
return false;
|
||||
|
||||
for (int i = 0; i < count; i++) {
|
||||
QListWidgetItem *item = ui->pauseWindows->item(i);
|
||||
QString itemRegion = item->data(Qt::UserRole).toString();
|
||||
|
||||
if (itemRegion == window) {
|
||||
idx = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return idx;
|
||||
setPauseTarget(target, verbose);
|
||||
if (target == PauseTarget::All)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool SwitcherData::checkPause()
|
||||
{
|
||||
bool pause = false;
|
||||
bool pauseAll = false;
|
||||
|
||||
std::string title;
|
||||
GetCurrentWindowTitle(title);
|
||||
|
||||
resetPause();
|
||||
|
||||
obs_source_t *currentSource = obs_frontend_get_current_scene();
|
||||
obs_weak_source_t *ws = obs_source_get_weak_source(currentSource);
|
||||
|
||||
for (OBSWeakSource &s : pauseScenesSwitches) {
|
||||
if (s == ws) {
|
||||
pause = true;
|
||||
for (PauseEntry &s : pauseEntries) {
|
||||
if (s.pauseType == PauseType::Scene)
|
||||
pauseAll = checkPauseScene(ws, s.scene, s.pauseTarget,
|
||||
verbose);
|
||||
else
|
||||
pauseAll = checkPauseWindow(title, s.window,
|
||||
s.pauseTarget, verbose);
|
||||
if (pauseAll)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
obs_source_release(currentSource);
|
||||
obs_weak_source_release(ws);
|
||||
|
||||
std::string title;
|
||||
if (!pause) {
|
||||
//lock.unlock();
|
||||
GetCurrentWindowTitle(title);
|
||||
//lock.lock();
|
||||
for (std::string &window : pauseWindowsSwitches) {
|
||||
if (window == title) {
|
||||
pause = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!pause) {
|
||||
//lock.unlock();
|
||||
GetCurrentWindowTitle(title);
|
||||
//lock.lock();
|
||||
for (std::string &window : pauseWindowsSwitches) {
|
||||
try {
|
||||
bool matches = std::regex_match(
|
||||
title, std::regex(window));
|
||||
if (matches) {
|
||||
pause = true;
|
||||
break;
|
||||
}
|
||||
} catch (const std::regex_error &) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (verbose && pause)
|
||||
blog(LOG_INFO, "pause match");
|
||||
|
||||
return pause;
|
||||
return pauseAll;
|
||||
}
|
||||
|
||||
void SwitcherData::savePauseSwitches(obs_data_t *obj)
|
||||
{
|
||||
obs_data_array_t *pauseScenesArray = obs_data_array_create();
|
||||
for (OBSWeakSource &scene : switcher->pauseScenesSwitches) {
|
||||
for (PauseEntry &s : switcher->pauseEntries) {
|
||||
obs_data_t *array_obj = obs_data_create();
|
||||
|
||||
obs_source_t *source = obs_weak_source_get_source(scene);
|
||||
obs_data_set_int(array_obj, "pauseType",
|
||||
static_cast<int>(s.pauseType));
|
||||
obs_data_set_int(array_obj, "pauseTarget",
|
||||
static_cast<int>(s.pauseTarget));
|
||||
obs_data_set_string(array_obj, "pauseWindow", s.window.c_str());
|
||||
|
||||
obs_source_t *source = obs_weak_source_get_source(s.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_data_array_push_back(pauseScenesArray, array_obj);
|
||||
|
||||
obs_source_release(source);
|
||||
obs_data_release(array_obj);
|
||||
}
|
||||
obs_data_set_array(obj, "pauseScenes", pauseScenesArray);
|
||||
obs_data_set_array(obj, "pauseEntries", pauseScenesArray);
|
||||
obs_data_set_int(obj, "oldPauseValuesImported", 1);
|
||||
obs_data_array_release(pauseScenesArray);
|
||||
|
||||
obs_data_array_t *pauseWindowsArray = obs_data_array_create();
|
||||
for (std::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);
|
||||
}
|
||||
obs_data_set_array(obj, "pauseWindows", pauseWindowsArray);
|
||||
obs_data_array_release(pauseWindowsArray);
|
||||
}
|
||||
|
||||
void SwitcherData::loadPauseSwitches(obs_data_t *obj)
|
||||
{
|
||||
switcher->pauseScenesSwitches.clear();
|
||||
switcher->pauseEntries.clear();
|
||||
|
||||
// To be removed in future builds once most users have migrated
|
||||
loadOldPauseSwitches(obj);
|
||||
|
||||
obs_data_array_t *pauseArray = obs_data_get_array(obj, "pauseEntries");
|
||||
size_t count = obs_data_array_count(pauseArray);
|
||||
|
||||
for (size_t i = 0; i < count; i++) {
|
||||
obs_data_t *array_obj = obs_data_array_item(pauseArray, i);
|
||||
|
||||
PauseType type = static_cast<PauseType>(
|
||||
obs_data_get_int(array_obj, "pauseType"));
|
||||
PauseTarget target = static_cast<PauseTarget>(
|
||||
obs_data_get_int(array_obj, "pauseTarget"));
|
||||
const char *scene =
|
||||
obs_data_get_string(array_obj, "pauseScene");
|
||||
const char *window =
|
||||
obs_data_get_string(array_obj, "pauseWindow");
|
||||
|
||||
switcher->pauseEntries.emplace_back(GetWeakSourceByName(scene),
|
||||
type, target, window);
|
||||
|
||||
obs_data_release(array_obj);
|
||||
}
|
||||
obs_data_array_release(pauseArray);
|
||||
}
|
||||
|
||||
void SwitcherData::loadOldPauseSwitches(obs_data_t *obj)
|
||||
{
|
||||
if (obs_data_get_int(obj, "oldPauseValuesImported"))
|
||||
return;
|
||||
|
||||
obs_data_array_t *pauseScenesArray =
|
||||
obs_data_get_array(obj, "pauseScenes");
|
||||
@@ -273,15 +274,14 @@ void SwitcherData::loadPauseSwitches(obs_data_t *obj)
|
||||
const char *scene =
|
||||
obs_data_get_string(array_obj, "pauseScene");
|
||||
|
||||
switcher->pauseScenesSwitches.emplace_back(
|
||||
GetWeakSourceByName(scene));
|
||||
switcher->pauseEntries.emplace_back(GetWeakSourceByName(scene),
|
||||
PauseType::Scene,
|
||||
PauseTarget::All, "");
|
||||
|
||||
obs_data_release(array_obj);
|
||||
}
|
||||
obs_data_array_release(pauseScenesArray);
|
||||
|
||||
switcher->pauseWindowsSwitches.clear();
|
||||
|
||||
obs_data_array_t *pauseWindowsArray =
|
||||
obs_data_get_array(obj, "pauseWindows");
|
||||
count = obs_data_array_count(pauseWindowsArray);
|
||||
@@ -293,7 +293,8 @@ void SwitcherData::loadPauseSwitches(obs_data_t *obj)
|
||||
const char *window =
|
||||
obs_data_get_string(array_obj, "pauseWindow");
|
||||
|
||||
switcher->pauseWindowsSwitches.emplace_back(window);
|
||||
switcher->pauseEntries.emplace_back(nullptr, PauseType::Window,
|
||||
PauseTarget::All, window);
|
||||
|
||||
obs_data_release(array_obj);
|
||||
}
|
||||
@@ -302,23 +303,153 @@ void SwitcherData::loadPauseSwitches(obs_data_t *obj)
|
||||
|
||||
void AdvSceneSwitcher::setupPauseTab()
|
||||
{
|
||||
populateSceneSelection(ui->pauseScenesScenes, false);
|
||||
populateWindowSelection(ui->pauseWindowsWindows);
|
||||
|
||||
for (auto &scene : switcher->pauseScenesSwitches) {
|
||||
std::string sceneName = GetWeakSourceName(scene);
|
||||
QString text = QString::fromStdString(sceneName);
|
||||
|
||||
QListWidgetItem *item =
|
||||
new QListWidgetItem(text, ui->pauseScenes);
|
||||
item->setData(Qt::UserRole, text);
|
||||
for (auto &s : switcher->pauseEntries) {
|
||||
QListWidgetItem *item;
|
||||
item = new QListWidgetItem(ui->pauseEntries);
|
||||
ui->pauseEntries->addItem(item);
|
||||
PauseEntryWidget *sw = new PauseEntryWidget(&s);
|
||||
item->setSizeHint(sw->minimumSizeHint());
|
||||
ui->pauseEntries->setItemWidget(item, sw);
|
||||
}
|
||||
|
||||
for (auto &window : switcher->pauseWindowsSwitches) {
|
||||
QString text = QString::fromStdString(window);
|
||||
if (switcher->pauseEntries.size() == 0)
|
||||
addPulse = PulseWidget(ui->pauseAdd, QColor(Qt::green));
|
||||
}
|
||||
|
||||
QListWidgetItem *item =
|
||||
new QListWidgetItem(text, ui->pauseWindows);
|
||||
item->setData(Qt::UserRole, text);
|
||||
void populatePauseTypes(QComboBox *list)
|
||||
{
|
||||
list->addItem(
|
||||
obs_module_text("AdvSceneSwitcher.pauseTab.pauseTypeScene"));
|
||||
list->addItem(
|
||||
obs_module_text("AdvSceneSwitcher.pauseTab.pauseTypeWindow"));
|
||||
}
|
||||
|
||||
void populatePauseTargets(QComboBox *list)
|
||||
{
|
||||
list->addItem(
|
||||
obs_module_text("AdvSceneSwitcher.pauseTab.pauseTargetAll"));
|
||||
list->addItem(obs_module_text("AdvSceneSwitcher.transitionTab.title"));
|
||||
list->addItem(obs_module_text("AdvSceneSwitcher.windowTitleTab.title"));
|
||||
list->addItem(obs_module_text("AdvSceneSwitcher.executableTab.title"));
|
||||
list->addItem(
|
||||
obs_module_text("AdvSceneSwitcher.screenRegionTab.title"));
|
||||
list->addItem(obs_module_text("AdvSceneSwitcher.mediaTab.title"));
|
||||
list->addItem(obs_module_text("AdvSceneSwitcher.fileTab.title"));
|
||||
list->addItem(obs_module_text("AdvSceneSwitcher.randomTab.title"));
|
||||
list->addItem(obs_module_text("AdvSceneSwitcher.timeTab.title"));
|
||||
list->addItem(obs_module_text("AdvSceneSwitcher.idleTab.title"));
|
||||
list->addItem(
|
||||
obs_module_text("AdvSceneSwitcher.sceneSequenceTab.title"));
|
||||
list->addItem(obs_module_text("AdvSceneSwitcher.audioTab.title"));
|
||||
}
|
||||
|
||||
PauseEntryWidget::PauseEntryWidget(PauseEntry *s) : SwitchWidget(s, false)
|
||||
{
|
||||
pauseTypes = new QComboBox();
|
||||
pauseTargets = new QComboBox();
|
||||
windows = new QComboBox();
|
||||
|
||||
QWidget::connect(pauseTypes, SIGNAL(currentIndexChanged(int)), this,
|
||||
SLOT(PauseTypeChanged(int)));
|
||||
QWidget::connect(pauseTargets, SIGNAL(currentIndexChanged(int)), this,
|
||||
SLOT(PauseTargetChanged(int)));
|
||||
QWidget::connect(windows, SIGNAL(currentTextChanged(const QString &)),
|
||||
this, SLOT(WindowChanged(const QString &)));
|
||||
|
||||
populatePauseTypes(pauseTypes);
|
||||
populatePauseTargets(pauseTargets);
|
||||
AdvSceneSwitcher::populateWindowSelection(windows);
|
||||
|
||||
windows->setEditable(true);
|
||||
windows->setMaxVisibleItems(20);
|
||||
|
||||
if (s) {
|
||||
scenes->setCurrentText(GetWeakSourceName(s->scene).c_str());
|
||||
pauseTypes->setCurrentIndex(static_cast<int>(s->pauseType));
|
||||
pauseTargets->setCurrentIndex(static_cast<int>(s->pauseTarget));
|
||||
windows->setCurrentText(s->window.c_str());
|
||||
if (s->pauseType == PauseType::Scene) {
|
||||
windows->setDisabled(true);
|
||||
windows->setVisible(false);
|
||||
} else {
|
||||
scenes->setDisabled(true);
|
||||
scenes->setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
QHBoxLayout *mainLayout = new QHBoxLayout;
|
||||
std::unordered_map<std::string, QWidget *> widgetPlaceholders = {
|
||||
{"{{scenes}}", scenes},
|
||||
{"{{pauseTypes}}", pauseTypes},
|
||||
{"{{pauseTargets}}", pauseTargets},
|
||||
{"{{windows}}", windows}};
|
||||
|
||||
placeWidgets(obs_module_text("AdvSceneSwitcher.pauseTab.pauseEntry"),
|
||||
mainLayout, widgetPlaceholders);
|
||||
setLayout(mainLayout);
|
||||
|
||||
switchData = s;
|
||||
|
||||
loading = false;
|
||||
}
|
||||
|
||||
PauseEntry *PauseEntryWidget::getSwitchData()
|
||||
{
|
||||
return switchData;
|
||||
}
|
||||
|
||||
void PauseEntryWidget::setSwitchData(PauseEntry *s)
|
||||
{
|
||||
switchData = s;
|
||||
}
|
||||
|
||||
void PauseEntryWidget::swapSwitchData(PauseEntryWidget *s1,
|
||||
PauseEntryWidget *s2)
|
||||
{
|
||||
SwitchWidget::swapSwitchData(s1, s2);
|
||||
|
||||
PauseEntry *t = s1->getSwitchData();
|
||||
s1->setSwitchData(s2->getSwitchData());
|
||||
s2->setSwitchData(t);
|
||||
}
|
||||
|
||||
void PauseEntryWidget::PauseTypeChanged(int index)
|
||||
{
|
||||
if (loading || !switchData)
|
||||
return;
|
||||
std::lock_guard<std::mutex> lock(switcher->m);
|
||||
switchData->pauseType = static_cast<PauseType>(index);
|
||||
|
||||
if (switchData->pauseType == PauseType::Scene) {
|
||||
windows->setDisabled(true);
|
||||
windows->setVisible(false);
|
||||
scenes->setDisabled(false);
|
||||
scenes->setVisible(true);
|
||||
} else {
|
||||
scenes->setDisabled(true);
|
||||
scenes->setVisible(false);
|
||||
windows->setDisabled(false);
|
||||
windows->setVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
void PauseEntryWidget::PauseTargetChanged(int index)
|
||||
{
|
||||
if (loading || !switchData)
|
||||
return;
|
||||
std::lock_guard<std::mutex> lock(switcher->m);
|
||||
switchData->pauseTarget = static_cast<PauseTarget>(index);
|
||||
}
|
||||
|
||||
void PauseEntryWidget::WindowChanged(const QString &text)
|
||||
{
|
||||
if (loading || !switchData)
|
||||
return;
|
||||
std::lock_guard<std::mutex> lock(switcher->m);
|
||||
switchData->window = text.toStdString();
|
||||
}
|
||||
|
||||
bool PauseEntry::valid()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "headers/advanced-scene-switcher.hpp"
|
||||
#include "headers/utility.hpp"
|
||||
|
||||
bool RandomSwitch::pause = false;
|
||||
static QMetaObject::Connection addPulse;
|
||||
|
||||
void AdvSceneSwitcher::on_randomAdd_clicked()
|
||||
@@ -34,7 +35,7 @@ void AdvSceneSwitcher::on_randomRemove_clicked()
|
||||
void SwitcherData::checkRandom(bool &match, OBSWeakSource &scene,
|
||||
OBSWeakSource &transition, int &delay)
|
||||
{
|
||||
if (randomSwitches.size() == 0)
|
||||
if (randomSwitches.size() == 0 || RandomSwitch::pause)
|
||||
return;
|
||||
|
||||
std::deque<RandomSwitch> rs(randomSwitches);
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "headers/advanced-scene-switcher.hpp"
|
||||
#include "headers/utility.hpp"
|
||||
|
||||
bool ScreenRegionSwitch::pause = false;
|
||||
static QMetaObject::Connection addPulse;
|
||||
|
||||
void AdvSceneSwitcher::clearFrames(QListWidget *list)
|
||||
@@ -132,6 +133,9 @@ void AdvSceneSwitcher::on_screenRegionDown_clicked()
|
||||
void SwitcherData::checkScreenRegionSwitch(bool &match, OBSWeakSource &scene,
|
||||
OBSWeakSource &transition)
|
||||
{
|
||||
if (ScreenRegionSwitch::pause)
|
||||
return;
|
||||
|
||||
std::pair<int, int> cursorPos = getCursorPos();
|
||||
int minRegionSize = 99999;
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "headers/advanced-scene-switcher.hpp"
|
||||
#include "headers/utility.hpp"
|
||||
|
||||
bool SceneSequenceSwitch::pause = false;
|
||||
static QMetaObject::Connection addPulse;
|
||||
|
||||
void AdvSceneSwitcher::on_sceneSequenceAdd_clicked()
|
||||
@@ -156,6 +157,9 @@ void SwitcherData::checkSceneSequence(bool &match, OBSWeakSource &scene,
|
||||
OBSWeakSource &transition,
|
||||
std::unique_lock<std::mutex> &lock)
|
||||
{
|
||||
if (SceneSequenceSwitch::pause)
|
||||
return;
|
||||
|
||||
obs_source_t *currentSource = obs_frontend_get_current_scene();
|
||||
obs_weak_source_t *ws = obs_source_get_weak_source(currentSource);
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "headers/advanced-scene-switcher.hpp"
|
||||
#include "headers/utility.hpp"
|
||||
|
||||
bool TimeSwitch::pause = false;
|
||||
static QMetaObject::Connection addPulse;
|
||||
|
||||
void AdvSceneSwitcher::on_timeAdd_clicked()
|
||||
@@ -107,7 +108,7 @@ bool checkRegularTime(TimeSwitch &s, int &interval)
|
||||
void SwitcherData::checkTimeSwitch(bool &match, OBSWeakSource &scene,
|
||||
OBSWeakSource &transition)
|
||||
{
|
||||
if (timeSwitches.size() == 0)
|
||||
if (TimeSwitch::pause)
|
||||
return;
|
||||
|
||||
for (TimeSwitch &s : timeSwitches) {
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#include "headers/advanced-scene-switcher.hpp"
|
||||
#include "headers/utility.hpp"
|
||||
|
||||
bool DefaultSceneTransition::pause = false;
|
||||
|
||||
void AdvSceneSwitcher::on_transitionsAdd_clicked()
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(switcher->m);
|
||||
@@ -138,7 +140,7 @@ void AdvSceneSwitcher::on_defaultTransitionsDown_clicked()
|
||||
void SwitcherData::checkDefaultSceneTransitions(bool &match,
|
||||
OBSWeakSource &transition)
|
||||
{
|
||||
if (checkedDefTransition)
|
||||
if (checkedDefTransition || DefaultSceneTransition::pause)
|
||||
return;
|
||||
|
||||
obs_source_t *currentSource = obs_frontend_get_current_scene();
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "headers/advanced-scene-switcher.hpp"
|
||||
#include "headers/utility.hpp"
|
||||
|
||||
bool WindowSwitch::pause = false;
|
||||
static QMetaObject::Connection addPulse;
|
||||
|
||||
void AdvSceneSwitcher::on_windowAdd_clicked()
|
||||
@@ -187,6 +188,9 @@ bool isFocused(std::string &title)
|
||||
void SwitcherData::checkWindowTitleSwitch(bool &match, OBSWeakSource &scene,
|
||||
OBSWeakSource &transition)
|
||||
{
|
||||
if (WindowSwitch::pause)
|
||||
return;
|
||||
|
||||
std::string title;
|
||||
bool ignored = false;
|
||||
|
||||
|
||||
@@ -27,11 +27,10 @@ void SwitcherData::Prune()
|
||||
screenRegionSwitches.begin() + 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 < pauseEntries.size(); i++) {
|
||||
PauseEntry &s = pauseEntries[i];
|
||||
if (!s.valid())
|
||||
pauseEntries.erase(pauseEntries.begin() + i--);
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < sceneSequenceSwitches.size(); i++) {
|
||||
|
||||
Reference in New Issue
Block a user