diff --git a/CMakeLists.txt b/CMakeLists.txt index c5d8c48e..0f244959 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -97,6 +97,8 @@ target_sources( src/macro-core/macro-action-clipboard.hpp src/macro-core/macro-action-edit.cpp src/macro-core/macro-action-edit.hpp + src/macro-core/macro-action-factory.cpp + src/macro-core/macro-action-factory.hpp src/macro-core/macro-action-file.cpp src/macro-core/macro-action-file.hpp src/macro-core/macro-action-filter.cpp @@ -173,6 +175,8 @@ target_sources( src/macro-core/macro-condition-display.hpp src/macro-core/macro-condition-edit.cpp src/macro-core/macro-condition-edit.hpp + src/macro-core/macro-condition-factory.cpp + src/macro-core/macro-condition-factory.hpp src/macro-core/macro-condition-file.cpp src/macro-core/macro-condition-file.hpp src/macro-core/macro-condition-filter.cpp diff --git a/src/macro-core/macro-action-edit.cpp b/src/macro-core/macro-action-edit.cpp index 61784c5f..e9f86d12 100644 --- a/src/macro-core/macro-action-edit.cpp +++ b/src/macro-core/macro-action-edit.cpp @@ -1,6 +1,6 @@ +#include "macro-action-edit.hpp" #include "advanced-scene-switcher.hpp" #include "switcher-data.hpp" -#include "macro-action-edit.hpp" #include "macro-action-scene-switch.hpp" #include "section.hpp" #include "switch-button.hpp" @@ -10,61 +10,9 @@ namespace advss { -std::map &MacroActionFactory::GetMap() -{ - static std::map _methods; - return _methods; -} - -bool MacroActionFactory::Register(const std::string &id, MacroActionInfo info) -{ - if (auto it = GetMap().find(id); it == GetMap().end()) { - GetMap()[id] = info; - return true; - } - return false; -} - -std::shared_ptr MacroActionFactory::Create(const std::string &id, - Macro *m) -{ - if (auto it = GetMap().find(id); it != GetMap().end()) - return it->second._createFunc(m); - - return nullptr; -} - -QWidget *MacroActionFactory::CreateWidget(const std::string &id, - QWidget *parent, - std::shared_ptr action) -{ - if (auto it = GetMap().find(id); it != GetMap().end()) - return it->second._createWidgetFunc(parent, action); - - return nullptr; -} - -std::string MacroActionFactory::GetActionName(const std::string &id) -{ - if (auto it = GetMap().find(id); it != GetMap().end()) { - return it->second._name; - } - return "unknown action"; -} - -std::string MacroActionFactory::GetIdByName(const QString &name) -{ - for (auto it : GetMap()) { - if (name == obs_module_text(it.second._name.c_str())) { - return it.first; - } - } - return ""; -} - static inline void populateActionSelection(QComboBox *list) { - for (auto &[_, action] : MacroActionFactory::GetActionTypes()) { + for (const auto &[_, action] : MacroActionFactory::GetActionTypes()) { QString entry(obs_module_text(action._name.c_str())); if (list->findText(entry) == -1) { list->addItem(entry); diff --git a/src/macro-core/macro-action-edit.hpp b/src/macro-core/macro-action-edit.hpp index 6249e53e..b50b33ab 100644 --- a/src/macro-core/macro-action-edit.hpp +++ b/src/macro-core/macro-action-edit.hpp @@ -1,5 +1,6 @@ #pragma once #include "macro-action.hpp" +#include "macro-action-factory.hpp" #include "filter-combo-box.hpp" #include @@ -8,32 +9,6 @@ namespace advss { class SwitchButton; -struct MacroActionInfo { - using TCreateMethod = std::shared_ptr (*)(Macro *m); - using TCreateWidgetMethod = QWidget *(*)(QWidget *parent, - std::shared_ptr); - TCreateMethod _createFunc = nullptr; - TCreateWidgetMethod _createWidgetFunc = nullptr; - std::string _name; -}; - -class MacroActionFactory { -public: - MacroActionFactory() = delete; - - static bool Register(const std::string &id, MacroActionInfo); - static std::shared_ptr Create(const std::string &id, - Macro *m); - static QWidget *CreateWidget(const std::string &id, QWidget *parent, - std::shared_ptr action); - static auto GetActionTypes() { return GetMap(); } - static std::string GetActionName(const std::string &id); - static std::string GetIdByName(const QString &name); - -private: - static std::map &GetMap(); -}; - class MacroActionEdit : public MacroSegmentEdit { Q_OBJECT diff --git a/src/macro-core/macro-action-factory.cpp b/src/macro-core/macro-action-factory.cpp new file mode 100644 index 00000000..309f7024 --- /dev/null +++ b/src/macro-core/macro-action-factory.cpp @@ -0,0 +1,57 @@ +#include "macro-action-factory.hpp" + +namespace advss { + +std::map &MacroActionFactory::GetMap() +{ + static std::map _methods; + return _methods; +} + +bool MacroActionFactory::Register(const std::string &id, MacroActionInfo info) +{ + if (auto it = GetMap().find(id); it == GetMap().end()) { + GetMap()[id] = info; + return true; + } + return false; +} + +std::shared_ptr MacroActionFactory::Create(const std::string &id, + Macro *m) +{ + if (auto it = GetMap().find(id); it != GetMap().end()) + return it->second._create(m); + + return nullptr; +} + +QWidget *MacroActionFactory::CreateWidget(const std::string &id, + QWidget *parent, + std::shared_ptr action) +{ + if (auto it = GetMap().find(id); it != GetMap().end()) + return it->second._createWidget(parent, action); + + return nullptr; +} + +std::string MacroActionFactory::GetActionName(const std::string &id) +{ + if (auto it = GetMap().find(id); it != GetMap().end()) { + return it->second._name; + } + return "unknown action"; +} + +std::string MacroActionFactory::GetIdByName(const QString &name) +{ + for (auto it : GetMap()) { + if (name == obs_module_text(it.second._name.c_str())) { + return it.first; + } + } + return ""; +} + +} // namespace advss diff --git a/src/macro-core/macro-action-factory.hpp b/src/macro-core/macro-action-factory.hpp new file mode 100644 index 00000000..dff2b9e3 --- /dev/null +++ b/src/macro-core/macro-action-factory.hpp @@ -0,0 +1,34 @@ +#pragma once +#include "macro-action.hpp" + +#include + +namespace advss { + +struct MacroActionInfo { + using CreateAction = std::shared_ptr (*)(Macro *m); + using CreateActionWidget = QWidget *(*)(QWidget *parent, + std::shared_ptr); + CreateAction _create = nullptr; + CreateActionWidget _createWidget = nullptr; + std::string _name; +}; + +class MacroActionFactory { +public: + MacroActionFactory() = delete; + + static bool Register(const std::string &id, MacroActionInfo); + static std::shared_ptr Create(const std::string &id, + Macro *m); + static QWidget *CreateWidget(const std::string &id, QWidget *parent, + std::shared_ptr action); + static auto GetActionTypes() { return GetMap(); } + static std::string GetActionName(const std::string &id); + static std::string GetIdByName(const QString &name); + +private: + static std::map &GetMap(); +}; + +} // namespace advss diff --git a/src/macro-core/macro-condition-edit.cpp b/src/macro-core/macro-condition-edit.cpp index c2364b4f..247741d1 100644 --- a/src/macro-core/macro-condition-edit.cpp +++ b/src/macro-core/macro-condition-edit.cpp @@ -1,84 +1,23 @@ +#include "macro-condition-edit.hpp" #include "advanced-scene-switcher.hpp" #include "switcher-data.hpp" -#include "macro-condition-edit.hpp" #include "macro-condition-scene.hpp" #include "section.hpp" #include "utility.hpp" namespace advss { -std::map &MacroConditionFactory::GetMap() -{ - static std::map _methods; - return _methods; -} - -bool MacroConditionFactory::Register(const std::string &id, - MacroConditionInfo info) -{ - if (auto it = GetMap().find(id); it == GetMap().end()) { - GetMap()[id] = info; - return true; - } - return false; -} - -std::shared_ptr -MacroConditionFactory::Create(const std::string &id, Macro *m) -{ - if (auto it = GetMap().find(id); it != GetMap().end()) { - return it->second._createFunc(m); - } - return nullptr; -} - -QWidget * -MacroConditionFactory::CreateWidget(const std::string &id, QWidget *parent, - std::shared_ptr cond) -{ - if (auto it = GetMap().find(id); it != GetMap().end()) { - return it->second._createWidgetFunc(parent, cond); - } - return nullptr; -} - -std::string MacroConditionFactory::GetConditionName(const std::string &id) -{ - if (auto it = GetMap().find(id); it != GetMap().end()) { - return it->second._name; - } - return "unknown condition"; -} - -std::string MacroConditionFactory::GetIdByName(const QString &name) -{ - for (auto it : GetMap()) { - if (name == obs_module_text(it.second._name.c_str())) { - return it.first; - } - } - return ""; -} - -bool MacroConditionFactory::UsesDurationModifier(const std::string &id) -{ - if (auto it = GetMap().find(id); it != GetMap().end()) { - return it->second._useDurationModifier; - } - return false; -} - static inline void populateLogicSelection(QComboBox *list, bool root = false) { if (root) { - for (auto entry : MacroCondition::logicTypes) { + for (const auto &entry : MacroCondition::logicTypes) { if (static_cast(entry.first) < logic_root_offset) { list->addItem(obs_module_text( entry.second._name.c_str())); } } } else { - for (auto entry : MacroCondition::logicTypes) { + for (const auto &entry : MacroCondition::logicTypes) { if (static_cast(entry.first) >= logic_root_offset) { list->addItem(obs_module_text( @@ -90,7 +29,7 @@ static inline void populateLogicSelection(QComboBox *list, bool root = false) static inline void populateConditionSelection(QComboBox *list) { - for (auto &[_, condition] : + for (const auto &[_, condition] : MacroConditionFactory::GetConditionTypes()) { QString entry(obs_module_text(condition._name.c_str())); if (list->findText(entry) == -1) { diff --git a/src/macro-core/macro-condition-edit.hpp b/src/macro-core/macro-condition-edit.hpp index a9f48b2d..fdea7cd1 100644 --- a/src/macro-core/macro-condition-edit.hpp +++ b/src/macro-core/macro-condition-edit.hpp @@ -1,38 +1,12 @@ #pragma once #include "macro-condition.hpp" +#include "macro-condition-factory.hpp" #include "filter-combo-box.hpp" #include namespace advss { -struct MacroConditionInfo { - using TCreateMethod = std::shared_ptr (*)(Macro *m); - using TCreateWidgetMethod = - QWidget *(*)(QWidget *parent, std::shared_ptr); - TCreateMethod _createFunc = nullptr; - TCreateWidgetMethod _createWidgetFunc = nullptr; - std::string _name; - bool _useDurationModifier = true; -}; - -class MacroConditionFactory { -public: - MacroConditionFactory() = delete; - static bool Register(const std::string &, MacroConditionInfo); - static std::shared_ptr Create(const std::string &, - Macro *m); - static QWidget *CreateWidget(const std::string &id, QWidget *parent, - std::shared_ptr); - static auto GetConditionTypes() { return GetMap(); } - static std::string GetConditionName(const std::string &); - static std::string GetIdByName(const QString &name); - static bool UsesDurationModifier(const std::string &id); - -private: - static std::map &GetMap(); -}; - class DurationModifierEdit : public QWidget { Q_OBJECT public: diff --git a/src/macro-core/macro-condition-factory.cpp b/src/macro-core/macro-condition-factory.cpp new file mode 100644 index 00000000..3dfe1ef6 --- /dev/null +++ b/src/macro-core/macro-condition-factory.cpp @@ -0,0 +1,66 @@ +#include "macro-condition-factory.hpp" + +namespace advss { + +std::map &MacroConditionFactory::GetMap() +{ + static std::map _methods; + return _methods; +} + +bool MacroConditionFactory::Register(const std::string &id, + MacroConditionInfo info) +{ + if (auto it = GetMap().find(id); it == GetMap().end()) { + GetMap()[id] = info; + return true; + } + return false; +} + +std::shared_ptr +MacroConditionFactory::Create(const std::string &id, Macro *m) +{ + if (auto it = GetMap().find(id); it != GetMap().end()) { + return it->second._create(m); + } + return nullptr; +} + +QWidget * +MacroConditionFactory::CreateWidget(const std::string &id, QWidget *parent, + std::shared_ptr cond) +{ + if (auto it = GetMap().find(id); it != GetMap().end()) { + return it->second._createWidget(parent, cond); + } + return nullptr; +} + +std::string MacroConditionFactory::GetConditionName(const std::string &id) +{ + if (auto it = GetMap().find(id); it != GetMap().end()) { + return it->second._name; + } + return "unknown condition"; +} + +std::string MacroConditionFactory::GetIdByName(const QString &name) +{ + for (auto it : GetMap()) { + if (name == obs_module_text(it.second._name.c_str())) { + return it.first; + } + } + return ""; +} + +bool MacroConditionFactory::UsesDurationModifier(const std::string &id) +{ + if (auto it = GetMap().find(id); it != GetMap().end()) { + return it->second._useDurationModifier; + } + return false; +} + +} // namespace advss diff --git a/src/macro-core/macro-condition-factory.hpp b/src/macro-core/macro-condition-factory.hpp new file mode 100644 index 00000000..30a8624b --- /dev/null +++ b/src/macro-core/macro-condition-factory.hpp @@ -0,0 +1,35 @@ +#pragma once +#include "macro-condition.hpp" + +#include + +namespace advss { + +struct MacroConditionInfo { + using CreateCondition = std::shared_ptr (*)(Macro *m); + using CreateConditionWidget = + QWidget *(*)(QWidget *parent, std::shared_ptr); + CreateCondition _create = nullptr; + CreateConditionWidget _createWidget = nullptr; + std::string _name; + bool _useDurationModifier = true; +}; + +class MacroConditionFactory { +public: + MacroConditionFactory() = delete; + static bool Register(const std::string &, MacroConditionInfo); + static std::shared_ptr Create(const std::string &, + Macro *m); + static QWidget *CreateWidget(const std::string &id, QWidget *parent, + std::shared_ptr); + static auto GetConditionTypes() { return GetMap(); } + static std::string GetConditionName(const std::string &); + static std::string GetIdByName(const QString &name); + static bool UsesDurationModifier(const std::string &id); + +private: + static std::map &GetMap(); +}; + +} // namespace advss