Cockatrice 2025-11-30-Development-2.11.0-beta.38
A cross-platform virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
deck_view.h
Go to the documentation of this file.
1
6
7#ifndef DECKVIEW_H
8#define DECKVIEW_H
9
11
12#include <QGraphicsView>
13#include <QMap>
14#include <libcockatrice/protocol/pb/move_card_to_zone.pb.h>
15
16class DeckList;
18class CardInfo;
21class MoveCardToZone;
22
24{
25private:
26 QString originZone;
28
29public:
30 explicit DeckViewCard(QGraphicsItem *parent = nullptr,
31 const CardRef &cardRef = {},
32 const QString &_originZone = QString());
33 ~DeckViewCard() override;
34 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
35 [[nodiscard]] const QString &getOriginZone() const
36 {
37 return originZone;
38 }
39
40protected:
41 void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
42 void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;
43};
44
46{
47private:
50
51public:
52 DeckViewCardDragItem(DeckViewCard *_item, const QPointF &_hotSpot, AbstractCardDragItem *parentDrag = 0);
53 void updatePosition(const QPointF &cursorScenePos) override;
54
55protected:
56 void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
57};
58
59class DeckViewCardContainer : public QGraphicsItem
60{
61private:
62 static const int separatorY = 20;
63 static const int paddingY = 10;
64 static bool sortCardsByName(DeckViewCard *c1, DeckViewCard *c2);
65
66 QString name;
67 QList<DeckViewCard *> cards;
68 QMultiMap<QString, DeckViewCard *> cardsByType;
69 QList<QPair<int, int>> currentRowsAndCols;
70 qreal width, height;
71 [[nodiscard]] int getCardTypeTextWidth() const;
72
73public:
74 enum
75 {
77 };
78 [[nodiscard]] int type() const override
79 {
80 return Type;
81 }
82 explicit DeckViewCardContainer(const QString &_name);
83 [[nodiscard]] QRectF boundingRect() const override;
84 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
85 void addCard(DeckViewCard *card);
86 void removeCard(DeckViewCard *card);
87 [[nodiscard]] const QList<DeckViewCard *> &getCards() const
88 {
89 return cards;
90 }
91 [[nodiscard]] const QString &getName() const
92 {
93 return name;
94 }
95 void setWidth(qreal _width);
96
97 [[nodiscard]] QList<QPair<int, int>> getRowsAndCols() const;
98 [[nodiscard]] QSizeF calculateBoundingRect(const QList<QPair<int, int>> &rowsAndCols) const;
99 void rearrangeItems(const QList<QPair<int, int>> &rowsAndCols);
100};
101
102class DeckViewScene : public QGraphicsScene
103{
104 Q_OBJECT
105signals:
108
109private:
110 bool locked;
112 QMap<QString, DeckViewCardContainer *> cardContainers;
114 void rebuildTree();
115
116public:
117 explicit DeckViewScene(QObject *parent = nullptr);
118 ~DeckViewScene() override;
119 void setLocked(bool _locked)
120 {
121 locked = _locked;
122 }
123 [[nodiscard]] bool getLocked() const
124 {
125 return locked;
126 }
127 void clearContents();
128 void setDeck(const DeckList &_deck);
129 void setOptimalAspectRatio(qreal _optimalAspectRatio)
130 {
131 optimalAspectRatio = _optimalAspectRatio;
132 }
133 void rearrangeItems();
134 void updateContents();
135 [[nodiscard]] QList<MoveCard_ToZone> getSideboardPlan() const;
136 void resetSideboardPlan();
137 void applySideboardPlan(const QList<MoveCard_ToZone> &plan);
138};
139
140class DeckView : public QGraphicsView
141{
142 Q_OBJECT
143private:
145
146protected:
147 void resizeEvent(QResizeEvent *event) override;
148public slots:
149 void updateSceneRect(const QRectF &rect);
150signals:
153
154public:
155 explicit DeckView(QWidget *parent = nullptr);
156 void setDeck(const DeckList &_deck);
157 void clearDeck();
158 void setLocked(bool _locked)
159 {
160 deckViewScene->setLocked(_locked);
161 }
162 [[nodiscard]] QList<MoveCard_ToZone> getSideboardPlan() const
163 {
164 return deckViewScene->getSideboardPlan();
165 }
166 void mouseDoubleClickEvent(QMouseEvent *event) override;
167 void resetSideboardPlan();
168};
169
170#endif
TODO: Document this.
AbstractCardDragItem(AbstractCardItem *_item, const QPointF &_hotSpot, AbstractCardDragItem *parentDrag=0)
Definition abstract_card_drag_item.cpp:14
Definition abstract_card_item.h:22
CardRef cardRef
Definition abstract_card_item.h:27
AbstractCardItem(QGraphicsItem *parent=nullptr, const CardRef &cardRef={}, Player *_owner=nullptr, int _id=-1)
Definition abstract_card_item.cpp:15
Represents a card and its associated metadata, properties, and relationships.
Definition card_info.h:46
Represents a complete deck, including metadata, zones, cards, and sideboard plans.
Definition deck_list.h:127
Definition deck_view.h:60
static bool sortCardsByName(DeckViewCard *c1, DeckViewCard *c2)
Definition deck_view.cpp:271
const QString & getName() const
Definition deck_view.h:91
const QList< DeckViewCard * > & getCards() const
Definition deck_view.h:87
qreal height
Definition deck_view.h:70
qreal width
Definition deck_view.h:70
QRectF boundingRect() const override
Definition deck_view.cpp:176
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
Definition deck_view.cpp:181
void addCard(DeckViewCard *card)
Definition deck_view.cpp:218
QSizeF calculateBoundingRect(const QList< QPair< int, int > > &rowsAndCols) const
Definition deck_view.cpp:256
int getCardTypeTextWidth() const
Definition deck_view.cpp:239
static const int paddingY
Definition deck_view.h:63
QString name
Definition deck_view.h:66
QList< QPair< int, int > > currentRowsAndCols
Definition deck_view.h:69
QMultiMap< QString, DeckViewCard * > cardsByType
Definition deck_view.h:68
QList< QPair< int, int > > getRowsAndCols() const
Definition deck_view.cpp:230
QList< DeckViewCard * > cards
Definition deck_view.h:67
void setWidth(qreal _width)
Definition deck_view.cpp:303
DeckViewCardContainer(const QString &_name)
Definition deck_view.cpp:171
@ Type
Definition deck_view.h:76
int type() const override
Definition deck_view.h:78
static const int separatorY
Definition deck_view.h:62
void rearrangeItems(const QList< QPair< int, int > > &rowsAndCols)
Definition deck_view.cpp:278
void removeCard(DeckViewCard *card)
Definition deck_view.cpp:224
Definition deck_view.h:46
void updatePosition(const QPointF &cursorScenePos) override
Definition deck_view.cpp:22
DeckViewCardDragItem(DeckViewCard *_item, const QPointF &_hotSpot, AbstractCardDragItem *parentDrag=0)
Definition deck_view.cpp:15
DeckViewCardContainer * currentZone
Definition deck_view.h:48
void handleDrop(DeckViewCardContainer *target)
Definition deck_view.cpp:42
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override
Definition deck_view.cpp:51
Definition deck_view.h:24
DeckViewCard(QGraphicsItem *parent=nullptr, const CardRef &cardRef={}, const QString &_originZone=QString())
Definition deck_view.cpp:71
DeckViewCardDragItem * dragItem
Definition deck_view.h:27
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override
Definition deck_view.cpp:103
const QString & getOriginZone() const
Definition deck_view.h:35
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
Definition deck_view.cpp:88
~DeckViewCard() override
Definition deck_view.cpp:83
QString originZone
Definition deck_view.h:26
void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override
Definition deck_view.cpp:165
Definition deck_view.h:103
void setDeck(const DeckList &_deck)
Definition deck_view.cpp:328
DeckViewScene(QObject *parent=nullptr)
Definition deck_view.cpp:310
void applySideboardPlan(const QList< MoveCard_ToZone > &plan)
Definition deck_view.cpp:371
void rebuildTree()
Definition deck_view.cpp:339
void resetSideboardPlan()
Definition deck_view.cpp:486
void setLocked(bool _locked)
Definition deck_view.h:119
DeckList * deck
Definition deck_view.h:111
bool getLocked() const
Definition deck_view.h:123
void updateContents()
Definition deck_view.cpp:461
void clearContents()
Definition deck_view.cpp:320
bool locked
Definition deck_view.h:110
QMap< QString, DeckViewCardContainer * > cardContainers
Definition deck_view.h:112
void rearrangeItems()
Definition deck_view.cpp:396
qreal optimalAspectRatio
Definition deck_view.h:113
QList< MoveCard_ToZone > getSideboardPlan() const
Definition deck_view.cpp:467
~DeckViewScene() override
Definition deck_view.cpp:314
void setOptimalAspectRatio(qreal _optimalAspectRatio)
Definition deck_view.h:129
void sideboardPlanChanged()
void newCardAdded(AbstractCardItem *card)
DeckView(QWidget *parent=nullptr)
Definition deck_view.cpp:492
DeckViewScene * deckViewScene
Definition deck_view.h:144
void updateSceneRect(const QRectF &rect)
Definition deck_view.cpp:513
QList< MoveCard_ToZone > getSideboardPlan() const
Definition deck_view.h:162
void setLocked(bool _locked)
Definition deck_view.h:158
void newCardAdded(AbstractCardItem *card)
void clearDeck()
Definition deck_view.cpp:523
void resizeEvent(QResizeEvent *event) override
Definition deck_view.cpp:506
void setDeck(const DeckList &_deck)
Definition deck_view.cpp:518
void resetSideboardPlan()
Definition deck_view.cpp:528
void sideboardPlanChanged()
void mouseDoubleClickEvent(QMouseEvent *event) override
Definition deck_view.cpp:133
Represents a container node in the deck list hierarchy (zones and groupings).
Definition inner_deck_list_node.h:62
@ typeDeckViewCardContainer
Definition graphics_item_type.h:18
Definition card_ref.h:14