diff --git a/cockatrice/src/dialogs/dlg_move_top_cards_until.cpp b/cockatrice/src/dialogs/dlg_move_top_cards_until.cpp index 4f0207155..edf593571 100644 --- a/cockatrice/src/dialogs/dlg_move_top_cards_until.cpp +++ b/cockatrice/src/dialogs/dlg_move_top_cards_until.cpp @@ -3,7 +3,6 @@ #include "../game/cards/card_database.h" #include "../game/cards/card_database_manager.h" #include "../game/filters/filter_string.h" -#include "trice_limits.h" #include #include @@ -14,15 +13,17 @@ #include #include -DlgMoveTopCardsUntil::DlgMoveTopCardsUntil(QWidget *parent, QString _expr, uint _numberOfHits, bool autoPlay) +DlgMoveTopCardsUntil::DlgMoveTopCardsUntil(QWidget *parent, QStringList exprs, uint _numberOfHits, bool autoPlay) : QDialog(parent) { exprLabel = new QLabel(tr("Card name (or search expressions):")); - exprEdit = new QLineEdit(this); - exprEdit->setFocus(); - exprEdit->setText(_expr); - exprLabel->setBuddy(exprEdit); + exprComboBox = new QComboBox(this); + exprComboBox->setFocus(); + exprComboBox->setEditable(true); + exprComboBox->setInsertPolicy(QComboBox::InsertAtTop); + exprComboBox->insertItems(0, exprs); + exprLabel->setBuddy(exprComboBox); numberOfHitsLabel = new QLabel(tr("Number of hits:")); numberOfHitsEdit = new QSpinBox(this); @@ -43,7 +44,7 @@ DlgMoveTopCardsUntil::DlgMoveTopCardsUntil(QWidget *parent, QString _expr, uint auto *mainLayout = new QVBoxLayout; mainLayout->addWidget(exprLabel); - mainLayout->addWidget(exprEdit); + mainLayout->addWidget(exprComboBox); mainLayout->addItem(grid); mainLayout->addWidget(autoPlayCheckBox); mainLayout->addWidget(buttonBox); @@ -92,7 +93,7 @@ bool DlgMoveTopCardsUntil::validateMatchExists(const FilterString &filterString) void DlgMoveTopCardsUntil::validateAndAccept() { - auto movingCardsUntilFilter = FilterString(exprEdit->text()); + auto movingCardsUntilFilter = FilterString(exprComboBox->currentText()); if (!movingCardsUntilFilter.valid()) { QMessageBox::warning(this, tr("Invalid filter"), movingCardsUntilFilter.error(), QMessageBox::Ok); return; @@ -102,12 +103,29 @@ void DlgMoveTopCardsUntil::validateAndAccept() return; } + // move currently selected text to top of history list + if (exprComboBox->currentIndex() != 0) { + QString currentExpr = exprComboBox->currentText(); + exprComboBox->removeItem(exprComboBox->currentIndex()); + exprComboBox->insertItem(0, currentExpr); + exprComboBox->setCurrentIndex(0); + } + accept(); } QString DlgMoveTopCardsUntil::getExpr() const { - return exprEdit->text(); + return exprComboBox->currentText(); +} + +QStringList DlgMoveTopCardsUntil::getExprs() const +{ + QStringList exprs; + for (int i = 0; i < exprComboBox->count(); ++i) { + exprs.append(exprComboBox->itemText(i)); + } + return exprs; } uint DlgMoveTopCardsUntil::getNumberOfHits() const diff --git a/cockatrice/src/dialogs/dlg_move_top_cards_until.h b/cockatrice/src/dialogs/dlg_move_top_cards_until.h index c4cc2e0cb..d41d029d6 100644 --- a/cockatrice/src/dialogs/dlg_move_top_cards_until.h +++ b/cockatrice/src/dialogs/dlg_move_top_cards_until.h @@ -2,10 +2,10 @@ #define DLG_MOVE_TOP_CARDS_UNTIL_H #include +#include #include #include #include -#include #include class FilterString; @@ -15,7 +15,7 @@ class DlgMoveTopCardsUntil : public QDialog Q_OBJECT QLabel *exprLabel, *numberOfHitsLabel; - QLineEdit *exprEdit; + QComboBox *exprComboBox; QSpinBox *numberOfHitsEdit; QDialogButtonBox *buttonBox; QCheckBox *autoPlayCheckBox; @@ -25,10 +25,11 @@ class DlgMoveTopCardsUntil : public QDialog public: explicit DlgMoveTopCardsUntil(QWidget *parent = nullptr, - QString expr = QString(), + QStringList exprs = QStringList(), uint numberOfHits = 1, bool autoPlay = false); QString getExpr() const; + QStringList getExprs() const; uint getNumberOfHits() const; bool isAutoPlay() const; }; diff --git a/cockatrice/src/game/player/player.cpp b/cockatrice/src/game/player/player.cpp index 629074dc8..8244f35c0 100644 --- a/cockatrice/src/game/player/player.cpp +++ b/cockatrice/src/game/player/player.cpp @@ -1443,19 +1443,20 @@ void Player::actMoveTopCardsUntil() { stopMoveTopCardsUntil(); - DlgMoveTopCardsUntil dlg(game, movingCardsUntilExpr, movingCardsUntilNumberOfHits, movingCardsUntilAutoPlay); + DlgMoveTopCardsUntil dlg(game, movingCardsUntilExprs, movingCardsUntilNumberOfHits, movingCardsUntilAutoPlay); if (!dlg.exec()) { return; } - movingCardsUntilExpr = dlg.getExpr(); + auto expr = dlg.getExpr(); + movingCardsUntilExprs = dlg.getExprs(); movingCardsUntilNumberOfHits = dlg.getNumberOfHits(); movingCardsUntilAutoPlay = dlg.isAutoPlay(); if (zones.value("deck")->getCards().empty()) { stopMoveTopCardsUntil(); } else { - movingCardsUntilFilter = FilterString(movingCardsUntilExpr); + movingCardsUntilFilter = FilterString(expr); movingCardsUntilCounter = movingCardsUntilNumberOfHits; movingCardsUntil = true; actMoveTopCardToPlay(); diff --git a/cockatrice/src/game/player/player.h b/cockatrice/src/game/player/player.h index 66f3089ed..26df3ae50 100644 --- a/cockatrice/src/game/player/player.h +++ b/cockatrice/src/game/player/player.h @@ -279,7 +279,7 @@ private: bool movingCardsUntil; QTimer *moveTopCardTimer; - QString movingCardsUntilExpr = {}; + QStringList movingCardsUntilExprs = {}; int movingCardsUntilNumberOfHits = 1; bool movingCardsUntilAutoPlay = false; FilterString movingCardsUntilFilter;