mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-03-21 17:34:57 -05:00
Add option to enable / disable / toggle macro highlighting
This commit is contained in:
parent
756d7bbd3c
commit
d20a975c4f
|
|
@ -982,6 +982,9 @@ AdvSceneSwitcher.action.pluginState.type.import="Import settings from"
|
|||
AdvSceneSwitcher.action.pluginState.importWarning="Note: Action will be ignored while settings window is opened."
|
||||
AdvSceneSwitcher.action.pluginState.type.terminate="Shut down OBS"
|
||||
AdvSceneSwitcher.action.pluginState.terminateConfirm="OBS will be shut down automatically in 10 seconds!\nDo you want to continue shutting down OBS?"
|
||||
AdvSceneSwitcher.action.pluginState.type.enableMacroHighlighting="Enable macro highlighting"
|
||||
AdvSceneSwitcher.action.pluginState.type.disableMacroHighlighting="Disable macro highlighting"
|
||||
AdvSceneSwitcher.action.pluginState.type.toggleMacroHighlighting="Toggle macro highlighting"
|
||||
AdvSceneSwitcher.action.pluginState.entry="{{actions}}{{values}}{{scenes}}{{settings}}{{settingsWarning}}"
|
||||
AdvSceneSwitcher.action.virtualCamera="Virtual camera"
|
||||
AdvSceneSwitcher.action.virtualCamera.type.stop="Stop virtual camera"
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#include "plugin-state-helpers.hpp"
|
||||
#include "advanced-scene-switcher.hpp"
|
||||
#include "switcher-data.hpp"
|
||||
|
||||
namespace advss {
|
||||
|
|
@ -231,4 +232,30 @@ bool IsFirstIntervalAfterStop()
|
|||
return GetSwitcher()->firstIntervalAfterStop;
|
||||
}
|
||||
|
||||
void SetMacroHighlightingEnabled(bool enable)
|
||||
{
|
||||
auto &settings = GetGlobalMacroSettings();
|
||||
settings._highlightActions = enable;
|
||||
settings._highlightConditions = enable;
|
||||
settings._highlightExecuted = enable;
|
||||
|
||||
obs_queue_task(
|
||||
OBS_TASK_UI,
|
||||
[](void *) {
|
||||
if (!SettingsWindowIsOpened()) {
|
||||
return;
|
||||
}
|
||||
AdvSceneSwitcher::window->HighlightMacrosChanged(
|
||||
GetGlobalMacroSettings()._highlightExecuted);
|
||||
},
|
||||
nullptr, false);
|
||||
}
|
||||
|
||||
bool IsMacroHighlightingEnabled()
|
||||
{
|
||||
const auto &settings = GetGlobalMacroSettings();
|
||||
return settings._highlightActions || settings._highlightConditions ||
|
||||
settings._highlightExecuted;
|
||||
}
|
||||
|
||||
} // namespace advss
|
||||
|
|
|
|||
|
|
@ -47,4 +47,7 @@ EXPORT bool InitialLoadIsComplete();
|
|||
EXPORT bool IsFirstInterval();
|
||||
EXPORT bool IsFirstIntervalAfterStop();
|
||||
|
||||
EXPORT void SetMacroHighlightingEnabled(bool enable);
|
||||
EXPORT bool IsMacroHighlightingEnabled();
|
||||
|
||||
} // namespace advss
|
||||
|
|
|
|||
|
|
@ -21,17 +21,6 @@ bool MacroActionPluginState::_registered = MacroActionFactory::Register(
|
|||
{MacroActionPluginState::Create, MacroActionPluginStateEdit::Create,
|
||||
"AdvSceneSwitcher.action.pluginState"});
|
||||
|
||||
const static std::map<PluginStateAction, std::string> actionTypes = {
|
||||
{PluginStateAction::STOP,
|
||||
"AdvSceneSwitcher.action.pluginState.type.stop"},
|
||||
{PluginStateAction::NO_MATCH_BEHAVIOUR,
|
||||
"AdvSceneSwitcher.action.pluginState.type.noMatch"},
|
||||
{PluginStateAction::IMPORT_SETTINGS,
|
||||
"AdvSceneSwitcher.action.pluginState.type.import"},
|
||||
{PluginStateAction::TERMINATE,
|
||||
"AdvSceneSwitcher.action.pluginState.type.terminate"},
|
||||
};
|
||||
|
||||
const static std::map<NoMatchBehavior, std::string> noMatchValues = {
|
||||
{NoMatchBehavior::NO_SWITCH,
|
||||
"AdvSceneSwitcher.generalTab.generalBehavior.onNoMatch.dontSwitch"},
|
||||
|
|
@ -142,18 +131,18 @@ static void terminateOBS(void *)
|
|||
bool MacroActionPluginState::PerformAction()
|
||||
{
|
||||
switch (_action) {
|
||||
case PluginStateAction::STOP:
|
||||
case Action::STOP:
|
||||
stopPlugin();
|
||||
break;
|
||||
case PluginStateAction::NO_MATCH_BEHAVIOUR:
|
||||
case Action::NO_MATCH_BEHAVIOUR:
|
||||
setNoMatchBehaviour(_value, _scene);
|
||||
break;
|
||||
case PluginStateAction::IMPORT_SETTINGS:
|
||||
case Action::IMPORT_SETTINGS:
|
||||
importSettings(_settingsPath);
|
||||
// There is no point in continuing
|
||||
// The settings will be invalid
|
||||
return false;
|
||||
case PluginStateAction::TERMINATE: {
|
||||
case Action::TERMINATE: {
|
||||
std::thread thread([]() {
|
||||
obs_queue_task(OBS_TASK_UI, terminateOBS, nullptr,
|
||||
false);
|
||||
|
|
@ -161,6 +150,15 @@ bool MacroActionPluginState::PerformAction()
|
|||
thread.detach();
|
||||
break;
|
||||
}
|
||||
case Action::ENABLE_MACRO_HIGHLIGHTING:
|
||||
SetMacroHighlightingEnabled(true);
|
||||
break;
|
||||
case Action::DISABLE_MACRO_HIGHLIGHTING:
|
||||
SetMacroHighlightingEnabled(false);
|
||||
break;
|
||||
case Action::TOGGLE_MACRO_HIGHLIGHTING:
|
||||
SetMacroHighlightingEnabled(!IsMacroHighlightingEnabled());
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -170,19 +168,28 @@ bool MacroActionPluginState::PerformAction()
|
|||
void MacroActionPluginState::LogAction() const
|
||||
{
|
||||
switch (_action) {
|
||||
case PluginStateAction::STOP:
|
||||
case Action::STOP:
|
||||
blog(LOG_INFO, "stop() called by macro");
|
||||
break;
|
||||
case PluginStateAction::NO_MATCH_BEHAVIOUR:
|
||||
case Action::NO_MATCH_BEHAVIOUR:
|
||||
ablog(LOG_INFO, "setting no match to %d", _value);
|
||||
break;
|
||||
case PluginStateAction::IMPORT_SETTINGS:
|
||||
case Action::IMPORT_SETTINGS:
|
||||
ablog(LOG_INFO, "importing settings from %s",
|
||||
_settingsPath.c_str());
|
||||
break;
|
||||
case PluginStateAction::TERMINATE:
|
||||
case Action::TERMINATE:
|
||||
ablog(LOG_INFO, "sending terminate signal to OBS in 10s");
|
||||
break;
|
||||
case Action::ENABLE_MACRO_HIGHLIGHTING:
|
||||
ablog(LOG_INFO, "enable macro highlighting");
|
||||
break;
|
||||
case Action::DISABLE_MACRO_HIGHLIGHTING:
|
||||
ablog(LOG_INFO, "disable macro highlighting");
|
||||
break;
|
||||
case Action::TOGGLE_MACRO_HIGHLIGHTING:
|
||||
ablog(LOG_INFO, "toggle macro highlighting");
|
||||
break;
|
||||
default:
|
||||
blog(LOG_WARNING, "ignored unknown pluginState action %d",
|
||||
static_cast<int>(_action));
|
||||
|
|
@ -203,8 +210,8 @@ bool MacroActionPluginState::Save(obs_data_t *obj) const
|
|||
bool MacroActionPluginState::Load(obs_data_t *obj)
|
||||
{
|
||||
MacroAction::Load(obj);
|
||||
_action =
|
||||
static_cast<PluginStateAction>(obs_data_get_int(obj, "action"));
|
||||
_action = static_cast<MacroActionPluginState::Action>(
|
||||
obs_data_get_int(obj, "action"));
|
||||
_value = obs_data_get_int(obj, "value");
|
||||
const char *sceneName = obs_data_get_string(obj, "scene");
|
||||
_scene = GetWeakSourceByName(sceneName);
|
||||
|
|
@ -229,15 +236,32 @@ void MacroActionPluginState::ResolveVariablesToFixedValues()
|
|||
|
||||
static inline void populateActionSelection(QComboBox *list)
|
||||
{
|
||||
const static std::map<MacroActionPluginState::Action, std::string> actionTypes = {
|
||||
{MacroActionPluginState::Action::STOP,
|
||||
"AdvSceneSwitcher.action.pluginState.type.stop"},
|
||||
{MacroActionPluginState::Action::NO_MATCH_BEHAVIOUR,
|
||||
"AdvSceneSwitcher.action.pluginState.type.noMatch"},
|
||||
{MacroActionPluginState::Action::IMPORT_SETTINGS,
|
||||
"AdvSceneSwitcher.action.pluginState.type.import"},
|
||||
{MacroActionPluginState::Action::TERMINATE,
|
||||
"AdvSceneSwitcher.action.pluginState.type.terminate"},
|
||||
{MacroActionPluginState::Action::ENABLE_MACRO_HIGHLIGHTING,
|
||||
"AdvSceneSwitcher.action.pluginState.type.enableMacroHighlighting"},
|
||||
{MacroActionPluginState::Action::DISABLE_MACRO_HIGHLIGHTING,
|
||||
"AdvSceneSwitcher.action.pluginState.type.disableMacroHighlighting"},
|
||||
{MacroActionPluginState::Action::TOGGLE_MACRO_HIGHLIGHTING,
|
||||
"AdvSceneSwitcher.action.pluginState.type.toggleMacroHighlighting"},
|
||||
};
|
||||
|
||||
for (const auto &[_, name] : actionTypes) {
|
||||
list->addItem(obs_module_text(name.c_str()));
|
||||
}
|
||||
}
|
||||
|
||||
static inline void populateValueSelection(QComboBox *list,
|
||||
PluginStateAction action)
|
||||
MacroActionPluginState::Action action)
|
||||
{
|
||||
if (action == PluginStateAction::NO_MATCH_BEHAVIOUR) {
|
||||
if (action == MacroActionPluginState::Action::NO_MATCH_BEHAVIOUR) {
|
||||
for (const auto &[_, name] : noMatchValues) {
|
||||
list->addItem(obs_module_text(name.c_str()));
|
||||
}
|
||||
|
|
@ -246,15 +270,14 @@ static inline void populateValueSelection(QComboBox *list,
|
|||
|
||||
MacroActionPluginStateEdit::MacroActionPluginStateEdit(
|
||||
QWidget *parent, std::shared_ptr<MacroActionPluginState> entryData)
|
||||
: QWidget(parent)
|
||||
: QWidget(parent),
|
||||
_actions(new QComboBox(this)),
|
||||
_values(new QComboBox(this)),
|
||||
_scenes(new QComboBox(this)),
|
||||
_settings(new FileSelection()),
|
||||
_settingsWarning(new QLabel(obs_module_text(
|
||||
"AdvSceneSwitcher.action.pluginState.importWarning")))
|
||||
{
|
||||
_actions = new QComboBox();
|
||||
_values = new QComboBox();
|
||||
_scenes = new QComboBox();
|
||||
_settings = new FileSelection();
|
||||
_settingsWarning = new QLabel(obs_module_text(
|
||||
"AdvSceneSwitcher.action.pluginState.importWarning"));
|
||||
|
||||
populateActionSelection(_actions);
|
||||
PopulateSceneSelection(_scenes);
|
||||
|
||||
|
|
@ -267,18 +290,16 @@ MacroActionPluginStateEdit::MacroActionPluginStateEdit(
|
|||
QWidget::connect(_settings, SIGNAL(PathChanged(const QString &)), this,
|
||||
SLOT(PathChanged(const QString &)));
|
||||
|
||||
QHBoxLayout *mainLayout = new QHBoxLayout;
|
||||
std::unordered_map<std::string, QWidget *> widgetPlaceholders = {
|
||||
{"{{actions}}", _actions},
|
||||
{"{{values}}", _values},
|
||||
{"{{scenes}}", _scenes},
|
||||
{"{{settings}}", _settings},
|
||||
{"{{settingsWarning}}", _settingsWarning},
|
||||
};
|
||||
auto layout = new QHBoxLayout;
|
||||
PlaceWidgets(
|
||||
obs_module_text("AdvSceneSwitcher.action.pluginState.entry"),
|
||||
mainLayout, widgetPlaceholders);
|
||||
setLayout(mainLayout);
|
||||
layout,
|
||||
{{"{{actions}}", _actions},
|
||||
{"{{values}}", _values},
|
||||
{"{{scenes}}", _scenes},
|
||||
{"{{settings}}", _settings},
|
||||
{"{{settingsWarning}}", _settingsWarning}});
|
||||
setLayout(layout);
|
||||
|
||||
_entryData = entryData;
|
||||
UpdateEntryData();
|
||||
|
|
@ -302,7 +323,8 @@ void MacroActionPluginStateEdit::ActionChanged(int value)
|
|||
{
|
||||
{
|
||||
GUARD_LOADING_AND_LOCK();
|
||||
_entryData->_action = static_cast<PluginStateAction>(value);
|
||||
_entryData->_action =
|
||||
static_cast<MacroActionPluginState::Action>(value);
|
||||
SetWidgetVisibility();
|
||||
}
|
||||
|
||||
|
|
@ -339,17 +361,18 @@ void MacroActionPluginStateEdit::SetWidgetVisibility()
|
|||
_scenes->hide();
|
||||
_settings->hide();
|
||||
_settingsWarning->hide();
|
||||
|
||||
switch (_entryData->_action) {
|
||||
case PluginStateAction::STOP:
|
||||
case MacroActionPluginState::Action::STOP:
|
||||
break;
|
||||
case PluginStateAction::NO_MATCH_BEHAVIOUR:
|
||||
case MacroActionPluginState::Action::NO_MATCH_BEHAVIOUR:
|
||||
_values->show();
|
||||
if (static_cast<NoMatchBehavior>(_entryData->_value) ==
|
||||
NoMatchBehavior::SWITCH) {
|
||||
_scenes->show();
|
||||
}
|
||||
break;
|
||||
case PluginStateAction::IMPORT_SETTINGS:
|
||||
case MacroActionPluginState::Action::IMPORT_SETTINGS:
|
||||
_settings->show();
|
||||
_settingsWarning->show();
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -7,13 +7,6 @@
|
|||
|
||||
namespace advss {
|
||||
|
||||
enum class PluginStateAction {
|
||||
STOP,
|
||||
NO_MATCH_BEHAVIOUR,
|
||||
IMPORT_SETTINGS,
|
||||
TERMINATE,
|
||||
};
|
||||
|
||||
class MacroActionPluginState : public MacroAction {
|
||||
public:
|
||||
MacroActionPluginState(Macro *m) : MacroAction(m) {}
|
||||
|
|
@ -26,7 +19,17 @@ public:
|
|||
std::shared_ptr<MacroAction> Copy() const;
|
||||
void ResolveVariablesToFixedValues();
|
||||
|
||||
PluginStateAction _action = PluginStateAction::STOP;
|
||||
enum class Action {
|
||||
STOP,
|
||||
NO_MATCH_BEHAVIOUR,
|
||||
IMPORT_SETTINGS,
|
||||
TERMINATE,
|
||||
ENABLE_MACRO_HIGHLIGHTING,
|
||||
DISABLE_MACRO_HIGHLIGHTING,
|
||||
TOGGLE_MACRO_HIGHLIGHTING,
|
||||
};
|
||||
|
||||
Action _action = Action::STOP;
|
||||
int _value = 0;
|
||||
StringVariable _settingsPath;
|
||||
OBSWeakSource _scene;
|
||||
|
|
@ -59,16 +62,16 @@ private slots:
|
|||
void SceneChanged(const QString &text);
|
||||
void PathChanged(const QString &text);
|
||||
|
||||
protected:
|
||||
private:
|
||||
void SetWidgetVisibility();
|
||||
|
||||
QComboBox *_actions;
|
||||
QComboBox *_values;
|
||||
QComboBox *_scenes;
|
||||
FileSelection *_settings;
|
||||
QLabel *_settingsWarning;
|
||||
std::shared_ptr<MacroActionPluginState> _entryData;
|
||||
|
||||
private:
|
||||
void SetWidgetVisibility();
|
||||
std::shared_ptr<MacroActionPluginState> _entryData;
|
||||
bool _loading = true;
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user