Use Duration class and DurationSelection widget

This commit is contained in:
WarmUpTill
2021-05-02 22:31:28 +02:00
committed by WarmUpTill
parent 6277da1bbd
commit e714df7ad0
11 changed files with 130 additions and 233 deletions

View File

@@ -115,8 +115,10 @@ public slots:
void on_noMatchDontSwitch_clicked();
void on_noMatchSwitch_clicked();
void on_noMatchRandomSwitch_clicked();
void on_noMatchDelay_valueChanged(double i);
void on_cooldownTime_valueChanged(double i);
void NoMatchDelayDurationChanged(double);
void NoMatchDelayUnitChanged(DurationUnit);
void CooldownDurationChanged(double);
void CooldownUnitChanged(DurationUnit);
void on_startupBehavior_currentIndexChanged(int index);
void on_autoStartEvent_currentIndexChanged(int index);
void on_noMatchSwitchScene_currentTextChanged(const QString &text);

View File

@@ -3,6 +3,7 @@
#include <limits>
#include "switch-generic.hpp"
#include "duration-control.hpp"
#include "volume-control.hpp"
constexpr auto audio_func = 8;
@@ -18,9 +19,8 @@ struct AudioSwitch : virtual SceneSwitcherEntry {
OBSWeakSource audioSource = nullptr;
int volumeThreshold = 0;
audioCondition condition = ABOVE;
double duration = 0;
Duration duration;
bool ignoreInactiveSource = true;
unsigned int matchCount = 0;
float peak = -std::numeric_limits<float>::infinity();
obs_volmeter_t *volmeter = nullptr;
@@ -50,8 +50,7 @@ struct AudioSwitchFallback : virtual SceneSwitcherEntry {
void load(obs_data_t *obj);
bool enable = false;
double duration = 0;
unsigned int matchCount = 0;
Duration duration;
};
class AudioSwitchWidget : public SwitchWidget {
@@ -77,7 +76,7 @@ private:
QComboBox *audioSources;
QComboBox *condition;
QSpinBox *audioVolumeThreshold;
QDoubleSpinBox *duration;
DurationSelection *duration;
QCheckBox *ignoreInactiveSource;
VolControl *volMeter;
@@ -94,7 +93,7 @@ private slots:
void DurationChanged(double dur);
private:
QDoubleSpinBox *duration;
DurationSelection *duration;
AudioSwitchFallback *switchData;
};

View File

@@ -2,24 +2,17 @@
#include <QVBoxLayout>
#include "switch-generic.hpp"
#include "duration-control.hpp"
constexpr auto round_trip_func = 1;
constexpr auto default_priority_1 = round_trip_func;
typedef enum {
SECONDS,
MINUTES,
HOURS,
} delay_units;
struct SceneSequenceSwitch : SceneSwitcherEntry {
static bool pause;
SwitchTargetType startTargetType = SwitchTargetType::Scene;
OBSWeakSource startScene = nullptr;
double delay = 0;
int delayMultiplier = 1;
Duration delay;
bool interruptible = false;
unsigned int matchCount = 0;
// nullptr marks start point and reaching end of extended sequence
SceneSequenceSwitch *activeSequence = nullptr;
@@ -57,22 +50,20 @@ public:
static void swapSwitchData(SequenceWidget *s1, SequenceWidget *s2);
void UpdateDelay();
void UpdateWidgetStatus(bool showExtendText);
void setExtendedSequenceStartScene();
private slots:
void SceneChanged(const QString &text);
void DelayChanged(double delay);
void DelayUnitsChanged(int idx);
void DelayUnitsChanged(DurationUnit);
void StartSceneChanged(const QString &text);
void InterruptibleChanged(int state);
void ExtendClicked();
void ReduceClicked();
protected:
QDoubleSpinBox *delay;
QComboBox *delayUnits;
DurationSelection *delay;
QComboBox *startScenes;
QCheckBox *interruptible;
QVBoxLayout *extendSequenceLayout;

View File

@@ -24,6 +24,8 @@
#include "switch-video.hpp"
#include "switch-network.hpp"
#include "duration-control.hpp"
constexpr auto default_interval = 300;
constexpr auto previous_scene_name = "Previous Scene";
constexpr auto current_transition_name = "Current Transition";
@@ -74,12 +76,11 @@ struct SwitcherData {
SceneGroup *lastRandomSceneGroup;
OBSWeakSource nonMatchingScene;
NoMatch switchIfNotMatching = NO_SWITCH;
double noMatchDelay = 0;
double noMatchCount = 0;
Duration noMatchDelay;
StartupBehavior startupBehavior = PERSIST;
AutoStartEvent autoStartEvent = AutoStartEvent::NEVER;
double cooldown = 0.;
Duration cooldown;
std::chrono::high_resolution_clock::time_point lastMatchTime;
std::deque<WindowSwitch> windowSwitches;