Shuffle some classes and signals around.

This commit is contained in:
Lukas Brübach 2025-01-07 22:23:27 +01:00
parent bb4d30107e
commit 11f92bf101
13 changed files with 224 additions and 97 deletions

View file

@ -162,8 +162,10 @@ set(cockatrice_SOURCES
src/game/zones/view_zone.cpp src/game/zones/view_zone.cpp
src/client/tabs/visual_deck_storage/tab_deck_storage_visual.cpp src/client/tabs/visual_deck_storage/tab_deck_storage_visual.cpp
src/client/ui/widgets/cards/deck_preview_card_picture_widget.cpp src/client/ui/widgets/cards/deck_preview_card_picture_widget.cpp
src/client/ui/widgets/visual_deck_storage/deck_preview_widget.cpp
src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp
src/client/ui/widgets/visual_deck_storage/visual_deck_storage_search_widget.cpp src/client/ui/widgets/visual_deck_storage/visual_deck_storage_search_widget.cpp
src/client/ui/widgets/visual_deck_storage/visual_deck_storage_sort_widget.cpp
${VERSION_STRING_CPP} ${VERSION_STRING_CPP}
) )

View file

@ -145,7 +145,7 @@ DeckViewContainer::DeckViewContainer(int _playerId, TabGame *parent)
deckView->setVisible(false); deckView->setVisible(false);
visualDeckStorageWidget = new VisualDeckStorageWidget(this); visualDeckStorageWidget = new VisualDeckStorageWidget(this);
connect(visualDeckStorageWidget, &VisualDeckStorageWidget::imageDoubleClicked, this, connect(visualDeckStorageWidget, &VisualDeckStorageWidget::deckPreviewDoubleClicked, this,
&DeckViewContainer::replaceDeckStorageWithDeckView); &DeckViewContainer::replaceDeckStorageWithDeckView);
deckViewLayout = new QVBoxLayout; deckViewLayout = new QVBoxLayout;
@ -299,20 +299,12 @@ void TabGame::refreshShortcuts()
} }
} }
void DeckViewContainer::replaceDeckStorageWithDeckView(QMouseEvent *event, DeckPreviewCardPictureWidget *instance) void DeckViewContainer::replaceDeckStorageWithDeckView(QMouseEvent *event, DeckPreviewWidget *instance)
{ {
Q_UNUSED(event); Q_UNUSED(event);
QString fileName = instance->filePath; QString deckString = instance->deckLoader->writeToString_Native();
DeckLoader::FileFormat fmt = DeckLoader::getFormatFromName(fileName);
QString deckString;
DeckLoader deck;
bool error = !deck.loadFromFile(fileName, fmt, true); if (deckString.length() > MAX_FILE_LENGTH) {
if (!error) {
deckString = deck.writeToString_Native();
error = deckString.length() > MAX_FILE_LENGTH;
}
if (error) {
QMessageBox::critical(this, tr("Error"), tr("The selected file could not be loaded.")); QMessageBox::critical(this, tr("Error"), tr("The selected file could not be loaded."));
return; return;
} }

View file

@ -95,7 +95,7 @@ private:
TabGame *parentGame; TabGame *parentGame;
int playerId; int playerId;
private slots: private slots:
void replaceDeckStorageWithDeckView(QMouseEvent *event, DeckPreviewCardPictureWidget *instance); void replaceDeckStorageWithDeckView(QMouseEvent *event, DeckPreviewWidget *instance);
void loadLocalDeck(); void loadLocalDeck();
void loadRemoteDeck(); void loadRemoteDeck();
void unloadDeck(); void unloadDeck();

View file

@ -49,7 +49,7 @@ TabDeckStorageVisual::TabDeckStorageVisual(TabSupervisor *_tabSupervisor, Abstra
leftToolBar->addAction(aDeleteLocalDeck); leftToolBar->addAction(aDeleteLocalDeck);
visualDeckStorageWidget = new VisualDeckStorageWidget(this); visualDeckStorageWidget = new VisualDeckStorageWidget(this);
connect(visualDeckStorageWidget, &VisualDeckStorageWidget::imageDoubleClicked, this, connect(visualDeckStorageWidget, &VisualDeckStorageWidget::deckPreviewDoubleClicked, this,
&TabDeckStorageVisual::actOpenLocalDeck); &TabDeckStorageVisual::actOpenLocalDeck);
// layout->addWidget(leftToolBar); // layout->addWidget(leftToolBar);
@ -74,7 +74,7 @@ QString TabDeckStorageVisual::getTargetPath() const
return {}; return {};
} }
void TabDeckStorageVisual::actOpenLocalDeck(QMouseEvent *event, DeckPreviewCardPictureWidget *instance) void TabDeckStorageVisual::actOpenLocalDeck(QMouseEvent *event, DeckPreviewWidget *instance)
{ {
(void)event; (void)event;
DeckLoader deckLoader; DeckLoader deckLoader;

View file

@ -34,7 +34,7 @@ public:
public slots: public slots:
void cardUpdateFinished(int exitCode, QProcess::ExitStatus exitStatus); void cardUpdateFinished(int exitCode, QProcess::ExitStatus exitStatus);
void closeRequest() override; void closeRequest() override;
void actOpenLocalDeck(QMouseEvent *event, DeckPreviewCardPictureWidget *instance); void actOpenLocalDeck(QMouseEvent *event, DeckPreviewWidget *instance);
void actDeleteLocalDeck(); void actDeleteLocalDeck();
signals: signals:
void openDeckEditor(const DeckLoader *deckLoader); void openDeckEditor(const DeckLoader *deckLoader);

View file

@ -1,6 +1,7 @@
#include "deck_preview_card_picture_widget.h" #include "deck_preview_card_picture_widget.h"
#include <QApplication> #include <QApplication>
#include <QFileInfo>
#include <QFontMetrics> #include <QFontMetrics>
#include <QMouseEvent> #include <QMouseEvent>
#include <QPainterPath> #include <QPainterPath>
@ -15,6 +16,7 @@
* @param outlineColor The color of the outline around the text. * @param outlineColor The color of the outline around the text.
* @param fontSize The font size of the overlay text. * @param fontSize The font size of the overlay text.
* @param alignment The alignment of the text within the overlay. * @param alignment The alignment of the text within the overlay.
* @param _deckLoader The Deck Loader holding the Deck associated with this preview.
* *
* Sets the widget's size policy and default border style. * Sets the widget's size policy and default border style.
*/ */
@ -26,7 +28,6 @@ DeckPreviewCardPictureWidget::DeckPreviewCardPictureWidget(QWidget *parent,
const Qt::Alignment alignment) const Qt::Alignment alignment)
: CardInfoPictureWithTextOverlayWidget(parent, hoverToZoomEnabled, textColor, outlineColor, fontSize, alignment) : CardInfoPictureWithTextOverlayWidget(parent, hoverToZoomEnabled, textColor, outlineColor, fontSize, alignment)
{ {
// TODO Make this hold the deckloader
singleClickTimer = new QTimer(this); singleClickTimer = new QTimer(this);
singleClickTimer->setSingleShot(true); singleClickTimer->setSingleShot(true);
connect(singleClickTimer, &QTimer::timeout, this, [this]() { emit imageClicked(lastMouseEvent, this); }); connect(singleClickTimer, &QTimer::timeout, this, [this]() { emit imageClicked(lastMouseEvent, this); });
@ -47,8 +48,3 @@ void DeckPreviewCardPictureWidget::mouseDoubleClickEvent(QMouseEvent *event)
emit imageDoubleClicked(lastMouseEvent, this); emit imageDoubleClicked(lastMouseEvent, this);
} }
} }
void DeckPreviewCardPictureWidget::setFilePath(const QString &_filePath)
{
filePath = _filePath;
}

