Skip to content

Commit

Permalink
Draft option to generate random number
Browse files Browse the repository at this point in the history
TODO:
Locale
Layout
  • Loading branch information
WarmUpTill committed Mar 1, 2025
1 parent 51b53bf commit e18720b
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 0 deletions.
72 changes: 72 additions & 0 deletions lib/macro/macro-action-variable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
#include "source-helpers.hpp"
#include "utility.hpp"

#include <random>

namespace advss {

const std::string MacroActionVariable::id = "variable";
Expand Down Expand Up @@ -64,6 +66,8 @@ const static std::map<MacroActionVariable::Type, std::string> actionTypes = {
"AdvSceneSwitcher.action.variable.type.trim"},
{MacroActionVariable::Type::CHANGE_CASE,
"AdvSceneSwitcher.action.variable.type.changeCase"},
{MacroActionVariable::Type::RANDOM_NUMBER,
"AdvSceneSwitcher.action.variable.type.randomNumber"},
};

const static std::map<MacroActionVariable::CaseType, std::string> caseTypes = {
Expand Down Expand Up @@ -253,6 +257,22 @@ void MacroActionVariable::SetToSceneItemName(Variable *var)
var->SetValue(data.name);
}

void MacroActionVariable::GenerateRandomNumber(Variable *var)
{
static std::random_device rd;
static std::mt19937 gen(rd());

if (_generateInteger) {
std::uniform_int_distribution<int> dis(_randomNumberStart,
_randomNumberEnd);
var->SetValue(dis(gen));
} else {
std::uniform_real_distribution<double> dis(_randomNumberStart,
_randomNumberEnd);
var->SetValue(dis(gen));
}
}

struct AskForInputParams {
AskForInputParams(const QString &prompt_, const QString &placeholder_)
: prompt(prompt_),
Expand Down Expand Up @@ -502,6 +522,9 @@ bool MacroActionVariable::Save(obs_data_t *obj) const
_stringLength.Save(obj, "stringLength");
obs_data_set_int(obj, "paddingChar", _paddingChar);
obs_data_set_int(obj, "caseType", static_cast<int>(_caseType));
_randomNumberStart.Save(obj, "randomNumberStart");
_randomNumberEnd.Save(obj, "randomNumberEnd");
obs_data_set_bool(obj, "generateInteger", _generateInteger);

obs_data_set_int(obj, "version", 1);

Expand Down Expand Up @@ -555,6 +578,10 @@ bool MacroActionVariable::Load(obs_data_t *obj)
_regexMatchIdx.Load(obj, "regexMatchIdx");
}

_randomNumberStart.Load(obj, "randomNumberStart");
_randomNumberEnd.Load(obj, "randomNumberEnd");
_generateInteger = obs_data_get_bool(obj, "generateInteger");

return true;
}

Expand Down Expand Up @@ -734,6 +761,9 @@ MacroActionVariableEdit::MacroActionVariableEdit(
_stringLength(new VariableSpinBox(this)),
_paddingCharSelection(new SingleCharSelection()),
_caseType(new FilterComboBox(this)),
_randomNumberStart(new VariableDoubleSpinBox(this)),
_randomNumberEnd(new VariableDoubleSpinBox(this)),
_generateInteger(new QCheckBox(this)),
_entryLayout(new QHBoxLayout())
{
_numValue->setMinimum(-9999999999);
Expand Down Expand Up @@ -833,6 +863,16 @@ MacroActionVariableEdit::MacroActionVariableEdit(
SLOT(CharSelectionChanged(const QString &)));
QWidget::connect(_caseType, SIGNAL(currentIndexChanged(int)), this,
SLOT(CaseTypeChanged(int)));
QWidget::connect(
_randomNumberStart,
SIGNAL(NumberVariableChanged(const NumberVariable<double> &)),
this, SLOT(RandomNumberStartChanged(const NumberVariable<double> &)));
QWidget::connect(
_randomNumberEnd,
SIGNAL(NumberVariableChanged(const NumberVariable<double> &)),
this, SLOT(RandomNumberEndChanged(const NumberVariable<double> &)));
QWidget::connect(_generateInteger, SIGNAL(stateChanged(int)), this,
SLOT(GenerateIntegerChanged(int)));

const std::unordered_map<std::string, QWidget *> widgetPlaceholders = {
{"{{variables}}", _variables},
Expand Down Expand Up @@ -861,6 +901,9 @@ MacroActionVariableEdit::MacroActionVariableEdit(
{"{{stringLength}}", _stringLength},
{"{{paddingCharSelection}}", _paddingCharSelection},
{"{{caseType}}", _caseType},
{"{{randomNumberStart}}", _randomNumberStart},
{"{{randomNumberEnd}}", _randomNumberEnd},
{"{{generateInteger}}", _generateInteger},
};
PlaceWidgets(
obs_module_text("AdvSceneSwitcher.action.variable.entry.other"),
Expand Down Expand Up @@ -963,6 +1006,9 @@ void MacroActionVariableEdit::UpdateEntryData()
QChar::fromLatin1(_entryData->_paddingChar));
_caseType->setCurrentIndex(
_caseType->findData(static_cast<int>(_entryData->_caseType)));
_randomNumberStart->SetValue(_entryData->_randomNumberStart);
_randomNumberEnd->SetValue(_entryData->_randomNumberEnd);
_generateInteger->setChecked(_entryData->_generateInteger);

SetWidgetVisibility();
}
Expand Down Expand Up @@ -1385,6 +1431,26 @@ void MacroActionVariableEdit::CaseTypeChanged(int index)
_caseType->itemData(index).toInt());
}

