mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-03-21 17:34:57 -05:00
This makes it easier to select the intended settings value as the underlying value often has no direct connection to the user facing name. It also makes it possible to select list entries whos underlying value changes frequently, but the user facing value does not. (E.g. device IDs based on the input port compared to the device name)
103 lines
2.5 KiB
C++
103 lines
2.5 KiB
C++
#pragma once
|
|
#include "macro-condition-edit.hpp"
|
|
#include "variable-text-edit.hpp"
|
|
#include "regex-config.hpp"
|
|
#include "source-selection.hpp"
|
|
#include "filter-selection.hpp"
|
|
#include "source-setting.hpp"
|
|
|
|
#include <QComboBox>
|
|
#include <QPushButton>
|
|
#include <QCheckBox>
|
|
|
|
namespace advss {
|
|
|
|
class MacroConditionFilter : public MacroCondition {
|
|
public:
|
|
MacroConditionFilter(Macro *m) : MacroCondition(m, true) {}
|
|
bool CheckCondition();
|
|
bool Save(obs_data_t *obj) const;
|
|
bool Load(obs_data_t *obj);
|
|
std::string GetShortDesc() const;
|
|
std::string GetId() const { return id; };
|
|
static std::shared_ptr<MacroCondition> Create(Macro *m)
|
|
{
|
|
return std::make_shared<MacroConditionFilter>(m);
|
|
}
|
|
|
|
enum class Condition {
|
|
ENABLED,
|
|
DISABLED,
|
|
SETTINGS_MATCH,
|
|
SETTINGS_CHANGED,
|
|
INDIVIDUAL_SETTING_MATCH,
|
|
INDIVIDUAL_SETTING_CHANGED,
|
|
INDIVIDUAL_SETTING_LIST_ENTRY_MATCH,
|
|
};
|
|
void SetCondition(Condition);
|
|
Condition GetCondition() const { return _condition; }
|
|
|
|
SourceSelection _source;
|
|
FilterSelection _filter;
|
|
StringVariable _settings = "";
|
|
RegexConfig _regex;
|
|
SourceSetting _setting;
|
|
|
|
private:
|
|
void SetupTempVars();
|
|
bool CheckConditionHelper(const OBSWeakSource &);
|
|
|
|
Condition _condition = Condition::ENABLED;
|
|
std::string _currentSettings;
|
|
std::string _currentSettingsValue;
|
|
|
|
static bool _registered;
|
|
static const std::string id;
|
|
};
|
|
|
|
class MacroConditionFilterEdit : public QWidget {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
MacroConditionFilterEdit(
|
|
QWidget *parent,
|
|
std::shared_ptr<MacroConditionFilter> cond = nullptr);
|
|
void UpdateEntryData();
|
|
static QWidget *Create(QWidget *parent,
|
|
std::shared_ptr<MacroCondition> cond)
|
|
{
|
|
return new MacroConditionFilterEdit(
|
|
parent,
|
|
std::dynamic_pointer_cast<MacroConditionFilter>(cond));
|
|
}
|
|
|
|
private slots:
|
|
void SourceChanged(const SourceSelection &);
|
|
void FilterChanged(const FilterSelection &);
|
|
void ConditionChanged(int cond);
|
|
void GetSettingsClicked();
|
|
void SettingsChanged();
|
|
void RegexChanged(const RegexConfig &);
|
|
void SettingSelectionChanged(const SourceSetting &);
|
|
void RefreshVariableSourceSelectionValue();
|
|
signals:
|
|
void HeaderInfoChanged(const QString &);
|
|
|
|
private:
|
|
void SetWidgetVisibility();
|
|
|
|
SourceSelectionWidget *_sources;
|
|
FilterSelectionWidget *_filters;
|
|
QComboBox *_conditions;
|
|
QPushButton *_getSettings;
|
|
VariableTextEdit *_settings;
|
|
RegexConfigWidget *_regex;
|
|
SourceSettingSelection *_settingSelection;
|
|
QPushButton *_refreshSettingSelection;
|
|
|
|
std::shared_ptr<MacroConditionFilter> _entryData;
|
|
bool _loading = true;
|
|
};
|
|
|
|
} // namespace advss
|