View file

@ -12,22 +12,17 @@ class DeckPreviewCardPictureWidget final : public CardInfoPictureWithTextOverlay
Q_OBJECT Q_OBJECT
public: public:
explicit DeckPreviewCardPictureWidget(QWidget *parent = nullptr, explicit DeckPreviewCardPictureWidget(QWidget *parent,
bool hoverToZoomEnabled = false, bool hoverToZoomEnabled = false,
const QColor &textColor = Qt::white, const QColor &textColor = Qt::white,
const QColor &outlineColor = Qt::black, const QColor &outlineColor = Qt::black,
int fontSize = 12, int fontSize = 12,
Qt::Alignment alignment = Qt::AlignCenter); Qt::Alignment alignment = Qt::AlignCenter);
QString filePath;
signals: signals:
void imageClicked(QMouseEvent *event, DeckPreviewCardPictureWidget *instance); void imageClicked(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
void imageDoubleClicked(QMouseEvent *event, DeckPreviewCardPictureWidget *instance); void imageDoubleClicked(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
public slots:
void setFilePath(const QString &filePath);
private: private:
QTimer *singleClickTimer; QTimer *singleClickTimer;
QMouseEvent *lastMouseEvent = nullptr; // Store the last mouse event QMouseEvent *lastMouseEvent = nullptr; // Store the last mouse event

View file

@ -0,0 +1,52 @@
#include "deck_preview_widget.h"
#include "../../../../game/cards/card_database_manager.h"
#include "../cards/deck_preview_card_picture_widget.h"
#include <QFileInfo>
#include <QVBoxLayout>
DeckPreviewWidget::DeckPreviewWidget(QWidget *parent, const QString &_filePath) : QWidget(parent), filePath(_filePath)
{
layout = new QVBoxLayout(this);
setLayout(layout);
deckLoader = new DeckLoader();
deckLoader->loadFromFile(filePath, DeckLoader::CockatriceFormat);
auto bannerCard = deckLoader->getBannerCard().isEmpty()
? CardInfoPtr()
: CardDatabaseManager::getInstance()->getCard(deckLoader->getBannerCard());
bannerCardDisplayWidget = new DeckPreviewCardPictureWidget(this);
connect(bannerCardDisplayWidget, &DeckPreviewCardPictureWidget::imageClicked, this,
&DeckPreviewWidget::imageClickedEvent);
connect(bannerCardDisplayWidget, &DeckPreviewCardPictureWidget::imageDoubleClicked, this,
&DeckPreviewWidget::imageDoubleClickedEvent);
bannerCardDisplayWidget->setCard(bannerCard);
bannerCardDisplayWidget->setOverlayText(
deckLoader->getName().isEmpty() ? QFileInfo(deckLoader->getLastFileName()).fileName() : deckLoader->getName());
bannerCardDisplayWidget->setFontSize(24);
setFilePath(deckLoader->getLastFileName());
layout->addWidget(bannerCardDisplayWidget);
}
void DeckPreviewWidget::setFilePath(const QString &_filePath)
{
filePath = _filePath;
}
void DeckPreviewWidget::imageClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance)
{
Q_UNUSED(instance);
emit deckPreviewClicked(event, this);
}
void DeckPreviewWidget::imageDoubleClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance)
{
Q_UNUSED(instance);
emit deckPreviewDoubleClicked(event, this);
}

View file

@ -0,0 +1,31 @@
#ifndef DECK_PREVIEW_WIDGET_H
#define DECK_PREVIEW_WIDGET_H
#include "../../../../deck/deck_loader.h"
#include "../cards/deck_preview_card_picture_widget.h"
#include <QVBoxLayout>
#include <QWidget>
class DeckPreviewWidget final : public QWidget
{
Q_OBJECT
public:
explicit DeckPreviewWidget(QWidget *parent, const QString &_filePath);
QVBoxLayout *layout;
QString filePath;
DeckLoader *deckLoader;
DeckPreviewCardPictureWidget *bannerCardDisplayWidget;
signals:
void deckPreviewClicked(QMouseEvent *event, DeckPreviewWidget *instance);
void deckPreviewDoubleClicked(QMouseEvent *event, DeckPreviewWidget *instance);
public slots:
void setFilePath(const QString &filePath);
void imageClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
void imageDoubleClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
};
#endif // DECK_PREVIEW_WIDGET_H

View file

@ -0,0 +1,63 @@
#include "visual_deck_storage_sort_widget.h"
#include "../../../../settings/cache_settings.h"
/**
* @brief Constructs a PrintingSelectorCardSortWidget for searching cards by set name or set code.
*
* This widget provides a search bar that allows users to search for cards by either their set name
* or set code. It uses a debounced timer to trigger the search action after the user stops typing.
*
* @param parent The parent PrintingSelector widget that will handle the search results.
*/
VisualDeckStorageSortWidget::VisualDeckStorageSortWidget(VisualDeckStorageWidget *parent)
: parent(parent), sortOrder(Alphabetical)
{
layout = new QHBoxLayout(this);
setLayout(layout);
// ComboBox for sorting options
sortComboBox = new QComboBox(this);
sortComboBox->addItem("Sort Alphabetically (Filename)", Alphabetical);
sortComboBox->addItem("Sort by Last Modified", ByLastModified);
// Connect sorting change signal to refresh the file list
connect(sortComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,
&VisualDeckStorageSortWidget::updateSortOrder);
connect(this, &VisualDeckStorageSortWidget::sortOrderChanged, parent, &VisualDeckStorageWidget::updateSortOrder);
layout->addWidget(sortComboBox);
}
void VisualDeckStorageSortWidget::showEvent(QShowEvent *event)
{
QWidget::showEvent(event);
sortComboBox->setCurrentIndex(SettingsCache::instance().getVisualDeckStorageSortingOrder());
}
void VisualDeckStorageSortWidget::updateSortOrder()
{
sortOrder = static_cast<SortOrder>(sortComboBox->currentData().toInt());
SettingsCache::instance().setVisualDeckStorageSortingOrder(sortComboBox->currentData().toInt());
emit sortOrderChanged();
}
QStringList VisualDeckStorageSortWidget::filterFiles(QStringList &files)
{
// Sort files based on the current sort order
std::sort(files.begin(), files.end(), [this](const QString &file1, const QString &file2) {
QFileInfo info1(file1);
QFileInfo info2(file2);
switch (sortOrder) {
case Alphabetical:
return info1.fileName().toLower() < info2.fileName().toLower();
case ByLastModified:
return info1.lastModified() > info2.lastModified();
}
return false; // Default case
});
return files;
}

