From 572b974b821e8b91ecdcb82357ff2c646dc4922f Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Sat, 22 May 2021 00:48:38 +0200 Subject: [PATCH] Switch to using string as ids for actions and conditions Using int is an id was getting messy with more and more conditions and actions beeing added. It also made the order of conditions and actions in the respective comboboxes unchangable as there was a 1 to 1 relation of index and id. --- src/headers/macro-action-audio.hpp | 4 +- src/headers/macro-action-edit.hpp | 18 +++--- src/headers/macro-action-filter.hpp | 4 +- src/headers/macro-action-recording.hpp | 4 +- src/headers/macro-action-replay-buffer.hpp | 4 +- src/headers/macro-action-run.hpp | 4 +- src/headers/macro-action-scene-switch.hpp | 4 +- src/headers/macro-action-scene-visibility.hpp | 4 +- src/headers/macro-action-source.hpp | 4 +- src/headers/macro-action-streaming.hpp | 4 +- src/headers/macro-action-wait.hpp | 4 +- src/headers/macro-condition-audio.hpp | 4 +- src/headers/macro-condition-edit.hpp | 17 +++--- src/headers/macro-condition-file.hpp | 4 +- src/headers/macro-condition-idle.hpp | 4 +- src/headers/macro-condition-interval.hpp | 4 +- src/headers/macro-condition-media.hpp | 4 +- src/headers/macro-condition-plugin-state.hpp | 4 +- src/headers/macro-condition-process.hpp | 4 +- src/headers/macro-condition-recording.hpp | 4 +- src/headers/macro-condition-region.hpp | 4 +- src/headers/macro-condition-scene.hpp | 4 +- src/headers/macro-condition-streaming.hpp | 4 +- src/headers/macro-condition-video.hpp | 4 +- src/headers/macro-condition-window.hpp | 4 +- src/headers/macro.hpp | 4 +- src/macro-action-audio.cpp | 2 +- src/macro-action-edit.cpp | 52 +++++++++++------ src/macro-action-filter.cpp | 2 +- src/macro-action-recording.cpp | 2 +- src/macro-action-replay-buffer.cpp | 2 +- src/macro-action-run.cpp | 2 +- src/macro-action-scene-switch.cpp | 2 +- src/macro-action-scene-visibility.cpp | 2 +- src/macro-action-source.cpp | 2 +- src/macro-action-streaming.cpp | 2 +- src/macro-action-wait.cpp | 2 +- src/macro-condition-audio.cpp | 2 +- src/macro-condition-edit.cpp | 57 ++++++++++++------- src/macro-condition-file.cpp | 2 +- src/macro-condition-idle.cpp | 2 +- src/macro-condition-interval.cpp | 2 +- src/macro-condition-media.cpp | 2 +- src/macro-condition-plugin-state.cpp | 2 +- src/macro-condition-process.cpp | 2 +- src/macro-condition-recording.cpp | 2 +- src/macro-condition-region.cpp | 2 +- src/macro-condition-scene.cpp | 2 +- src/macro-condition-streaming.cpp | 2 +- src/macro-condition-video.cpp | 2 +- src/macro-condition-window.cpp | 2 +- src/macro.cpp | 19 ++++--- 52 files changed, 173 insertions(+), 132 deletions(-) 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; }