#pragma once #include "macro-action-variable.hpp" #include #include #include #include #include #include namespace advss { struct VariableActionOption { MacroActionVariable::Action action; const char *label; const char *layout = "AdvSceneSwitcher.action.variable.layout.default"; bool expandInlineRow = false; }; class VariableActionGroup { public: virtual ~VariableActionGroup() = default; virtual std::unique_ptr Copy() const = 0; virtual void Save(obs_data_t *, const MacroActionVariable &) const {} virtual void Load(obs_data_t *, MacroActionVariable &) {} virtual void PostLoad(MacroActionVariable &) {} virtual void ResolveVariables() {} virtual std::vector GetTempVarRefs() const { return {}; } // Returning false aborts the macro virtual bool Perform(MacroActionVariable &, MacroActionVariable::Action, Variable &) = 0; }; class VariableActionGroupEdit : public QWidget { Q_OBJECT public: VariableActionGroupEdit(QWidget *parent, std::shared_ptr entryData); virtual std::unordered_map GetInlineWidgets() { return {}; } virtual void UpdateEntryData() = 0; virtual void SetWidgetVisibility(MacroActionVariable::Action) = 0; protected: void UpdateSize(); std::shared_ptr _entryData; bool _loading = true; }; struct VariableActionGroupInfo { int order; std::vector options; std::function()> createData; std::function)> createEdit; }; bool RegisterVariableActionGroup(const VariableActionGroupInfo &); const std::vector &GetVariableActionGroups(); int GetVariableActionGroupIndex(MacroActionVariable::Action); const VariableActionOption * GetVariableActionOption(MacroActionVariable::Action); } // namespace advss