From 4113615cd6ffb96ac165d6d837d98102ae03031f Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Tue, 13 Aug 2024 21:00:21 +0200 Subject: [PATCH] Add context menu to change custom label for macro segments --- data/locale/en-US.ini | 1 + lib/macro/macro-tab.cpp | 75 +++++++++++++++++++++++++++++------------ 2 files changed, 54 insertions(+), 22 deletions(-) diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index e57db64f..a88050fd 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -176,6 +176,7 @@ AdvSceneSwitcher.macroTab.collapseAll="Collapse all" AdvSceneSwitcher.macroTab.maximize="Maximize" AdvSceneSwitcher.macroTab.minimize="Minimize" AdvSceneSwitcher.macroTab.segment.useCustomLabel="Use custom label" +AdvSceneSwitcher.macroTab.segment.customLabelRename="Rename custom label" AdvSceneSwitcher.macroTab.segment.defaultCustomLabel="My label" AdvSceneSwitcher.macroTab.segment.setCustomLabel="Set label ..." AdvSceneSwitcher.macroTab.segment.copy="Copy" diff --git a/lib/macro/macro-tab.cpp b/lib/macro/macro-tab.cpp index 7c064f82..cdb68147 100644 --- a/lib/macro/macro-tab.cpp +++ b/lib/macro/macro-tab.cpp @@ -1047,8 +1047,26 @@ void AdvSceneSwitcher::ShowMacroContextMenu(const QPoint &pos) menu.exec(globalPos); } -static void handleCustomLabelChange(MacroSegmentEdit *segmentEdit, - QAction *contextMenuOption) +static bool handleCustomLabelRename(MacroSegmentEdit *segmentEdit) +{ + std::string label; + auto segment = segmentEdit->Data(); + bool accepted = NameDialog::AskForName( + GetSettingsWindow(), + obs_module_text( + "AdvSceneSwitcher.macroTab.segment.setCustomLabel"), + "", label, QString::fromStdString(segment->GetCustomLabel())); + if (!accepted) { + return false; + } + + segment->SetCustomLabel(label); + segmentEdit->HeaderInfoChanged(""); + return true; +} + +static void handleCustomLabelEnableChange(MacroSegmentEdit *segmentEdit, + QAction *contextMenuOption) { bool enable = contextMenuOption->isChecked(); auto segment = segmentEdit->Data(); @@ -1059,19 +1077,42 @@ static void handleCustomLabelChange(MacroSegmentEdit *segmentEdit, return; } - std::string label; - bool accepted = NameDialog::AskForName( - GetSettingsWindow(), - obs_module_text( - "AdvSceneSwitcher.macroTab.segment.setCustomLabel"), - "", label, QString::fromStdString(segment->GetCustomLabel())); - if (!accepted) { + if (!handleCustomLabelRename(segmentEdit)) { segment->SetUseCustomLabel(false); + } +} + +static void setupSegmentLabelContextMenuEntries(MacroSegmentEdit *segmentEdit, + QMenu &menu) +{ + if (!segmentEdit) { return; } - segment->SetCustomLabel(label); - segmentEdit->HeaderInfoChanged(""); + auto segment = segmentEdit ? segmentEdit->Data() : nullptr; + const bool customLabelIsEnabled = segment && + segment->GetUseCustomLabel(); + + auto enableCustomLabel = menu.addAction(obs_module_text( + "AdvSceneSwitcher.macroTab.segment.useCustomLabel")); + enableCustomLabel->setCheckable(true); + enableCustomLabel->setChecked(customLabelIsEnabled); + QWidget::connect(enableCustomLabel, &QAction::triggered, + [segmentEdit, enableCustomLabel]() { + handleCustomLabelEnableChange( + segmentEdit, enableCustomLabel); + }); + + if (!customLabelIsEnabled) { + return; + } + + auto customLabelRename = menu.addAction(obs_module_text( + "AdvSceneSwitcher.macroTab.segment.customLabelRename")); + QWidget::connect(customLabelRename, &QAction::triggered, + [segmentEdit]() { + handleCustomLabelRename(segmentEdit); + }); } static void setupConextMenu(AdvSceneSwitcher *ss, const QPoint &pos, @@ -1095,17 +1136,7 @@ static void setupConextMenu(AdvSceneSwitcher *ss, const QPoint &pos, menu.addSeparator(); - if (segmentEdit) { - auto customLabel = menu.addAction(obs_module_text( - "AdvSceneSwitcher.macroTab.segment.useCustomLabel")); - customLabel->setCheckable(true); - auto segment = segmentEdit ? segmentEdit->Data() : nullptr; - customLabel->setChecked(segment && - segment->GetUseCustomLabel()); - QWidget::connect(customLabel, &QAction::triggered, - std::bind(handleCustomLabelChange, segmentEdit, - customLabel)); - } + setupSegmentLabelContextMenuEntries(segmentEdit, menu); menu.addSeparator();