Took 20 seconds
This commit is contained in:
Lukas Brübach 2025-10-01 00:37:04 +02:00
parent cae35cf851
commit 24969ad87c
2 changed files with 143 additions and 38 deletions

View file

@ -36,38 +36,56 @@ typedef QHash<QString, CardSetPtr> SetNameMap;
Q_DECLARE_METATYPE(CardInfoPtr) Q_DECLARE_METATYPE(CardInfoPtr)
/**
* @class CardInfo
* @ingroup Cards
*
* @brief Represents a card and its associated metadata, properties, and relationships.
*
* CardInfo holds both static information (name, text, flags) and dynamic data
* (properties, set memberships, relationships). It also integrates with
* signals/slots, allowing observers to react to property or visual updates.
*
* Each CardInfo may belong to multiple sets through its printings, and can
* be related to other cards through defined relationships.
*/
class CardInfo : public QObject class CardInfo : public QObject
{ {
Q_OBJECT Q_OBJECT
private: private:
CardInfoPtr smartThis; CardInfoPtr smartThis; ///< Smart pointer to self for safe cross-references.
// The card name QString name; ///< Full name of the card.
QString name; QString simpleName; ///< Simplified name for fuzzy matching.
// The name without punctuation or capitalization, for better card name recognition. QString text; ///< Text description or rules text of the card.
QString simpleName; bool isToken; ///< Whether this card is a token or not.
// card text QVariantHash properties; ///< Key-value store of dynamic card properties.
QString text; QList<CardRelation *> relatedCards; ///< Forward references to related cards.
// whether this is not a "real" card but a token QList<CardRelation *> reverseRelatedCards; ///< Cards that refer back to this card.
bool isToken; QList<CardRelation *> reverseRelatedCardsToMe; ///< Cards that consider this card as related.
// basic card properties; common for all the sets SetToPrintingsMap setsToPrintings; ///< Mapping from set names to printing variations.
QVariantHash properties; QString setsNames; ///< Cached, human-readable list of set names.
// the cards i'm related to bool cipt; ///< Positioning flag used by UI.
QList<CardRelation *> relatedCards; bool landscapeOrientation; ///< Orientation flag for rendering.
// the card i'm reverse-related to int tableRow; ///< Row index in a table or visual representation.
QList<CardRelation *> reverseRelatedCards; bool upsideDownArt; ///< Whether artwork is flipped for visual purposes.
// the cards thare are reverse-related to me
QList<CardRelation *> reverseRelatedCardsToMe;
// card sets
SetToPrintingsMap setsToPrintings;
// cached set names
QString setsNames;
// positioning properties; used by UI
bool cipt;
bool landscapeOrientation;
int tableRow;
bool upsideDownArt;
public: public:
/**
* @brief Constructs a CardInfo with full initialization.
*
* @param _name The name of the card.
* @param _text Rules text or description of the card.
* @param _isToken Flag indicating whether the card is a token.
* @param _properties Arbitrary key-value properties.
* @param _relatedCards Forward references to related cards.
* @param _reverseRelatedCards Backward references to related cards.
* @param _sets Map of set names to printing information.
* @param _cipt UI positioning flag.
* @param _landscapeOrientation UI rendering orientation.
* @param _tableRow Row index for table placement.
* @param _upsideDownArt Whether the artwork should be displayed upside down.
*/
explicit CardInfo(const QString &_name, explicit CardInfo(const QString &_name,
const QString &_text, const QString &_text,
bool _isToken, bool _isToken,
@ -79,6 +97,14 @@ public:
bool _landscapeOrientation, bool _landscapeOrientation,
int _tableRow, int _tableRow,
bool _upsideDownArt); bool _upsideDownArt);
/**
* @brief Copy constructor for CardInfo.
*
* Performs a deep copy of properties, sets, and related card lists.
*
* @param other Another CardInfo to copy.
*/
CardInfo(const CardInfo &other) CardInfo(const CardInfo &other)
: QObject(other.parent()), name(other.name), simpleName(other.simpleName), text(other.text), : QObject(other.parent()), name(other.name), simpleName(other.simpleName), text(other.text),
isToken(other.isToken), properties(other.properties), relatedCards(other.relatedCards), isToken(other.isToken), properties(other.properties), relatedCards(other.relatedCards),
@ -88,8 +114,32 @@ public:
{ {
} }
/**
* @brief Creates a new instance with only the card name.
*
* All other fields are set to defaults.
*
* @param _name The card name.
* @return Shared pointer to the new CardInfo instance.
*/
static CardInfoPtr newInstance(const QString &_name); static CardInfoPtr newInstance(const QString &_name);
/**
* @brief Creates a new instance with full initialization.
*
* @param _name Name of the card.
* @param _text Rules text or description.
* @param _isToken Token flag.
* @param _properties Arbitrary properties.
* @param _relatedCards Forward relationships.
* @param _reverseRelatedCards Reverse relationships.
* @param _sets Printing information per set.
* @param _cipt UI positioning flag.
* @param _landscapeOrientation UI rendering orientation.
* @param _tableRow Row index for table placement.
* @param _upsideDownArt Artwork orientation flag.
* @return Shared pointer to the new CardInfo instance.
*/
static CardInfoPtr newInstance(const QString &_name, static CardInfoPtr newInstance(const QString &_name,
const QString &_text, const QString &_text,
bool _isToken, bool _isToken,
@ -102,20 +152,33 @@ public:
int _tableRow, int _tableRow,
bool _upsideDownArt); bool _upsideDownArt);
/**
* @brief Clones the current CardInfo instance.
*
* Uses the copy constructor and ensures the smart pointer is properly set.
*
* @return Shared pointer to the cloned CardInfo.
*/
CardInfoPtr clone() const CardInfoPtr clone() const
{ {
// Use the copy constructor to create a new instance
CardInfoPtr newCardInfo = CardInfoPtr(new CardInfo(*this)); CardInfoPtr newCardInfo = CardInfoPtr(new CardInfo(*this));
newCardInfo->setSmartPointer(newCardInfo); // Set the smart pointer for the new instance newCardInfo->setSmartPointer(newCardInfo); // Set the smart pointer for the new instance
return newCardInfo; return newCardInfo;
} }
/**
* @brief Sets the internal smart pointer to self.
*
* Used internally to allow safe cross-references among CardInfo and CardSet.
*
* @param _ptr Shared pointer pointing to this instance.
*/
void setSmartPointer(CardInfoPtr _ptr) void setSmartPointer(CardInfoPtr _ptr)
{ {
smartThis = std::move(_ptr); smartThis = std::move(_ptr);
} }
// basic properties /** @name Basic Properties Accessors */ //@{
inline const QString &getName() const inline const QString &getName() const
{ {
return name; return name;
@ -124,7 +187,6 @@ public:
{ {
return simpleName; return simpleName;
} }
const QString &getText() const const QString &getText() const
{ {
return text; return text;
@ -134,7 +196,6 @@ public:
text = _text; text = _text;
emit cardInfoChanged(smartThis); emit cardInfoChanged(smartThis);
} }
bool getIsToken() const bool getIsToken() const
{ {
return isToken; return isToken;
@ -164,8 +225,9 @@ public:
{ {
return setsNames; return setsNames;
} }
//@}
// related cards /** @name Related Cards Accessors */ //@{
const QList<CardRelation *> &getRelatedCards() const const QList<CardRelation *> &getRelatedCards() const
{ {
return relatedCards; return relatedCards;
@ -190,8 +252,9 @@ public:
{ {
reverseRelatedCardsToMe.append(cardRelation); reverseRelatedCardsToMe.append(cardRelation);
} }
//@}
// positioning /** @name UI Positioning */ //@{
bool getCipt() const bool getCipt() const
{ {
return cipt; return cipt;
@ -213,8 +276,9 @@ public:
return upsideDownArt; return upsideDownArt;
} }
const QChar getColorChar() const; const QChar getColorChar() const;
//@}
// Back-compatibility methods. Remove ASAP /** @name Legacy/Convenience Property Accessors */ //@{
const QString getCardType() const; const QString getCardType() const;
void setCardType(const QString &value); void setCardType(const QString &value);
const QString getCmc() const; const QString getCmc() const;
@ -225,24 +289,66 @@ public:
const QString getManaCost() const; const QString getManaCost() const;
const QString getPowTough() const; const QString getPowTough() const;
void setPowTough(const QString &value); void setPowTough(const QString &value);
//@}
/**
* @brief Returns a version of the card name safe for file storage or fuzzy matching.
*
* Removes invalid characters, replaces spacing markers, and normalizes diacritics.
*
* @return Corrected card name as a QString.
*/
QString getCorrectedName() const; QString getCorrectedName() const;
/**
* @brief Adds a printing to a specific set.
*
* Updates the mapping and refreshes the cached list of set names.
*
* @param _set The set to which the card should be added.
* @param _info Optional printing information.
*/
void addToSet(const CardSetPtr &_set, PrintingInfo _info = PrintingInfo()); void addToSet(const CardSetPtr &_set, PrintingInfo _info = PrintingInfo());
/**
* @brief Combines legality properties from a provided map.
*
* Useful for merging format legality flags from multiple sources.
*
* @param props Key-value mapping of format legalities.
*/
void combineLegalities(const QVariantHash &props); void combineLegalities(const QVariantHash &props);
/**
* @brief Refreshes the cached, human-readable list of set names.
*
* Typically called after adding or modifying set memberships.
*/
void refreshCachedSetNames(); void refreshCachedSetNames();
/** /**
* Simplify a name to have no punctuation and lowercase all letters, for * @brief Simplifies a name for fuzzy matching.
* less strict name-matching. *
* Converts to lowercase, removes punctuation/spacing.
*
* @param name Original name string.
* @return Simplified name string.
*/ */
static QString simplifyName(const QString &name); static QString simplifyName(const QString &name);
signals: signals:
/** /**
* Emit this when a pixmap for this card finishes loading. * @brief Emitted when a pixmap for this card has been updated or finished loading.
* @param printing The specific printing the pixmap is for. *
* @param printing Specific printing for which the pixmap has updated.
*/ */
void pixmapUpdated(const PrintingInfo &printing); void pixmapUpdated(const PrintingInfo &printing);
/**
* @brief Emitted when card properties or state have changed.
*
* @param card Shared pointer to the CardInfo instance that changed.
*/
void cardInfoChanged(CardInfoPtr card); void cardInfoChanged(CardInfoPtr card);
}; };
#endif #endif

View file

@ -1,6 +1,5 @@
#include "oracleimporter.h" #include "oracleimporter.h"
#include <card/card_relation.h>
#include "database/parser/cockatrice_xml_4.h" #include "database/parser/cockatrice_xml_4.h"
#include "parsehelpers.h" #include "parsehelpers.h"
#include "qt-json/json.h" #include "qt-json/json.h"