mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-06-12 00:54:53 -07:00
[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:
parent
574ea01e08
commit
aff4ffdf83
2 changed files with 50 additions and 43 deletions
|
|
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue