implement thing

This commit is contained in:
RickyRister 2024-12-12 02:51:23 -08:00
parent 1e71a1ef75
commit e1ba37d396
2 changed files with 51 additions and 4 deletions

View file

@ -1,5 +1,7 @@
#include "dlg_move_top_cards_until.h"
#include "../game/cards/card_database.h"
#include "../game/cards/card_database_manager.h"
#include "../game/filters/filter_string.h"
#include "trice_limits.h"
@ -45,14 +47,57 @@ DlgMoveTopCardsUntil::DlgMoveTopCardsUntil(QWidget *parent, QString _expr, uint
setWindowTitle(tr("Put top cards on stack until..."));
}
/**
* @brief Checks if a card matching the expr exists in the card database.
*
* @returns true if a card matching the expression exists.
*/
static bool matchExistsInDb(const FilterString &filterString)
{
const auto cardDatabase = CardDatabaseManager::getInstance();
const auto allCards = cardDatabase->getCardList();
const auto it = std::find_if(allCards.begin(), allCards.end(),
[&filterString](const CardInfoPtr &card) { return filterString.check(card); });
return it != allCards.end();
}
/**
* @brief Validates that a card matching the expr exists in the card database.
* If no match is found, then pop up a window to warn the user, giving them a chance to back out.
*
* @returns whether to proceed with the action
*/
bool DlgMoveTopCardsUntil::validateMatchExists(const FilterString &filterString)
{
if (matchExistsInDb(filterString)) {
return true;
}
const auto msg = tr("No cards matching the search expression exists in the card database. Proceed anyways?");
const auto res =
QMessageBox::warning(this, tr("Cockatrice"), msg, QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
if (res == QMessageBox::No) {
return false;
}
return true;
}
void DlgMoveTopCardsUntil::validateAndAccept()
{
auto movingCardsUntilFilter = FilterString(exprEdit->text());
if (movingCardsUntilFilter.valid()) {
accept();
} else {
if (!movingCardsUntilFilter.valid()) {
QMessageBox::warning(this, tr("Invalid filter"), movingCardsUntilFilter.error(), QMessageBox::Ok);
return;
}
if (!validateMatchExists(movingCardsUntilFilter)) {
return;
}
accept();
}
QString DlgMoveTopCardsUntil::getExpr() const

View file

@ -6,7 +6,8 @@
#include <QLabel>
#include <QLineEdit>
#include <QSpinBox>
#include <QString>
class FilterString;
class DlgMoveTopCardsUntil : public QDialog
{
@ -18,6 +19,7 @@ class DlgMoveTopCardsUntil : public QDialog
QDialogButtonBox *buttonBox;
void validateAndAccept();
bool validateMatchExists(const FilterString &filterString);
public:
explicit DlgMoveTopCardsUntil(QWidget *parent = nullptr, QString expr = QString(), uint numberOfHits = 1);