Cockatrice 2026-09-01-Development-3.1.0-beta.10
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
11
12#include <QAbstractItemView>
13#include <QApplication>
14#include <QComboBox>
15#include <QEvent>
16#include <QVBoxLayout>
17#include <QWidget>
18
19class QEnterEvent;
20class QLabel;
21class QMenu;
22class QMouseEvent;
28
29class DeckPreviewWidget final : public QWidget
30{
31 Q_OBJECT
32public:
33 explicit DeckPreviewWidget(QWidget *parent,
34 VisualDeckStorageWidget *_visualDeckStorageWidget,
36 const QString &_filePath);
37 void retranslateUi();
38
43
44signals:
45 void deckLoadRequested(const QString &filePath);
46 void openDeckEditor(const LoadedDeck &deck);
47
48public slots:
53 void syncFromModel();
54
58 void reloadIfModified();
60 void updateColorIdentityVisibility(bool visible);
61 void updateBannerCardComboBoxVisibility(bool visible);
62 void updateTagsVisibility(bool visible);
63 void setBannerCard(int);
64 void setTags(const QStringList &tags);
65
66protected:
67 void enterEvent(QEnterEvent *event) override;
68 void resizeEvent(QResizeEvent *event) override;
69
70private:
71 [[nodiscard]] int row() const;
72 [[nodiscard]] QString getDisplayName() const;
74 void updateBannerCardComboBox(const QString &currentText);
76 QMenu *createRightClickMenu();
77 void addSetBannerCardMenu(QMenu *menu);
78 void imageClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
79 void imageDoubleClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
80
81 void actRenameDeck();
82 void actRenameFile();
83 void actDeleteFile();
84
87 QString filePath;
88 QVBoxLayout *layout;
93 QList<QWidget *> fixedWidthChildren;
95};
96
97class NoScrollFilter : public QObject
98{
99 Q_OBJECT
100public:
101 explicit NoScrollFilter(QObject *parent = nullptr) : QObject(parent)
102 {
103 }
104
105protected:
106 bool eventFilter(QObject *obj, QEvent *event) override
107 {
108 if (event->type() == QEvent::Wheel) {
109 if (auto *combo = qobject_cast<QComboBox *>(obj)) {
110 // If popup is not open, forward event to parent scroll area
111 if (!combo->view()->isVisible()) {
112 // Try to find a scrollable parent and manually send the event
113 QWidget *parent = combo->parentWidget();
114 while (parent) {
115 if (auto *scroll = qobject_cast<QAbstractScrollArea *>(parent)) {
116 QApplication::sendEvent(scroll->viewport(), event);
117 return true; // Mark event as handled
118 }
119 parent = parent->parentWidget();
120 }
121 // If no scrollable parent found, just block
122 return true;
123 }
124 }
125 }
126 return QObject::eventFilter(obj, event);
127 }
128};
129
130#endif // DECK_PREVIEW_WIDGET_H
Definition color_identity_widget.h:15
Definition deck_preview_card_picture_widget.h:19
Definition deck_preview_deck_tags_display_widget.h:16
DeckPreviewDeckTagsDisplayWidget * deckTagsDisplayWidget
Definition deck_preview_widget.h:90
QComboBox * bannerCardComboBox
Definition deck_preview_widget.h:92
void setBannerCard(int)
Definition deck_preview_widget.cpp:319
int row() const
The row of this deck in the source model, or -1 if it no longer exists.
Definition deck_preview_widget.cpp:138
void openDeckEditor(const LoadedDeck &deck)
void refreshBannerCardToolTip()
Definition deck_preview_widget.cpp:240
void retranslateUi()
Definition deck_preview_widget.cpp:104
ColorIdentityWidget * colorIdentityWidget
Definition deck_preview_widget.h:89
QString filePath
Definition deck_preview_widget.h:87
void deckLoadRequested(const QString &filePath)
void addSetBannerCardMenu(QMenu *menu)
Definition deck_preview_widget.cpp:413
void updateBannerCardComboBoxVisibility(bool visible)
Definition deck_preview_widget.cpp:201
bool promptFileConversionIfRequired()
Definition deck_preview_widget.cpp:505
QVBoxLayout * layout
Definition deck_preview_widget.h:88
void updateBannerCardComboBox(const QString &currentText)
Definition deck_preview_widget.cpp:253
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:146
void enterEvent(QEnterEvent *event) override
Definition deck_preview_widget.cpp:127
VisualDeckStorageWidget * visualDeckStorageWidget
Definition deck_preview_widget.h:85
void actDeleteFile()
Definition deck_preview_widget.cpp:478
DeckPreviewWidget(QWidget *parent, VisualDeckStorageWidget *_visualDeckStorageWidget, VisualDeckStorageModel *_model, const QString &_filePath)
Definition deck_preview_widget.cpp:26
void refreshBannerCardText()
Definition deck_preview_widget.cpp:233
int lastKnownBannerWidth
The picture width last applied to the children.
Definition deck_preview_widget.h:94
void imageDoubleClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance)
Definition deck_preview_widget.cpp:340
void actRenameDeck()
Definition deck_preview_widget.cpp:431
QLabel * bannerCardLabel
Definition deck_preview_widget.h:91
void updateColorIdentityVisibility(bool visible)
Definition deck_preview_widget.cpp:192
void setTags(const QStringList &tags)
Definition deck_preview_widget.cpp:347
void updateTagsVisibility(bool visible)
Definition deck_preview_widget.cpp:216
QList< QWidget * > fixedWidthChildren
Children clamped to the picture width on resize.
Definition deck_preview_widget.h:93
VisualDeckStorageModel * model
Definition deck_preview_widget.h:86
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:171
void reloadIfModified()
Reloads the deck file if its modification time is newer than the stored one.
Definition deck_preview_widget.cpp:158
void imageClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance)
Definition deck_preview_widget.cpp:331
void resizeEvent(QResizeEvent *event) override
Definition deck_preview_widget.cpp:109
DeckPreviewCardPictureWidget * bannerCardDisplayWidget
The banner card picture; the parent widget wires its size to the card size setting.
Definition deck_preview_widget.h:42
QMenu * createRightClickMenu()
Definition deck_preview_widget.cpp:355
void actRenameFile()
Definition deck_preview_widget.cpp:453
NoScrollFilter(QObject *parent=nullptr)
Definition deck_preview_widget.h:101
bool eventFilter(QObject *obj, QEvent *event) override
Definition deck_preview_widget.h:106
The list model backing the Visual Deck Storage widget tree.
Definition visual_deck_storage_model.h:97
Definition visual_deck_storage_widget.h:30
Represents a deck that was loaded from somewhere. Contains the DeckList itself, as well as info about...
Definition loaded_deck.h:14
Source model for the Visual Deck Storage: the deck files on disk.