Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions data/locale/en-US.ini
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,8 @@ AdvSceneSwitcher.macroTab.expandAllGroups="Expand all Groups"
AdvSceneSwitcher.macroTab.collapseAllGroups="Collapse all Groups"
AdvSceneSwitcher.macroTab.rename="Rename"
AdvSceneSwitcher.macroTab.remove="Remove"
AdvSceneSwitcher.macroTab.pause="Pause"
AdvSceneSwitcher.macroTab.unpause="Unpause"
AdvSceneSwitcher.macroTab.export="Export"
AdvSceneSwitcher.macroTab.export.info="Paste the string below into the import dialog to import the selected macros:"
AdvSceneSwitcher.macroTab.export.usePlainText="Use plain text"
Expand Down
2 changes: 2 additions & 0 deletions lib/advanced-scene-switcher.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,8 @@ public slots:
void RenameSelectedMacro();
void ExportMacros() const;
void ImportMacros();
void PauseSelectedMacros();
void UnpauseSelectedMacros();
void HighlightOnChange() const;
void on_macroSettings_clicked();

Expand Down
53 changes: 53 additions & 0 deletions lib/macro/macro-tab.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -745,6 +745,17 @@ void AdvSceneSwitcher::ShowMacroContextMenu(const QPoint &pos)
remove->setDisabled(ui->macros->SelectionEmpty());
menu.addSeparator();

auto pause = menu.addAction(
obs_module_text("AdvSceneSwitcher.macroTab.pause"), this,
&AdvSceneSwitcher::PauseSelectedMacros);
pause->setDisabled(ui->macros->SelectionEmpty());

auto unpause = menu.addAction(
obs_module_text("AdvSceneSwitcher.macroTab.unpause"), this,
&AdvSceneSwitcher::UnpauseSelectedMacros);
unpause->setDisabled(ui->macros->SelectionEmpty());
menu.addSeparator();

auto group = menu.addAction(
obs_module_text("AdvSceneSwitcher.macroTab.group"), ui->macros,
&MacroTree::GroupSelectedItems);
Expand Down Expand Up @@ -805,6 +816,48 @@ void AdvSceneSwitcher::CopyMacro()
MacroSignalManager::Instance()->Add(QString::fromStdString(name));
}

void AdvSceneSwitcher::PauseSelectedMacros()
{
auto selectedMacros = GetSelectedMacros();
if (selectedMacros.empty()) {
return;
}

auto lock = LockContext();
for (const auto &macro : selectedMacros) {
if (macro->IsGroup()) {
for (const auto &subitem :
GetGroupMacroEntries(macro.get())) {
subitem->SetPaused(true);
}
} else {
macro->SetPaused(true);
}
}
ui->macros->UpdateRunningStates();
}

void AdvSceneSwitcher::UnpauseSelectedMacros()
{
auto selectedMacros = GetSelectedMacros();
if (selectedMacros.empty()) {
return;
}

auto lock = LockContext();
for (const auto &macro : selectedMacros) {
if (macro->IsGroup()) {
for (const auto &subitem :
GetGroupMacroEntries(macro.get())) {
subitem->SetPaused(false);
}
} else {
macro->SetPaused(false);
}
}
ui->macros->UpdateRunningStates();
}

bool MacroTabIsInFocus()
{
return AdvSceneSwitcher::window &&
Expand Down
11 changes: 11 additions & 0 deletions lib/macro/macro-tree.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -981,6 +981,17 @@ void MacroTree::UpdateWidgets(bool force)
}
}

void MacroTree::UpdateRunningStates()
{
MacroTreeModel *mtm = GetModel();
for (int i = 0; i < (int)mtm->_macros.size(); i++) {
auto widget = GetItemWidget(i);
if (widget) {
widget->UpdateRunning();
}
}
}

static inline void MoveItem(std::deque<std::shared_ptr<Macro>> &items,
std::shared_ptr<Macro> &item, int to)
{
Expand Down
1 change: 1 addition & 0 deletions lib/macro/macro-tree.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ class MacroTree : public QListView {
void ExpandGroup(std::shared_ptr<Macro> item) const;
void CollapseGroup(std::shared_ptr<Macro> item) const;
void RefreshFilter();
void UpdateRunningStates();

public slots:
void GroupSelectedItems();
Expand Down
Loading