From 22bbd3a4ca9445387aad440d380bf95fb1f6f345 Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Sat, 4 Mar 2023 15:27:46 +0100 Subject: [PATCH] Extract argument list to generic string list class and widget * To be used for http header support * Add variable support --- src/utils/process-config.cpp | 9 +++++++++ src/utils/process-config.hpp | 2 +- src/utils/string-list.cpp | 21 ++++++++++++--------- src/utils/string-list.hpp | 4 +++- src/utils/variable.cpp | 5 +++++ src/utils/variable.hpp | 3 +++ 6 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/utils/process-config.cpp b/src/utils/process-config.cpp index 23fab6e9..b279a493 100644 --- a/src/utils/process-config.cpp +++ b/src/utils/process-config.cpp @@ -36,6 +36,15 @@ bool ProcessConfig::Load(obs_data_t *obj) return true; } +QStringList ProcessConfig::Args() +{ + QStringList result; + for (auto &arg : _args) { + result << QString::fromStdString(arg); + } + return result; +} + ProcessConfigEdit::ProcessConfigEdit(QWidget *parent) : QWidget(parent), _filePath(new FileSelection()), diff --git a/src/utils/process-config.hpp b/src/utils/process-config.hpp index 40c4192c..2158c08e 100644 --- a/src/utils/process-config.hpp +++ b/src/utils/process-config.hpp @@ -17,7 +17,7 @@ public: std::string Path() const { return _path; } std::string WorkingDir() const { return _workingDirectory; } - StringList Args() const { return _args; } + QStringList Args(); // Resolves variables private: std::string _path = obs_module_text("AdvSceneSwitcher.enterPath"); diff --git a/src/utils/string-list.cpp b/src/utils/string-list.cpp index 99c6bd23..2454756a 100644 --- a/src/utils/string-list.cpp +++ b/src/utils/string-list.cpp @@ -10,8 +10,7 @@ bool StringList::Save(obs_data_t *obj, const char *name, obs_data_array_t *strings = obs_data_array_create(); for (auto &string : *this) { obs_data_t *array_obj = obs_data_create(); - obs_data_set_string(array_obj, elementName, - string.toStdString().c_str()); + string.Save(array_obj, elementName); obs_data_array_push_back(strings, array_obj); obs_data_release(array_obj); } @@ -28,8 +27,9 @@ bool StringList::Load(obs_data_t *obj, const char *name, size_t count = obs_data_array_count(strings); for (size_t i = 0; i < count; i++) { obs_data_t *array_obj = obs_data_array_item(strings, i); - *this << QString::fromStdString( - obs_data_get_string(array_obj, elementName)); + VariableResolvingString string; + string.Load(array_obj, elementName); + *this << string; obs_data_release(array_obj); } obs_data_array_release(strings); @@ -97,7 +97,9 @@ void StringListEdit::SetStringList(const StringList &list) _stringList = list; _list->clear(); for (const auto &string : list) { - QListWidgetItem *item = new QListWidgetItem(string, _list); + QListWidgetItem *item = new QListWidgetItem( + QString::fromStdString(string.UnresolvedValue()), + _list); item->setData(Qt::UserRole, string); } SetListSize(); @@ -112,9 +114,10 @@ void StringListEdit::Add() if (!accepted || name.empty()) { return; } - auto string = QString::fromStdString(name); + VariableResolvingString string = name; QVariant v = QVariant::fromValue(string); - QListWidgetItem *item = new QListWidgetItem(string, _list); + QListWidgetItem *item = new QListWidgetItem( + QString::fromStdString(string.UnresolvedValue()), _list); item->setData(Qt::UserRole, string); _stringList << string; @@ -176,9 +179,9 @@ void StringListEdit::Clicked(QListWidgetItem *item) return; } - auto string = QString::fromStdString(name); + VariableResolvingString string = name; QVariant v = QVariant::fromValue(string); - item->setText(string); + item->setText(QString::fromStdString(string.UnresolvedValue())); item->setData(Qt::UserRole, string); int idx = _list->currentRow(); _stringList[idx] = string; diff --git a/src/utils/string-list.hpp b/src/utils/string-list.hpp index cf7b37b6..5b1a5b44 100644 --- a/src/utils/string-list.hpp +++ b/src/utils/string-list.hpp @@ -1,4 +1,6 @@ #pragma once +#include "variable.hpp" + #include #include @@ -6,7 +8,7 @@ #include #include -class StringList : public QStringList { +class StringList : public QList { public: bool Save(obs_data_t *obj, const char *name, const char *elementName = "string") const; diff --git a/src/utils/variable.cpp b/src/utils/variable.cpp index b5d1d275..65f838e7 100644 --- a/src/utils/variable.cpp +++ b/src/utils/variable.cpp @@ -120,6 +120,11 @@ VariableResolvingString::operator std::string() return _resolvedValue; } +VariableResolvingString::operator QVariant() const +{ + return QVariant::fromValue(*this); +} + void VariableResolvingString::operator=(std::string value) { _value = value; diff --git a/src/utils/variable.hpp b/src/utils/variable.hpp index a42828e4..167f4aca 100644 --- a/src/utils/variable.hpp +++ b/src/utils/variable.hpp @@ -47,6 +47,7 @@ public: VariableResolvingString(std::string str) : _value(std::move(str)){}; VariableResolvingString(const char *str) : _value(str){}; operator std::string(); + operator QVariant() const; void operator=(std::string); void operator=(const char *value); const char *c_str(); @@ -65,6 +66,8 @@ private: std::chrono::high_resolution_clock::time_point _lastResolve{}; }; +Q_DECLARE_METATYPE(VariableResolvingString); + Variable *GetVariableByName(const std::string &name); Variable *GetVariableByQString(const QString &name); std::weak_ptr GetWeakVariableByName(const std::string &name);