Extract argument list to generic string list class and widget

* To be used for http header support
* Add variable support
This commit is contained in:
WarmUpTill
2023-03-04 15:27:46 +01:00
committed by WarmUpTill
parent 3cd4b2251f
commit 22bbd3a4ca
6 changed files with 33 additions and 11 deletions

View File

@@ -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()),

View File

@@ -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");

View File

@@ -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;

View File

@@ -1,4 +1,6 @@
#pragma once
#include "variable.hpp"
#include <obs-data.h>
#include <obs-module.h>
@@ -6,7 +8,7 @@
#include <QListWidget>
#include <QStringList>
class StringList : public QStringList {
class StringList : public QList<VariableResolvingString> {
public:
bool Save(obs_data_t *obj, const char *name,
const char *elementName = "string") const;

View File

@@ -120,6 +120,11 @@ VariableResolvingString::operator std::string()
return _resolvedValue;
}
VariableResolvingString::operator QVariant() const
{
return QVariant::fromValue<VariableResolvingString>(*this);
}
void VariableResolvingString::operator=(std::string value)
{
_value = value;

View File

@@ -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<Variable> GetWeakVariableByName(const std::string &name);