mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-06-16 20:17:45 -07:00
Merge branch 'Cockatrice:master' into feat-5043
This commit is contained in:
commit
d8bc09ff90
27 changed files with 144 additions and 201 deletions
|
|
@ -6,12 +6,12 @@
|
|||
#include <QNetworkRequest>
|
||||
#include <QRegularExpression>
|
||||
#include <QUrlQuery>
|
||||
#include <libcockatrice/card/database/card_database_manager.h>
|
||||
#include <libcockatrice/deck_list/deck_list.h>
|
||||
#include <libcockatrice/deck_list/tree/deck_list_card_node.h>
|
||||
#include <version_string.h>
|
||||
|
||||
DeckStatsInterface::DeckStatsInterface(CardDatabase &_cardDatabase, QObject *parent)
|
||||
: QObject(parent), cardDatabase(_cardDatabase)
|
||||
DeckStatsInterface::DeckStatsInterface(QObject *parent) : QObject(parent)
|
||||
{
|
||||
manager = new QNetworkAccessManager(this);
|
||||
connect(manager, &QNetworkAccessManager::finished, this, &DeckStatsInterface::queryFinished);
|
||||
|
|
@ -70,8 +70,8 @@ void DeckStatsInterface::analyzeDeck(const DeckList &deck)
|
|||
|
||||
void DeckStatsInterface::copyDeckWithoutTokens(const DeckList &source, DeckList &destination)
|
||||
{
|
||||
auto copyIfNotAToken = [this, &destination](const auto node, const auto card) {
|
||||
CardInfoPtr dbCard = cardDatabase.query()->getCardInfo(card->getName());
|
||||
auto copyIfNotAToken = [&destination](const auto node, const auto card) {
|
||||
CardInfoPtr dbCard = CardDatabaseManager::query()->getCardInfo(card->getName());
|
||||
if (dbCard && !dbCard->getIsToken()) {
|
||||
DecklistCardNode *addedCard = destination.addCard(card->getName(), node->getName(), -1);
|
||||
addedCard->setNumber(card->getNumber());
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@
|
|||
#ifndef DECKSTATS_INTERFACE_H
|
||||
#define DECKSTATS_INTERFACE_H
|
||||
|
||||
#include <libcockatrice/card/database/card_database.h>
|
||||
#include <libcockatrice/deck_list/deck_list.h>
|
||||
|
||||
class QByteArray;
|
||||
|
|
@ -21,8 +20,6 @@ class DeckStatsInterface : public QObject
|
|||
private:
|
||||
QNetworkAccessManager *manager;
|
||||
|
||||
CardDatabase &cardDatabase;
|
||||
|
||||
/**
|
||||
* Deckstats doesn't recognize token cards, and instead tries to find the
|
||||
* closest non-token card instead. So we construct a new deck which has no
|
||||
|
|
@ -35,7 +32,7 @@ private slots:
|
|||
void getAnalyzeRequestData(const DeckList &deck, QByteArray &data);
|
||||
|
||||
public:
|
||||
explicit DeckStatsInterface(CardDatabase &_cardDatabase, QObject *parent = nullptr);
|
||||
explicit DeckStatsInterface(QObject *parent = nullptr);
|
||||
void analyzeDeck(const DeckList &deck);
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -6,12 +6,12 @@
|
|||
#include <QNetworkRequest>
|
||||
#include <QRegularExpression>
|
||||
#include <QUrlQuery>
|
||||
#include <libcockatrice/card/database/card_database_manager.h>
|
||||
#include <libcockatrice/deck_list/deck_list.h>
|
||||
#include <libcockatrice/deck_list/tree/deck_list_card_node.h>
|
||||
#include <version_string.h>
|
||||
|
||||
TappedOutInterface::TappedOutInterface(CardDatabase &_cardDatabase, QObject *parent)
|
||||
: QObject(parent), cardDatabase(_cardDatabase)
|
||||
TappedOutInterface::TappedOutInterface(QObject *parent) : QObject(parent)
|
||||
{
|
||||
manager = new QNetworkAccessManager(this);
|
||||
connect(manager, &QNetworkAccessManager::finished, this, &TappedOutInterface::queryFinished);
|
||||
|
|
@ -97,8 +97,8 @@ void TappedOutInterface::analyzeDeck(const DeckList &deck)
|
|||
|
||||
void TappedOutInterface::copyDeckSplitMainAndSide(const DeckList &source, DeckList &mainboard, DeckList &sideboard)
|
||||
{
|
||||
auto copyMainOrSide = [this, &mainboard, &sideboard](const auto node, const auto card) {
|
||||
CardInfoPtr dbCard = cardDatabase.query()->getCardInfo(card->getName());
|
||||
auto copyMainOrSide = [&mainboard, &sideboard](const auto node, const auto card) {
|
||||
CardInfoPtr dbCard = CardDatabaseManager::query()->getCardInfo(card->getName());
|
||||
if (!dbCard || dbCard->getIsToken()) {
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@
|
|||
#ifndef TAPPEDOUT_INTERFACE_H
|
||||
#define TAPPEDOUT_INTERFACE_H
|
||||
|
||||
#include <libcockatrice/card/database/card_database.h>
|
||||
#include <libcockatrice/deck_list/deck_list.h>
|
||||
#include <QLoggingCategory>
|
||||
#include <QObject>
|
||||
|
||||
inline Q_LOGGING_CATEGORY(TappedOutInterfaceLog, "tapped_out_interface");
|
||||
|
||||
|
|
@ -29,14 +29,13 @@ class TappedOutInterface : public QObject
|
|||
private:
|
||||
QNetworkAccessManager *manager;
|
||||
|
||||
CardDatabase &cardDatabase;
|
||||
void copyDeckSplitMainAndSide(const DeckList &source, DeckList &mainboard, DeckList &sideboard);
|
||||
private slots:
|
||||
void queryFinished(QNetworkReply *reply);
|
||||
void getAnalyzeRequestData(const DeckList &deck, QByteArray &data);
|
||||
|
||||
public:
|
||||
explicit TappedOutInterface(CardDatabase &_cardDatabase, QObject *parent = nullptr);
|
||||
explicit TappedOutInterface(QObject *parent = nullptr);
|
||||
void analyzeDeck(const DeckList &deck);
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -58,16 +58,6 @@ void CardGroupDisplayWidget::mousePressEvent(QMouseEvent *event)
|
|||
}
|
||||
}
|
||||
|
||||
void CardGroupDisplayWidget::onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card)
|
||||
{
|
||||
emit cardClicked(event, card);
|
||||
}
|
||||
|
||||
void CardGroupDisplayWidget::onHover(const ExactCard &card)
|
||||
{
|
||||
emit cardHovered(card);
|
||||
}
|
||||
|
||||
void CardGroupDisplayWidget::onSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
|
||||
{
|
||||
auto proxyModel = qobject_cast<QAbstractProxyModel *>(selectionModel->model());
|
||||
|
|
@ -154,8 +144,8 @@ QWidget *CardGroupDisplayWidget::constructWidgetForIndex(QPersistentModelIndex i
|
|||
widget->setScaleFactor(cardSizeWidget->getSlider()->value());
|
||||
widget->setCard(CardDatabaseManager::query()->getCard({cardName, cardProviderId}));
|
||||
|
||||
connect(widget, &CardInfoPictureWithTextOverlayWidget::imageClicked, this, &CardGroupDisplayWidget::onClick);
|
||||
connect(widget, &CardInfoPictureWithTextOverlayWidget::hoveredOnCard, this, &CardGroupDisplayWidget::onHover);
|
||||
connect(widget, &CardInfoPictureWithTextOverlayWidget::cardClicked, this, &CardGroupDisplayWidget::cardClicked);
|
||||
connect(widget, &CardInfoPictureWithTextOverlayWidget::hoveredOnCard, this, &CardGroupDisplayWidget::cardHovered);
|
||||
connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, widget, &CardInfoPictureWidget::setScaleFactor);
|
||||
|
||||
indexToWidgetMap[index].append(widget);
|
||||
|
|
|
|||
|
|
@ -48,8 +48,6 @@ public:
|
|||
|
||||
public slots:
|
||||
void mousePressEvent(QMouseEvent *event) override;
|
||||
void onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card);
|
||||
void onHover(const ExactCard &card);
|
||||
virtual QWidget *constructWidgetForIndex(QPersistentModelIndex index);
|
||||
virtual void updateCardDisplays();
|
||||
virtual void onCardAddition(const QModelIndex &parent, int first, int last);
|
||||
|
|
@ -59,7 +57,7 @@ public slots:
|
|||
void resizeEvent(QResizeEvent *event) override;
|
||||
|
||||
signals:
|
||||
void cardClicked(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card);
|
||||
void cardClicked(QMouseEvent *event, const ExactCard &card);
|
||||
void cardHovered(const ExactCard &card);
|
||||
void cleanupRequested(CardGroupDisplayWidget *cardGroupDisplayWidget);
|
||||
|
||||
|
|
|
|||
|
|
@ -345,7 +345,7 @@ void CardInfoPictureWidget::mousePressEvent(QMouseEvent *event)
|
|||
createRightClickMenu()->popup(QCursor::pos());
|
||||
}
|
||||
|
||||
emit cardClicked(event);
|
||||
emit cardClicked(event, exactCard);
|
||||
}
|
||||
|
||||
void CardInfoPictureWidget::hideEvent(QHideEvent *event)
|
||||
|
|
@ -431,13 +431,13 @@ QMenu *CardInfoPictureWidget::createAddToOpenDeckMenu()
|
|||
QAction *addCard = addCardMenu->addAction(tr("Mainboard"));
|
||||
connect(addCard, &QAction::triggered, this, [this, deckEditorTab] {
|
||||
deckEditorTab->updateCard(exactCard);
|
||||
deckEditorTab->actAddCard(exactCard);
|
||||
deckEditorTab->addCard(exactCard, DECK_ZONE_MAIN);
|
||||
});
|
||||
|
||||
QAction *addCardSideboard = addCardMenu->addAction(tr("Sideboard"));
|
||||
connect(addCardSideboard, &QAction::triggered, this, [this, deckEditorTab] {
|
||||
deckEditorTab->updateCard(exactCard);
|
||||
deckEditorTab->actAddCardToSideboard(exactCard);
|
||||
deckEditorTab->addCard(exactCard, DECK_ZONE_SIDE);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ signals:
|
|||
void hoveredOnCard(const ExactCard &hoveredCard);
|
||||
void cardScaleFactorChanged(int _scale);
|
||||
void cardChanged(const ExactCard &card);
|
||||
void cardClicked(QMouseEvent *event);
|
||||
void cardClicked(QMouseEvent *event, const ExactCard &card);
|
||||
|
||||
protected:
|
||||
void resizeEvent(QResizeEvent *event) override;
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ void CardInfoPictureWithTextOverlayWidget::setHighlighted(bool _highlighted)
|
|||
|
||||
void CardInfoPictureWithTextOverlayWidget::mousePressEvent(QMouseEvent *event)
|
||||
{
|
||||
emit imageClicked(event, this);
|
||||
emit cardClicked(event, getCard());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -35,8 +35,6 @@ public:
|
|||
void setHighlighted(bool _highlighted);
|
||||
|
||||
[[nodiscard]] QSize sizeHint() const override;
|
||||
signals:
|
||||
void imageClicked(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance);
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *event) override;
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ DeckCardZoneDisplayWidget::DeckCardZoneDisplayWidget(QWidget *parent,
|
|||
// User Interaction
|
||||
// =====================================================================================================================
|
||||
|
||||
void DeckCardZoneDisplayWidget::onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card)
|
||||
void DeckCardZoneDisplayWidget::onClick(QMouseEvent *event, const ExactCard &card)
|
||||
{
|
||||
emit cardClicked(event, card, zoneName);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ public:
|
|||
void addCardsToOverlapWidget();
|
||||
|
||||
public slots:
|
||||
void onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card);
|
||||
void onClick(QMouseEvent *event, const ExactCard &card);
|
||||
void onHover(const ExactCard &card);
|
||||
void cleanupInvalidCardGroup(CardGroupDisplayWidget *displayWidget);
|
||||
void constructAppropriateWidget(QPersistentModelIndex index);
|
||||
|
|
@ -55,7 +55,7 @@ public slots:
|
|||
void onCategoryRemoval(const QModelIndex &parent, int first, int last);
|
||||
|
||||
signals:
|
||||
void cardClicked(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card, QString zoneName);
|
||||
void cardClicked(QMouseEvent *event, const ExactCard &card, const QString &zoneName);
|
||||
void cardHovered(const ExactCard &card);
|
||||
void activeSortCriteriaChanged(QStringList activeSortCriteria);
|
||||
void requestCleanup(DeckCardZoneDisplayWidget *displayWidget);
|
||||
|
|
|
|||
|
|
@ -29,14 +29,16 @@ void DeckEditorCardDatabaseDockWidget::createDatabaseDisplayDock(AbstractTabDeck
|
|||
// connect signals
|
||||
connect(databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::cardChanged, deckEditor,
|
||||
&AbstractTabDeckEditor::updateCard);
|
||||
connect(databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::addCardToMainDeck, deckEditor,
|
||||
&AbstractTabDeckEditor::actAddCard);
|
||||
connect(databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::addCardToSideboard, deckEditor,
|
||||
&AbstractTabDeckEditor::actAddCardToSideboard);
|
||||
connect(databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::decrementCardFromMainDeck, deckEditor,
|
||||
&AbstractTabDeckEditor::actDecrementCard);
|
||||
connect(databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::decrementCardFromSideboard, deckEditor,
|
||||
&AbstractTabDeckEditor::actDecrementCardFromSideboard);
|
||||
connect(databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::cardAdded, deckEditor,
|
||||
&AbstractTabDeckEditor::addCard);
|
||||
connect(databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::cardDecremented, deckEditor,
|
||||
&AbstractTabDeckEditor::decrementCard);
|
||||
connect(databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::edhrecRequested, deckEditor,
|
||||
&AbstractTabDeckEditor::openEdhrecTab);
|
||||
connect(databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::printingSelectorRequested, deckEditor,
|
||||
&AbstractTabDeckEditor::showPrintingSelector);
|
||||
connect(databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::cardInfoRequested, deckEditor,
|
||||
&AbstractTabDeckEditor::updateCardInfo);
|
||||
}
|
||||
|
||||
CardDatabase *DeckEditorCardDatabaseDockWidget::getDatabase() const
|
||||
|
|
|
|||
|
|
@ -158,23 +158,23 @@ void DeckEditorDatabaseDisplayWidget::actAddCard()
|
|||
void DeckEditorDatabaseDisplayWidget::actAddCardToMainDeck()
|
||||
{
|
||||
highlightAllSearchEdit();
|
||||
emit addCardToMainDeck(currentCard());
|
||||
emit cardAdded(currentCard(), DECK_ZONE_MAIN);
|
||||
}
|
||||
|
||||
void DeckEditorDatabaseDisplayWidget::actAddCardToSideboard()
|
||||
{
|
||||
highlightAllSearchEdit();
|
||||
emit addCardToSideboard(currentCard());
|
||||
emit cardAdded(currentCard(), DECK_ZONE_SIDE);
|
||||
}
|
||||
|
||||
void DeckEditorDatabaseDisplayWidget::actDecrementCardFromMainDeck()
|
||||
{
|
||||
emit decrementCardFromMainDeck(currentCard());
|
||||
emit cardDecremented(currentCard(), DECK_ZONE_MAIN);
|
||||
}
|
||||
|
||||
void DeckEditorDatabaseDisplayWidget::actDecrementCardFromSideboard()
|
||||
{
|
||||
emit decrementCardFromSideboard(currentCard());
|
||||
emit cardDecremented(currentCard(), DECK_ZONE_SIDE);
|
||||
}
|
||||
|
||||
ExactCard DeckEditorDatabaseDisplayWidget::currentCard() const
|
||||
|
|
@ -200,18 +200,18 @@ void DeckEditorDatabaseDisplayWidget::databaseCustomMenu(QPoint point)
|
|||
addToDeck = menu.addAction(tr("Add to Deck"));
|
||||
addToSideboard = menu.addAction(tr("Add to Sideboard"));
|
||||
selectPrinting = menu.addAction(tr("Select Printing"));
|
||||
connect(selectPrinting, &QAction::triggered, this, [this, card] { deckEditor->showPrintingSelector(); });
|
||||
connect(selectPrinting, &QAction::triggered, this, &DeckEditorDatabaseDisplayWidget::printingSelectorRequested);
|
||||
if (canBeCommander(card.getInfo())) {
|
||||
edhRecCommander = menu.addAction(tr("Show on EDHRec (Commander)"));
|
||||
connect(edhRecCommander, &QAction::triggered, this,
|
||||
[this, card] { deckEditor->getTabSupervisor()->addEdhrecTab(card.getCardPtr(), true); });
|
||||
[this, card] { emit edhrecRequested(card.getCardPtr(), true); });
|
||||
}
|
||||
edhRecCard = menu.addAction(tr("Show on EDHRec (Card)"));
|
||||
|
||||
connect(addToDeck, &QAction::triggered, this, &DeckEditorDatabaseDisplayWidget::actAddCardToMainDeck);
|
||||
connect(addToSideboard, &QAction::triggered, this, &DeckEditorDatabaseDisplayWidget::actAddCardToSideboard);
|
||||
connect(edhRecCard, &QAction::triggered, this,
|
||||
[this, card] { deckEditor->getTabSupervisor()->addEdhrecTab(card.getCardPtr()); });
|
||||
[this, card] { emit edhrecRequested(card.getCardPtr(), false); });
|
||||
|
||||
// filling out the related cards submenu
|
||||
auto *relatedMenu = new QMenu(tr("Show Related cards"));
|
||||
|
|
@ -223,9 +223,10 @@ void DeckEditorDatabaseDisplayWidget::databaseCustomMenu(QPoint point)
|
|||
for (const CardRelation *rel : relatedCards) {
|
||||
const QString &relatedCardName = rel->getName();
|
||||
QAction *relatedCard = relatedMenu->addAction(relatedCardName);
|
||||
connect(
|
||||
relatedCard, &QAction::triggered, deckEditor->cardInfoDockWidget->cardInfo,
|
||||
[this, relatedCardName] { deckEditor->cardInfoDockWidget->cardInfo->setCard(relatedCardName); });
|
||||
connect(relatedCard, &QAction::triggered, this, [this, relatedCardName] {
|
||||
ExactCard card = CardDatabaseManager::query()->guessCard({relatedCardName});
|
||||
emit cardInfoRequested(card);
|
||||
});
|
||||
}
|
||||
}
|
||||
menu.exec(databaseView->mapToGlobal(point));
|
||||
|
|
|
|||
|
|
@ -48,12 +48,14 @@ public slots:
|
|||
void copyDatabaseCellContents();
|
||||
|
||||
signals:
|
||||
void addCardToMainDeck(const ExactCard &card);
|
||||
void addCardToSideboard(const ExactCard &card);
|
||||
void decrementCardFromMainDeck(const ExactCard &card);
|
||||
void decrementCardFromSideboard(const ExactCard &card);
|
||||
void cardAdded(const ExactCard &card, const QString &zoneName);
|
||||
void cardDecremented(const ExactCard &card, const QString &zoneName);
|
||||
void cardChanged(const ExactCard &_card);
|
||||
|
||||
void edhrecRequested(const CardInfoPtr &cardInfo, bool isCommander);
|
||||
void printingSelectorRequested();
|
||||
void cardInfoRequested(const ExactCard &card);
|
||||
|
||||
private:
|
||||
KeySignals searchKeySignals;
|
||||
QTreeView *databaseView;
|
||||
|
|
|
|||
|
|
@ -105,16 +105,17 @@ void AbstractTabDeckEditor::registerDockWidget(QMenu *_viewMenu, QDockWidget *wi
|
|||
dockToActions.insert(widget, {menu, aVisible, aFloating, defaultSize});
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Updates the card info dock and printing selector.
|
||||
* @param card The card to display.
|
||||
*/
|
||||
void AbstractTabDeckEditor::updateCard(const ExactCard &card)
|
||||
{
|
||||
cardInfoDockWidget->updateCard(card);
|
||||
printingSelectorDockWidget->printingSelector->setCard(card.getCardPtr());
|
||||
}
|
||||
|
||||
void AbstractTabDeckEditor::updateCardInfo(const ExactCard &card)
|
||||
{
|
||||
cardInfoDockWidget->updateCard(card);
|
||||
}
|
||||
|
||||
/** @brief Placeholder: called when the deck changes. */
|
||||
void AbstractTabDeckEditor::onDeckChanged()
|
||||
{
|
||||
|
|
@ -139,32 +140,6 @@ void AbstractTabDeckEditor::decrementCard(const ExactCard &card, const QString &
|
|||
deckStateManager->decrementCard(card, zoneName);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Adds a card to the main deck or sideboard depending on Ctrl key.
|
||||
*/
|
||||
void AbstractTabDeckEditor::actAddCard(const ExactCard &card)
|
||||
{
|
||||
addCard(card, DECK_ZONE_MAIN);
|
||||
}
|
||||
|
||||
/** @brief Adds a card to the sideboard explicitly. */
|
||||
void AbstractTabDeckEditor::actAddCardToSideboard(const ExactCard &card)
|
||||
{
|
||||
addCard(card, DECK_ZONE_SIDE);
|
||||
}
|
||||
|
||||
/** @brief Decrements a card from the main deck. */
|
||||
void AbstractTabDeckEditor::actDecrementCard(const ExactCard &card)
|
||||
{
|
||||
decrementCard(card, DECK_ZONE_MAIN);
|
||||
}
|
||||
|
||||
/** @brief Decrements a card from the sideboard. */
|
||||
void AbstractTabDeckEditor::actDecrementCardFromSideboard(const ExactCard &card)
|
||||
{
|
||||
decrementCard(card, DECK_ZONE_SIDE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Opens a deck in this tab.
|
||||
* @param deck The deck
|
||||
|
|
@ -564,14 +539,14 @@ void AbstractTabDeckEditor::actExportDeckDecklistXyz()
|
|||
/** @brief Analyzes the deck using DeckStats. */
|
||||
void AbstractTabDeckEditor::actAnalyzeDeckDeckstats()
|
||||
{
|
||||
auto *interface = new DeckStatsInterface(*cardDatabaseDockWidget->getDatabase(), this);
|
||||
auto *interface = new DeckStatsInterface(this);
|
||||
interface->analyzeDeck(deckStateManager->getDeckList());
|
||||
}
|
||||
|
||||
/** @brief Analyzes the deck using TappedOut. */
|
||||
void AbstractTabDeckEditor::actAnalyzeDeckTappedout()
|
||||
{
|
||||
auto *interface = new TappedOutInterface(*cardDatabaseDockWidget->getDatabase(), this);
|
||||
auto *interface = new TappedOutInterface(this);
|
||||
interface->analyzeDeck(deckStateManager->getDeckList());
|
||||
}
|
||||
|
||||
|
|
@ -614,3 +589,15 @@ bool AbstractTabDeckEditor::closeRequest()
|
|||
}
|
||||
return close();
|
||||
}
|
||||
|
||||
void AbstractTabDeckEditor::showPrintingSelector()
|
||||
{
|
||||
printingSelectorDockWidget->printingSelector->setCard(cardInfoDockWidget->cardInfo->getCard().getCardPtr());
|
||||
printingSelectorDockWidget->printingSelector->updateDisplay();
|
||||
printingSelectorDockWidget->setVisible(true);
|
||||
}
|
||||
|
||||
void AbstractTabDeckEditor::openEdhrecTab(const CardInfoPtr &info, bool isCommander)
|
||||
{
|
||||
getTabSupervisor()->addEdhrecTab(info, isCommander);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -77,8 +77,8 @@ class QAction;
|
|||
*
|
||||
* **Key Methods:**
|
||||
*
|
||||
* - actAddCard(const ExactCard &card) — Adds a card to the deck.
|
||||
* - actDecrementCard(const ExactCard &card) — Removes a single instance of a card from the deck.
|
||||
* - addCard(const ExactCard &card, const QString &zoneName) — Adds a card to the deck.
|
||||
* - decrementCard(const ExactCard &card, const QString &zoneName) — Removes a single instance of a card from the deck.
|
||||
* - actRemoveCard() — Removes the currently selected card from the deck.
|
||||
* - actSaveDeckAs() — Performs a "Save As" action for the deck.
|
||||
* - updateCard(const ExactCard &card) — Updates the currently displayed card info in the dock.
|
||||
|
|
@ -140,11 +140,18 @@ public slots:
|
|||
/** @brief Called when the deck is modified. */
|
||||
virtual void onDeckModified();
|
||||
|
||||
/** @brief Updates the card info panel.
|
||||
* @param card The card to display.
|
||||
/**
|
||||
* @brief Updates the card info dock and printing selector.
|
||||
* @param card The card to display.
|
||||
*/
|
||||
void updateCard(const ExactCard &card);
|
||||
|
||||
/**
|
||||
* @brief Updates just the card info dock
|
||||
* @param card The card to display
|
||||
*/
|
||||
void updateCardInfo(const ExactCard &card);
|
||||
|
||||
/**
|
||||
* @brief Adds a card to the given zone
|
||||
* @param card Card to add.
|
||||
|
|
@ -163,18 +170,6 @@ public slots:
|
|||
*/
|
||||
void decrementCard(const ExactCard &card, const QString &zoneName);
|
||||
|
||||
/** @brief Adds a card to the main deck or sideboard based on Ctrl key. */
|
||||
void actAddCard(const ExactCard &card);
|
||||
|
||||
/** @brief Adds a card to the sideboard explicitly. */
|
||||
void actAddCardToSideboard(const ExactCard &card);
|
||||
|
||||
/** @brief Decrements a card from the main deck. */
|
||||
void actDecrementCard(const ExactCard &card);
|
||||
|
||||
/** @brief Decrements a card from the sideboard. */
|
||||
void actDecrementCardFromSideboard(const ExactCard &card);
|
||||
|
||||
/** @brief Opens a recently opened deck file. */
|
||||
void actOpenRecent(const QString &fileName);
|
||||
|
||||
|
|
@ -184,8 +179,15 @@ public slots:
|
|||
/** @brief Requests closing the tab. */
|
||||
bool closeRequest() override;
|
||||
|
||||
/** @brief Shows the printing selector dock. Pure virtual. */
|
||||
virtual void showPrintingSelector() = 0;
|
||||
/** @brief Shows the printing selector dock and updates it with the current card. */
|
||||
void showPrintingSelector();
|
||||
|
||||
/**
|
||||
* @brief Opens an EDHRec tab for the given card
|
||||
* @param info The card
|
||||
* @param isCommander The type of search
|
||||
*/
|
||||
void openEdhrecTab(const CardInfoPtr &info, bool isCommander);
|
||||
|
||||
signals:
|
||||
/** @brief Emitted when a deck should be opened in a new editor tab. */
|
||||
|
|
|
|||
|
|
@ -120,16 +120,6 @@ void TabDeckEditor::refreshShortcuts()
|
|||
aResetLayout->setShortcuts(shortcuts.getShortcut("TabDeckEditor/aResetLayout"));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Displays the printing selector dock with the current card.
|
||||
*/
|
||||
void TabDeckEditor::showPrintingSelector()
|
||||
{
|
||||
printingSelectorDockWidget->printingSelector->setCard(cardInfoDockWidget->cardInfo->getCard().getCardPtr());
|
||||
printingSelectorDockWidget->printingSelector->updateDisplay();
|
||||
printingSelectorDockWidget->setVisible(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Loads deck editor layout from settings or resets to default.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -83,10 +83,6 @@ public:
|
|||
|
||||
/** @brief Creates menus for deck editing and view options. */
|
||||
void createMenus() override;
|
||||
|
||||
public slots:
|
||||
/** @brief Shows the printing selector dock and updates it with current card. */
|
||||
void showPrintingSelector() override;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ void TabDeckEditorVisual::createCentralFrame()
|
|||
connect(tabContainer, &TabDeckEditorVisualTabWidget::cardClicked, this,
|
||||
&TabDeckEditorVisual::processMainboardCardClick);
|
||||
connect(tabContainer, &TabDeckEditorVisualTabWidget::cardClickedDatabaseDisplay, this,
|
||||
&TabDeckEditorVisual::processCardClickDatabaseDisplay);
|
||||
&TabDeckEditorVisual::processDatabaseCardClick);
|
||||
|
||||
centralFrame->addWidget(tabContainer);
|
||||
setCentralWidget(centralWidget);
|
||||
|
|
@ -143,12 +143,10 @@ void TabDeckEditorVisual::changeModelIndexToCard(const ExactCard &activeCard)
|
|||
}
|
||||
}
|
||||
|
||||
void TabDeckEditorVisual::processMainboardCardClick(QMouseEvent *event,
|
||||
CardInfoPictureWithTextOverlayWidget *instance,
|
||||
void TabDeckEditorVisual::processMainboardCardClick(const QMouseEvent *event,
|
||||
const ExactCard &card,
|
||||
const QString &zoneName)
|
||||
{
|
||||
auto card = instance->getCard();
|
||||
|
||||
// Get the model index for the card
|
||||
QModelIndex idx = deckStateManager->getModel()->findCard(card.getName(), zoneName);
|
||||
if (!idx.isValid()) {
|
||||
|
|
@ -168,22 +166,14 @@ void TabDeckEditorVisual::processMainboardCardClick(QMouseEvent *event,
|
|||
|
||||
// Alt + Right-click = decrement
|
||||
if (event->button() == Qt::RightButton && event->modifiers().testFlag(Qt::AltModifier)) {
|
||||
if (zoneName == DECK_ZONE_MAIN) {
|
||||
actDecrementCard(card);
|
||||
} else {
|
||||
actDecrementCardFromSideboard(card);
|
||||
}
|
||||
decrementCard(card, zoneName);
|
||||
// Keep selection intact.
|
||||
return;
|
||||
}
|
||||
|
||||
// Alt + Left click = increment
|
||||
if (event->button() == Qt::LeftButton && event->modifiers().testFlag(Qt::AltModifier)) {
|
||||
if (zoneName == DECK_ZONE_MAIN) {
|
||||
actAddCard(card);
|
||||
} else {
|
||||
actAddCardToSideboard(card);
|
||||
}
|
||||
addCard(card, zoneName);
|
||||
// Keep selection intact.
|
||||
return;
|
||||
}
|
||||
|
|
@ -219,17 +209,16 @@ void TabDeckEditorVisual::processMainboardCardClick(QMouseEvent *event,
|
|||
}
|
||||
|
||||
/** @brief Handles clicks on cards in the database display. */
|
||||
void TabDeckEditorVisual::processCardClickDatabaseDisplay(QMouseEvent *event,
|
||||
CardInfoPictureWithTextOverlayWidget *instance)
|
||||
void TabDeckEditorVisual::processDatabaseCardClick(const QMouseEvent *event, const ExactCard &card)
|
||||
{
|
||||
if (event->button() == Qt::LeftButton) {
|
||||
if (QApplication::keyboardModifiers() & Qt::ControlModifier) {
|
||||
actAddCardToSideboard(instance->getCard());
|
||||
addCard(card, DECK_ZONE_SIDE);
|
||||
} else {
|
||||
actAddCard(instance->getCard());
|
||||
addCard(card, DECK_ZONE_MAIN);
|
||||
}
|
||||
} else if (event->button() == Qt::RightButton) {
|
||||
actDecrementCard(instance->getCard());
|
||||
decrementCard(card, DECK_ZONE_MAIN);
|
||||
} else if (event->button() == Qt::MiddleButton) {
|
||||
deckDockWidget->actRemoveCard();
|
||||
}
|
||||
|
|
@ -244,14 +233,6 @@ bool TabDeckEditorVisual::actSaveDeckAs()
|
|||
return result;
|
||||
}
|
||||
|
||||
/** @brief Shows the printing selector dock and updates it with the current card. */
|
||||
void TabDeckEditorVisual::showPrintingSelector()
|
||||
{
|
||||
printingSelectorDockWidget->printingSelector->setCard(cardInfoDockWidget->cardInfo->getCard().getCardPtr());
|
||||
printingSelectorDockWidget->printingSelector->updateDisplay();
|
||||
printingSelectorDockWidget->setVisible(true);
|
||||
}
|
||||
|
||||
/** @brief Refreshes keyboard shortcuts for this tab from settings. */
|
||||
void TabDeckEditorVisual::refreshShortcuts()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@
|
|||
* - changeModelIndexAndCardInfo(const ExactCard &card) — Updates deck model selection and card info.
|
||||
* - changeModelIndexToCard(const ExactCard &card) — Selects the card in the deck view.
|
||||
* - processMainboardCardClick(QMouseEvent *event, ...) — Handles clicks on mainboard cards.
|
||||
* - processCardClickDatabaseDisplay(QMouseEvent *event, ...) — Handles clicks on database cards.
|
||||
* - processDatabaseCardClick(QMouseEvent *event, ...) — Handles clicks on database cards.
|
||||
* - actSaveDeckAs() — Overrides save action with temporary UI adjustments.
|
||||
* - showPrintingSelector() — Opens the printing selector dock for the current card.
|
||||
* - freeDocksSize() — Frees constraints on dock widget sizes.
|
||||
|
|
@ -144,27 +144,20 @@ public slots:
|
|||
*/
|
||||
void onDeckChanged() override;
|
||||
|
||||
/**
|
||||
* @brief Show the printing selector dock for the currently active card.
|
||||
*/
|
||||
void showPrintingSelector() override;
|
||||
|
||||
/**
|
||||
* @brief Handle card clicks in the mainboard visual deck.
|
||||
* @param event Mouse event triggering the action.
|
||||
* @param instance Widget representing the clicked card.
|
||||
* @param card The clicked card.
|
||||
* @param zoneName Deck zone of the card.
|
||||
*/
|
||||
void processMainboardCardClick(QMouseEvent *event,
|
||||
CardInfoPictureWithTextOverlayWidget *instance,
|
||||
const QString &zoneName);
|
||||
void processMainboardCardClick(const QMouseEvent *event, const ExactCard &card, const QString &zoneName);
|
||||
|
||||
/**
|
||||
* @brief Handle card clicks in the database visual display.
|
||||
* @param event Mouse event triggering the action.
|
||||
* @param instance Widget representing the clicked card.
|
||||
* @param card The clicked card.
|
||||
*/
|
||||
void processCardClickDatabaseDisplay(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance);
|
||||
void processDatabaseCardClick(const QMouseEvent *event, const ExactCard &card);
|
||||
|
||||
/**
|
||||
* @brief Save the deck under a new name.
|
||||
|
|
|
|||
|
|
@ -34,8 +34,8 @@ TabDeckEditorVisualTabWidget::TabDeckEditorVisualTabWidget(QWidget *parent,
|
|||
&TabDeckEditorVisualTabWidget::onCardChanged);
|
||||
connect(visualDeckView, &VisualDeckEditorWidget::cardClicked, this,
|
||||
&TabDeckEditorVisualTabWidget::onCardClickedDeckEditor);
|
||||
connect(visualDeckView, &VisualDeckEditorWidget::cardAdditionRequested, deckEditor,
|
||||
&AbstractTabDeckEditor::actAddCard);
|
||||
connect(visualDeckView, &VisualDeckEditorWidget::cardAdditionRequested, this,
|
||||
&TabDeckEditorVisualTabWidget::actAddCard);
|
||||
|
||||
visualDatabaseDisplay =
|
||||
new VisualDatabaseDisplayWidget(this, deckEditor, _cardDatabaseModel, _cardDatabaseDisplayModel);
|
||||
|
|
@ -82,25 +82,24 @@ void TabDeckEditorVisualTabWidget::onCardChangedDatabaseDisplay(const ExactCard
|
|||
/**
|
||||
* @brief Emits the cardClicked signal when a card is clicked in the visual deck view.
|
||||
* @param event The mouse event.
|
||||
* @param instance The widget instance of the clicked card.
|
||||
* @param card The clicked card.
|
||||
* @param zoneName The zone of the deck where the card is located.
|
||||
*/
|
||||
void TabDeckEditorVisualTabWidget::onCardClickedDeckEditor(QMouseEvent *event,
|
||||
CardInfoPictureWithTextOverlayWidget *instance,
|
||||
QString zoneName)
|
||||
const ExactCard &card,
|
||||
const QString &zoneName)
|
||||
{
|
||||
emit cardClicked(event, instance, zoneName);
|
||||
emit cardClicked(event, card, zoneName);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Emits the cardClickedDatabaseDisplay signal when a card is clicked in the database display.
|
||||
* @param event The mouse event.
|
||||
* @param instance The widget instance of the clicked card.
|
||||
* @param card The clicked card.
|
||||
*/
|
||||
void TabDeckEditorVisualTabWidget::onCardClickedDatabaseDisplay(QMouseEvent *event,
|
||||
CardInfoPictureWithTextOverlayWidget *instance)
|
||||
void TabDeckEditorVisualTabWidget::onCardClickedDatabaseDisplay(QMouseEvent *event, const ExactCard &card)
|
||||
{
|
||||
emit cardClickedDatabaseDisplay(event, instance);
|
||||
emit cardClickedDatabaseDisplay(event, card);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -166,3 +165,15 @@ void TabDeckEditorVisualTabWidget::handleTabClose(int index)
|
|||
this->removeTab(index);
|
||||
delete tab;
|
||||
}
|
||||
|
||||
void TabDeckEditorVisualTabWidget::actAddCard(const ExactCard &card)
|
||||
{
|
||||
QString zoneName;
|
||||
if (QApplication::keyboardModifiers() & Qt::ControlModifier) {
|
||||
zoneName = DECK_ZONE_SIDE;
|
||||
} else {
|
||||
zoneName = DECK_ZONE_MAIN;
|
||||
}
|
||||
|
||||
deckEditor->addCard(card, zoneName);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -101,23 +101,23 @@ public slots:
|
|||
/**
|
||||
* @brief Emitted when a card is clicked in the deck view.
|
||||
* @param event Mouse event.
|
||||
* @param instance Widget representing the clicked card.
|
||||
* @param card The clicked card.
|
||||
* @param zoneName Deck zone of the card.
|
||||
*/
|
||||
void onCardClickedDeckEditor(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance, QString zoneName);
|
||||
void onCardClickedDeckEditor(QMouseEvent *event, const ExactCard &card, const QString &zoneName);
|
||||
|
||||
/**
|
||||
* @brief Emitted when a card is clicked in the database display.
|
||||
* @param event Mouse event.
|
||||
* @param instance Widget representing the clicked card.
|
||||
* @param card The clicked card.
|
||||
*/
|
||||
void onCardClickedDatabaseDisplay(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance);
|
||||
void onCardClickedDatabaseDisplay(QMouseEvent *event, const ExactCard &card);
|
||||
|
||||
signals:
|
||||
void cardChanged(const ExactCard &activeCard);
|
||||
void cardChangedDatabaseDisplay(const ExactCard &activeCard);
|
||||
void cardClicked(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance, QString zoneName);
|
||||
void cardClickedDatabaseDisplay(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance);
|
||||
void cardClicked(QMouseEvent *event, const ExactCard &card, const QString &zoneName);
|
||||
void cardClickedDatabaseDisplay(QMouseEvent *event, const ExactCard &card);
|
||||
|
||||
private:
|
||||
QVBoxLayout *layout; ///< Layout for tabs and controls.
|
||||
|
|
@ -132,6 +132,12 @@ private slots:
|
|||
* @param index Index of the tab to close.
|
||||
*/
|
||||
void handleTabClose(int index);
|
||||
|
||||
/**
|
||||
* @brief Adds card to maindeck or side depending on whether ctrl is held
|
||||
* @param card
|
||||
*/
|
||||
void actAddCard(const ExactCard &card);
|
||||
};
|
||||
|
||||
#endif // TAB_DECK_EDITOR_VISUAL_TAB_WIDGET_H
|
||||
|
|
@ -97,9 +97,7 @@ VisualDatabaseDisplayWidget::VisualDatabaseDisplayWidget(QWidget *parent,
|
|||
&DeckEditorDatabaseDisplayWidget::copyDatabaseCellContents);
|
||||
connect(help, &QAction::triggered, this, [this] { createSearchSyntaxHelpWindow(searchEdit); });
|
||||
|
||||
connect(databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::addCardToMainDeck, this,
|
||||
&VisualDatabaseDisplayWidget::highlightAllSearchEdit);
|
||||
connect(databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::addCardToSideboard, this,
|
||||
connect(databaseDisplayWidget, &DeckEditorDatabaseDisplayWidget::cardAdded, this,
|
||||
&VisualDatabaseDisplayWidget::highlightAllSearchEdit);
|
||||
|
||||
databaseView = databaseDisplayWidget->getDatabaseView();
|
||||
|
|
@ -216,9 +214,9 @@ void VisualDatabaseDisplayWidget::onDisplayModeChanged(bool checked)
|
|||
}
|
||||
}
|
||||
|
||||
void VisualDatabaseDisplayWidget::onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance)
|
||||
void VisualDatabaseDisplayWidget::onClick(QMouseEvent *event, const ExactCard &card)
|
||||
{
|
||||
emit cardClickedDatabaseDisplay(event, instance);
|
||||
emit cardClickedDatabaseDisplay(event, card);
|
||||
}
|
||||
|
||||
void VisualDatabaseDisplayWidget::onHover(const ExactCard &hoveredCard)
|
||||
|
|
@ -233,7 +231,7 @@ void VisualDatabaseDisplayWidget::addCard(const ExactCard &cardToAdd)
|
|||
display->setScaleFactor(cardSizeWidget->getSlider()->value());
|
||||
display->setCard(cardToAdd);
|
||||
flowWidget->addWidget(display);
|
||||
connect(display, &CardInfoPictureWithTextOverlayWidget::imageClicked, this, &VisualDatabaseDisplayWidget::onClick);
|
||||
connect(display, &CardInfoPictureWithTextOverlayWidget::cardClicked, this, &VisualDatabaseDisplayWidget::onClick);
|
||||
connect(display, &CardInfoPictureWithTextOverlayWidget::hoveredOnCard, this, &VisualDatabaseDisplayWidget::onHover);
|
||||
connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, display, &CardInfoPictureWidget::setScaleFactor);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -76,12 +76,12 @@ public slots:
|
|||
void onSearchModelChanged();
|
||||
|
||||
signals:
|
||||
void cardClickedDatabaseDisplay(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance);
|
||||
void cardClickedDatabaseDisplay(QMouseEvent *event, const ExactCard &card);
|
||||
void cardHoveredDatabaseDisplay(const ExactCard &hoveredCard);
|
||||
|
||||
protected slots:
|
||||
void initialize();
|
||||
void onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance);
|
||||
void onClick(QMouseEvent *event, const ExactCard &card);
|
||||
void onHover(const ExactCard &hoveredCard);
|
||||
void addCard(const ExactCard &cardToAdd);
|
||||
void databaseDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
|
||||
|
|
|
|||
|
|
@ -281,7 +281,7 @@ void VisualDeckEditorWidget::constructZoneWidgetForIndex(QPersistentModelIndex p
|
|||
displayOptionsWidget->getActiveGroupCriteria(), displayOptionsWidget->getActiveSortCriteria(),
|
||||
displayOptionsWidget->getDisplayType(), 20, 10, cardSizeWidget);
|
||||
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardHovered, this, &VisualDeckEditorWidget::onHover);
|
||||
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardClicked, this, &VisualDeckEditorWidget::onCardClick);
|
||||
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardClicked, this, &VisualDeckEditorWidget::cardClicked);
|
||||
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::requestCleanup, this,
|
||||
&VisualDeckEditorWidget::cleanupInvalidZones);
|
||||
connect(this, &VisualDeckEditorWidget::activeSortCriteriaChanged, zoneDisplayWidget,
|
||||
|
|
@ -401,13 +401,6 @@ void VisualDeckEditorWidget::decklistDataChanged(QModelIndex topLeft, QModelInde
|
|||
// User Interaction
|
||||
// =====================================================================================================================
|
||||
|
||||
void VisualDeckEditorWidget::onCardClick(QMouseEvent *event,
|
||||
CardInfoPictureWithTextOverlayWidget *instance,
|
||||
QString zoneName)
|
||||
{
|
||||
emit cardClicked(event, instance, zoneName);
|
||||
}
|
||||
|
||||
void VisualDeckEditorWidget::onHover(const ExactCard &hoveredCard)
|
||||
{
|
||||
// If user has any card selected, ignore hover
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ signals:
|
|||
void activeCardChanged(const ExactCard &activeCard);
|
||||
void activeGroupCriteriaChanged(QString activeGroupCriteria);
|
||||
void activeSortCriteriaChanged(QStringList activeSortCriteria);
|
||||
void cardClicked(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance, QString zoneName);
|
||||
void cardClicked(QMouseEvent *event, const ExactCard &card, const QString &zoneName);
|
||||
void cardAdditionRequested(const ExactCard &card);
|
||||
void displayTypeChanged(DisplayType displayType);
|
||||
|
||||
|
|
@ -82,7 +82,6 @@ protected:
|
|||
|
||||
protected slots:
|
||||
void onHover(const ExactCard &hoveredCard);
|
||||
void onCardClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance, QString zoneName);
|
||||
void decklistModelReset();
|
||||
void resizeEvent(QResizeEvent *event) override;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue