Add ResolveVariables()

Settings will be set to fixed values based on the values of the
variables used.
This commit is contained in:
WarmUpTill
2024-03-01 23:32:50 +01:00
committed by WarmUpTill
parent 2928775f5b
commit f8dadd38b4
20 changed files with 122 additions and 1 deletions

View File

@@ -114,6 +114,20 @@ FilterSelection::GetFilters(const SourceSelection &source) const
return {};
}
void FilterSelection::ResolveVariables()
{
if (_type != Type::VARIABLE) {
return;
}
_type = Type::SOURCE;
auto var = _variable.lock();
if (!var) {
_filterName = "";
return;
}
_filterName = var->Value();
}
std::string FilterSelection::ToString(bool resolve) const
{
switch (_type) {

View File

@@ -19,6 +19,7 @@ public:
Type GetType() const { return _type; }
std::vector<OBSWeakSource>
GetFilters(const SourceSelection &source) const;
void ResolveVariables();
std::string ToString(bool resolve = false) const;
private:

View File

@@ -140,6 +140,11 @@ void OSCBlob::Load(obs_data_t *obj, const char *name)
_stringRep.Load(obj, name);
}
void OSCBlob::ResolveVariables()
{
_stringRep.ResolveVariables();
}
void OSCTrue::Save(obs_data_t *obj, const char *name) const
{
obs_data_set_bool(obj, name, true);
@@ -201,6 +206,14 @@ std::optional<std::vector<char>> OSCMessage::GetBuffer() const
return buffer;
}
void OSCMessage::ResolveVariables()
{
_address.ResolveVariables();
for (auto &element : _elements) {
element.ResolveVariables();
}
}
const char *OSCMessageElement::GetTypeTag() const
{
return GetTypeTag(*this);
@@ -216,6 +229,21 @@ const char *OSCMessageElement::GetTypeTag(const OSCMessageElement &element)
return _typeNames.at(element._value.index()).tag;
}
void OSCMessageElement::ResolveVariables()
{
std::visit(
[](auto &&arg) {
using T = std::decay_t<decltype(arg)>;
if constexpr (std::is_same_v<T, StringVariable> ||
std::is_same_v<T, DoubleVariable> ||
std::is_same_v<T, OSCBlob> ||
std::is_same_v<T, IntVariable>) {
arg.ResolveVariables();
}
},
_value);
}
const char *OSCMessageElement::GetTypeName(const OSCMessageElement &element)
{
return obs_module_text(

View File

@@ -19,6 +19,7 @@ public:
std::optional<std::vector<char>> GetBinary() const;
void Save(obs_data_t *obj, const char *name) const;
void Load(obs_data_t *obj, const char *name);
void ResolveVariables();
private:
StringVariable _stringRep;
@@ -69,6 +70,8 @@ public:
static const char *GetTypeName(const OSCMessageElement &);
static const char *GetTypeTag(const OSCMessageElement &);
void ResolveVariables();
private:
struct TypeInfo {
const char *localizedName, *tag;
@@ -91,6 +94,8 @@ public:
std::string ToString() const;
std::optional<std::vector<char>> GetBuffer() const;
void ResolveVariables();
private:
StringVariable _address = "/address";
std::vector<OSCMessageElement> _elements = {

View File

@@ -53,6 +53,13 @@ bool ProcessConfig::StartProcessDetached() const
QString::fromStdString(WorkingDir()));
}
void ProcessConfig::ResolveVariables()
{
_path.ResolveVariables();
_workingDirectory.ResolveVariables();
_args.ResolveVariables();
}
std::variant<int, ProcessConfig::ProcStartError>
ProcessConfig::StartProcessAndWait(int timeout) const
{

View File

@@ -34,6 +34,8 @@ public:
StartProcessAndWait(int timeoutInMs) const;
bool StartProcessDetached() const;
void ResolveVariables();
private:
StringVariable _path = obs_module_text("AdvSceneSwitcher.enterPath");
StringVariable _workingDirectory = "";

View File

@@ -304,6 +304,25 @@ void SceneItemSelection::SetSourceTypeSelection(const char *type)
_sourceGroup = type;
}
void SceneItemSelection::ResolveVariables()
{
_index.ResolveVariables();
_indexEnd.ResolveVariables();
_pattern = std::string(_pattern);
if (_type != Type::VARIABLE_NAME) {
return;
}
_type = Type::SOURCE_NAME;
auto variable = _variable.lock();
if (variable) {
_source = GetWeakSourceByName(variable->Value().c_str());
} else {
_source = nullptr;
}
}
void SceneItemSelection::ReduceBadedOnIndexSelection(
std::vector<OBSSceneItem> &items) const
{

View File

@@ -53,6 +53,8 @@ public:
// scene item visibility action
void SetSourceTypeSelection(const char *);
void ResolveVariables();
private:
std::vector<OBSSceneItem>
GetSceneItemsByName(const SceneSelection &) const;

View File

@@ -39,6 +39,13 @@ bool StringList::Load(obs_data_t *obj, const char *name,
return true;
}
void StringList::ResolveVariables()
{
for (auto &value : *this) {
value.ResolveVariables();
}
}
StringListEdit::StringListEdit(QWidget *parent, const QString &addString,
const QString &addStringDescription,
int maxStringSize, bool allowEmtpy)

View File

@@ -16,6 +16,7 @@ public:
const char *elementName = "string") const;
bool Load(obs_data_t *obj, const char *name,
const char *elementName = "string");
void ResolveVariables();
friend class StringListEdit;
};