View file

@ -0,0 +1,39 @@
#ifndef VISUAL_DECK_STORAGE_SORT_WIDGET_H
#define VISUAL_DECK_STORAGE_SORT_WIDGET_H
#include "visual_deck_storage_widget.h"
#include <QComboBox>
#include <QHBoxLayout>
#include <QWidget>
class VisualDeckStorageWidget;
class VisualDeckStorageSortWidget : public QWidget
{
Q_OBJECT
public:
explicit VisualDeckStorageSortWidget(VisualDeckStorageWidget *parent);
void updateSortOrder();
QString getSearchText();
QStringList filterFiles(QStringList &files);
public slots:
void showEvent(QShowEvent *event) override;
signals:
void sortOrderChanged();
private:
enum SortOrder
{
Alphabetical,
ByLastModified
};
QHBoxLayout *layout;
VisualDeckStorageWidget *parent;
SortOrder sortOrder; // Current sorting option
QComboBox *sortComboBox;
};
#endif // VISUAL_DECK_STORAGE_SORT_WIDGET_H

View file

@ -3,14 +3,16 @@
#include "../../../../deck/deck_loader.h" #include "../../../../deck/deck_loader.h"
#include "../../../../game/cards/card_database_manager.h" #include "../../../../game/cards/card_database_manager.h"
#include "../../../../settings/cache_settings.h" #include "../../../../settings/cache_settings.h"
#include "deck_preview_widget.h"
#include "visual_deck_storage_search_widget.h" #include "visual_deck_storage_search_widget.h"
#include "visual_deck_storage_sort_widget.h"
#include <QComboBox> #include <QComboBox>
#include <QDirIterator> #include <QDirIterator>
#include <QMouseEvent> #include <QMouseEvent>
#include <QVBoxLayout> #include <QVBoxLayout>
VisualDeckStorageWidget::VisualDeckStorageWidget(QWidget *parent) : QWidget(parent), sortOrder(Alphabetical) VisualDeckStorageWidget::VisualDeckStorageWidget(QWidget *parent) : QWidget(parent)
{ {
deckListModel = new DeckListModel(this); deckListModel = new DeckListModel(this);
deckListModel->setObjectName("visualDeckModel"); deckListModel->setObjectName("visualDeckModel");
@ -18,16 +20,11 @@ VisualDeckStorageWidget::VisualDeckStorageWidget(QWidget *parent) : QWidget(pare
layout = new QVBoxLayout(); layout = new QVBoxLayout();
setLayout(layout); setLayout(layout);
// ComboBox for sorting options sortWidget = new VisualDeckStorageSortWidget(this);
sortComboBox = new QComboBox(this);
sortComboBox->addItem("Sort Alphabetically (Filename)", Alphabetical);
sortComboBox->addItem("Sort by Last Modified", ByLastModified);
sortComboBox->setCurrentIndex(SettingsCache::instance().getVisualDeckStorageSortingOrder());
searchWidget = new VisualDeckStorageSearchWidget(this); searchWidget = new VisualDeckStorageSearchWidget(this);
// Add combo box to the main layout // Add combo box to the main layout
layout->addWidget(sortComboBox); layout->addWidget(sortWidget);
layout->addWidget(searchWidget); layout->addWidget(searchWidget);
flowWidget = new FlowWidget(this, Qt::ScrollBarAlwaysOff, Qt::ScrollBarAsNeeded); flowWidget = new FlowWidget(this, Qt::ScrollBarAlwaysOff, Qt::ScrollBarAsNeeded);
@ -35,10 +32,6 @@ VisualDeckStorageWidget::VisualDeckStorageWidget(QWidget *parent) : QWidget(pare
cardSizeWidget = new CardSizeWidget(this, flowWidget, SettingsCache::instance().getVisualDeckStorageCardSize()); cardSizeWidget = new CardSizeWidget(this, flowWidget, SettingsCache::instance().getVisualDeckStorageCardSize());
layout->addWidget(cardSizeWidget); layout->addWidget(cardSizeWidget);
// Connect sorting change signal to refresh the file list
connect(sortComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,
&VisualDeckStorageWidget::updateSortOrder);
} }
void VisualDeckStorageWidget::showEvent(QShowEvent *event) void VisualDeckStorageWidget::showEvent(QShowEvent *event)
@ -49,19 +42,17 @@ void VisualDeckStorageWidget::showEvent(QShowEvent *event)
void VisualDeckStorageWidget::updateSortOrder() void VisualDeckStorageWidget::updateSortOrder()
{ {
sortOrder = static_cast<SortOrder>(sortComboBox->currentData().toInt());
SettingsCache::instance().setVisualDeckStorageSortingOrder(sortComboBox->currentData().toInt());
refreshBannerCards(); // Refresh the banner cards with the new sort order refreshBannerCards(); // Refresh the banner cards with the new sort order
} }
void VisualDeckStorageWidget::imageClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance) void VisualDeckStorageWidget::deckPreviewClickedEvent(QMouseEvent *event, DeckPreviewWidget *instance)
{ {
emit imageClicked(event, instance); emit deckPreviewClicked(event, instance);
} }
void VisualDeckStorageWidget::imageDoubleClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance) void VisualDeckStorageWidget::deckPreviewDoubleClickedEvent(QMouseEvent *event, DeckPreviewWidget *instance)
{ {
emit imageDoubleClicked(event, instance); emit deckPreviewDoubleClicked(event, instance);
} }
void VisualDeckStorageWidget::refreshBannerCards() void VisualDeckStorageWidget::refreshBannerCards()
@ -76,48 +67,20 @@ void VisualDeckStorageWidget::refreshBannerCards()
allFiles << it.next(); // Add each file path to the list allFiles << it.next(); // Add each file path to the list
} }
// Sort files based on the current sort order auto filteredFiles = searchWidget->filterFiles(sortWidget->filterFiles(allFiles), searchWidget->getSearchText());
std::sort(allFiles.begin(), allFiles.end(), [this](const QString &file1, const QString &file2) {
QFileInfo info1(file1);
QFileInfo info2(file2);
switch (sortOrder) {
case Alphabetical:
return info1.fileName().toLower() < info2.fileName().toLower();
case ByLastModified:
return info1.lastModified() > info2.lastModified();
}
return false; // Default case
});
auto filteredFiles = searchWidget->filterFiles(allFiles, searchWidget->getSearchText());
flowWidget->clearLayout(); // Clear existing widgets in the flow layout flowWidget->clearLayout(); // Clear existing widgets in the flow layout
foreach (const QString &file, filteredFiles) { foreach (const QString &file, filteredFiles) {
// TODO: We load the deck here to retrieve information (we sorta really have to) but since we do the work, auto *display = new DeckPreviewWidget(flowWidget, file);
// we may as well persist the deckLoader to save ourselves some heavy lifting later?
auto deckLoader = new DeckLoader();
deckLoader->loadFromFile(file, DeckLoader::CockatriceFormat);
deckListModel->setDeckList(new DeckLoader(*deckLoader));
auto *display = new DeckPreviewCardPictureWidget(flowWidget, false); connect(display, &DeckPreviewWidget::deckPreviewClicked, this,
auto bannerCard = deckLoader->getBannerCard().isEmpty() &VisualDeckStorageWidget::deckPreviewClickedEvent);
? CardInfoPtr() connect(display, &DeckPreviewWidget::deckPreviewDoubleClicked, this,
: CardDatabaseManager::getInstance()->getCard(deckLoader->getBannerCard()); &VisualDeckStorageWidget::deckPreviewDoubleClickedEvent);
display->setCard(bannerCard); connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, display->bannerCardDisplayWidget,
display->setOverlayText(deckLoader->getName().isEmpty() ? QFileInfo(deckLoader->getLastFileName()).fileName() &CardInfoPictureWidget::setScaleFactor);
: deckLoader->getName()); display->bannerCardDisplayWidget->setScaleFactor(cardSizeWidget->getSlider()->value());
display->setFontSize(24);
display->setFilePath(deckLoader->getLastFileName());
connect(display, &DeckPreviewCardPictureWidget::imageClicked, this,
&VisualDeckStorageWidget::imageClickedEvent);
connect(display, &DeckPreviewCardPictureWidget::imageDoubleClicked, this,
&VisualDeckStorageWidget::imageDoubleClickedEvent);
connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, display, &CardInfoPictureWidget::setScaleFactor);
display->setScaleFactor(cardSizeWidget->getSlider()->value());
flowWidget->addWidget(display); flowWidget->addWidget(display);
} }
} }

View file

@ -3,15 +3,16 @@
#include "../../../../deck/deck_list_model.h" #include "../../../../deck/deck_list_model.h"
#include "../../../../deck/deck_view.h" #include "../../../../deck/deck_view.h"
#include "../../../ui/widgets/cards/deck_preview_card_picture_widget.h"
#include "../../../ui/widgets/general/layout_containers/flow_widget.h" #include "../../../ui/widgets/general/layout_containers/flow_widget.h"
#include "../cards/card_size_widget.h" #include "../cards/card_size_widget.h"
#include "deck_preview_widget.h"
#include "visual_deck_storage_search_widget.h" #include "visual_deck_storage_search_widget.h"
#include "visual_deck_storage_sort_widget.h"
#include <QComboBox>
#include <QFileSystemModel> #include <QFileSystemModel>
class VisualDeckStorageSearchWidget; class VisualDeckStorageSearchWidget;
class VisualDeckStorageSortWidget;
class VisualDeckStorageWidget final : public QWidget class VisualDeckStorageWidget final : public QWidget
{ {
Q_OBJECT Q_OBJECT
@ -20,30 +21,23 @@ public:
void retranslateUi(); void retranslateUi();
public slots: public slots:
void imageClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance); void deckPreviewClickedEvent(QMouseEvent *event, DeckPreviewWidget *instance);
void imageDoubleClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance); void deckPreviewDoubleClickedEvent(QMouseEvent *event, DeckPreviewWidget *instance);
void refreshBannerCards(); // Refresh the display of cards based on the current sorting option void refreshBannerCards(); // Refresh the display of cards based on the current sorting option
void showEvent(QShowEvent *event) override; void showEvent(QShowEvent *event) override;
void updateSortOrder(); void updateSortOrder();
signals: signals:
void imageClicked(QMouseEvent *event, DeckPreviewCardPictureWidget *instance); void deckPreviewClicked(QMouseEvent *event, DeckPreviewWidget *instance);
void imageDoubleClicked(QMouseEvent *event, DeckPreviewCardPictureWidget *instance); void deckPreviewDoubleClicked(QMouseEvent *event, DeckPreviewWidget *instance);
private: private:
enum SortOrder
{
Alphabetical,
ByLastModified
};
QVBoxLayout *layout; QVBoxLayout *layout;
FlowWidget *flowWidget; FlowWidget *flowWidget;
DeckListModel *deckListModel; DeckListModel *deckListModel;
QMap<QString, DeckViewCardContainer *> cardContainers; QMap<QString, DeckViewCardContainer *> cardContainers;
SortOrder sortOrder; // Current sorting option VisualDeckStorageSortWidget *sortWidget;
QComboBox *sortComboBox;
VisualDeckStorageSearchWidget *searchWidget; VisualDeckStorageSearchWidget *searchWidget;
CardSizeWidget *cardSizeWidget; CardSizeWidget *cardSizeWidget;
}; };