mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-03-21 17:34:57 -05:00
Add option to un-/pause macros using hotkeys
This commit is contained in:
parent
c18d799f4a
commit
d9997d374d
|
|
@ -446,6 +446,8 @@ AdvSceneSwitcher.sceneTriggerTab.help="This tab allows you to trigger actions on
|
|||
AdvSceneSwitcher.hotkey.startSwitcherHotkey="Start the Advanced Scene Switcher"
|
||||
AdvSceneSwitcher.hotkey.stopSwitcherHotkey="Stop the Advanced Scene Switcher"
|
||||
AdvSceneSwitcher.hotkey.startStopToggleSwitcherHotkey="Toggle Start/Stop for the Advanced Scene Switcher"
|
||||
AdvSceneSwitcher.hotkey.macro.pause="Pause macro %1"
|
||||
AdvSceneSwitcher.hotkey.macro.unpause="Unpause macro %1"
|
||||
|
||||
AdvSceneSwitcher.askBackup="Detected a new version of the Advanced Scene Switcher.\nShould a backup of the old settings be created?"
|
||||
|
||||
|
|
|
|||
|
|
@ -60,14 +60,14 @@ public:
|
|||
|
||||
class Macro {
|
||||
public:
|
||||
Macro(std::string name = "");
|
||||
Macro(const std::string &name = "");
|
||||
virtual ~Macro();
|
||||
|
||||
bool CeckMatch();
|
||||
bool PerformAction();
|
||||
bool Matched() { return _matched; }
|
||||
std::string Name() { return _name; }
|
||||
void SetName(const std::string &name) { _name = name; }
|
||||
void SetName(const std::string &name);
|
||||
void SetPaused(bool pause = true) { _paused = pause; }
|
||||
bool Paused() { return _paused; }
|
||||
int GetCount() { return _count; };
|
||||
|
|
@ -88,12 +88,18 @@ public:
|
|||
bool SwitchesScene();
|
||||
|
||||
private:
|
||||
void SetupHotkeys();
|
||||
void ClearHotkeys();
|
||||
void SetHotkeysDesc();
|
||||
|
||||
std::string _name = "";
|
||||
std::deque<std::shared_ptr<MacroCondition>> _conditions;
|
||||
std::deque<std::shared_ptr<MacroAction>> _actions;
|
||||
bool _matched = false;
|
||||
bool _paused = false;
|
||||
int _count = 0;
|
||||
obs_hotkey_id _pauseHotkey = OBS_INVALID_HOTKEY_ID;
|
||||
obs_hotkey_id _unpauseHotkey = OBS_INVALID_HOTKEY_ID;
|
||||
};
|
||||
|
||||
Macro *GetMacroByName(const char *name);
|
||||
|
|
|
|||
109
src/macro.cpp
109
src/macro.cpp
|
|
@ -17,9 +17,16 @@ const std::map<LogicType, LogicTypeInfo> MacroCondition::logicTypes = {
|
|||
{LogicType::ROOT_NOT, {"AdvSceneSwitcher.logic.not"}},
|
||||
};
|
||||
|
||||
Macro::Macro(std::string name) : _name(name) {}
|
||||
Macro::Macro(const std::string &name)
|
||||
{
|
||||
SetupHotkeys();
|
||||
SetName(name);
|
||||
}
|
||||
|
||||
Macro::~Macro() {}
|
||||
Macro::~Macro()
|
||||
{
|
||||
ClearHotkeys();
|
||||
}
|
||||
|
||||
bool Macro::CeckMatch()
|
||||
{
|
||||
|
|
@ -94,11 +101,24 @@ bool Macro::PerformAction()
|
|||
return ret;
|
||||
}
|
||||
|
||||
void Macro::SetName(const std::string &name)
|
||||
{
|
||||
_name = name;
|
||||
SetHotkeysDesc();
|
||||
}
|
||||
|
||||
bool Macro::Save(obs_data_t *obj)
|
||||
{
|
||||
obs_data_set_string(obj, "name", _name.c_str());
|
||||
obs_data_set_bool(obj, "pause", _paused);
|
||||
|
||||
obs_data_array_t *pauseHotkey = obs_hotkey_save(_pauseHotkey);
|
||||
obs_data_set_array(obj, "pauseHotkey", pauseHotkey);
|
||||
obs_data_array_release(pauseHotkey);
|
||||
obs_data_array_t *unpauseHotkey = obs_hotkey_save(_unpauseHotkey);
|
||||
obs_data_set_array(obj, "unpauseHotkey", unpauseHotkey);
|
||||
obs_data_array_release(unpauseHotkey);
|
||||
|
||||
obs_data_array_t *conditions = obs_data_array_create();
|
||||
for (auto &c : _conditions) {
|
||||
obs_data_t *array_obj = obs_data_create();
|
||||
|
|
@ -164,8 +184,19 @@ bool Macro::Load(obs_data_t *obj)
|
|||
{
|
||||
_name = obs_data_get_string(obj, "name");
|
||||
_paused = obs_data_get_bool(obj, "pause");
|
||||
bool root = true;
|
||||
|
||||
obs_data_array_t *pauseHotkey = obs_data_get_array(obj, "pauseHotkey");
|
||||
obs_hotkey_load(_pauseHotkey, pauseHotkey);
|
||||
obs_data_array_release(pauseHotkey);
|
||||
|
||||
obs_data_array_t *unpauseHotkey =
|
||||
obs_data_get_array(obj, "unpauseHotkey");
|
||||
obs_hotkey_load(_unpauseHotkey, unpauseHotkey);
|
||||
obs_data_array_release(unpauseHotkey);
|
||||
|
||||
SetHotkeysDesc();
|
||||
|
||||
bool root = true;
|
||||
obs_data_array_t *conditions = obs_data_get_array(obj, "conditions");
|
||||
size_t count = obs_data_array_count(conditions);
|
||||
|
||||
|
|
@ -212,7 +243,6 @@ bool Macro::Load(obs_data_t *obj)
|
|||
obs_data_release(array_obj);
|
||||
}
|
||||
obs_data_array_release(actions);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -245,6 +275,77 @@ bool Macro::SwitchesScene()
|
|||
return false;
|
||||
}
|
||||
|
||||
static void pauseCB(void *data, obs_hotkey_id id, obs_hotkey_t *hotkey,
|
||||
bool pressed)
|
||||
{
|
||||
UNUSED_PARAMETER(id);
|
||||
UNUSED_PARAMETER(data);
|
||||
UNUSED_PARAMETER(hotkey);
|
||||
if (pressed) {
|
||||
auto m = static_cast<Macro *>(data);
|
||||
m->SetPaused(true);
|
||||
}
|
||||
}
|
||||
|
||||
static void unpauseCB(void *data, obs_hotkey_id id, obs_hotkey_t *hotkey,
|
||||
bool pressed)
|
||||
{
|
||||
UNUSED_PARAMETER(id);
|
||||
UNUSED_PARAMETER(data);
|
||||
UNUSED_PARAMETER(hotkey);
|
||||
if (pressed) {
|
||||
auto m = static_cast<Macro *>(data);
|
||||
m->SetPaused(false);
|
||||
}
|
||||
}
|
||||
|
||||
static int macroHotkeyID = 0;
|
||||
|
||||
void Macro::SetupHotkeys()
|
||||
{
|
||||
if (_pauseHotkey != OBS_INVALID_HOTKEY_ID ||
|
||||
_unpauseHotkey != OBS_INVALID_HOTKEY_ID) {
|
||||
ClearHotkeys();
|
||||
}
|
||||
|
||||
macroHotkeyID++;
|
||||
|
||||
std::string hotkeyName =
|
||||
"macro_pause_hotkey_" + std::to_string(macroHotkeyID);
|
||||
QString format{obs_module_text("AdvSceneSwitcher.hotkey.macro.pause")};
|
||||
QString hotkeyDesc = format.arg(QString::fromStdString(_name));
|
||||
_pauseHotkey = obs_hotkey_register_frontend(
|
||||
hotkeyName.c_str(), hotkeyDesc.toStdString().c_str(), pauseCB,
|
||||
this);
|
||||
|
||||
macroHotkeyID++;
|
||||
|
||||
hotkeyName = "macro_pause_hotkey_" + _name;
|
||||
format = {obs_module_text("AdvSceneSwitcher.hotkey.macro.unpause")};
|
||||
hotkeyDesc = format.arg(QString::fromStdString(_name));
|
||||
_unpauseHotkey = obs_hotkey_register_frontend(
|
||||
hotkeyName.c_str(), hotkeyDesc.toStdString().c_str(), unpauseCB,
|
||||
this);
|
||||
}
|
||||
|
||||
void Macro::ClearHotkeys()
|
||||
{
|
||||
obs_hotkey_unregister(_pauseHotkey);
|
||||
obs_hotkey_unregister(_unpauseHotkey);
|
||||
}
|
||||
|
||||
void Macro::SetHotkeysDesc()
|
||||
{
|
||||
QString format{obs_module_text("AdvSceneSwitcher.hotkey.macro.pause")};
|
||||
QString hotkeyDesc = format.arg(QString::fromStdString(_name));
|
||||
obs_hotkey_set_description(_pauseHotkey,
|
||||
hotkeyDesc.toStdString().c_str());
|
||||
format = {obs_module_text("AdvSceneSwitcher.hotkey.macro.unpause")};
|
||||
hotkeyDesc = format.arg(QString::fromStdString(_name));
|
||||
obs_hotkey_set_description(_unpauseHotkey,
|
||||
hotkeyDesc.toStdString().c_str());
|
||||
}
|
||||
|
||||
bool MacroCondition::Save(obs_data_t *obj)
|
||||
{
|
||||
obs_data_set_string(obj, "id", GetId().c_str());
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user