Cockatrice 2026-10-19-Development-3.1.2-beta.2
A 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
13
14#include <QGraphicsItem>
15#include <QGraphicsScene>
16#include <QGraphicsView>
17#include <QList>
18#include <QMap>
19#include <QMultiMap>
20#include <QPair>
21#include <QPointF>
22#include <QRectF>
23#include <QSizeF>
24#include <QString>
25#include <QtGlobal>
26#include <libcockatrice/protocol/pb/move_card_to_zone.pb.h>
27#include <qtmetamacros.h>
28
29class DeckList;
32class QObject;
33class QWidget;
34struct CardRef;
35
37{
38private:
39 QString originZone;
41
42public:
43 explicit DeckViewCard(QGraphicsItem *parent = nullptr,
44 const CardRef &cardRef = {},
45 const QString &_originZone = QString());
46 ~DeckViewCard() override;
47 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
48 [[nodiscard]] const QString &getOriginZone() const
49 {
50 return originZone;
51 }
52 bool doubleClickActsOnSelection() const override
53 {
54 return true;
55 }
56
57protected:
58 void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
59 void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;
60};
61
63{
64private:
67
68public:
69 DeckViewCardDragItem(DeckViewCard *_item, const QPointF &_hotSpot, AbstractCardDragItem *parentDrag = 0);
70 void updatePosition(const QPointF &cursorScenePos) override;
71
72protected:
73 void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
74};
75
76class DeckViewCardContainer : public QGraphicsItem
77{
78private:
79 static const int separatorY = 20;
80 static const int paddingY = 10;
81 static bool sortCardsByName(DeckViewCard *c1, DeckViewCard *c2);
82
83 QString name;
85 QMultiMap<QString, DeckViewCard *> cardsByType;
87 qreal width, height;
88 [[nodiscard]] int getCardTypeTextWidth() const;
89
90public:
91 enum
92 {
94 };
95 [[nodiscard]] int type() const override
96 {
97 return Type;
98 }
99 explicit DeckViewCardContainer(const QString &_name);
100 [[nodiscard]] QRectF boundingRect() const override;
101 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
102 void addCard(DeckViewCard *card);
103 void removeCard(DeckViewCard *card);
104 [[nodiscard]] const QList<DeckViewCard *> &getCards() const
105 {
106 return cards;
107 }
108 [[nodiscard]] const QString &getName() const
109 {
110 return name;
111 }
112 void setWidth(qreal _width);
113
114 [[nodiscard]] QList<QPair<int, int>> getRowsAndCols() const;
115 [[nodiscard]] QSizeF calculateBoundingRect(const QList<QPair<int, int>> &rowsAndCols) const;
116 void rearrangeItems(const QList<QPair<int, int>> &rowsAndCols);
117};
118
119class DeckViewScene : public QGraphicsScene
120{
121 Q_OBJECT
122signals:
125
126private:
127 bool locked;
131 void rebuildTree();
132
133public:
134 explicit DeckViewScene(QObject *parent = nullptr);
135 ~DeckViewScene() override;
136 void setLocked(bool _locked)
137 {
138 locked = _locked;
139 }
140 [[nodiscard]] bool getLocked() const
141 {
142 return locked;
143 }
144 void clearContents();
145 void setDeck(const DeckList &_deck);
146 void setOptimalAspectRatio(qreal _optimalAspectRatio)
147 {
148 optimalAspectRatio = _optimalAspectRatio;
149 }
150 void rearrangeItems();
151 void updateContents();
152 [[nodiscard]] QList<MoveCard_ToZone> getSideboardPlan() const;
153 void resetSideboardPlan();
155};
156
157class DeckView : public QGraphicsView
158{
159 Q_OBJECT
160private:
162
163protected:
164 void resizeEvent(QResizeEvent *event) override;
165public slots:
166 void updateSceneRect(const QRectF &rect);
167signals:
170
171public:
172 explicit DeckView(QWidget *parent = nullptr);
173 void setDeck(const DeckList &_deck);
174 void clearDeck();
175 void setLocked(bool _locked)
176 {
177 deckViewScene->setLocked(_locked);
178 }
180 {
182 }
183 void mouseDoubleClickEvent(QMouseEvent *event) override;
184 void resetSideboardPlan();
185};
186
187#endif
Base class for graphical card items, providing shared rendering, identity, and interaction logic.
AbstractCardDragItem(AbstractCardItem *_item, const QPointF &_hotSpot, AbstractCardDragItem *parentDrag=0)
Definition abstract_card_drag_item.cpp:22
Definition abstract_card_item.h:29
CardRef cardRef
Definition abstract_card_item.h:34
AbstractCardItem(QGraphicsItem *parent=nullptr, const CardRef &cardRef={}, PlayerLogic *_owner=nullptr, int _id=-1)
Definition abstract_card_item.cpp:45
Represents a complete deck, including metadata, zones, cards, and sideboard plans.
Definition deck_list.h:67
Definition deck_view.h:77
static bool sortCardsByName(DeckViewCard *c1, DeckViewCard *c2)
Definition deck_view.cpp:326
const QString & getName() const
Definition deck_view.h:108
const QList< DeckViewCard * > & getCards() const
Definition deck_view.h:104
qreal height
Definition deck_view.h:87
qreal width
Definition deck_view.h:87
QRectF boundingRect() const override
Definition deck_view.cpp:229
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
Definition deck_view.cpp:234
void addCard(DeckViewCard *card)
Definition deck_view.cpp:271
QSizeF calculateBoundingRect(const QList< QPair< int, int > > &rowsAndCols) const
Definition deck_view.cpp:310
int getCardTypeTextWidth() const
Definition deck_view.cpp:293
static const int paddingY
Definition deck_view.h:80
QString name
Definition deck_view.h:83
QList< QPair< int, int > > currentRowsAndCols
Definition deck_view.h:86
@ Type
Definition deck_view.h:93
QMultiMap< QString, DeckViewCard * > cardsByType
Definition deck_view.h:85
QList< QPair< int, int > > getRowsAndCols() const
Definition deck_view.cpp:283
QList< DeckViewCard * > cards
Definition deck_view.h:84
void setWidth(qreal _width)
Definition deck_view.cpp:360
DeckViewCardContainer(const QString &_name)
Definition deck_view.cpp:224
int type() const override
Definition deck_view.h:95
static const int separatorY
Definition deck_view.h:79
void rearrangeItems(const QList< QPair< int, int > > &rowsAndCols)
Definition deck_view.cpp:334
void removeCard(DeckViewCard *card)
Definition deck_view.cpp:277
Definition deck_view.h:63
void updatePosition(const QPointF &cursorScenePos) override
Definition deck_view.cpp:54
DeckViewCardDragItem(DeckViewCard *_item, const QPointF &_hotSpot, AbstractCardDragItem *parentDrag=0)
Definition deck_view.cpp:47
DeckViewCardContainer * currentZone
Definition deck_view.h:65
void handleDrop(DeckViewCardContainer *target)
Definition deck_view.cpp:78
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override
Definition deck_view.cpp:87
Definition deck_view.h:37
DeckViewCard(QGraphicsItem *parent=nullptr, const CardRef &cardRef={}, const QString &_originZone=QString())
Definition deck_view.cpp:107
DeckViewCardDragItem * dragItem
Definition deck_view.h:40
bool doubleClickActsOnSelection() const override
Whether a double-click on this item acts on the whole selection.
Definition deck_view.h:52
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override
Definition deck_view.cpp:142
const QString & getOriginZone() const
Definition deck_view.h:48
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
Definition deck_view.cpp:125
QString originZone
Definition deck_view.h:39
void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override
Definition deck_view.cpp:218
Definition deck_view.h:120
void setDeck(const DeckList &_deck)
Definition deck_view.cpp:386
DeckViewScene(QObject *parent=nullptr)
Definition deck_view.cpp:367
void applySideboardPlan(const QList< MoveCard_ToZone > &plan)
Definition deck_view.cpp:437
void rebuildTree()
Definition deck_view.cpp:398
void resetSideboardPlan()
Definition deck_view.cpp:562
void setLocked(bool _locked)
Definition deck_view.h:136
DeckList * deck
Definition deck_view.h:128
bool getLocked() const
Definition deck_view.h:140
void updateContents()
Definition deck_view.cpp:536
void clearContents()
Definition deck_view.cpp:377
bool locked
Definition deck_view.h:127
QMap< QString, DeckViewCardContainer * > cardContainers
Definition deck_view.h:129
void rearrangeItems()
Definition deck_view.cpp:465
qreal optimalAspectRatio
Definition deck_view.h:130
QList< MoveCard_ToZone > getSideboardPlan() const
Definition deck_view.cpp:542
void setOptimalAspectRatio(qreal _optimalAspectRatio)
Definition deck_view.h:146
void sideboardPlanChanged()
void newCardAdded(AbstractCardItem *card)
DeckView(QWidget *parent=nullptr)
Definition deck_view.cpp:568
DeckViewScene * deckViewScene
Definition deck_view.h:161
void updateSceneRect(const QRectF &rect)
Definition deck_view.cpp:589
QList< MoveCard_ToZone > getSideboardPlan() const
Definition deck_view.h:179
void setLocked(bool _locked)
Definition deck_view.h:175
void newCardAdded(AbstractCardItem *card)
void clearDeck()
Definition deck_view.cpp:599
void resizeEvent(QResizeEvent *event) override
Definition deck_view.cpp:582
void setDeck(const DeckList &_deck)
Definition deck_view.cpp:594
void resetSideboardPlan()
Definition deck_view.cpp:604
void sideboardPlanChanged()
void mouseDoubleClickEvent(QMouseEvent *event) override
Definition deck_view.cpp:175
Definition remote_connection_controller.h:20
Definition game.h:18
@ typeDeckViewCardContainer
Definition graphics_item_type.h:18
Definition card_ref.h:14