[GDE] Disable add tag button until text is entered. (#5855)

* Disable add tag button until text is entered.

* Reduce capture scope.

---------

Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
This commit is contained in:
BruebachL 2025-04-20 06:09:25 +02:00 committed by GitHub
parent 574ea01e08
commit aff4ffdf83
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 50 additions and 43 deletions

View file

@ -11,7 +11,7 @@
#include <QVBoxLayout> #include <QVBoxLayout>
DeckPreviewTagDialog::DeckPreviewTagDialog(const QStringList &knownTags, const QStringList &activeTags, QWidget *parent) DeckPreviewTagDialog::DeckPreviewTagDialog(const QStringList &knownTags, const QStringList &activeTags, QWidget *parent)
: QDialog(parent), activeTags_(activeTags) : QDialog(parent), activeTags(activeTags)
{ {
resize(400, 500); resize(400, 500);
@ -100,13 +100,13 @@ DeckPreviewTagDialog::DeckPreviewTagDialog(const QStringList &knownTags, const Q
combinedTags.removeDuplicates(); combinedTags.removeDuplicates();
// Main layout // Main layout
auto *mainLayout = new QVBoxLayout(this); mainLayout = new QVBoxLayout(this);
// Filter bar // Filter bar
filterInput_ = new QLineEdit(this); filterInput = new QLineEdit(this);
mainLayout->addWidget(filterInput_); mainLayout->addWidget(filterInput);
connect(filterInput_, &QLineEdit::textChanged, this, &DeckPreviewTagDialog::filterTags); connect(filterInput, &QLineEdit::textChanged, this, &DeckPreviewTagDialog::filterTags);
// Instruction label // Instruction label
instructionLabel = new QLabel(this); instructionLabel = new QLabel(this);
@ -114,31 +114,34 @@ DeckPreviewTagDialog::DeckPreviewTagDialog(const QStringList &knownTags, const Q
mainLayout->addWidget(instructionLabel); mainLayout->addWidget(instructionLabel);
// Tag list view // Tag list view
tagListView_ = new QListWidget(this); tagListView = new QListWidget(this);
mainLayout->addWidget(tagListView_); mainLayout->addWidget(tagListView);
// Populate combined tags // Populate combined tags
for (const auto &tag : combinedTags) { for (const auto &tag : combinedTags) {
auto *item = new QListWidgetItem(tagListView_); auto *item = new QListWidgetItem(tagListView);
auto *tagWidget = new DeckPreviewTagItemWidget(tag, activeTags.contains(tag), this); auto *tagWidget = new DeckPreviewTagItemWidget(tag, activeTags.contains(tag), this);
tagListView_->addItem(item); tagListView->addItem(item);
tagListView_->setItemWidget(item, tagWidget); tagListView->setItemWidget(item, tagWidget);
connect(tagWidget->checkBox(), &QCheckBox::toggled, this, &DeckPreviewTagDialog::onCheckboxStateChanged); connect(tagWidget->checkBox(), &QCheckBox::toggled, this, &DeckPreviewTagDialog::onCheckboxStateChanged);
} }
// Add tag input layout // Add tag input layout
auto *addTagLayout = new QHBoxLayout(); addTagLayout = new QHBoxLayout(this);
newTagInput_ = new QLineEdit(this); newTagInput = new QLineEdit(this);
addTagButton_ = new QPushButton(this); addTagButton = new QPushButton(this);
addTagLayout->addWidget(newTagInput_); addTagButton->setEnabled(false);
addTagLayout->addWidget(addTagButton_); addTagLayout->addWidget(newTagInput);
addTagLayout->addWidget(addTagButton);
mainLayout->addLayout(addTagLayout); mainLayout->addLayout(addTagLayout);
connect(addTagButton_, &QPushButton::clicked, this, &DeckPreviewTagDialog::addTag); connect(addTagButton, &QPushButton::clicked, this, &DeckPreviewTagDialog::addTag);
connect(newTagInput, &QLineEdit::textChanged, this,
[this](const QString &text) { addTagButton->setEnabled(!text.trimmed().isEmpty()); });
// OK and Cancel buttons // OK and Cancel buttons
auto *buttonLayout = new QHBoxLayout(); buttonLayout = new QHBoxLayout(this);
okButton = new QPushButton(this); okButton = new QPushButton(this);
cancelButton = new QPushButton(this); cancelButton = new QPushButton(this);
buttonLayout->addStretch(); buttonLayout->addStretch();
@ -155,30 +158,30 @@ void DeckPreviewTagDialog::retranslateUi()
{ {
setWindowTitle(tr("Deck Tags Manager")); setWindowTitle(tr("Deck Tags Manager"));
instructionLabel->setText(tr("Manage your deck tags. Check or uncheck tags as needed, or add new ones:")); instructionLabel->setText(tr("Manage your deck tags. Check or uncheck tags as needed, or add new ones:"));
newTagInput_->setPlaceholderText(tr("Add a new tag (e.g., Aggro)")); newTagInput->setPlaceholderText(tr("Add a new tag (e.g., Aggro)"));
addTagButton_->setText(tr("Add Tag")); addTagButton->setText(tr("Add Tag"));
filterInput_->setPlaceholderText(tr("Filter tags...")); filterInput->setPlaceholderText(tr("Filter tags..."));
okButton->setText(tr("OK")); okButton->setText(tr("OK"));
cancelButton->setText(tr("Cancel")); cancelButton->setText(tr("Cancel"));
} }
QStringList DeckPreviewTagDialog::getActiveTags() const QStringList DeckPreviewTagDialog::getActiveTags() const
{ {
return activeTags_; return activeTags;
} }
void DeckPreviewTagDialog::addTag() void DeckPreviewTagDialog::addTag()
{ {
QString newTag = newTagInput_->text().trimmed(); QString newTag = newTagInput->text().trimmed();
if (newTag.isEmpty()) { if (newTag.isEmpty()) {
QMessageBox::warning(this, tr("Invalid Input"), tr("Tag name cannot be empty!")); QMessageBox::warning(this, tr("Invalid Input"), tr("Tag name cannot be empty!"));
return; return;
} }
// Prevent duplicate tags // Prevent duplicate tags
for (int i = 0; i < tagListView_->count(); ++i) { for (int i = 0; i < tagListView->count(); ++i) {
auto *item = tagListView_->item(i); auto *item = tagListView->item(i);
auto *tagWidget = qobject_cast<DeckPreviewTagItemWidget *>(tagListView_->itemWidget(item)); auto *tagWidget = qobject_cast<DeckPreviewTagItemWidget *>(tagListView->itemWidget(item));
if (tagWidget && tagWidget->checkBox()->text() == newTag) { if (tagWidget && tagWidget->checkBox()->text() == newTag) {
QMessageBox::warning(this, tr("Duplicate Tag"), tr("This tag already exists.")); QMessageBox::warning(this, tr("Duplicate Tag"), tr("This tag already exists."));
return; return;
@ -186,23 +189,23 @@ void DeckPreviewTagDialog::addTag()
} }
// Add the new tag // Add the new tag
auto *item = new QListWidgetItem(tagListView_); auto *item = new QListWidgetItem(tagListView);
auto *tagWidget = new DeckPreviewTagItemWidget(newTag, true, this); auto *tagWidget = new DeckPreviewTagItemWidget(newTag, true, this);
tagListView_->addItem(item); tagListView->addItem(item);
tagListView_->setItemWidget(item, tagWidget); tagListView->setItemWidget(item, tagWidget);
activeTags_.append(newTag); activeTags.append(newTag);
connect(tagWidget->checkBox(), &QCheckBox::toggled, this, &DeckPreviewTagDialog::onCheckboxStateChanged); connect(tagWidget->checkBox(), &QCheckBox::toggled, this, &DeckPreviewTagDialog::onCheckboxStateChanged);
// Clear the input field // Clear the input field
newTagInput_->clear(); newTagInput->clear();
} }
void DeckPreviewTagDialog::filterTags(const QString &text) void DeckPreviewTagDialog::filterTags(const QString &text)
{ {
for (int i = 0; i < tagListView_->count(); ++i) { for (int i = 0; i < tagListView->count(); ++i) {
auto *item = tagListView_->item(i); auto *item = tagListView->item(i);
auto *tagWidget = qobject_cast<DeckPreviewTagItemWidget *>(tagListView_->itemWidget(item)); auto *tagWidget = qobject_cast<DeckPreviewTagItemWidget *>(tagListView->itemWidget(item));
if (tagWidget) { if (tagWidget) {
bool matches = tagWidget->checkBox()->text().contains(text, Qt::CaseInsensitive); bool matches = tagWidget->checkBox()->text().contains(text, Qt::CaseInsensitive);
item->setHidden(!matches); item->setHidden(!matches);
@ -212,12 +215,12 @@ void DeckPreviewTagDialog::filterTags(const QString &text)
void DeckPreviewTagDialog::onCheckboxStateChanged() void DeckPreviewTagDialog::onCheckboxStateChanged()
{ {
activeTags_.clear(); activeTags.clear();
for (int i = 0; i < tagListView_->count(); ++i) { for (int i = 0; i < tagListView->count(); ++i) {
auto *item = tagListView_->item(i); auto *item = tagListView->item(i);
auto *tagWidget = qobject_cast<DeckPreviewTagItemWidget *>(tagListView_->itemWidget(item)); auto *tagWidget = qobject_cast<DeckPreviewTagItemWidget *>(tagListView->itemWidget(item));
if (tagWidget && tagWidget->checkBox()->isChecked()) { if (tagWidget && tagWidget->checkBox()->isChecked()) {
activeTags_.append(tagWidget->checkBox()->text()); activeTags.append(tagWidget->checkBox()->text());
} }
} }
} }

View file

@ -8,6 +8,7 @@
#include <QListWidget> #include <QListWidget>
#include <QPushButton> #include <QPushButton>
#include <QStringList> #include <QStringList>
#include <QVBoxLayout>
class DeckPreviewTagDialog : public QDialog class DeckPreviewTagDialog : public QDialog
{ {
@ -26,14 +27,17 @@ private slots:
void retranslateUi(); void retranslateUi();
private: private:
QVBoxLayout *mainLayout;
QLabel *instructionLabel; QLabel *instructionLabel;
QListWidget *tagListView_; QListWidget *tagListView;
QLineEdit *filterInput_; QLineEdit *filterInput;
QLineEdit *newTagInput_; QHBoxLayout *addTagLayout;
QPushButton *addTagButton_; QLineEdit *newTagInput;
QPushButton *addTagButton;
QHBoxLayout *buttonLayout;
QPushButton *okButton; QPushButton *okButton;
QPushButton *cancelButton; QPushButton *cancelButton;
QStringList activeTags_; QStringList activeTags;
}; };
#endif // DECK_PREVIEW_TAG_DIALOG_H #endif // DECK_PREVIEW_TAG_DIALOG_H