[Refactor] Move card identity and card data into CardState (#7425)

Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
This commit is contained in:
BruebachL 2026-10-31 18:44:12 +01:00 • committed by GitHub
parent 6f0c5dca12
commit c9853734ad
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 200 additions and 100 deletions

View file

@ -1,6 +1,9 @@
#include "card_state.h"
#include <QSharedPointer>
#include <libcockatrice/card/card_info.h>
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/card/database/card_database_querier.h>
void CardState::resetState(bool keepAnnotations)
{
@ -13,6 +16,56 @@ void CardState::resetState(bool keepAnnotations)
attachedTo = nullptr;
}
void CardState::setCardRef(const CardRef &_cardRef)
{
if (cardRef == _cardRef) {
return;
}
const CardRef oldCardRef = cardRef;
if (exactCard) {
disconnect(exactCard.getCardPtr().data(), nullptr, this, nullptr);
}
cardRef = _cardRef;
emit cardRefChanged(oldCardRef, cardRef);
refreshCardInfo();
}
void CardState::refreshCardInfo()
{
exactCard = CardDatabaseManager::query()->getCard(cardRef);
if (!exactCard && !cardRef.name.isEmpty()) {
CardInfo::UiAttributes attributes = {.tableRow = -1};
auto info = CardInfo::newInstance(cardRef.name, "", true, {}, {}, {}, {}, attributes);
exactCard = ExactCard(info);
}
if (exactCard) {
connect(exactCard.getCardPtr().data(), &CardInfo::pixmapUpdated, this, &CardState::cardPixmapUpdated);
}
emit cardInfoChanged();
}
void CardState::setTapped(bool _tapped, bool canAnimate)
{
if (tapped == _tapped) {
return;
}
tapped = _tapped;
emit tappedChanged(tapped, canAnimate);
emit stateChanged();
}
void CardState::setFaceDown(bool _facedown)
{
facedown = _facedown;
emit facedownChanged(facedown);
emit stateChanged();
}
void CardState::setZone(CardZoneLogic *_zone)
{
if (zone == _zone) {
@ -110,4 +163,4 @@ void CardState::setAttachedTo(CardItem *_attachedTo)
attachedTo = _attachedTo;
emit attachedToChanged(_attachedTo);
emit stateChanged();
}
}