mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-18 16:32:16 -07:00
Add TabDeckStorageVisual
This commit is contained in:
parent
0402d4b853
commit
0a1e0bcf84
5 changed files with 255 additions and 0 deletions
|
|
@ -159,6 +159,7 @@ set(cockatrice_SOURCES
|
|||
src/client/ui/window_main.cpp
|
||||
src/game/zones/view_zone_widget.cpp
|
||||
src/game/zones/view_zone.cpp
|
||||
src/client/tabs/visual_deck_storage/tab_deck_storage_visual.cpp
|
||||
${VERSION_STRING_CPP}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
#include "tab_replays.h"
|
||||
#include "tab_room.h"
|
||||
#include "tab_server.h"
|
||||
#include "visual_deck_storage/tab_deck_storage_visual.h"
|
||||
|
||||
#include <QApplication>
|
||||
#include <QDebug>
|
||||
|
|
@ -504,6 +505,15 @@ TabDeckEditor *TabSupervisor::addDeckEditorTab(const DeckLoader *deckToOpen)
|
|||
return tab;
|
||||
}
|
||||
|
||||
TabDeckStorageVisual *TabSupervisor::addVisualDeckStorageTab()
|
||||
{
|
||||
TabDeckStorageVisual *tab = new TabDeckStorageVisual(this, client);
|
||||
int tabIndex = myAddTab(tab);
|
||||
addCloseButtonToTab(tab, tabIndex);
|
||||
setCurrentWidget(tab);
|
||||
return tab;
|
||||
}
|
||||
|
||||
void TabSupervisor::deckEditorClosed(TabDeckEditor *tab)
|
||||
{
|
||||
if (tab == currentWidget())
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include "../../deck/deck_loader.h"
|
||||
#include "../../server/chat_view/user_list_proxy.h"
|
||||
#include "visual_deck_storage/tab_deck_storage_visual.h"
|
||||
|
||||
#include <QAbstractButton>
|
||||
#include <QCommonStyle>
|
||||
|
|
@ -130,6 +131,7 @@ signals:
|
|||
|
||||
public slots:
|
||||
TabDeckEditor *addDeckEditorTab(const DeckLoader *deckToOpen);
|
||||
TabDeckStorageVisual *addVisualDeckStorageTab();
|
||||
void openReplay(GameReplay *replay);
|
||||
void maximizeMainWindow();
|
||||
private slots:
|
||||
|
|
|
|||
|
|
@ -0,0 +1,184 @@
|
|||
#include "tab_deck_storage_visual.h"
|
||||
|
||||
#include "../../../deck/deck_list_model.h"
|
||||
#include "../../../deck/deck_loader.h"
|
||||
#include "../../../deck/deck_view.h"
|
||||
#include "../../../game/cards/card_database_manager.h"
|
||||
#include "../../../game/cards/card_database_model.h"
|
||||
#include "../../../main.h"
|
||||
#include "../../../settings/cache_settings.h"
|
||||
#include "../../dbconverter/src/mocks.h"
|
||||
#include "../../ui/picture_loader.h"
|
||||
#include "../../ui/widgets/cards/card_info_picture_widget.h"
|
||||
#include "../../ui/widgets/cards/card_info_picture_with_text_overlay_widget.h"
|
||||
#include "../../ui/widgets/general/layout_containers/flow_widget.h"
|
||||
#include "../../ui/widgets/general/layout_containers/overlap_widget.h"
|
||||
#include "pb/command_deck_del.pb.h"
|
||||
|
||||
#include <QAction>
|
||||
#include <QDebug>
|
||||
#include <QFileSystemModel>
|
||||
#include <QHBoxLayout>
|
||||
#include <QInputDialog>
|
||||
#include <QMessageBox>
|
||||
#include <QScreen>
|
||||
#include <QToolBar>
|
||||
#include <QTreeView>
|
||||
|
||||
class FlowLayout;
|
||||
TabDeckStorageVisual::TabDeckStorageVisual(TabSupervisor *_tabSupervisor, AbstractClient *_client)
|
||||
: Tab(_tabSupervisor), client(_client)
|
||||
{
|
||||
deck_list_model = new DeckListModel(this);
|
||||
deck_list_model->setObjectName("visualDeckModel");
|
||||
|
||||
flow_widget = new FlowWidget(this, Qt::ScrollBarAlwaysOff,Qt::ScrollBarPolicy::ScrollBarAsNeeded);
|
||||
this->setCentralWidget(flow_widget);
|
||||
|
||||
// Start adding our Widgets to our FlowLayout...
|
||||
|
||||
getBannerCardsForDecks();
|
||||
|
||||
leftToolBar = new QToolBar;
|
||||
leftToolBar->setOrientation(Qt::Horizontal);
|
||||
leftToolBar->setIconSize(QSize(32, 32));
|
||||
QHBoxLayout *leftToolBarLayout = new QHBoxLayout;
|
||||
leftToolBarLayout->addStretch();
|
||||
leftToolBarLayout->addWidget(leftToolBar);
|
||||
leftToolBarLayout->addStretch();
|
||||
|
||||
aOpenLocalDeck = new QAction(this);
|
||||
aOpenLocalDeck->setIcon(QPixmap("theme:icons/pencil"));
|
||||
connect(aOpenLocalDeck, SIGNAL(triggered()), this, SLOT(actOpenLocalDeck()));
|
||||
aDeleteLocalDeck = new QAction(this);
|
||||
aDeleteLocalDeck->setIcon(QPixmap("theme:icons/remove_row"));
|
||||
connect(aDeleteLocalDeck, SIGNAL(triggered()), this, SLOT(actDeleteLocalDeck()));
|
||||
|
||||
leftToolBar->addAction(aOpenLocalDeck);
|
||||
leftToolBar->addAction(aDeleteLocalDeck);
|
||||
retranslateUi();
|
||||
}
|
||||
|
||||
void TabDeckStorageVisual::retranslateUi()
|
||||
{
|
||||
|
||||
aOpenLocalDeck->setText(tr("Open in deck editor"));
|
||||
aDeleteLocalDeck->setText(tr("Delete"));
|
||||
}
|
||||
|
||||
QString TabDeckStorageVisual::getTargetPath() const
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
QStringList TabDeckStorageVisual::getBannerCardsForDecks()
|
||||
{
|
||||
QStringList allFiles;
|
||||
|
||||
// QDirIterator with QDir::Files and QDir::NoSymLinks ensures only files are listed (no directories or symlinks)
|
||||
QDirIterator it(SettingsCache::instance().getDeckPath(), QDir::Files | QDir::NoSymLinks,
|
||||
QDirIterator::Subdirectories);
|
||||
|
||||
while (it.hasNext()) {
|
||||
allFiles << it.next(); // Add each file path to the list
|
||||
}
|
||||
|
||||
auto deck_loader = new DeckLoader();
|
||||
foreach (const QString &file, allFiles) {
|
||||
qDebug() << file;
|
||||
deck_loader->loadFromFile(file, DeckLoader::CockatriceFormat);
|
||||
deck_list_model->setDeckList(new DeckLoader(*deck_loader));
|
||||
|
||||
InnerDecklistNode *listRoot = deck_list_model->getDeckList()->getRoot();
|
||||
|
||||
bool shouldExitOuterLoop = false; // Flag to indicate if we should exit the outer loop
|
||||
for (int i = 0; i < listRoot->size(); i++) {
|
||||
InnerDecklistNode *currentZone = dynamic_cast<InnerDecklistNode *>(listRoot->at(i));
|
||||
|
||||
for (int j = 0; j < currentZone->size(); j++) {
|
||||
DecklistCardNode *currentCard = dynamic_cast<DecklistCardNode *>(currentZone->at(j));
|
||||
if (!currentCard)
|
||||
continue;
|
||||
|
||||
for (int k = 0; k < currentCard->getNumber(); ++k) {
|
||||
CardInfoPtr info = CardDatabaseManager::getInstance()->getCard(currentCard->getName());
|
||||
if (info) {
|
||||
if (info->getCardType().contains("Legendary Creature")) {
|
||||
//qDebug() << currentCard->getName();
|
||||
//qDebug() << info->getCmc();
|
||||
//qDebug() << info->getProperties();
|
||||
//qDebug() << info->getCardType();
|
||||
|
||||
CardInfoPerSetMap setMap = info->getSets();
|
||||
OverlapWidget *printings_group_widget = new OverlapWidget(80, 0, 0, Qt::Orientation::Vertical, this);
|
||||
for (auto set : setMap) {
|
||||
//qDebug() << set.getPtr()->getLongName();
|
||||
CardInfoPtr set_info = CardDatabaseManager::getInstance()->getCardByNameAndUUID(currentCard->getName(), set.getProperty("uuid"));
|
||||
CardInfoPictureWithTextOverlayWidget* display = new CardInfoPictureWithTextOverlayWidget(printings_group_widget, true);
|
||||
display->setCard(set_info);
|
||||
display->setOverlayText(deck_loader->getName());
|
||||
display->setFontSize(24);
|
||||
printings_group_widget->addWidget(display);
|
||||
}
|
||||
flow_widget->addWidget(printings_group_widget);
|
||||
|
||||
//db->getPreferredPrintingForCard(info->getName());
|
||||
|
||||
//PictureLoader::getCardBackPixmap();
|
||||
|
||||
shouldExitOuterLoop = true; // Set the flag to exit the outer loop
|
||||
break; // Break the innermost loop
|
||||
}
|
||||
} else {
|
||||
//qDebug() << "Card not found in database!";
|
||||
}
|
||||
|
||||
// emit newCardAdded(newCard);
|
||||
}
|
||||
if (shouldExitOuterLoop) {
|
||||
break; // Break the middle loop if flag is set
|
||||
}
|
||||
}
|
||||
if (shouldExitOuterLoop) {
|
||||
break; // Break the outer loop if flag is set
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return QStringList("lol");
|
||||
}
|
||||
|
||||
void TabDeckStorageVisual::actOpenLocalDeck()
|
||||
{
|
||||
QModelIndex curLeft = localDirView->selectionModel()->currentIndex();
|
||||
if (localDirModel->isDir(curLeft))
|
||||
return;
|
||||
QString filePath = localDirModel->filePath(curLeft);
|
||||
|
||||
DeckLoader deckLoader;
|
||||
if (!deckLoader.loadFromFile(filePath, DeckLoader::CockatriceFormat))
|
||||
return;
|
||||
|
||||
emit openDeckEditor(&deckLoader);
|
||||
}
|
||||
|
||||
void TabDeckStorageVisual::actDeleteLocalDeck()
|
||||
{
|
||||
QModelIndex curLeft = localDirView->selectionModel()->currentIndex();
|
||||
if (localDirModel->isDir(curLeft))
|
||||
return;
|
||||
|
||||
if (QMessageBox::warning(this, tr("Delete local file"),
|
||||
tr("Are you sure you want to delete \"%1\"?").arg(localDirModel->fileName(curLeft)),
|
||||
QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes)
|
||||
return;
|
||||
|
||||
localDirModel->remove(curLeft);
|
||||
}
|
||||
|
||||
void TabDeckStorageVisual::cardUpdateFinished(int exitCode, QProcess::ExitStatus exitStatus)
|
||||
{
|
||||
qDebug() << "Card update process finished with exit code:" << exitCode << "and exit status:" << exitStatus;
|
||||
|
||||
// You can add any additional logic you need here.
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
#ifndef TAB_DECK_STORAGE_VISUAL_H
|
||||
#define TAB_DECK_STORAGE_VISUAL_H
|
||||
|
||||
#include "../../../deck/deck_list_model.h"
|
||||
#include "../../../deck/deck_view.h"
|
||||
#include "../../ui/layouts/flow_layout.h"
|
||||
#include "../../ui/widgets/general/layout_containers/flow_widget.h"
|
||||
#include "../../ui/layouts/overlap_layout.h"
|
||||
#include "../tab.h"
|
||||
|
||||
#include <QProcess>
|
||||
|
||||
class AbstractClient;
|
||||
class QTreeView;
|
||||
class QFileSystemModel;
|
||||
class QToolBar;
|
||||
class QTreeWidget;
|
||||
class QTreeWidgetItem;
|
||||
class QGroupBox;
|
||||
class CommandContainer;
|
||||
class Response;
|
||||
class DeckLoader;
|
||||
|
||||
class TabDeckStorageVisual : public Tab
|
||||
{
|
||||
Q_OBJECT
|
||||
private:
|
||||
AbstractClient *client;
|
||||
QTreeView *localDirView;
|
||||
QFileSystemModel *localDirModel;
|
||||
QToolBar *leftToolBar;
|
||||
QGroupBox *leftGroupBox;
|
||||
FlowWidget *flow_widget;
|
||||
DeckListModel *deck_list_model;
|
||||
QMap<QString, DeckViewCardContainer *> cardContainers;
|
||||
|
||||
QAction *aOpenLocalDeck, *aDeleteLocalDeck;
|
||||
QString getTargetPath() const;
|
||||
QStringList getBannerCardsForDecks();
|
||||
private slots:
|
||||
void actOpenLocalDeck();
|
||||
void actDeleteLocalDeck();
|
||||
|
||||
public:
|
||||
TabDeckStorageVisual(TabSupervisor *_tabSupervisor, AbstractClient *_client);
|
||||
void retranslateUi();
|
||||
QString getTabText() const
|
||||
{
|
||||
return tr("Deck storage");
|
||||
}
|
||||
public slots:
|
||||
void cardUpdateFinished(int exitCode, QProcess::ExitStatus exitStatus);
|
||||
signals:
|
||||
void openDeckEditor(const DeckLoader *deckLoader);
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue