Cockatrice 2026-10-19-Development-3.1.2-beta.2
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
deck_preview_widget.h
Go to the documentation of this file.
1
5
6#ifndef DECK_PREVIEW_WIDGET_H
7#define DECK_PREVIEW_WIDGET_H
8
9#include <QAbstractItemView>
10#include <QAbstractScrollArea>
11#include <QApplication>
12#include <QComboBox>
13#include <QEvent>
14#include <QList>
15#include <QObject>
16#include <QString>
17#include <QStringList>
18#include <QWidget>
19#include <qtmetamacros.h>
20
21class QFrame;
22class QLabel;
23class QMenu;
24class QMouseEvent;
30class QVBoxLayout;
31struct LoadedDeck;
32
33class DeckPreviewWidget final : public QWidget
34{
35 Q_OBJECT
36public:
37 explicit DeckPreviewWidget(QWidget *parent,
38 VisualDeckStorageWidget *_visualDeckStorageWidget,
40 const QString &_filePath);
41 void retranslateUi();
42
47
49 QString filePath;
50
51 void setShareSelectable(bool selectable);
52 void setShareSelected(bool selected);
53 [[nodiscard]] bool isShareSelected() const;
54 [[nodiscard]] bool isShareSelectable() const;
55
56signals:
57 void deckLoadRequested(const QString &filePath);
58 void openDeckEditor(const LoadedDeck &deck);
59 void shareDeckRequested(const QString &filePath);
60 void shareSelectionToggled(bool selected);
61
62public slots:
67 void syncFromModel();
68
72 void reloadIfModified();
74 void updateColorIdentityVisibility(bool visible);
75 void updateBannerCardComboBoxVisibility(bool visible);
76 void updateTagsVisibility(bool visible);
77 void setBannerCard(int);
78 void setTags(const QStringList &tags);
79
80protected:
81 void enterEvent(QEnterEvent *event) override;
82 void resizeEvent(QResizeEvent *event) override;
83 bool eventFilter(QObject *watched, QEvent *event) override;
84
85private:
86 [[nodiscard]] int row() const;
87 [[nodiscard]] QString getDisplayName() const;
89 void updateBannerCardComboBox(const QString &currentText);
91 QMenu *createRightClickMenu();
92 void addSetBannerCardMenu(QMenu *menu);
93 void imageClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
94 void imageSingleClicked();
95 void imageDoubleClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
96
97 void actRenameDeck();
98 void actRenameFile();
99 void actDeleteFile();
100
103 QVBoxLayout *layout;
110 QFrame *selectionFrame = nullptr;
111 bool shareSelectable = false;
112 bool shareSelected = false;
113
116};
117
118class NoScrollFilter : public QObject
119{
120 Q_OBJECT
121public:
122 explicit NoScrollFilter(QObject *parent = nullptr) : QObject(parent)
123 {
124 }
125
126protected:
127 bool eventFilter(QObject *obj, QEvent *event) override
128 {
129 if (event->type() == QEvent::Wheel) {
130 if (auto *combo = qobject_cast<QComboBox *>(obj)) {
131 // If popup is not open, forward event to parent scroll area
132 if (!combo->view()->isVisible()) {
133 // Try to find a scrollable parent and manually send the event
134 QWidget *parent = combo->parentWidget();
135 while (parent) {
136 if (auto *scroll = qobject_cast<QAbstractScrollArea *>(parent)) {
137 QApplication::sendEvent(scroll->viewport(), event);
138 return true; // Mark event as handled
139 }
140 parent = parent->parentWidget();
141 }
142 // If no scrollable parent found, just block
143 return true;
144 }
145 }
146 }
147 return QObject::eventFilter(obj, event);
148 }
149};
150
151#endif // DECK_PREVIEW_WIDGET_H
Definition color_identity_widget.h:19
Definition deck_preview_card_picture_widget.h:22
Definition deck_preview_deck_tags_display_widget.h:19
DeckPreviewDeckTagsDisplayWidget * deckTagsDisplayWidget
Definition deck_preview_widget.h:105
QComboBox * bannerCardComboBox
Definition deck_preview_widget.h:107
void setBannerCard(int)
Definition deck_preview_widget.cpp:413
int row() const
The row of this deck in the source model, or -1 if it no longer exists.
Definition deck_preview_widget.cpp:232
void openDeckEditor(const LoadedDeck &deck)
bool isShareSelected() const
Definition deck_preview_widget.cpp:192
void refreshBannerCardToolTip()
Definition deck_preview_widget.cpp:334
bool shareSelectable
Definition deck_preview_widget.h:111
void updateSelectionStyle()
Definition deck_preview_widget.cpp:214
void retranslateUi()
Definition deck_preview_widget.cpp:141
ColorIdentityWidget * colorIdentityWidget
Definition deck_preview_widget.h:104
QString filePath
The path of the deck file backing this preview.
Definition deck_preview_widget.h:49
void imageSingleClicked()
Definition deck_preview_widget.cpp:434
void deckLoadRequested(const QString &filePath)
void addSetBannerCardMenu(QMenu *menu)
Definition deck_preview_widget.cpp:520
void updateBannerCardComboBoxVisibility(bool visible)
Definition deck_preview_widget.cpp:295
void shareDeckRequested(const QString &filePath)
bool promptFileConversionIfRequired()
Definition deck_preview_widget.cpp:612
QVBoxLayout * layout
Definition deck_preview_widget.h:103
void updateBannerCardComboBox(const QString &currentText)
Definition deck_preview_widget.cpp:347
QString getDisplayName() const
The display name is given by the deck name, or the filename if the deck name is not set.
Definition deck_preview_widget.cpp:240
void setShareSelected(bool selected)
Definition deck_preview_widget.cpp:182
void enterEvent(QEnterEvent *event) override
Definition deck_preview_widget.cpp:221
VisualDeckStorageWidget * visualDeckStorageWidget
Definition deck_preview_widget.h:101
void setShareSelectable(bool selectable)
Definition deck_preview_widget.cpp:173
void updateSelectionFrameGeometry()
Definition deck_preview_widget.cpp:202
void actDeleteFile()
Definition deck_preview_widget.cpp:585
DeckPreviewWidget(QWidget *parent, VisualDeckStorageWidget *_visualDeckStorageWidget, VisualDeckStorageModel *_model, const QString &_filePath)
Definition deck_preview_widget.cpp:52
void refreshBannerCardText()
Definition deck_preview_widget.cpp:327
QFrame * selectionFrame
Definition deck_preview_widget.h:110
bool shareSelected
Definition deck_preview_widget.h:112
bool isShareSelectable() const
Definition deck_preview_widget.cpp:197
int lastKnownBannerWidth
The picture width last applied to the children.
Definition deck_preview_widget.h:109
void imageDoubleClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance)
Definition deck_preview_widget.cpp:441
void actRenameDeck()
Definition deck_preview_widget.cpp:538
QLabel * bannerCardLabel
Definition deck_preview_widget.h:106
void updateColorIdentityVisibility(bool visible)
Definition deck_preview_widget.cpp:286
void shareSelectionToggled(bool selected)
void setTags(const QStringList &tags)
Definition deck_preview_widget.cpp:451
void updateTagsVisibility(bool visible)
Definition deck_preview_widget.cpp:310
QList< QWidget * > fixedWidthChildren
Children clamped to the picture width on resize.
Definition deck_preview_widget.h:108
VisualDeckStorageModel * model
Definition deck_preview_widget.h:102
void syncFromModel()
Re-reads the row's data from the model and syncs every child widget. Connected to the model's dataCha...
Definition deck_preview_widget.cpp:265
void reloadIfModified()
Reloads the deck file if its modification time is newer than the stored one.
Definition deck_preview_widget.cpp:252
void imageClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance)
Definition deck_preview_widget.cpp:425
void resizeEvent(QResizeEvent *event) override
Definition deck_preview_widget.cpp:146
DeckPreviewCardPictureWidget * bannerCardDisplayWidget
The banner card picture; the parent widget wires its size to the card size setting.
Definition deck_preview_widget.h:46
bool eventFilter(QObject *watched, QEvent *event) override
Definition deck_preview_widget.cpp:165
QMenu * createRightClickMenu()
Definition deck_preview_widget.cpp:459
void actRenameFile()
Definition deck_preview_widget.cpp:560
NoScrollFilter(QObject *parent=nullptr)
Definition deck_preview_widget.h:122
bool eventFilter(QObject *obj, QEvent *event) override
Definition deck_preview_widget.h:127
Definition remote_connection_controller.h:20
The list model backing the Visual Deck Storage widget tree.
Definition visual_deck_storage_model.h:103
Definition visual_deck_storage_widget.h:32
Represents a deck that was loaded from somewhere. Contains the DeckList itself, as well as info about...
Definition loaded_deck.h:14