diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 9d4f2676..d7729706 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -1030,6 +1030,7 @@ AdvSceneSwitcher.macroSegmentSelection.invalid="Invalid selection!" AdvSceneSwitcher.variable.select="--select variable--" AdvSceneSwitcher.variable.add="Add new variable" AdvSceneSwitcher.variable.configure="Configure variable settings" +AdvSceneSwitcher.variable.invalid="Invalid varialbe selection" AdvSceneSwitcher.variable.name="Name:" AdvSceneSwitcher.variable.value="Current value:" AdvSceneSwitcher.variable.save="Save / load behavior" @@ -1040,6 +1041,7 @@ AdvSceneSwitcher.variable.save.default="Set to value" AdvSceneSwitcher.connection.select="--select connection--" AdvSceneSwitcher.connection.add="Add new connection" AdvSceneSwitcher.connection.configure="Configure connection settings" +AdvSceneSwitcher.connection.invalid="Invalid connection selection" AdvSceneSwitcher.connection.name="Name:" AdvSceneSwitcher.connection.useCustomURI="Use custom URI" AdvSceneSwitcher.connection.customURI="Address:" diff --git a/src/utils/connection-manager.cpp b/src/utils/connection-manager.cpp index 6479151d..c7f36b22 100644 --- a/src/utils/connection-manager.cpp +++ b/src/utils/connection-manager.cpp @@ -221,7 +221,7 @@ std::string GetWeakConnectionName(std::weak_ptr connection) { auto con = connection.lock(); if (!con) { - return "invalid connection selection"; + return obs_module_text("AdvSceneSwitcher.connection.invalid"); } return con->Name(); } @@ -248,6 +248,7 @@ ConnectionSelection::ConnectionSelection(QWidget *parent) AskForSettingsWrapper, "AdvSceneSwitcher.connection.select", "AdvSceneSwitcher.connection.add", + "AdvSceneSwitcher.item.nameNotAvailable", "AdvSceneSwitcher.connection.configure", parent) { // Connect to slots @@ -297,7 +298,8 @@ ConnectionSettingsDialog::ConnectionSettingsDialog(QWidget *parent, const Connection &settings) : ItemSettingsDialog(settings, switcher->connections, "AdvSceneSwitcher.connection.select", - "AdvSceneSwitcher.connection.add", parent), + "AdvSceneSwitcher.connection.add", + "AdvSceneSwitcher.item.nameNotAvailable", parent), _useCustomURI(new QCheckBox()), _customUri(new QLineEdit()), _address(new QLineEdit()), diff --git a/src/utils/item-selection-helpers.cpp b/src/utils/item-selection-helpers.cpp index 1395db79..6b734f92 100644 --- a/src/utils/item-selection-helpers.cpp +++ b/src/utils/item-selection-helpers.cpp @@ -46,6 +46,7 @@ static bool ItemNameAvailable(const std::string &name, ItemSelection::ItemSelection(std::deque> &items, CreateItemFunc create, SettingsCallback callback, std::string_view select, std::string_view add, + std::string_view conflict, std::string_view configureTooltip, QWidget *parent) : QWidget(parent), _selection(new FilterComboBox(this, obs_module_text(select.data()))), @@ -54,7 +55,8 @@ ItemSelection::ItemSelection(std::deque> &items, _askForSettings(callback), _items(items), _selectStr(select), - _addStr(add) + _addStr(add), + _conflictStr(conflict) { _modify->setMaximumWidth(22); SetButtonIcon(_modify, ":/settings/images/settings/general.svg"); @@ -94,6 +96,11 @@ void ItemSelection::SetItem(const std::string &item) } } +void ItemSelection::ShowRenameContextMenu(bool value) +{ + _showRenameContextMenu = value; +} + void ItemSelection::ChangeSelection(const QString &sel) { if (sel == obs_module_text(_addStr.data())) { @@ -139,12 +146,14 @@ void ItemSelection::ModifyButtonClicked() }; QMenu menu(this); - - QAction *action = new QAction( - obs_module_text("AdvSceneSwitcher.item.rename"), &menu); - connect(action, SIGNAL(triggered()), this, SLOT(RenameItem())); - action->setProperty("connetion", QVariant::fromValue(item)); - menu.addAction(action); + QAction *action; + if (_showRenameContextMenu) { + action = new QAction( + obs_module_text("AdvSceneSwitcher.item.rename"), &menu); + connect(action, SIGNAL(triggered()), this, SLOT(RenameItem())); + action->setProperty("item", QVariant::fromValue(item)); + menu.addAction(action); + } action = new QAction(obs_module_text("AdvSceneSwitcher.item.remove"), &menu); @@ -162,7 +171,7 @@ void ItemSelection::ModifyButtonClicked() void ItemSelection::RenameItem() { QAction *action = reinterpret_cast(sender()); - QVariant variant = action->property("connetion"); + QVariant variant = action->property("item"); Item *item = variant.value(); std::string name; @@ -174,12 +183,13 @@ void ItemSelection::RenameItem() return; } if (name.empty()) { - DisplayMessage("AdvSceneSwitcher.item.emptyName"); + DisplayMessage( + obs_module_text("AdvSceneSwitcher.item.emptyName")); return; } if (_selection->currentText().toStdString() != name && !ItemNameAvailable(name, _items)) { - DisplayMessage("AdvSceneSwitcher.item.nameNotAvailable"); + DisplayMessage(obs_module_text(_conflictStr.data())); return; } @@ -245,7 +255,9 @@ Item *ItemSelection::GetCurrentItem() ItemSettingsDialog::ItemSettingsDialog(const Item &settings, std::deque> &items, std::string_view select, - std::string_view add, QWidget *parent) + std::string_view add, + std::string_view nameConflict, + QWidget *parent) : QDialog(parent), _name(new QLineEdit()), _nameHint(new QLabel), @@ -253,18 +265,20 @@ ItemSettingsDialog::ItemSettingsDialog(const Item &settings, QDialogButtonBox::Cancel)), _items(items), _selectStr(select), - _addStr(add) + _addStr(add), + _conflictStr(nameConflict) { setModal(true); setWindowModality(Qt::WindowModality::WindowModal); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); - setFixedWidth(555); + setMinimumWidth(555); setMinimumHeight(100); _buttonbox->setCenterButtons(true); _buttonbox->button(QDialogButtonBox::Ok)->setDisabled(true); - _name->setText(QString::fromStdString(settings._name)); + _originalName = QString::fromStdString(settings._name); + _name->setText(_originalName); QWidget::connect(_name, SIGNAL(textEdited(const QString &)), this, SLOT(NameChanged(const QString &))); @@ -279,9 +293,8 @@ ItemSettingsDialog::ItemSettingsDialog(const Item &settings, void ItemSettingsDialog::NameChanged(const QString &text) { - if (text != _name->text() && !ItemNameAvailable(text, _items)) { - SetNameWarning(obs_module_text( - "AdvSceneSwitcher.item.nameNotAvailable")); + if (text != _originalName && !ItemNameAvailable(text, _items)) { + SetNameWarning(obs_module_text(_conflictStr.data())); return; } if (text.isEmpty()) { diff --git a/src/utils/item-selection-helpers.hpp b/src/utils/item-selection-helpers.hpp index 7d1e52e8..d060f5c2 100644 --- a/src/utils/item-selection-helpers.hpp +++ b/src/utils/item-selection-helpers.hpp @@ -36,10 +36,13 @@ class ItemSettingsDialog : public QDialog { Q_OBJECT public: - ItemSettingsDialog(const Item &, std::deque> &, - std::string_view = "AdvSceneSwitcher.item.select", - std::string_view = "AdvSceneSwitcher.item.select", - QWidget *parent = 0); + ItemSettingsDialog( + const Item &, std::deque> &, + std::string_view selectString = "AdvSceneSwitcher.item.select", + std::string_view addString = "AdvSceneSwitcher.item.add", + std::string_view conflictString = + "AdvSceneSwitcher.item.nameNotAvailable", + QWidget *parent = 0); virtual ~ItemSettingsDialog() = default; private slots: @@ -54,6 +57,8 @@ protected: std::deque> &_items; std::string_view _selectStr; std::string_view _addStr; + std::string_view _conflictStr; + QString _originalName; }; typedef bool (*SettingsCallback)(QWidget *, Item &); @@ -68,9 +73,12 @@ public: SettingsCallback, std::string_view selectString = "AdvSceneSwitcher.item.select", std::string_view addString = "AdvSceneSwitcher.item.add", + std::string_view conflictString = + "AdvSceneSwitcher.item.nameNotAvailable", std::string_view configureTooltip = "", QWidget *parent = 0); virtual ~ItemSelection() = default; void SetItem(const std::string &); + void ShowRenameContextMenu(bool value); private slots: void ModifyButtonClicked(); @@ -96,6 +104,8 @@ protected: std::deque> &_items; std::string_view _selectStr; std::string_view _addStr; + std::string_view _conflictStr; + bool _showRenameContextMenu = true; }; } // namespace advss diff --git a/src/utils/variable.cpp b/src/utils/variable.cpp index a958c70d..21597971 100644 --- a/src/utils/variable.cpp +++ b/src/utils/variable.cpp @@ -116,7 +116,7 @@ std::string GetWeakVariableName(std::weak_ptr var_) { auto var = var_.lock(); if (!var) { - return "invalid variable selection"; + return obs_module_text("AdvSceneSwitcher.variable.invalid"); } return var->Name(); } @@ -164,7 +164,8 @@ VariableSettingsDialog::VariableSettingsDialog(QWidget *parent, const Variable &settings) : ItemSettingsDialog(settings, switcher->variables, "AdvSceneSwitcher.variable.select", - "AdvSceneSwitcher.variable.add", parent), + "AdvSceneSwitcher.variable.add", + "AdvSceneSwitcher.item.nameNotAvailable", parent), _value(new ResizingPlainTextEdit(this)), _defaultValue(new ResizingPlainTextEdit(this)), _save(new QComboBox()) @@ -248,6 +249,7 @@ VariableSelection::VariableSelection(QWidget *parent) AskForSettingsWrapper, "AdvSceneSwitcher.variable.select", "AdvSceneSwitcher.variable.add", + "AdvSceneSwitcher.item.nameNotAvailable", "AdvSceneSwitcher.variable.configure", parent) { // Connect to slots