void MacroActionVariableEdit::RandomNumberStartChanged(
const NumberVariable<double> &value)
{
GUARD_LOADING_AND_LOCK();
_entryData->_randomNumberStart = value;
}

void MacroActionVariableEdit::RandomNumberEndChanged(
const NumberVariable<double> &value)
{
GUARD_LOADING_AND_LOCK();
_entryData->_randomNumberEnd = value;
}

void MacroActionVariableEdit::GenerateIntegerChanged(int value)
{
GUARD_LOADING_AND_LOCK();
_entryData->_generateInteger = value;
}

void MacroActionVariableEdit::SetWidgetVisibility()
{
if (!_entryData) {
Expand Down Expand Up @@ -1534,6 +1600,12 @@ void MacroActionVariableEdit::SetWidgetVisibility()
MacroActionVariable::Type::PAD);
_caseType->setVisible(_entryData->_type ==
MacroActionVariable::Type::CHANGE_CASE);
_randomNumberStart->setVisible(_entryData->_type ==
MacroActionVariable::Type::RANDOM_NUMBER);
_randomNumberEnd->setVisible(_entryData->_type ==
MacroActionVariable::Type::RANDOM_NUMBER);
_generateInteger->setVisible(_entryData->_type ==
MacroActionVariable::Type::RANDOM_NUMBER);

adjustSize();
updateGeometry();
Expand Down
11 changes: 11 additions & 0 deletions lib/macro/macro-action-variable.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ class MacroActionVariable : public MacroAction {
SWAP_VALUES,
TRIM,
CHANGE_CASE,
RANDOM_NUMBER,
};

Type _type = Type::SET_FIXED_VALUE;
Expand Down Expand Up @@ -99,6 +100,9 @@ class MacroActionVariable : public MacroAction {
};

CaseType _caseType = CaseType::LOWER_CASE;
DoubleVariable _randomNumberStart = 0;
DoubleVariable _randomNumberEnd = 100;
bool _generateInteger = true;

private:
void DecrementCurrentSegmentVariableRef();
Expand All @@ -108,6 +112,7 @@ class MacroActionVariable : public MacroAction {
void HandleMathExpression(Variable *);
void HandleCaseChange(Variable *);
void SetToSceneItemName(Variable *);
void GenerateRandomNumber(Variable *);

std::weak_ptr<MacroSegment> _macroSegment;
int _segmentIdxLoadValue = -1;
Expand Down Expand Up @@ -161,6 +166,9 @@ private slots:
void StringLengthChanged(const NumberVariable<int> &);
void CharSelectionChanged(const QString &);
void CaseTypeChanged(int index);
void RandomNumberStartChanged(const NumberVariable<double>& );
void RandomNumberEndChanged(const NumberVariable<double>& );
void GenerateIntegerChanged(int);

signals:
void HeaderInfoChanged(const QString &);
Expand Down Expand Up @@ -206,6 +214,9 @@ private slots:
VariableSpinBox *_stringLength;
SingleCharSelection *_paddingCharSelection;
FilterComboBox *_caseType;
VariableDoubleSpinBox *_randomNumberStart;
VariableDoubleSpinBox *_randomNumberEnd;
QCheckBox* _generateInteger;
QHBoxLayout *_entryLayout;

std::shared_ptr<MacroActionVariable> _entryData;
Expand Down

0 comments on commit e18720b

Please sign in to comment.