Add context menu to change custom label for macro segments

This commit is contained in:
WarmUpTill
2024-08-13 21:00:21 +02:00
committed by WarmUpTill
parent 9522d7c0b4
commit 4113615cd6
2 changed files with 54 additions and 22 deletions

View File

@@ -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"

View File

@@ -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();