Cleanup ItemSettingsDialog and ItemSelection

* Added option to configure name conflict locale
 * Fixed some locale options not being displayed properly due to missing
   obs_module_text() calls and name conflicts not being handled
   properly.
 * No longer force a fixed width
 * Added option to hide the rename context menu entry
 * Use locale for invalid connection and variable selection string
This commit is contained in:
WarmUpTill 2023-08-13 10:59:28 +02:00 committed by WarmUpTill
parent 49e8bf7639
commit 07b86dda41
5 changed files with 54 additions and 25 deletions

View File

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

View File

@ -221,7 +221,7 @@ std::string GetWeakConnectionName(std::weak_ptr<Connection> 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()),

View File

@ -46,6 +46,7 @@ static bool ItemNameAvailable(const std::string &name,
ItemSelection::ItemSelection(std::deque<std::shared_ptr<Item>> &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<std::shared_ptr<Item>> &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<QAction *>(sender());
QVariant variant = action->property("connetion");
QVariant variant = action->property("item");
Item *item = variant.value<Item *>();
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<std::shared_ptr<Item>> &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()) {

View File

@ -36,10 +36,13 @@ class ItemSettingsDialog : public QDialog {
Q_OBJECT
public:
ItemSettingsDialog(const Item &, std::deque<std::shared_ptr<Item>> &,
std::string_view = "AdvSceneSwitcher.item.select",
std::string_view = "AdvSceneSwitcher.item.select",
QWidget *parent = 0);
ItemSettingsDialog(
const Item &, std::deque<std::shared_ptr<Item>> &,
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<std::shared_ptr<Item>> &_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<std::shared_ptr<Item>> &_items;
std::string_view _selectStr;
std::string_view _addStr;
std::string_view _conflictStr;
bool _showRenameContextMenu = true;
};
} // namespace advss

View File

@ -116,7 +116,7 @@ std::string GetWeakVariableName(std::weak_ptr<Variable> 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