1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
#pragma once
#include "macro-condition-edit.hpp"
#include "duration-control.hpp"
#include <QCheckBox>
#include <QPushButton>
#include <QTimer>
#include <QComboBox>
#include <QHBoxLayout>
namespace advss {
class MacroConditionTimer : public MacroCondition {
public:
MacroConditionTimer(Macro *m) : MacroCondition(m, true) {}
bool CheckCondition();
bool Save(obs_data_t *obj) const;
bool Load(obs_data_t *obj);
std::string GetId() const { return id; };
static std::shared_ptr<MacroCondition> Create(Macro *m)
{
return std::make_shared<MacroConditionTimer>(m);
}
void Pause();
void Continue();
void Reset();
enum class TimerType { FIXED, RANDOM };
TimerType _type = TimerType::FIXED;
Duration _duration;
Duration _duration2;
bool _paused = false;
bool _saveRemaining = false;
double _remaining = 0.;
bool _oneshot = false;
private:
void SetRandomTimeRemaining();
void SetVariables(double seconds);
void SetupTempVars();
static bool _registered;
static const std::string id;
};
class MacroConditionTimerEdit : public QWidget {
Q_OBJECT
public:
MacroConditionTimerEdit(
QWidget *parent,
std::shared_ptr<MacroConditionTimer> cond = nullptr);
void UpdateEntryData();
static QWidget *Create(QWidget *parent,
std::shared_ptr<MacroCondition> cond)
{
return new MacroConditionTimerEdit(
parent,
std::dynamic_pointer_cast<MacroConditionTimer>(cond));
}
private slots:
void TimerTypeChanged(int type);
void DurationChanged(const Duration &seconds);
void Duration2Changed(const Duration &seconds);
void SaveRemainingChanged(int state);
void AutoResetChanged(int state);
void PauseContinueClicked();
void ResetClicked();
void UpdateTimeRemaining();
protected:
void SetPauseContinueButtonLabel();
QComboBox *_timerTypes;
DurationSelection *_duration;
DurationSelection *_duration2;
QCheckBox *_autoReset;
QCheckBox *_saveRemaining;
QPushButton *_reset;
QPushButton *_pauseConinue;
QLabel *_remaining;
std::shared_ptr<MacroConditionTimer> _entryData;
private:
void SetWidgetVisibility();
QHBoxLayout *_timerLayout;
QTimer timer;
bool _loading = true;
};
} // namespace advss
|