diff --git a/src/headers/macro-action-audio.hpp b/src/headers/macro-action-audio.hpp index a00d4a0a..315be060 100644 --- a/src/headers/macro-action-audio.hpp +++ b/src/headers/macro-action-audio.hpp @@ -15,7 +15,7 @@ public: void LogAction(); bool Save(obs_data_t *obj); bool Load(obs_data_t *obj); - int GetId() { return id; }; + std::string GetId() { return id; }; static std::shared_ptr Create() { return std::make_shared(); @@ -27,7 +27,7 @@ public: private: static bool _registered; - static const int id; + static const std::string id; }; class MacroActionAudioEdit : public QWidget { diff --git a/src/headers/macro-action-edit.hpp b/src/headers/macro-action-edit.hpp index 01c59a83..cedf39a8 100644 --- a/src/headers/macro-action-edit.hpp +++ b/src/headers/macro-action-edit.hpp @@ -20,15 +20,16 @@ struct MacroActionInfo { class MacroActionFactory { public: MacroActionFactory() = delete; - static bool Register(int id, MacroActionInfo); - static std::shared_ptr Create(const int id); - static QWidget *CreateWidget(const int id, QWidget *parent, + static bool Register(std::string id, MacroActionInfo); + static std::shared_ptr Create(const std::string id); + static QWidget *CreateWidget(const std::string id, QWidget *parent, std::shared_ptr action); static auto GetActionTypes() { return _methods; } - static std::string GetActionName(int id); + static std::string GetActionName(const std::string id); + static std::string GetIdByName(const QString &name); private: - static std::map _methods; + static std::map _methods; }; class MacroActionEdit : public QWidget { @@ -36,13 +37,14 @@ class MacroActionEdit : public QWidget { public: MacroActionEdit(QWidget *parent = nullptr, - std::shared_ptr * = nullptr, int type = 0, + std::shared_ptr * = nullptr, + std::string id = "scene_switch", bool startCollapsed = false); - void UpdateEntryData(int type); + void UpdateEntryData(std::string id); void Collapse(bool collapsed); private slots: - void ActionSelectionChanged(int idx); + void ActionSelectionChanged(const QString &text); protected: QComboBox *_actionSelection; diff --git a/src/headers/macro-action-filter.hpp b/src/headers/macro-action-filter.hpp index 64c91e60..63d07f3e 100644 --- a/src/headers/macro-action-filter.hpp +++ b/src/headers/macro-action-filter.hpp @@ -13,7 +13,7 @@ public: void LogAction(); bool Save(obs_data_t *obj); bool Load(obs_data_t *obj); - int GetId() { return id; }; + std::string GetId() { return id; }; static std::shared_ptr Create() { return std::make_shared(); @@ -25,7 +25,7 @@ public: private: static bool _registered; - static const int id; + static const std::string id; }; class MacroActionFilterEdit : public QWidget { diff --git a/src/headers/macro-action-recording.hpp b/src/headers/macro-action-recording.hpp index 05c26669..34b29e6f 100644 --- a/src/headers/macro-action-recording.hpp +++ b/src/headers/macro-action-recording.hpp @@ -16,7 +16,7 @@ public: void LogAction(); bool Save(obs_data_t *obj); bool Load(obs_data_t *obj); - int GetId() { return id; }; + std::string GetId() { return id; }; static std::shared_ptr Create() { return std::make_shared(); @@ -26,7 +26,7 @@ public: private: static bool _registered; - static const int id; + static const std::string id; }; class MacroActionRecordEdit : public QWidget { diff --git a/src/headers/macro-action-replay-buffer.hpp b/src/headers/macro-action-replay-buffer.hpp index 26dc7fc7..5d047270 100644 --- a/src/headers/macro-action-replay-buffer.hpp +++ b/src/headers/macro-action-replay-buffer.hpp @@ -15,7 +15,7 @@ public: void LogAction(); bool Save(obs_data_t *obj); bool Load(obs_data_t *obj); - int GetId() { return id; }; + std::string GetId() { return id; }; static std::shared_ptr Create() { return std::make_shared(); @@ -33,7 +33,7 @@ private: Duration _duration; static bool _registered; - static const int id; + static const std::string id; }; class MacroActionReplayBufferEdit : public QWidget { diff --git a/src/headers/macro-action-run.hpp b/src/headers/macro-action-run.hpp index cf276057..414fa532 100644 --- a/src/headers/macro-action-run.hpp +++ b/src/headers/macro-action-run.hpp @@ -10,7 +10,7 @@ public: void LogAction(); bool Save(obs_data_t *obj); bool Load(obs_data_t *obj); - int GetId() { return id; }; + std::string GetId() { return id; }; static std::shared_ptr Create() { return std::make_shared(); @@ -20,7 +20,7 @@ public: private: static bool _registered; - static const int id; + static const std::string id; }; class MacroActionRunEdit : public QWidget { diff --git a/src/headers/macro-action-scene-switch.hpp b/src/headers/macro-action-scene-switch.hpp index 36b8c5ff..967e2bfc 100644 --- a/src/headers/macro-action-scene-switch.hpp +++ b/src/headers/macro-action-scene-switch.hpp @@ -9,7 +9,7 @@ public: void LogAction(); bool Save(obs_data_t *obj); bool Load(obs_data_t *obj); - int GetId() { return id; }; + std::string GetId() { return id; }; static std::shared_ptr Create() { @@ -21,7 +21,7 @@ private: const char *getType() { return "MacroActionSwitchScene"; } static bool _registered; - static const int id; + static const std::string id; }; class MacroActionSwitchSceneEdit : public SwitchWidget { diff --git a/src/headers/macro-action-scene-visibility.hpp b/src/headers/macro-action-scene-visibility.hpp index 773dbb59..223d5c1f 100644 --- a/src/headers/macro-action-scene-visibility.hpp +++ b/src/headers/macro-action-scene-visibility.hpp @@ -13,7 +13,7 @@ public: void LogAction(); bool Save(obs_data_t *obj); bool Load(obs_data_t *obj); - int GetId() { return id; }; + std::string GetId() { return id; }; static std::shared_ptr Create() { return std::make_shared(); @@ -25,7 +25,7 @@ public: private: static bool _registered; - static const int id; + static const std::string id; }; class MacroActionSceneVisibilityEdit : public QWidget { diff --git a/src/headers/macro-action-source.hpp b/src/headers/macro-action-source.hpp index 47e375d1..db52358d 100644 --- a/src/headers/macro-action-source.hpp +++ b/src/headers/macro-action-source.hpp @@ -13,7 +13,7 @@ public: void LogAction(); bool Save(obs_data_t *obj); bool Load(obs_data_t *obj); - int GetId() { return id; }; + std::string GetId() { return id; }; static std::shared_ptr Create() { return std::make_shared(); @@ -24,7 +24,7 @@ public: private: static bool _registered; - static const int id; + static const std::string id; }; class MacroActionSourceEdit : public QWidget { diff --git a/src/headers/macro-action-streaming.hpp b/src/headers/macro-action-streaming.hpp index e0d71003..8d3fc038 100644 --- a/src/headers/macro-action-streaming.hpp +++ b/src/headers/macro-action-streaming.hpp @@ -14,7 +14,7 @@ public: void LogAction(); bool Save(obs_data_t *obj); bool Load(obs_data_t *obj); - int GetId() { return id; }; + std::string GetId() { return id; }; static std::shared_ptr Create() { return std::make_shared(); @@ -28,7 +28,7 @@ private: Duration _retryCooldown; static bool _registered; - static const int id; + static const std::string id; }; class MacroActionStreamEdit : public QWidget { diff --git a/src/headers/macro-action-wait.hpp b/src/headers/macro-action-wait.hpp index 50b555e4..e3b9756d 100644 --- a/src/headers/macro-action-wait.hpp +++ b/src/headers/macro-action-wait.hpp @@ -13,7 +13,7 @@ public: bool PerformAction(); bool Save(obs_data_t *obj); bool Load(obs_data_t *obj); - int GetId() { return id; }; + std::string GetId() { return id; }; static std::shared_ptr Create() { return std::make_shared(); @@ -24,7 +24,7 @@ public: private: static bool _registered; - static const int id; + static const std::string id; }; class MacroActionWaitEdit : public QWidget { diff --git a/src/headers/macro-condition-audio.hpp b/src/headers/macro-condition-audio.hpp index f6843ef2..849da3eb 100644 --- a/src/headers/macro-condition-audio.hpp +++ b/src/headers/macro-condition-audio.hpp @@ -19,7 +19,7 @@ public: bool CheckCondition(); bool Save(obs_data_t *obj); bool Load(obs_data_t *obj); - int GetId() { return id; }; + std::string GetId() { return id; }; static std::shared_ptr Create() { return std::make_shared(); @@ -39,7 +39,7 @@ public: private: float _peak = -std::numeric_limits::infinity(); static bool _registered; - static const int id; + static const std::string id; }; class MacroConditionAudioEdit : public QWidget { diff --git a/src/headers/macro-condition-edit.hpp b/src/headers/macro-condition-edit.hpp index fb2ba00d..f03f902d 100644 --- a/src/headers/macro-condition-edit.hpp +++ b/src/headers/macro-condition-edit.hpp @@ -20,15 +20,16 @@ struct MacroConditionInfo { class MacroConditionFactory { public: MacroConditionFactory() = delete; - static bool Register(int id, MacroConditionInfo); - static std::shared_ptr Create(const int id); - static QWidget *CreateWidget(const int id, QWidget *parent, + static bool Register(const std::string &, MacroConditionInfo); + static std::shared_ptr Create(const std::string); + static QWidget *CreateWidget(const std::string &id, QWidget *parent, std::shared_ptr); static auto GetConditionTypes() { return _methods; } - static std::string GetConditionName(int id); + static std::string GetConditionName(const std::string &); + static std::string GetIdByName(const QString& name); private: - static std::map _methods; + static std::map _methods; }; class MacroConditionEdit : public QWidget { @@ -37,15 +38,15 @@ class MacroConditionEdit : public QWidget { public: MacroConditionEdit(QWidget *parent = nullptr, std::shared_ptr * = nullptr, - int type = 0, bool root = true, + const std::string &id = "scene", bool root = true, bool startCollapsed = false); bool IsRootNode(); - void UpdateEntryData(int type); + void UpdateEntryData(const std::string &id); void Collapse(bool collapsed); private slots: void LogicSelectionChanged(int idx); - void ConditionSelectionChanged(int idx); + void ConditionSelectionChanged(const QString &text); protected: QComboBox *_logicSelection; diff --git a/src/headers/macro-condition-file.hpp b/src/headers/macro-condition-file.hpp index f5fd34c4..5cbd8a39 100644 --- a/src/headers/macro-condition-file.hpp +++ b/src/headers/macro-condition-file.hpp @@ -18,7 +18,7 @@ public: bool CheckCondition(); bool Save(obs_data_t *obj); bool Load(obs_data_t *obj); - int GetId() { return id; }; + std::string GetId() { return id; }; static std::shared_ptr Create() { return std::make_shared(); @@ -39,7 +39,7 @@ private: QDateTime _lastMod; size_t _lastHash = 0; static bool _registered; - static const int id; + static const std::string id; }; class MacroConditionFileEdit : public QWidget { diff --git a/src/headers/macro-condition-idle.hpp b/src/headers/macro-condition-idle.hpp index 0f1a0e49..f1fa0889 100644 --- a/src/headers/macro-condition-idle.hpp +++ b/src/headers/macro-condition-idle.hpp @@ -9,7 +9,7 @@ public: bool CheckCondition(); bool Save(obs_data_t *obj); bool Load(obs_data_t *obj); - int GetId() { return id; }; + std::string GetId() { return id; }; static std::shared_ptr Create() { return std::make_shared(); @@ -19,7 +19,7 @@ public: private: static bool _registered; - static const int id; + static const std::string id; }; class MacroConditionIdleEdit : public QWidget { diff --git a/src/headers/macro-condition-interval.hpp b/src/headers/macro-condition-interval.hpp index 59445a12..7d8edfbb 100644 --- a/src/headers/macro-condition-interval.hpp +++ b/src/headers/macro-condition-interval.hpp @@ -9,7 +9,7 @@ public: bool CheckCondition(); bool Save(obs_data_t *obj); bool Load(obs_data_t *obj); - int GetId() { return id; }; + std::string GetId() { return id; }; static std::shared_ptr Create() { return std::make_shared(); @@ -19,7 +19,7 @@ public: private: static bool _registered; - static const int id; + static const std::string id; }; class MacroConditionIntervalEdit : public QWidget { diff --git a/src/headers/macro-condition-media.hpp b/src/headers/macro-condition-media.hpp index fcf516b4..5c1735f8 100644 --- a/src/headers/macro-condition-media.hpp +++ b/src/headers/macro-condition-media.hpp @@ -39,7 +39,7 @@ public: bool CheckCondition(); bool Save(obs_data_t *obj); bool Load(obs_data_t *obj); - int GetId() { return id; }; + std::string GetId() { return id; }; static std::shared_ptr Create() { return std::make_shared(); @@ -65,7 +65,7 @@ private: bool _playedToEnd = false; static bool _registered; - static const int id; + static const std::string id; }; class MacroConditionMediaEdit : public QWidget { diff --git a/src/headers/macro-condition-plugin-state.hpp b/src/headers/macro-condition-plugin-state.hpp index 1a71df82..bf131e85 100644 --- a/src/headers/macro-condition-plugin-state.hpp +++ b/src/headers/macro-condition-plugin-state.hpp @@ -12,7 +12,7 @@ public: bool CheckCondition(); bool Save(obs_data_t *obj); bool Load(obs_data_t *obj); - int GetId() { return id; }; + std::string GetId() { return id; }; static std::shared_ptr Create() { return std::make_shared(); @@ -22,7 +22,7 @@ public: private: static bool _registered; - static const int id; + static const std::string id; }; class MacroConditionPluginStateEdit : public QWidget { diff --git a/src/headers/macro-condition-process.hpp b/src/headers/macro-condition-process.hpp index a934cc68..3f4e3d58 100644 --- a/src/headers/macro-condition-process.hpp +++ b/src/headers/macro-condition-process.hpp @@ -8,7 +8,7 @@ public: bool CheckCondition(); bool Save(obs_data_t *obj); bool Load(obs_data_t *obj); - int GetId() { return id; }; + std::string GetId() { return id; }; static std::shared_ptr Create() { return std::make_shared(); @@ -19,7 +19,7 @@ public: private: static bool _registered; - static const int id; + static const std::string id; }; class MacroConditionProcessEdit : public QWidget { diff --git a/src/headers/macro-condition-recording.hpp b/src/headers/macro-condition-recording.hpp index c66acdb1..77af9719 100644 --- a/src/headers/macro-condition-recording.hpp +++ b/src/headers/macro-condition-recording.hpp @@ -15,7 +15,7 @@ public: bool CheckCondition(); bool Save(obs_data_t *obj); bool Load(obs_data_t *obj); - int GetId() { return id; }; + std::string GetId() { return id; }; static std::shared_ptr Create() { return std::make_shared(); @@ -26,7 +26,7 @@ public: private: static bool _registered; - static const int id; + static const std::string id; }; class MacroConditionRecordEdit : public QWidget { diff --git a/src/headers/macro-condition-region.hpp b/src/headers/macro-condition-region.hpp index c998512d..5a5474ad 100644 --- a/src/headers/macro-condition-region.hpp +++ b/src/headers/macro-condition-region.hpp @@ -8,7 +8,7 @@ public: bool CheckCondition(); bool Save(obs_data_t *obj); bool Load(obs_data_t *obj); - int GetId() { return id; }; + std::string GetId() { return id; }; static std::shared_ptr Create() { return std::make_shared(); @@ -18,7 +18,7 @@ public: private: static bool _registered; - static const int id; + static const std::string id; }; class MacroConditionRegionEdit : public QWidget { diff --git a/src/headers/macro-condition-scene.hpp b/src/headers/macro-condition-scene.hpp index 8d4b56d4..433b2fd5 100644 --- a/src/headers/macro-condition-scene.hpp +++ b/src/headers/macro-condition-scene.hpp @@ -14,7 +14,7 @@ public: bool CheckCondition(); bool Save(obs_data_t *obj); bool Load(obs_data_t *obj); - int GetId() { return id; }; + std::string GetId() { return id; }; static std::shared_ptr Create() { return std::make_shared(); @@ -26,7 +26,7 @@ public: private: static bool _registered; - static const int id; + static const std::string id; }; class MacroConditionSceneEdit : public QWidget { diff --git a/src/headers/macro-condition-streaming.hpp b/src/headers/macro-condition-streaming.hpp index 4d959a03..62f76c1e 100644 --- a/src/headers/macro-condition-streaming.hpp +++ b/src/headers/macro-condition-streaming.hpp @@ -14,7 +14,7 @@ public: bool CheckCondition(); bool Save(obs_data_t *obj); bool Load(obs_data_t *obj); - int GetId() { return id; }; + std::string GetId() { return id; }; static std::shared_ptr Create() { return std::make_shared(); @@ -25,7 +25,7 @@ public: private: static bool _registered; - static const int id; + static const std::string id; }; class MacroConditionStreamEdit : public QWidget { diff --git a/src/headers/macro-condition-video.hpp b/src/headers/macro-condition-video.hpp index 122e1b18..8693d463 100644 --- a/src/headers/macro-condition-video.hpp +++ b/src/headers/macro-condition-video.hpp @@ -19,7 +19,7 @@ public: bool CheckCondition(); bool Save(obs_data_t *obj); bool Load(obs_data_t *obj); - int GetId() { return id; }; + std::string GetId() { return id; }; QImage GetMatchImage() { return _matchImage; }; static std::shared_ptr Create() { @@ -39,7 +39,7 @@ private: std::unique_ptr _screenshotData = nullptr; QImage _matchImage; static bool _registered; - static const int id; + static const std::string id; }; class MacroConditionVideoEdit : public QWidget { diff --git a/src/headers/macro-condition-window.hpp b/src/headers/macro-condition-window.hpp index e90921f9..022430e3 100644 --- a/src/headers/macro-condition-window.hpp +++ b/src/headers/macro-condition-window.hpp @@ -8,7 +8,7 @@ public: bool CheckCondition(); bool Save(obs_data_t *obj); bool Load(obs_data_t *obj); - int GetId() { return id; }; + std::string GetId() { return id; }; static std::shared_ptr Create() { return std::make_shared(); @@ -27,7 +27,7 @@ public: private: static bool _registered; - static const int id; + static const std::string id; }; class MacroConditionWindowEdit : public QWidget { diff --git a/src/headers/macro.hpp b/src/headers/macro.hpp index bdc586e2..7c0271a2 100644 --- a/src/headers/macro.hpp +++ b/src/headers/macro.hpp @@ -38,7 +38,7 @@ public: virtual bool CheckCondition() = 0; virtual bool Save(obs_data_t *obj) = 0; virtual bool Load(obs_data_t *obj) = 0; - virtual int GetId() = 0; + virtual std::string GetId() = 0; LogicType GetLogicType() { return _logic; } void SetLogicType(LogicType logic) { _logic = logic; } @@ -53,7 +53,7 @@ public: virtual bool PerformAction() = 0; virtual bool Save(obs_data_t *obj) = 0; virtual bool Load(obs_data_t *obj) = 0; - virtual int GetId() = 0; + virtual std::string GetId() = 0; virtual void LogAction(); }; diff --git a/src/macro-action-audio.cpp b/src/macro-action-audio.cpp index 314c410f..354c8b90 100644 --- a/src/macro-action-audio.cpp +++ b/src/macro-action-audio.cpp @@ -2,7 +2,7 @@ #include "headers/advanced-scene-switcher.hpp" #include "headers/utility.hpp" -const int MacroActionAudio::id = 2; +const std::string MacroActionAudio::id = "audio"; bool MacroActionAudio::_registered = MacroActionFactory::Register( MacroActionAudio::id, diff --git a/src/macro-action-edit.cpp b/src/macro-action-edit.cpp index fc3a8878..08475b49 100644 --- a/src/macro-action-edit.cpp +++ b/src/macro-action-edit.cpp @@ -3,9 +3,9 @@ #include "headers/utility.hpp" #include "headers/advanced-scene-switcher.hpp" -std::map MacroActionFactory::_methods; +std::map MacroActionFactory::_methods; -bool MacroActionFactory::Register(int id, MacroActionInfo info) +bool MacroActionFactory::Register(std::string id, MacroActionInfo info) { if (auto it = _methods.find(id); it == _methods.end()) { _methods[id] = info; @@ -14,7 +14,7 @@ bool MacroActionFactory::Register(int id, MacroActionInfo info) return false; } -std::shared_ptr MacroActionFactory::Create(const int id) +std::shared_ptr MacroActionFactory::Create(const std::string id) { if (auto it = _methods.find(id); it != _methods.end()) return it->second._createFunc(); @@ -22,7 +22,7 @@ std::shared_ptr MacroActionFactory::Create(const int id) return nullptr; } -QWidget *MacroActionFactory::CreateWidget(const int id, QWidget *parent, +QWidget *MacroActionFactory::CreateWidget(const std::string id, QWidget *parent, std::shared_ptr action) { if (auto it = _methods.find(id); it != _methods.end()) @@ -31,7 +31,7 @@ QWidget *MacroActionFactory::CreateWidget(const int id, QWidget *parent, return nullptr; } -std::string MacroActionFactory::GetActionName(int id) +std::string MacroActionFactory::GetActionName(const std::string id) { if (auto it = _methods.find(id); it != _methods.end()) { return it->second._name; @@ -39,6 +39,16 @@ std::string MacroActionFactory::GetActionName(int id) return "unknown action"; } +std::string MacroActionFactory::GetIdByName(const QString &name) +{ + for (auto it : _methods) { + if (name == obs_module_text(it.second._name.c_str())) { + return it.first; + } + } + return ""; +} + static inline void populateActionSelection(QComboBox *list) { for (auto entry : MacroActionFactory::GetActionTypes()) { @@ -48,14 +58,15 @@ static inline void populateActionSelection(QComboBox *list) MacroActionEdit::MacroActionEdit(QWidget *parent, std::shared_ptr *entryData, - int type, bool startCollapsed) + std::string id, bool startCollapsed) : QWidget(parent) { _actionSelection = new QComboBox(); _section = new Section(300); - QWidget::connect(_actionSelection, SIGNAL(currentIndexChanged(int)), - this, SLOT(ActionSelectionChanged(int))); + QWidget::connect(_actionSelection, + SIGNAL(currentTextChanged(const QString &)), this, + SLOT(ActionSelectionChanged(const QString &))); populateActionSelection(_actionSelection); @@ -66,32 +77,35 @@ MacroActionEdit::MacroActionEdit(QWidget *parent, setLayout(mainLayout); _entryData = entryData; - UpdateEntryData(type); + UpdateEntryData(id); _loading = false; _section->Collapse(startCollapsed); } -void MacroActionEdit::ActionSelectionChanged(int idx) +void MacroActionEdit::ActionSelectionChanged(const QString &text) { if (_loading || !_entryData) { return; } + std::string id = MacroActionFactory::GetIdByName(text); + std::lock_guard lock(switcher->m); _entryData->reset(); - *_entryData = MacroActionFactory::Create(idx); + *_entryData = MacroActionFactory::Create(id); auto widget = - MacroActionFactory::CreateWidget(idx, window(), *_entryData); + MacroActionFactory::CreateWidget(id, window(), *_entryData); _section->SetContent(widget); _section->Collapse(false); } -void MacroActionEdit::UpdateEntryData(int type) +void MacroActionEdit::UpdateEntryData(std::string id) { - _actionSelection->setCurrentIndex(type); + _actionSelection->setCurrentText( + obs_module_text(MacroActionFactory::GetActionName(id).c_str())); auto widget = - MacroActionFactory::CreateWidget(type, window(), *_entryData); + MacroActionFactory::CreateWidget(id, window(), *_entryData); _section->SetContent(widget); } @@ -106,9 +120,13 @@ void AdvSceneSwitcher::on_actionAdd_clicked() if (!macro) { return; } + + MacroActionSwitchScene temp; + std::string id = temp.GetId(); + std::lock_guard lock(switcher->m); - macro->Actions().emplace_back(MacroActionFactory::Create(0)); - auto newEntry = new MacroActionEdit(this, ¯o->Actions().back(), 0); + macro->Actions().emplace_back(MacroActionFactory::Create(id)); + auto newEntry = new MacroActionEdit(this, ¯o->Actions().back(), id); ui->macroEditActionLayout->addWidget(newEntry); ui->macroEditActionHelp->setVisible(false); newEntry->Collapse(false); diff --git a/src/macro-action-filter.cpp b/src/macro-action-filter.cpp index 39447aff..c984e9db 100644 --- a/src/macro-action-filter.cpp +++ b/src/macro-action-filter.cpp @@ -2,7 +2,7 @@ #include "headers/advanced-scene-switcher.hpp" #include "headers/utility.hpp" -const int MacroActionFilter::id = 8; +const std::string MacroActionFilter::id = "filter"; bool MacroActionFilter::_registered = MacroActionFactory::Register( MacroActionFilter::id, diff --git a/src/macro-action-recording.cpp b/src/macro-action-recording.cpp index e479b899..527b98b7 100644 --- a/src/macro-action-recording.cpp +++ b/src/macro-action-recording.cpp @@ -2,7 +2,7 @@ #include "headers/advanced-scene-switcher.hpp" #include "headers/utility.hpp" -const int MacroActionRecord::id = 4; +const std::string MacroActionRecord::id = "recording"; bool MacroActionRecord::_registered = MacroActionFactory::Register( MacroActionRecord::id, diff --git a/src/macro-action-replay-buffer.cpp b/src/macro-action-replay-buffer.cpp index 0785bbed..d0351766 100644 --- a/src/macro-action-replay-buffer.cpp +++ b/src/macro-action-replay-buffer.cpp @@ -2,7 +2,7 @@ #include "headers/advanced-scene-switcher.hpp" #include "headers/utility.hpp" -const int MacroActionReplayBuffer::id = 5; +const std::string MacroActionReplayBuffer::id = "replay_buffer"; bool MacroActionReplayBuffer::_registered = MacroActionFactory::Register( MacroActionReplayBuffer::id, diff --git a/src/macro-action-run.cpp b/src/macro-action-run.cpp index 9923e34e..ef01f0ac 100644 --- a/src/macro-action-run.cpp +++ b/src/macro-action-run.cpp @@ -5,7 +5,7 @@ #include #include -const int MacroActionRun::id = 6; +const std::string MacroActionRun::id = "run"; bool MacroActionRun::_registered = MacroActionFactory::Register( MacroActionRun::id, {MacroActionRun::Create, MacroActionRunEdit::Create, diff --git a/src/macro-action-scene-switch.cpp b/src/macro-action-scene-switch.cpp index 11b7bab0..8ab79ff7 100644 --- a/src/macro-action-scene-switch.cpp +++ b/src/macro-action-scene-switch.cpp @@ -2,7 +2,7 @@ #include "headers/advanced-scene-switcher.hpp" #include "headers/utility.hpp" -const int MacroActionSwitchScene::id = 0; +const std::string MacroActionSwitchScene::id = "scene_switch"; bool MacroActionSwitchScene::_registered = MacroActionFactory::Register( MacroActionSwitchScene::id, diff --git a/src/macro-action-scene-visibility.cpp b/src/macro-action-scene-visibility.cpp index bd6a7a97..c1b480ae 100644 --- a/src/macro-action-scene-visibility.cpp +++ b/src/macro-action-scene-visibility.cpp @@ -2,7 +2,7 @@ #include "headers/advanced-scene-switcher.hpp" #include "headers/utility.hpp" -const int MacroActionSceneVisibility::id = 7; +const std::string MacroActionSceneVisibility::id = "scene_visibility"; bool MacroActionSceneVisibility::_registered = MacroActionFactory::Register( MacroActionSceneVisibility::id, diff --git a/src/macro-action-source.cpp b/src/macro-action-source.cpp index 74681138..b58f2cfb 100644 --- a/src/macro-action-source.cpp +++ b/src/macro-action-source.cpp @@ -2,7 +2,7 @@ #include "headers/advanced-scene-switcher.hpp" #include "headers/utility.hpp" -const int MacroActionSource::id = 9; +const std::string MacroActionSource::id = "source"; bool MacroActionSource::_registered = MacroActionFactory::Register( MacroActionSource::id, diff --git a/src/macro-action-streaming.cpp b/src/macro-action-streaming.cpp index 56dc0c97..b9abda30 100644 --- a/src/macro-action-streaming.cpp +++ b/src/macro-action-streaming.cpp @@ -2,7 +2,7 @@ #include "headers/advanced-scene-switcher.hpp" #include "headers/utility.hpp" -const int MacroActionStream::id = 3; +const std::string MacroActionStream::id = "streaming"; bool MacroActionStream::_registered = MacroActionFactory::Register( MacroActionStream::id, diff --git a/src/macro-action-wait.cpp b/src/macro-action-wait.cpp index f30914d2..024960c4 100644 --- a/src/macro-action-wait.cpp +++ b/src/macro-action-wait.cpp @@ -4,7 +4,7 @@ #include -const int MacroActionWait::id = 1; +const std::string MacroActionWait::id = "wait"; bool MacroActionWait::_registered = MacroActionFactory::Register( MacroActionWait::id, diff --git a/src/macro-condition-audio.cpp b/src/macro-condition-audio.cpp index c25f7b96..dce2fa8f 100644 --- a/src/macro-condition-audio.cpp +++ b/src/macro-condition-audio.cpp @@ -3,7 +3,7 @@ #include "headers/utility.hpp" #include "headers/advanced-scene-switcher.hpp" -const int MacroConditionAudio::id = 3; +const std::string MacroConditionAudio::id = "audio"; bool MacroConditionAudio::_registered = MacroConditionFactory::Register( MacroConditionAudio::id, diff --git a/src/macro-condition-edit.cpp b/src/macro-condition-edit.cpp index 46acfe42..488797f8 100644 --- a/src/macro-condition-edit.cpp +++ b/src/macro-condition-edit.cpp @@ -1,8 +1,10 @@ #include "headers/macro-condition-edit.hpp" +#include "headers/macro-condition-scene.hpp" -std::map MacroConditionFactory::_methods; +std::map MacroConditionFactory::_methods; -bool MacroConditionFactory::Register(int id, MacroConditionInfo info) +bool MacroConditionFactory::Register(const std::string &id, + MacroConditionInfo info) { if (auto it = _methods.find(id); it == _methods.end()) { _methods[id] = info; @@ -11,7 +13,8 @@ bool MacroConditionFactory::Register(int id, MacroConditionInfo info) return false; } -std::shared_ptr MacroConditionFactory::Create(const int id) +std::shared_ptr +MacroConditionFactory::Create(const std::string id) { if (auto it = _methods.find(id); it != _methods.end()) return it->second._createFunc(); @@ -20,7 +23,7 @@ std::shared_ptr MacroConditionFactory::Create(const int id) } QWidget * -MacroConditionFactory::CreateWidget(const int id, QWidget *parent, +MacroConditionFactory::CreateWidget(const std::string &id, QWidget *parent, std::shared_ptr cond) { if (auto it = _methods.find(id); it != _methods.end()) @@ -29,7 +32,7 @@ MacroConditionFactory::CreateWidget(const int id, QWidget *parent, return nullptr; } -std::string MacroConditionFactory::GetConditionName(int id) +std::string MacroConditionFactory::GetConditionName(const std::string &id) { if (auto it = _methods.find(id); it != _methods.end()) { return it->second._name; @@ -37,6 +40,16 @@ std::string MacroConditionFactory::GetConditionName(int id) return "unknown condition"; } +std::string MacroConditionFactory::GetIdByName(const QString &name) +{ + for (auto it : _methods) { + if (name == obs_module_text(it.second._name.c_str())) { + return it.first; + } + } + return ""; +} + static inline void populateLogicSelection(QComboBox *list, bool root = false) { if (root) { @@ -65,8 +78,8 @@ static inline void populateConditionSelection(QComboBox *list) } MacroConditionEdit::MacroConditionEdit( - QWidget *parent, std::shared_ptr *entryData, int type, - bool root, bool startCollapsed) + QWidget *parent, std::shared_ptr *entryData, + const std::string &id, bool root, bool startCollapsed) : QWidget(parent) { _logicSelection = new QComboBox(); @@ -75,8 +88,9 @@ MacroConditionEdit::MacroConditionEdit( QWidget::connect(_logicSelection, SIGNAL(currentIndexChanged(int)), this, SLOT(LogicSelectionChanged(int))); - QWidget::connect(_conditionSelection, SIGNAL(currentIndexChanged(int)), - this, SLOT(ConditionSelectionChanged(int))); + QWidget::connect(_conditionSelection, + SIGNAL(currentTextChanged(const QString &)), this, + SLOT(ConditionSelectionChanged(const QString &))); populateLogicSelection(_logicSelection, root); populateConditionSelection(_conditionSelection); @@ -90,7 +104,7 @@ MacroConditionEdit::MacroConditionEdit( _entryData = entryData; _isRoot = root; - UpdateEntryData(type); + UpdateEntryData(id); _loading = false; _section->Collapse(startCollapsed); } @@ -117,11 +131,12 @@ bool MacroConditionEdit::IsRootNode() return _isRoot; } -void MacroConditionEdit::UpdateEntryData(int type) +void MacroConditionEdit::UpdateEntryData(const std::string &id) { - _conditionSelection->setCurrentIndex(type); - auto widget = MacroConditionFactory::CreateWidget(type, window(), - *_entryData); + _conditionSelection->setCurrentText(obs_module_text( + MacroConditionFactory::GetConditionName(id).c_str())); + auto widget = + MacroConditionFactory::CreateWidget(id, window(), *_entryData); auto logic = (*_entryData)->GetLogicType(); if (IsRootNode()) { _logicSelection->setCurrentIndex(static_cast(logic)); @@ -137,19 +152,21 @@ void MacroConditionEdit::Collapse(bool collapsed) _section->Collapse(collapsed); } -void MacroConditionEdit::ConditionSelectionChanged(int idx) +void MacroConditionEdit::ConditionSelectionChanged(const QString &text) { if (_loading || !_entryData) { return; } + std::string id = MacroConditionFactory::GetIdByName(text); + std::lock_guard lock(switcher->m); auto logic = (*_entryData)->GetLogicType(); _entryData->reset(); - *_entryData = MacroConditionFactory::Create(idx); + *_entryData = MacroConditionFactory::Create(id); (*_entryData)->SetLogicType(logic); auto widget = - MacroConditionFactory::CreateWidget(idx, window(), *_entryData); + MacroConditionFactory::CreateWidget(id, window(), *_entryData); _section->SetContent(widget); _section->Collapse(false); } @@ -160,14 +177,16 @@ void AdvSceneSwitcher::on_conditionAdd_clicked() if (!macro) { return; } + MacroConditionScene temp; + std::string id = temp.GetId(); std::lock_guard lock(switcher->m); bool root = macro->Conditions().size() == 0; - macro->Conditions().emplace_back(MacroConditionFactory::Create(0)); + macro->Conditions().emplace_back(MacroConditionFactory::Create(id)); auto logic = root ? LogicType::ROOT_NONE : LogicType::NONE; macro->Conditions().back()->SetLogicType(logic); auto newEntry = new MacroConditionEdit( - this, ¯o->Conditions().back(), 0, root); + this, ¯o->Conditions().back(), id, root); ui->macroEditConditionLayout->addWidget(newEntry); ui->macroEditConditionHelp->setVisible(false); newEntry->Collapse(false); diff --git a/src/macro-condition-file.cpp b/src/macro-condition-file.cpp index 234c4a5d..16a5af4f 100644 --- a/src/macro-condition-file.cpp +++ b/src/macro-condition-file.cpp @@ -7,7 +7,7 @@ #include #include -const int MacroConditionFile::id = 4; +const std::string MacroConditionFile::id = "file"; bool MacroConditionFile::_registered = MacroConditionFactory::Register( MacroConditionFile::id, diff --git a/src/macro-condition-idle.cpp b/src/macro-condition-idle.cpp index 533d62ea..bc3d86c8 100644 --- a/src/macro-condition-idle.cpp +++ b/src/macro-condition-idle.cpp @@ -3,7 +3,7 @@ #include "headers/utility.hpp" #include "headers/advanced-scene-switcher.hpp" -const int MacroConditionIdle::id = 10; +const std::string MacroConditionIdle::id = "idle"; bool MacroConditionIdle::_registered = MacroConditionFactory::Register( MacroConditionIdle::id, diff --git a/src/macro-condition-interval.cpp b/src/macro-condition-interval.cpp index c188326c..fa37d4dc 100644 --- a/src/macro-condition-interval.cpp +++ b/src/macro-condition-interval.cpp @@ -3,7 +3,7 @@ #include "headers/utility.hpp" #include "headers/advanced-scene-switcher.hpp" -const int MacroConditionInterval::id = 12; +const std::string MacroConditionInterval::id = "interval"; bool MacroConditionInterval::_registered = MacroConditionFactory::Register( MacroConditionInterval::id, diff --git a/src/macro-condition-media.cpp b/src/macro-condition-media.cpp index 828718d5..d0e46bc2 100644 --- a/src/macro-condition-media.cpp +++ b/src/macro-condition-media.cpp @@ -3,7 +3,7 @@ #include "headers/utility.hpp" #include "headers/advanced-scene-switcher.hpp" -const int MacroConditionMedia::id = 5; +const std::string MacroConditionMedia::id = "media"; bool MacroConditionMedia::_registered = MacroConditionFactory::Register( MacroConditionMedia::id, diff --git a/src/macro-condition-plugin-state.cpp b/src/macro-condition-plugin-state.cpp index ac69b8da..ac049bfe 100644 --- a/src/macro-condition-plugin-state.cpp +++ b/src/macro-condition-plugin-state.cpp @@ -3,7 +3,7 @@ #include "headers/utility.hpp" #include "headers/advanced-scene-switcher.hpp" -const int MacroConditionPluginState::id = 11; +const std::string MacroConditionPluginState::id = "plugin_state"; bool MacroConditionPluginState::_registered = MacroConditionFactory::Register( MacroConditionPluginState::id, diff --git a/src/macro-condition-process.cpp b/src/macro-condition-process.cpp index 992ef67a..eb1ab373 100644 --- a/src/macro-condition-process.cpp +++ b/src/macro-condition-process.cpp @@ -5,7 +5,7 @@ #include -const int MacroConditionProcess::id = 9; +const std::string MacroConditionProcess::id = "process"; bool MacroConditionProcess::_registered = MacroConditionFactory::Register( MacroConditionProcess::id, diff --git a/src/macro-condition-recording.cpp b/src/macro-condition-recording.cpp index cd23f5ce..20d70260 100644 --- a/src/macro-condition-recording.cpp +++ b/src/macro-condition-recording.cpp @@ -3,7 +3,7 @@ #include "headers/utility.hpp" #include "headers/advanced-scene-switcher.hpp" -const int MacroConditionRecord::id = 8; +const std::string MacroConditionRecord::id = "recording"; bool MacroConditionRecord::_registered = MacroConditionFactory::Register( MacroConditionRecord::id, diff --git a/src/macro-condition-region.cpp b/src/macro-condition-region.cpp index fdb331c8..00016ce9 100644 --- a/src/macro-condition-region.cpp +++ b/src/macro-condition-region.cpp @@ -3,7 +3,7 @@ #include "headers/utility.hpp" #include "headers/advanced-scene-switcher.hpp" -const int MacroConditionRegion::id = 2; +const std::string MacroConditionRegion::id = "region"; bool MacroConditionRegion::_registered = MacroConditionFactory::Register( MacroConditionRegion::id, diff --git a/src/macro-condition-scene.cpp b/src/macro-condition-scene.cpp index 095bb26d..8508b9cd 100644 --- a/src/macro-condition-scene.cpp +++ b/src/macro-condition-scene.cpp @@ -3,7 +3,7 @@ #include "headers/utility.hpp" #include "headers/advanced-scene-switcher.hpp" -const int MacroConditionScene::id = 0; +const std::string MacroConditionScene::id = "scene"; bool MacroConditionScene::_registered = MacroConditionFactory::Register( MacroConditionScene::id, diff --git a/src/macro-condition-streaming.cpp b/src/macro-condition-streaming.cpp index 3ccfed81..a1c6a40e 100644 --- a/src/macro-condition-streaming.cpp +++ b/src/macro-condition-streaming.cpp @@ -3,7 +3,7 @@ #include "headers/utility.hpp" #include "headers/advanced-scene-switcher.hpp" -const int MacroConditionStream::id = 7; +const std::string MacroConditionStream::id = "streaming"; bool MacroConditionStream::_registered = MacroConditionFactory::Register( MacroConditionStream::id, diff --git a/src/macro-condition-video.cpp b/src/macro-condition-video.cpp index fa4b40a6..85241501 100644 --- a/src/macro-condition-video.cpp +++ b/src/macro-condition-video.cpp @@ -8,7 +8,7 @@ #include #include -const int MacroConditionVideo::id = 6; +const std::string MacroConditionVideo::id = "video"; bool MacroConditionVideo::_registered = MacroConditionFactory::Register( MacroConditionVideo::id, diff --git a/src/macro-condition-window.cpp b/src/macro-condition-window.cpp index ed0923fc..40751b95 100644 --- a/src/macro-condition-window.cpp +++ b/src/macro-condition-window.cpp @@ -5,7 +5,7 @@ #include -const int MacroConditionWindow::id = 1; +const std::string MacroConditionWindow::id = "window"; bool MacroConditionWindow::_registered = MacroConditionFactory::Register( MacroConditionWindow::id, diff --git a/src/macro.cpp b/src/macro.cpp index ea77dc89..474c04eb 100644 --- a/src/macro.cpp +++ b/src/macro.cpp @@ -155,7 +155,7 @@ bool Macro::Load(obs_data_t *obj) for (size_t i = 0; i < count; i++) { obs_data_t *array_obj = obs_data_array_item(conditions, i); - int id = obs_data_get_int(array_obj, "id"); + std::string id = obs_data_get_string(array_obj, "id"); auto newEntry = MacroConditionFactory::Create(id); if (newEntry) { @@ -165,8 +165,8 @@ bool Macro::Load(obs_data_t *obj) setValidLogic(c, root, _name); } else { blog(LOG_WARNING, - "discarding condition entry with unkown id (%d) for macro %s", - id, _name.c_str()); + "discarding condition entry with unkown id (%s) for macro %s", + id.c_str(), _name.c_str()); } obs_data_release(array_obj); @@ -180,7 +180,7 @@ bool Macro::Load(obs_data_t *obj) for (size_t i = 0; i < count; i++) { obs_data_t *array_obj = obs_data_array_item(actions, i); - int id = obs_data_get_int(array_obj, "id"); + std::string id = obs_data_get_string(array_obj, "id"); auto newEntry = MacroActionFactory::Create(id); if (newEntry) { @@ -188,8 +188,8 @@ bool Macro::Load(obs_data_t *obj) _actions.back()->Load(array_obj); } else { blog(LOG_WARNING, - "discarding action entry with unkown id (%d) for macro %s", - id, _name.c_str()); + "discarding action entry with unkown id (%s) for macro %s", + id.c_str(), _name.c_str()); } obs_data_release(array_obj); @@ -202,8 +202,9 @@ bool Macro::Load(obs_data_t *obj) bool Macro::SwitchesScene() { MacroActionSwitchScene temp; + auto sceneSwitchId = temp.GetId(); for (auto &a : _actions) { - if (a->GetId() == temp.GetId()) { + if (a->GetId() == sceneSwitchId) { return true; } } @@ -212,7 +213,7 @@ bool Macro::SwitchesScene() bool MacroCondition::Save(obs_data_t *obj) { - obs_data_set_int(obj, "id", GetId()); + obs_data_set_string(obj, "id", GetId().c_str()); obs_data_set_int(obj, "logic", static_cast(_logic)); return true; } @@ -225,7 +226,7 @@ bool MacroCondition::Load(obs_data_t *obj) bool MacroAction::Save(obs_data_t *obj) { - obs_data_set_int(obj, "id", GetId()); + obs_data_set_string(obj, "id", GetId().c_str()); return true; }