Cockatrice 2026-03-05-Development-2.11.0-beta.54
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
deck_preview_widget.h
Go to the documentation of this file.
1
6
7#ifndef DECK_PREVIEW_WIDGET_H
8#define DECK_PREVIEW_WIDGET_H
9
15
16#include <QAbstractItemView>
17#include <QApplication>
18#include <QComboBox>
19#include <QEvent>
20#include <QVBoxLayout>
21#include <QWidget>
22
23class QMenu;
26
27class DeckPreviewWidget final : public QWidget
28{
29 Q_OBJECT
30public:
31 explicit DeckPreviewWidget(QWidget *_parent,
32 VisualDeckStorageWidget *_visualDeckStorageWidget,
33 const QString &_filePath);
34 void retranslateUi();
35 QString getColorIdentity();
36 [[nodiscard]] QString getDisplayName() const;
37
39 QVBoxLayout *layout;
40 QString filePath;
46 QLabel *bannerCardLabel = nullptr;
47 QComboBox *bannerCardComboBox = nullptr;
48 bool filteredBySearch = false;
49 bool filteredByColor = false;
50 bool filteredByTags = false;
51 [[nodiscard]] bool checkVisibility() const;
52
53signals:
54 void deckLoadRequested(const QString &filePath);
55 void openDeckEditor(const LoadedDeck &deck);
56
57public slots:
58 void setFilePath(const QString &filePath);
61 void updateBannerCardComboBox(const QString &currentText);
62 void setBannerCard(int);
63 void imageClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
64 void imageDoubleClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
65 void initializeUi(bool deckLoadSuccess);
66 void resyncWidgets();
67 void reloadIfModified();
68 void updateVisibility();
69 void updateColorIdentityVisibility(bool visible);
70 void updateBannerCardComboBoxVisibility(bool visible);
71 void updateTagsVisibility(bool visible);
72 void resizeEvent(QResizeEvent *event) override;
73
74protected:
75#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
76 void enterEvent(QEnterEvent *event) override; // Qt6 signature
77#else
78 void enterEvent(QEvent *event) override; // Qt5 signature
79#endif
80
81private:
83 void writeDeckToFile();
84 QMenu *createRightClickMenu();
85 void addSetBannerCardMenu(QMenu *menu);
86
87private slots:
88 void setTags(const QStringList &tags);
89
90 void actRenameDeck();
91 void actRenameFile();
92 void actDeleteFile();
93};
94
95class NoScrollFilter : public QObject
96{
97 Q_OBJECT
98public:
99 explicit NoScrollFilter(QObject *parent = nullptr) : QObject(parent)
100 {
101 }
102
103protected:
104 bool eventFilter(QObject *obj, QEvent *event) override
105 {
106 if (event->type() == QEvent::Wheel) {
107 if (auto *combo = qobject_cast<QComboBox *>(obj)) {
108 // If popup is not open, forward event to parent scroll area
109 if (!combo->view()->isVisible()) {
110 // Try to find a scrollable parent and manually send the event
111 QWidget *parent = combo->parentWidget();
112 while (parent) {
113 if (auto *scroll = qobject_cast<QAbstractScrollArea *>(parent)) {
114 QApplication::sendEvent(scroll->viewport(), event);
115 return true; // Mark event as handled
116 }
117 parent = parent->parentWidget();
118 }
119 // If no scrollable parent found, just block
120 return true;
121 }
122 }
123 }
124 return QObject::eventFilter(obj, event);
125 }
126};
127
128#endif // DECK_PREVIEW_WIDGET_H
Definition color_identity_widget.h:15
Definition deck_loader.h:20
Definition deck_preview_card_picture_widget.h:19
Definition deck_preview_deck_tags_display_widget.h:17
DeckPreviewDeckTagsDisplayWidget * deckTagsDisplayWidget
Definition deck_preview_widget.h:45
QComboBox * bannerCardComboBox
Definition deck_preview_widget.h:47
bool filteredByTags
Definition deck_preview_widget.h:50
void setBannerCard(int)
Definition deck_preview_widget.cpp:359
void openDeckEditor(const LoadedDeck &deck)
void refreshBannerCardToolTip()
Definition deck_preview_widget.cpp:286
void retranslateUi()
Definition deck_preview_widget.cpp:57
ColorIdentityWidget * colorIdentityWidget
Definition deck_preview_widget.h:44
QString filePath
Definition deck_preview_widget.h:40
void deckLoadRequested(const QString &filePath)
void addSetBannerCardMenu(QMenu *menu)
Definition deck_preview_widget.cpp:431
DeckPreviewWidget(QWidget *_parent, VisualDeckStorageWidget *_visualDeckStorageWidget, const QString &_filePath)
Definition deck_preview_widget.cpp:20
void updateBannerCardComboBoxVisibility(bool visible)
Definition deck_preview_widget.cpp:202
void writeDeckToFile()
Writes the current contents of the deck to file. Updates the lastModifiedTime afterward.
Definition deck_preview_widget.cpp:100
QVBoxLayout * layout
Definition deck_preview_widget.h:39
void updateBannerCardComboBox(const QString &currentText)
Definition deck_preview_widget.cpp:299
QString getDisplayName() const
Definition deck_preview_widget.cpp:264
void enterEvent(QEnterEvent *event) override
Definition deck_preview_widget.cpp:75
VisualDeckStorageWidget * visualDeckStorageWidget
Definition deck_preview_widget.h:38
void actDeleteFile()
Definition deck_preview_widget.cpp:500
DeckLoader * deckLoader
Definition deck_preview_widget.h:42
QDateTime lastModifiedTime
Definition deck_preview_widget.h:41
void refreshBannerCardText()
Definition deck_preview_widget.cpp:279
void initializeUi(bool deckLoadSuccess)
Definition deck_preview_widget.cpp:106
void setFilePath(const QString &filePath)
Definition deck_preview_widget.cpp:270
void imageDoubleClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance)
Definition deck_preview_widget.cpp:377
void actRenameDeck()
Definition deck_preview_widget.cpp:449
QLabel * bannerCardLabel
Definition deck_preview_widget.h:46
void updateColorIdentityVisibility(bool visible)
Definition deck_preview_widget.cpp:193
bool filteredBySearch
Definition deck_preview_widget.h:48
void setTags(const QStringList &tags)
Definition deck_preview_widget.cpp:384
void updateVisibility()
Definition deck_preview_widget.cpp:180
bool checkVisibility() const
Definition deck_preview_widget.cpp:185
void updateTagsVisibility(bool visible)
Definition deck_preview_widget.cpp:217
QString getColorIdentity()
Definition deck_preview_widget.cpp:230
void resyncWidgets()
Syncs the contents of the child widgets with the current deck.
Definition deck_preview_widget.cpp:147
bool filteredByColor
Definition deck_preview_widget.h:49
void reloadIfModified()
Reloads the deck if the file's last modified time has increased since we last checked.
Definition deck_preview_widget.cpp:162
void imageClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance)
Definition deck_preview_widget.cpp:368
void updateLastModifiedTime()
Sets the lastModifiedTime to the value given by the file.
Definition deck_preview_widget.cpp:91
void resizeEvent(QResizeEvent *event) override
Definition deck_preview_widget.cpp:62
DeckPreviewCardPictureWidget * bannerCardDisplayWidget
Definition deck_preview_widget.h:43
QMenu * createRightClickMenu()
Definition deck_preview_widget.cpp:390
void actRenameFile()
Definition deck_preview_widget.cpp:468
NoScrollFilter(QObject *parent=nullptr)
Definition deck_preview_widget.h:99
bool eventFilter(QObject *obj, QEvent *event) override
Definition deck_preview_widget.h:104
Definition visual_deck_storage_widget.h:29
TODO: Document this.
TODO: Document this.
Represents a deck that was loaded from somewhere. Contains the DeckList itself, as well as info about...
Definition loaded_deck.h:14
TODO: Document this.