Move the signals down to the widget, move the connections and slots up to the parent widgets.

This commit is contained in:
Lukas Brübach 2024-12-24 10:49:31 +01:00
parent 29943d9127
commit 5a6374386d
7 changed files with 76 additions and 11 deletions

View file

@ -104,6 +104,8 @@ DeckViewContainer::DeckViewContainer(int _playerId, TabGame *parent)
{ {
loadLocalButton = new QPushButton; loadLocalButton = new QPushButton;
loadRemoteButton = new QPushButton; loadRemoteButton = new QPushButton;
unloadDeckButton = new QPushButton;
unloadDeckButton->setEnabled(false);
readyStartButton = new ToggleButton; readyStartButton = new ToggleButton;
readyStartButton->setEnabled(false); readyStartButton->setEnabled(false);
forceStartGameButton = new QPushButton; forceStartGameButton = new QPushButton;
@ -113,6 +115,7 @@ DeckViewContainer::DeckViewContainer(int _playerId, TabGame *parent)
connect(loadLocalButton, SIGNAL(clicked()), this, SLOT(loadLocalDeck())); connect(loadLocalButton, SIGNAL(clicked()), this, SLOT(loadLocalDeck()));
connect(readyStartButton, SIGNAL(clicked()), this, SLOT(readyStart())); connect(readyStartButton, SIGNAL(clicked()), this, SLOT(readyStart()));
connect(unloadDeckButton, &QPushButton::clicked, this, &DeckViewContainer::unloadDeck);
connect(forceStartGameButton, &QPushButton::clicked, this, &DeckViewContainer::forceStart); connect(forceStartGameButton, &QPushButton::clicked, this, &DeckViewContainer::forceStart);
connect(sideboardLockButton, SIGNAL(clicked()), this, SLOT(sideboardLockButtonClicked())); connect(sideboardLockButton, SIGNAL(clicked()), this, SLOT(sideboardLockButtonClicked()));
connect(sideboardLockButton, SIGNAL(stateChanged()), this, SLOT(updateSideboardLockButtonText())); connect(sideboardLockButton, SIGNAL(stateChanged()), this, SLOT(updateSideboardLockButtonText()));
@ -126,6 +129,7 @@ DeckViewContainer::DeckViewContainer(int _playerId, TabGame *parent)
auto *buttonHBox = new QHBoxLayout; auto *buttonHBox = new QHBoxLayout;
buttonHBox->addWidget(loadLocalButton); buttonHBox->addWidget(loadLocalButton);
buttonHBox->addWidget(loadRemoteButton); buttonHBox->addWidget(loadRemoteButton);
buttonHBox->addWidget(unloadDeckButton);
buttonHBox->addWidget(readyStartButton); buttonHBox->addWidget(readyStartButton);
buttonHBox->addWidget(sideboardLockButton); buttonHBox->addWidget(sideboardLockButton);
if (forceStartGameButton->isEnabled()) { if (forceStartGameButton->isEnabled()) {
@ -139,8 +143,10 @@ DeckViewContainer::DeckViewContainer(int _playerId, TabGame *parent)
connect(deckView, SIGNAL(sideboardPlanChanged()), this, SLOT(sideboardPlanChanged())); connect(deckView, SIGNAL(sideboardPlanChanged()), this, SLOT(sideboardPlanChanged()));
visualDeckStorageWidget = new VisualDeckStorageWidget(this); visualDeckStorageWidget = new VisualDeckStorageWidget(this);
connect(visualDeckStorageWidget, &VisualDeckStorageWidget::imageDoubleClicked, this,
&DeckViewContainer::replaceDeckStorageWithDeckView);
auto *deckViewLayout = new QVBoxLayout; deckViewLayout = new QVBoxLayout;
deckViewLayout->addLayout(buttonHBox); deckViewLayout->addLayout(buttonHBox);
deckViewLayout->addWidget(visualDeckStorageWidget); deckViewLayout->addWidget(visualDeckStorageWidget);
deckViewLayout->setContentsMargins(0, 0, 0, 0); deckViewLayout->setContentsMargins(0, 0, 0, 0);
@ -155,6 +161,7 @@ void DeckViewContainer::retranslateUi()
{ {
loadLocalButton->setText(tr("Load deck...")); loadLocalButton->setText(tr("Load deck..."));
loadRemoteButton->setText(tr("Load remote deck...")); loadRemoteButton->setText(tr("Load remote deck..."));
unloadDeckButton->setText(tr("Unload deck..."));
readyStartButton->setText(tr("Ready to start")); readyStartButton->setText(tr("Ready to start"));
forceStartGameButton->setText(tr("Force start")); forceStartGameButton->setText(tr("Force start"));
updateSideboardLockButtonText(); updateSideboardLockButtonText();
@ -289,6 +296,42 @@ void TabGame::refreshShortcuts()
} }
} }
void DeckViewContainer::replaceDeckStorageWithDeckView(QMouseEvent *event, DeckPreviewCardPictureWidget *instance)
{
Q_UNUSED(event);
QString fileName = instance->filePath;
DeckLoader::FileFormat fmt = DeckLoader::getFormatFromName(fileName);
QString deckString;
DeckLoader deck;
bool error = !deck.loadFromFile(fileName, fmt);
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."));
return;
}
Command_DeckSelect cmd;
cmd.set_deck(deckString.toStdString());
PendingCommand *pend = parentGame->prepareGameCommand(cmd);
connect(pend, SIGNAL(finished(Response, CommandContainer, QVariant)), this,
SLOT(deckSelectFinished(const Response &)));
parentGame->sendGameCommand(pend, playerId);
deckViewLayout->removeWidget(visualDeckStorageWidget);
deckViewLayout->addWidget(deckView);
unloadDeckButton->setEnabled(true);
}
void DeckViewContainer::unloadDeck()
{
deckViewLayout->removeWidget(deckView);
deckViewLayout->addWidget(visualDeckStorageWidget);
unloadDeckButton->setEnabled(false);
}
void DeckViewContainer::loadLocalDeck() void DeckViewContainer::loadLocalDeck()
{ {
QFileDialog dialog(this, tr("Load deck")); QFileDialog dialog(this, tr("Load deck"));

View file

@ -87,15 +87,18 @@ class DeckViewContainer : public QWidget
{ {
Q_OBJECT Q_OBJECT
private: private:
QPushButton *loadLocalButton, *loadRemoteButton, *forceStartGameButton; QVBoxLayout *deckViewLayout;
QPushButton *loadLocalButton, *loadRemoteButton, *unloadDeckButton, *forceStartGameButton;
ToggleButton *readyStartButton, *sideboardLockButton; ToggleButton *readyStartButton, *sideboardLockButton;
DeckView *deckView; DeckView *deckView;
VisualDeckStorageWidget *visualDeckStorageWidget; VisualDeckStorageWidget *visualDeckStorageWidget;
TabGame *parentGame; TabGame *parentGame;
int playerId; int playerId;
private slots: private slots:
void replaceDeckStorageWithDeckView(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
void loadLocalDeck(); void loadLocalDeck();
void loadRemoteDeck(); void loadRemoteDeck();
void unloadDeck();
void readyStart(); void readyStart();
void forceStart(); void forceStart();
void deckSelectFinished(const Response &r); void deckSelectFinished(const Response &r);

View file

@ -49,6 +49,9 @@ TabDeckStorageVisual::TabDeckStorageVisual(TabSupervisor *_tabSupervisor, Abstra
leftToolBar->addAction(aDeleteLocalDeck); leftToolBar->addAction(aDeleteLocalDeck);
visualDeckStorageWidget = new VisualDeckStorageWidget(this); visualDeckStorageWidget = new VisualDeckStorageWidget(this);
connect(visualDeckStorageWidget, &VisualDeckStorageWidget::imageDoubleClicked, this,
&TabDeckStorageVisual::actOpenLocalDeck);
connect(this, &TabDeckStorageVisual::openDeckEditor, tabSupervisor, &TabSupervisor::addDeckEditorTab);
layout->addWidget(leftToolBar); layout->addWidget(leftToolBar);
layout->addWidget(visualDeckStorageWidget); layout->addWidget(visualDeckStorageWidget);
@ -68,8 +71,6 @@ QString TabDeckStorageVisual::getTargetPath() const
return {}; return {};
} }
void TabDeckStorageVisual::actOpenLocalDeck(QMouseEvent *event, DeckPreviewCardPictureWidget *instance) void TabDeckStorageVisual::actOpenLocalDeck(QMouseEvent *event, DeckPreviewCardPictureWidget *instance)
{ {
(void)event; (void)event;

View file

@ -28,7 +28,7 @@ DeckPreviewCardPictureWidget::DeckPreviewCardPictureWidget(QWidget *parent,
{ {
singleClickTimer = new QTimer(this); singleClickTimer = new QTimer(this);
singleClickTimer->setSingleShot(true); singleClickTimer->setSingleShot(true);
connect(singleClickTimer, &QTimer::timeout, this, [this]() { qDebug() << "Clicked some stuff"; }); connect(singleClickTimer, &QTimer::timeout, this, [this]() { emit imageClicked(lastMouseEvent, this); });
} }
void DeckPreviewCardPictureWidget::mousePressEvent(QMouseEvent *event) void DeckPreviewCardPictureWidget::mousePressEvent(QMouseEvent *event)
@ -43,7 +43,7 @@ void DeckPreviewCardPictureWidget::mouseDoubleClickEvent(QMouseEvent *event)
{ {
if (event->button() == Qt::LeftButton) { if (event->button() == Qt::LeftButton) {
singleClickTimer->stop(); // Prevent single-click logic singleClickTimer->stop(); // Prevent single-click logic
emit imageClicked(lastMouseEvent, this); emit imageDoubleClicked(lastMouseEvent, this);
} }
} }

View file

@ -23,6 +23,7 @@ public:
signals: signals:
void imageClicked(QMouseEvent *event, DeckPreviewCardPictureWidget *instance); void imageClicked(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
void imageDoubleClicked(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
public slots: public slots:
void setFilePath(const QString &filePath); void setFilePath(const QString &filePath);

View file

@ -3,7 +3,6 @@
#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 "../../../ui/widgets/cards/deck_preview_card_picture_widget.h"
#include <QDirIterator> #include <QDirIterator>
@ -18,9 +17,16 @@ VisualDeckStorageWidget::VisualDeckStorageWidget(QWidget *parent) : QWidget(pare
layout->addWidget(flowWidget); layout->addWidget(flowWidget);
getBannerCardsForDecks(); getBannerCardsForDecks();
}
// TODO: Move this to class that uses this widget (The tab one, in this instance, distinct from the game one) void VisualDeckStorageWidget::imageClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance)
// connect(this, &TabDeckStorageVisual::openDeckEditor, tabSupervisor, &TabSupervisor::addDeckEditorTab); {
emit imageClicked(event, instance);
}
void VisualDeckStorageWidget::imageDoubleClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance)
{
emit imageDoubleClicked(event, instance);
} }
QStringList VisualDeckStorageWidget::getBannerCardsForDecks() QStringList VisualDeckStorageWidget::getBannerCardsForDecks()
@ -49,8 +55,10 @@ QStringList VisualDeckStorageWidget::getBannerCardsForDecks()
display->setFontSize(24); display->setFontSize(24);
display->setFilePath(deckLoader->getLastFileName()); display->setFilePath(deckLoader->getLastFileName());
// TODO: Connect these to the parent. connect(display, &DeckPreviewCardPictureWidget::imageClicked, this,
// connect(display, &DeckPreviewCardPictureWidget::imageClicked, this, &TabDeckStorageVisual::actOpenLocalDeck); &VisualDeckStorageWidget::imageClickedEvent);
connect(display, &DeckPreviewCardPictureWidget::imageDoubleClicked, this,
&VisualDeckStorageWidget::imageDoubleClickedEvent);
flowWidget->addWidget(display); flowWidget->addWidget(display);
} }

View file

@ -3,6 +3,7 @@
#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 <QFileSystemModel> #include <QFileSystemModel>
@ -14,6 +15,14 @@ public:
explicit VisualDeckStorageWidget(QWidget *parent); explicit VisualDeckStorageWidget(QWidget *parent);
void retranslateUi(); void retranslateUi();
public slots:
void imageClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
void imageDoubleClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
signals:
void imageClicked(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
void imageDoubleClicked(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
private: private:
QHBoxLayout *layout; QHBoxLayout *layout;
FlowWidget *flowWidget; FlowWidget *flowWidget;