mirror of
https://git.suyu.dev/suyu/suyu
synced 2024-11-02 05:17:52 +00:00
a6830e61b8
Previously, we would let a user enter an unbounded name and then silently truncate away characters that went over the 32-character limit. This is kind of bad from the UX point of view, because we're essentially not doing what the user intended in certain scenarios. Instead, we clamp it to 32 characters and make that visually apparent in the dialog box to provide a name for a user.
59 lines
1.9 KiB
C++
59 lines
1.9 KiB
C++
// Copyright 2018 yuzu Emulator Project
|
|
// Licensed under GPLv2 or any later version
|
|
// Refer to the license.txt file included.
|
|
|
|
#include <QDialogButtonBox>
|
|
#include <QLabel>
|
|
#include <QLineEdit>
|
|
#include <QPushButton>
|
|
#include <QVBoxLayout>
|
|
#include "yuzu/util/limitable_input_dialog.h"
|
|
|
|
LimitableInputDialog::LimitableInputDialog(QWidget* parent) : QDialog{parent} {
|
|
CreateUI();
|
|
ConnectEvents();
|
|
}
|
|
|
|
LimitableInputDialog::~LimitableInputDialog() = default;
|
|
|
|
void LimitableInputDialog::CreateUI() {
|
|
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
|
|
|
|
text_label = new QLabel(this);
|
|
text_entry = new QLineEdit(this);
|
|
buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
|
|
|
|
auto* const layout = new QVBoxLayout;
|
|
layout->addWidget(text_label);
|
|
layout->addWidget(text_entry);
|
|
layout->addWidget(buttons);
|
|
|
|
setLayout(layout);
|
|
}
|
|
|
|
void LimitableInputDialog::ConnectEvents() {
|
|
connect(buttons, &QDialogButtonBox::accepted, this, &QDialog::accept);
|
|
connect(buttons, &QDialogButtonBox::rejected, this, &QDialog::reject);
|
|
}
|
|
|
|
QString LimitableInputDialog::GetText(QWidget* parent, const QString& title, const QString& text,
|
|
int min_character_limit, int max_character_limit) {
|
|
Q_ASSERT(min_character_limit <= max_character_limit);
|
|
|
|
LimitableInputDialog dialog{parent};
|
|
dialog.setWindowTitle(title);
|
|
dialog.text_label->setText(text);
|
|
dialog.text_entry->setMaxLength(max_character_limit);
|
|
|
|
auto* const ok_button = dialog.buttons->button(QDialogButtonBox::Ok);
|
|
ok_button->setEnabled(false);
|
|
connect(dialog.text_entry, &QLineEdit::textEdited, [&](const QString& new_text) {
|
|
ok_button->setEnabled(new_text.length() >= min_character_limit);
|
|
});
|
|
|
|
if (dialog.exec() != QDialog::Accepted) {
|
|
return {};
|
|
}
|
|
|
|
return dialog.text_entry->text();
|
|
}
|