Cockatrice 2026-01-14-Development-2.11.0-beta.46
A cross-platform 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;
45 QLabel *bannerCardLabel = nullptr;
46 QComboBox *bannerCardComboBox = nullptr;
47 bool filteredBySearch = false;
48 bool filteredByColor = false;
49 bool filteredByTags = false;
50 [[nodiscard]] bool checkVisibility() const;
51
52signals:
53 void deckLoadRequested(const QString &filePath);
54 void openDeckEditor(const LoadedDeck &deck);
55
56public slots:
57 void setFilePath(const QString &filePath);
61 void setBannerCard(int);
62 void imageClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
63 void imageDoubleClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
64 void initializeUi(bool deckLoadSuccess);
65 void updateVisibility();
66 void updateBannerCardComboBoxVisibility(bool visible);
67 void updateTagsVisibility(bool visible);
68 void resizeEvent(QResizeEvent *event) override;
69
70private:
71 QMenu *createRightClickMenu();
72 void addSetBannerCardMenu(QMenu *menu);
73
74private slots:
75 void setTags(const QStringList &tags);
76
77 void actRenameDeck();
78 void actRenameFile();
79 void actDeleteFile();
80};
81
82class NoScrollFilter : public QObject
83{
84 Q_OBJECT
85public:
86 explicit NoScrollFilter(QObject *parent = nullptr) : QObject(parent)
87 {
88 }
89
90protected:
91 bool eventFilter(QObject *obj, QEvent *event) override
92 {
93 if (event->type() == QEvent::Wheel) {
94 if (auto *combo = qobject_cast<QComboBox *>(obj)) {
95 // If popup is not open, forward event to parent scroll area
96 if (!combo->view()->isVisible()) {
97 // Try to find a scrollable parent and manually send the event
98 QWidget *parent = combo->parentWidget();
99 while (parent) {
100 if (auto *scroll = qobject_cast<QAbstractScrollArea *>(parent)) {
101 QApplication::sendEvent(scroll->viewport(), event);
102 return true; // Mark event as handled
103 }
104 parent = parent->parentWidget();
105 }
106 // If no scrollable parent found, just block
107 return true;
108 }
109 }
110 }
111 return QObject::eventFilter(obj, event);
112 }
113};
114
115#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:44
QComboBox * bannerCardComboBox
Definition deck_preview_widget.h:46
bool filteredByTags
Definition deck_preview_widget.h:49
void updateBannerCardComboBox()
Definition deck_preview_widget.cpp:223
void setBannerCard(int)
Definition deck_preview_widget.cpp:286
void openDeckEditor(const LoadedDeck &deck)
void refreshBannerCardToolTip()
Definition deck_preview_widget.cpp:210
void retranslateUi()
Definition deck_preview_widget.cpp:55
ColorIdentityWidget * colorIdentityWidget
Definition deck_preview_widget.h:43
QString filePath
Definition deck_preview_widget.h:40
void deckLoadRequested(const QString &filePath)
void addSetBannerCardMenu(QMenu *menu)
Definition deck_preview_widget.cpp:358
DeckPreviewWidget(QWidget *_parent, VisualDeckStorageWidget *_visualDeckStorageWidget, const QString &_filePath)
Definition deck_preview_widget.cpp:20
void updateBannerCardComboBoxVisibility(bool visible)
Definition deck_preview_widget.cpp:126
QVBoxLayout * layout
Definition deck_preview_widget.h:39
QString getDisplayName() const
Definition deck_preview_widget.cpp:188
VisualDeckStorageWidget * visualDeckStorageWidget
Definition deck_preview_widget.h:38
void actDeleteFile()
Definition deck_preview_widget.cpp:426
DeckLoader * deckLoader
Definition deck_preview_widget.h:41
void refreshBannerCardText()
Definition deck_preview_widget.cpp:203
void initializeUi(bool deckLoadSuccess)
Definition deck_preview_widget.cpp:72
void setFilePath(const QString &filePath)
Definition deck_preview_widget.cpp:194
void imageDoubleClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance)
Definition deck_preview_widget.cpp:304
void actRenameDeck()
Definition deck_preview_widget.cpp:376
QLabel * bannerCardLabel
Definition deck_preview_widget.h:45
bool filteredBySearch
Definition deck_preview_widget.h:47
void setTags(const QStringList &tags)
Definition deck_preview_widget.cpp:311
void updateVisibility()
Definition deck_preview_widget.cpp:113
bool checkVisibility() const
Definition deck_preview_widget.cpp:118
void updateTagsVisibility(bool visible)
Definition deck_preview_widget.cpp:141
QString getColorIdentity()
Definition deck_preview_widget.cpp:154
bool filteredByColor
Definition deck_preview_widget.h:48
void imageClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance)
Definition deck_preview_widget.cpp:295
void resizeEvent(QResizeEvent *event) override
Definition deck_preview_widget.cpp:60
DeckPreviewCardPictureWidget * bannerCardDisplayWidget
Definition deck_preview_widget.h:42
QMenu * createRightClickMenu()
Definition deck_preview_widget.cpp:317
void actRenameFile()
Definition deck_preview_widget.cpp:395
NoScrollFilter(QObject *parent=nullptr)
Definition deck_preview_widget.h:86
bool eventFilter(QObject *obj, QEvent *event) override
Definition deck_preview_widget.h:91
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.