mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-06-27 00:53:55 -07:00
[GDE] Add a group criteria to the deck list model (#5931)
* Add a group criteria to the deck list model and a combo box to the deck dock widget to change it. --------- Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
This commit is contained in:
parent
b2749a0c4e
commit
17c767fa42
4 changed files with 55 additions and 1 deletions
|
|
@ -104,6 +104,20 @@ void DeckEditorDeckDockWidget::createDeckDock()
|
||||||
deckTagsDisplayWidget = new DeckPreviewDeckTagsDisplayWidget(this, deckModel->getDeckList());
|
deckTagsDisplayWidget = new DeckPreviewDeckTagsDisplayWidget(this, deckModel->getDeckList());
|
||||||
deckTagsDisplayWidget->setHidden(!SettingsCache::instance().getDeckEditorTagsWidgetVisible());
|
deckTagsDisplayWidget->setHidden(!SettingsCache::instance().getDeckEditorTagsWidgetVisible());
|
||||||
|
|
||||||
|
activeGroupCriteriaLabel = new QLabel(this);
|
||||||
|
|
||||||
|
activeGroupCriteriaComboBox = new QComboBox(this);
|
||||||
|
activeGroupCriteriaComboBox->addItem(tr("Main Type"), DeckListModelGroupCriteria::MAIN_TYPE);
|
||||||
|
activeGroupCriteriaComboBox->addItem(tr("Mana Cost"), DeckListModelGroupCriteria::MANA_COST);
|
||||||
|
activeGroupCriteriaComboBox->addItem(tr("Colors"), DeckListModelGroupCriteria::COLOR);
|
||||||
|
connect(activeGroupCriteriaComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), [this]() {
|
||||||
|
deckModel->setActiveGroupCriteria(
|
||||||
|
static_cast<DeckListModelGroupCriteria>(activeGroupCriteriaComboBox->currentData(Qt::UserRole).toInt()));
|
||||||
|
deckModel->sort(deckView->header()->sortIndicatorSection(), deckView->header()->sortIndicatorOrder());
|
||||||
|
deckView->expandAll();
|
||||||
|
deckView->expandAll();
|
||||||
|
});
|
||||||
|
|
||||||
aIncrement = new QAction(QString(), this);
|
aIncrement = new QAction(QString(), this);
|
||||||
aIncrement->setIcon(QPixmap("theme:icons/increment"));
|
aIncrement->setIcon(QPixmap("theme:icons/increment"));
|
||||||
connect(aIncrement, &QAction::triggered, this, &DeckEditorDeckDockWidget::actIncrement);
|
connect(aIncrement, &QAction::triggered, this, &DeckEditorDeckDockWidget::actIncrement);
|
||||||
|
|
@ -144,6 +158,9 @@ void DeckEditorDeckDockWidget::createDeckDock()
|
||||||
|
|
||||||
upperLayout->addWidget(deckTagsDisplayWidget, 3, 1);
|
upperLayout->addWidget(deckTagsDisplayWidget, 3, 1);
|
||||||
|
|
||||||
|
upperLayout->addWidget(activeGroupCriteriaLabel, 4, 0);
|
||||||
|
upperLayout->addWidget(activeGroupCriteriaComboBox, 4, 1);
|
||||||
|
|
||||||
hashLabel1 = new QLabel();
|
hashLabel1 = new QLabel();
|
||||||
hashLabel1->setObjectName("hashLabel1");
|
hashLabel1->setObjectName("hashLabel1");
|
||||||
auto *hashSizePolicy = new QSizePolicy();
|
auto *hashSizePolicy = new QSizePolicy();
|
||||||
|
|
@ -578,6 +595,7 @@ void DeckEditorDeckDockWidget::retranslateUi()
|
||||||
showBannerCardCheckBox->setText(tr("Show banner card selection menu"));
|
showBannerCardCheckBox->setText(tr("Show banner card selection menu"));
|
||||||
showTagsWidgetCheckBox->setText(tr("Show tags selection menu"));
|
showTagsWidgetCheckBox->setText(tr("Show tags selection menu"));
|
||||||
commentsLabel->setText(tr("&Comments:"));
|
commentsLabel->setText(tr("&Comments:"));
|
||||||
|
activeGroupCriteriaLabel->setText(tr("Group by:"));
|
||||||
hashLabel1->setText(tr("Hash:"));
|
hashLabel1->setText(tr("Hash:"));
|
||||||
|
|
||||||
aIncrement->setText(tr("&Increment number"));
|
aIncrement->setText(tr("&Increment number"));
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,8 @@ private:
|
||||||
DeckPreviewDeckTagsDisplayWidget *deckTagsDisplayWidget;
|
DeckPreviewDeckTagsDisplayWidget *deckTagsDisplayWidget;
|
||||||
QLabel *hashLabel1;
|
QLabel *hashLabel1;
|
||||||
LineEditUnfocusable *hashLabel;
|
LineEditUnfocusable *hashLabel;
|
||||||
|
QLabel *activeGroupCriteriaLabel;
|
||||||
|
QComboBox *activeGroupCriteriaComboBox;
|
||||||
|
|
||||||
QAction *aRemoveCard, *aIncrement, *aDecrement, *aSwapCard;
|
QAction *aRemoveCard, *aIncrement, *aDecrement, *aSwapCard;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,24 @@ DeckListModel::~DeckListModel()
|
||||||
delete root;
|
delete root;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString DeckListModel::getSortCriteriaForCard(CardInfoPtr info)
|
||||||
|
{
|
||||||
|
if (!info) {
|
||||||
|
return "unknown";
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (activeGroupCriteria) {
|
||||||
|
case DeckListModelGroupCriteria::MAIN_TYPE:
|
||||||
|
return info->getMainCardType();
|
||||||
|
case DeckListModelGroupCriteria::MANA_COST:
|
||||||
|
return info->getCmc();
|
||||||
|
case DeckListModelGroupCriteria::COLOR:
|
||||||
|
return info->getColors() == "" ? "Colorless" : info->getColors();
|
||||||
|
default:
|
||||||
|
return "unknown";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void DeckListModel::rebuildTree()
|
void DeckListModel::rebuildTree()
|
||||||
{
|
{
|
||||||
beginResetModel();
|
beginResetModel();
|
||||||
|
|
@ -49,7 +67,7 @@ void DeckListModel::rebuildTree()
|
||||||
}
|
}
|
||||||
|
|
||||||
CardInfoPtr info = CardDatabaseManager::getInstance()->getCard(currentCard->getName());
|
CardInfoPtr info = CardDatabaseManager::getInstance()->getCard(currentCard->getName());
|
||||||
QString cardType = info ? info->getMainCardType() : "unknown";
|
QString cardType = getSortCriteriaForCard(info);
|
||||||
|
|
||||||
auto *cardTypeNode = dynamic_cast<InnerDecklistNode *>(node->findChild(cardType));
|
auto *cardTypeNode = dynamic_cast<InnerDecklistNode *>(node->findChild(cardType));
|
||||||
|
|
||||||
|
|
@ -467,6 +485,12 @@ void DeckListModel::sort(int column, Qt::SortOrder order)
|
||||||
emit layoutChanged();
|
emit layoutChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DeckListModel::setActiveGroupCriteria(DeckListModelGroupCriteria newCriteria)
|
||||||
|
{
|
||||||
|
activeGroupCriteria = newCriteria;
|
||||||
|
rebuildTree();
|
||||||
|
}
|
||||||
|
|
||||||
void DeckListModel::cleanList()
|
void DeckListModel::cleanList()
|
||||||
{
|
{
|
||||||
setDeckList(new DeckLoader);
|
setDeckList(new DeckLoader);
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,13 @@ class CardDatabase;
|
||||||
class QPrinter;
|
class QPrinter;
|
||||||
class QTextCursor;
|
class QTextCursor;
|
||||||
|
|
||||||
|
enum DeckListModelGroupCriteria
|
||||||
|
{
|
||||||
|
MAIN_TYPE,
|
||||||
|
MANA_COST,
|
||||||
|
COLOR
|
||||||
|
};
|
||||||
|
|
||||||
class DecklistModelCardNode : public AbstractDecklistCardNode
|
class DecklistModelCardNode : public AbstractDecklistCardNode
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
|
@ -85,6 +92,7 @@ signals:
|
||||||
public:
|
public:
|
||||||
explicit DeckListModel(QObject *parent = nullptr);
|
explicit DeckListModel(QObject *parent = nullptr);
|
||||||
~DeckListModel() override;
|
~DeckListModel() override;
|
||||||
|
QString getSortCriteriaForCard(CardInfoPtr info);
|
||||||
int rowCount(const QModelIndex &parent) const override;
|
int rowCount(const QModelIndex &parent) const override;
|
||||||
int columnCount(const QModelIndex & /*parent*/ = QModelIndex()) const override;
|
int columnCount(const QModelIndex & /*parent*/ = QModelIndex()) const override;
|
||||||
QVariant data(const QModelIndex &index, int role) const override;
|
QVariant data(const QModelIndex &index, int role) const override;
|
||||||
|
|
@ -113,10 +121,12 @@ public:
|
||||||
QList<CardInfoPtr> getCardsAsCardInfoPtrs() const;
|
QList<CardInfoPtr> getCardsAsCardInfoPtrs() const;
|
||||||
QList<CardInfoPtr> getCardsAsCardInfoPtrsForZone(QString zoneName) const;
|
QList<CardInfoPtr> getCardsAsCardInfoPtrsForZone(QString zoneName) const;
|
||||||
QList<QString> *getZones() const;
|
QList<QString> *getZones() const;
|
||||||
|
void setActiveGroupCriteria(DeckListModelGroupCriteria newCriteria);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DeckLoader *deckList;
|
DeckLoader *deckList;
|
||||||
InnerDecklistNode *root;
|
InnerDecklistNode *root;
|
||||||
|
DeckListModelGroupCriteria activeGroupCriteria = DeckListModelGroupCriteria::MAIN_TYPE;
|
||||||
int lastKnownColumn;
|
int lastKnownColumn;
|
||||||
Qt::SortOrder lastKnownOrder;
|
Qt::SortOrder lastKnownOrder;
|
||||||
InnerDecklistNode *createNodeIfNeeded(const QString &name, InnerDecklistNode *parent);
|
InnerDecklistNode *createNodeIfNeeded(const QString &name, InnerDecklistNode *parent);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue