mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-18 16:32:16 -07:00
Shuffle some classes and signals around.
This commit is contained in:
parent
bb4d30107e
commit
11f92bf101
13 changed files with 224 additions and 97 deletions
|
|
@ -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}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue