From a4f2ea197fa4f18384d967b9d21ee82e05f284da Mon Sep 17 00:00:00 2001 From: RickyRister Date: Sun, 8 Dec 2024 16:51:41 -0800 Subject: [PATCH] move validation into dlg --- .../src/dialogs/dlg_move_top_cards_until.cpp | 14 +++++++- .../src/dialogs/dlg_move_top_cards_until.h | 2 ++ cockatrice/src/game/player/player.cpp | 32 ++++++------------- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/cockatrice/src/dialogs/dlg_move_top_cards_until.cpp b/cockatrice/src/dialogs/dlg_move_top_cards_until.cpp index 0ff17240a..15293fd8c 100644 --- a/cockatrice/src/dialogs/dlg_move_top_cards_until.cpp +++ b/cockatrice/src/dialogs/dlg_move_top_cards_until.cpp @@ -1,10 +1,12 @@ #include "dlg_move_top_cards_until.h" +#include "../game/filters/filter_string.h" #include "trice_limits.h" #include #include #include +#include #include #include #include @@ -30,7 +32,7 @@ DlgMoveTopCardsUntil::DlgMoveTopCardsUntil(QWidget *parent, QString _expr, uint grid->addWidget(numberOfHitsEdit, 0, 1); buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); - connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept); + connect(buttonBox, &QDialogButtonBox::accepted, this, &DlgMoveTopCardsUntil::validateAndAccept); connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); auto *mainLayout = new QVBoxLayout; @@ -43,6 +45,16 @@ DlgMoveTopCardsUntil::DlgMoveTopCardsUntil(QWidget *parent, QString _expr, uint setWindowTitle(tr("Put top cards on stack until...")); } +void DlgMoveTopCardsUntil::validateAndAccept() +{ + auto movingCardsUntilFilter = FilterString(exprEdit->text()); + if (movingCardsUntilFilter.valid()) { + accept(); + } else { + QMessageBox::warning(this, tr("Invalid filter"), movingCardsUntilFilter.error(), QMessageBox::Ok); + } +} + QString DlgMoveTopCardsUntil::getExpr() const { return exprEdit->text(); diff --git a/cockatrice/src/dialogs/dlg_move_top_cards_until.h b/cockatrice/src/dialogs/dlg_move_top_cards_until.h index 5309c7f8f..6041ed8c3 100644 --- a/cockatrice/src/dialogs/dlg_move_top_cards_until.h +++ b/cockatrice/src/dialogs/dlg_move_top_cards_until.h @@ -17,6 +17,8 @@ class DlgMoveTopCardsUntil : public QDialog QSpinBox *numberOfHitsEdit; QDialogButtonBox *buttonBox; + void validateAndAccept(); + public: explicit DlgMoveTopCardsUntil(QWidget *parent = nullptr, QString expr = QString(), uint numberOfHits = 1); [[nodiscard]] QString getExpr() const; diff --git a/cockatrice/src/game/player/player.cpp b/cockatrice/src/game/player/player.cpp index 871e289c9..313e4c1d6 100644 --- a/cockatrice/src/game/player/player.cpp +++ b/cockatrice/src/game/player/player.cpp @@ -1333,33 +1333,19 @@ void Player::actMoveTopCardsUntil() { stopMoveTopCardsUntil(); - QString expr = previousMovingCardsUntilExpr; - int numberOfHits = previousMovingCardsUntilNumberOfHits; - for (;;) { - DlgMoveTopCardsUntil dlg(game, expr, numberOfHits); - if (!dlg.exec()) { - return; - } - - expr = dlg.getExpr(); - numberOfHits = dlg.getNumberOfHits(); - - movingCardsUntilFilter = FilterString(expr); - if (movingCardsUntilFilter.valid()) { - break; - } else { - auto button = QMessageBox::warning(game, "Invalid filter", movingCardsUntilFilter.error()); - if (button != QMessageBox::Ok) { - return; - } - } + DlgMoveTopCardsUntil dlg(game, previousMovingCardsUntilExpr, previousMovingCardsUntilNumberOfHits); + if (!dlg.exec()) { + return; } - previousMovingCardsUntilExpr = expr; - previousMovingCardsUntilNumberOfHits = numberOfHits; + + previousMovingCardsUntilExpr = dlg.getExpr(); + previousMovingCardsUntilNumberOfHits = dlg.getNumberOfHits(); + if (zones.value("deck")->getCards().empty()) { stopMoveTopCardsUntil(); } else { - movingCardsUntilCounter = numberOfHits; + movingCardsUntilFilter = FilterString(previousMovingCardsUntilExpr); + movingCardsUntilCounter = previousMovingCardsUntilNumberOfHits; movingCardsUntil = true; actMoveTopCardToPlay(); }