Generify visual deck editor so it can have a printing selector.

This commit is contained in:
Lukas Brübach 2025-02-14 13:20:21 +01:00
parent edd35182c0
commit a7b9a86feb
6 changed files with 235 additions and 1139 deletions

View file

@ -210,7 +210,7 @@ void TabSupervisor::retranslateUi()
QListIterator<AbstractTabDeckEditor *> deckEditorIterator(deckEditorTabs); QListIterator<AbstractTabDeckEditor *> deckEditorIterator(deckEditorTabs);
while (deckEditorIterator.hasNext()) while (deckEditorIterator.hasNext())
tabs.append(deckEditorIterator.next()); tabs.append(deckEditorIterator.next());
QListIterator<TabDeckEditorVisual *> visualDeckEditorIterator(visualDeckEditorTabs); QListIterator<TabGenericDeckEditor *> visualDeckEditorIterator(visualDeckEditorTabs);
while (visualDeckEditorIterator.hasNext()) while (visualDeckEditorIterator.hasNext())
tabs.append(visualDeckEditorIterator.next()); tabs.append(visualDeckEditorIterator.next());
QMapIterator<QString, TabMessage *> messageIterator(messageTabs); QMapIterator<QString, TabMessage *> messageIterator(messageTabs);
@ -817,11 +817,11 @@ TabDeckEditor *TabSupervisor::addDeckEditorTab(const DeckLoader *deckToOpen)
TabDeckEditorVisual *TabSupervisor::addVisualDeckEditorTab(const DeckLoader *deckToOpen) TabDeckEditorVisual *TabSupervisor::addVisualDeckEditorTab(const DeckLoader *deckToOpen)
{ {
TabDeckEditorVisual *tab = new TabDeckEditorVisual(this); auto *tab = new TabDeckEditorVisual(this);
if (deckToOpen) if (deckToOpen)
tab->setDeck(new DeckLoader(*deckToOpen)); tab->setDeck(new DeckLoader(*deckToOpen));
connect(tab, &TabDeckEditorVisual::deckEditorClosing, this, &TabSupervisor::visualDeckEditorClosed); connect(tab, &TabGenericDeckEditor::deckEditorClosing, this, &TabSupervisor::visualDeckEditorClosed);
// connect(tab, &TabDeckEditorVisual::openDeckEditor, this, &TabSupervisor::addDeckEditorTab); connect(tab, &TabGenericDeckEditor::openDeckEditor, this, &TabSupervisor::addVisualDeckEditorTab);
myAddTab(tab); myAddTab(tab);
visualDeckEditorTabs.append(tab); visualDeckEditorTabs.append(tab);
setCurrentWidget(tab); setCurrentWidget(tab);
@ -849,7 +849,7 @@ void TabSupervisor::deckEditorClosed(AbstractTabDeckEditor *tab)
removeTab(indexOf(tab)); removeTab(indexOf(tab));
} }
void TabSupervisor::visualDeckEditorClosed(TabDeckEditorVisual *tab) void TabSupervisor::visualDeckEditorClosed(TabGenericDeckEditor *tab)
{ {
if (tab == currentWidget()) if (tab == currentWidget())
emit setMenu(); emit setMenu();

View file

@ -91,7 +91,7 @@ private:
QList<TabGame *> replayTabs; QList<TabGame *> replayTabs;
QMap<QString, TabMessage *> messageTabs; QMap<QString, TabMessage *> messageTabs;
QList<AbstractTabDeckEditor *> deckEditorTabs; QList<AbstractTabDeckEditor *> deckEditorTabs;
QList<TabDeckEditorVisual *> visualDeckEditorTabs; QList<AbstractTabDeckEditor *> visualDeckEditorTabs;
bool isLocalGame; bool isLocalGame;
QAction *aTabDeckEditor, *aTabVisualDeckEditor, *aTabVisualDeckStorage, *aTabServer, *aTabAccount, *aTabDeckStorage, QAction *aTabDeckEditor, *aTabVisualDeckEditor, *aTabVisualDeckStorage, *aTabServer, *aTabAccount, *aTabDeckStorage,
@ -154,7 +154,6 @@ public slots:
TabDeckEditor *addDeckEditorTab(const DeckLoader *deckToOpen); TabDeckEditor *addDeckEditorTab(const DeckLoader *deckToOpen);
TabDeckEditorVisual *addVisualDeckEditorTab(const DeckLoader *deckToOpen); TabDeckEditorVisual *addVisualDeckEditorTab(const DeckLoader *deckToOpen);
TabEdhRec *addEdhrecTab(const CardInfoPtr &cardToQuery, bool isCommander = false); TabEdhRec *addEdhrecTab(const CardInfoPtr &cardToQuery, bool isCommander = false);
TabDeckStorageVisual *addVisualDeckStorageTab();
void openReplay(GameReplay *replay); void openReplay(GameReplay *replay);
void maximizeMainWindow(); void maximizeMainWindow();
private slots: private slots:

View file

@ -1,151 +1,57 @@
#ifndef WINDOW_DECKEDITORVISUAL_H #ifndef WINDOW_DECKEDITORVISUAL_H
#define WINDOW_DECKEDITORVISUAL_H #define WINDOW_DECKEDITORVISUAL_H
#include "../../../deck/custom_line_edit.h"
#include "../../game_logic/key_signals.h" #include "../../game_logic/key_signals.h"
#include "../tab.h" #include "../tab.h"
#include "../tab_deck_editor.h" #include "../tab_deck_editor.h"
#include "tab_deck_editor_visual_tab_widget.h" #include "tab_deck_editor_visual_tab_widget.h"
#include <QAbstractItemModel> class TabDeckEditorVisual : public TabGenericDeckEditor
#include <QDir>
class TabDeckEditorVisual : public Tab
{ {
Q_OBJECT Q_OBJECT
private slots: protected slots:
void updateName(const QString &name); void actNewDeck() override;
void updateComments(); void actLoadDeck() override;
void updateHash();
void updateCardInfoLeft(const QModelIndex &current, const QModelIndex &previous);
void updateCardInfoRight(const QModelIndex &current, const QModelIndex &previous);
void updateSearch(const QString &search);
void databaseCustomMenu(QPoint point);
void actNewDeck(); void loadLayout() override;
void actLoadDeck(); void restartLayout() override;
bool actSaveDeck(); void freeDocksSize() override;
bool actSaveDeckAs(); void refreshShortcuts() override;
void actLoadDeckFromClipboard();
void actSaveDeckToClipboard();
void actSaveDeckToClipboardRaw();
void actPrintDeck();
void actExportDeckDecklist();
void actAnalyzeDeckDeckstats();
void actAnalyzeDeckTappedout();
void actClearFilterAll();
void actClearFilterOne();
void actSwapCard();
void actAddCard();
void actAddCardToSideboard();
void actRemoveCard();
void actIncrement();
void actDecrement();
void actDecrementCard();
void actDecrementCardFromSideboard();
void copyDatabaseCellContents();
void saveDeckRemoteFinished(const Response &r);
void filterViewCustomContextMenu(const QPoint &point);
void filterRemove(QAction *action);
void loadLayout();
void restartLayout();
void freeDocksSize();
void refreshShortcuts();
bool eventFilter(QObject *o, QEvent *e) override; bool eventFilter(QObject *o, QEvent *e) override;
void dockVisibleTriggered(); void dockVisibleTriggered() override;
void dockFloatingTriggered(); void dockFloatingTriggered() override;
void dockTopLevelChanged(bool topLevel); void dockTopLevelChanged(bool topLevel) override;
void saveDbHeaderState();
void setSaveStatus(bool newStatus);
void showSearchSyntaxHelp();
private:
CardInfoPtr currentCardInfo() const;
void changeModelIndexToCard(CardInfoPtr activeCard);
void addCardHelper(QString zoneName);
void addCardInfo(CardInfoPtr info, QString zoneName);
void offsetCountAtIndex(const QModelIndex &idx, int offset);
void decrementCardHelper(QString zoneName);
void recursiveExpand(const QModelIndex &index);
QWidget *parent;
CardDatabaseModel *databaseModel;
CardDatabaseDisplayModel *databaseDisplayModel;
DeckListModel *deckModel;
QTreeView *databaseView;
protected:
void openDeckFromFile(const QString &fileName, TabGenericDeckEditor::DeckOpenLocation deckOpenLocation) override;
TabDeckEditorVisualTabWidget *tabContainer; TabDeckEditorVisualTabWidget *tabContainer;
QTreeView *deckView;
KeySignals deckViewKeySignals;
CardInfoFrameWidget *cardInfo;
SearchLineEdit *searchEdit;
KeySignals searchKeySignals;
QLabel *nameLabel;
LineEditUnfocusable *nameEdit;
QLabel *commentsLabel;
QTextEdit *commentsEdit;
QLabel *hashLabel1;
LineEditUnfocusable *hashLabel;
FilterTreeModel *filterModel;
QTreeView *filterView;
KeySignals filterViewKeySignals;
QWidget *filterBox;
QMenu *deckMenu, *viewMenu, *cardInfoDockMenu, *deckDockMenu, *deckAnalyticsMenu, *filterDockMenu, *analyzeDeckMenu,
*saveDeckToClipboardMenu;
QAction *aNewDeck, *aLoadDeck, *aSaveDeck, *aSaveDeckAs, *aLoadDeckFromClipboard, *aSaveDeckToClipboard,
*aSaveDeckToClipboardRaw, *aPrintDeck, *aExportDeckDecklist, *aAnalyzeDeckDeckstats, *aAnalyzeDeckTappedout,
*aClose;
QAction *aClearFilterAll, *aClearFilterOne;
QAction *aAddCard, *aAddCardToSideboard, *aRemoveCard, *aIncrement, *aDecrement;
QAction *aResetLayout;
QAction *aCardInfoDockVisible, *aCardInfoDockFloating, *aDeckDockVisible, *aDeckDockFloating,
*aDeckAnalyticsDockFloating, *aDeckAnalyticsDockVisible, *aFilterDockVisible, *aFilterDockFloating;
bool modified;
QVBoxLayout *centralFrame; QVBoxLayout *centralFrame;
QVBoxLayout *searchAndDatabaseFrame; QVBoxLayout *searchAndDatabaseFrame;
QHBoxLayout *searchLayout; QHBoxLayout *searchLayout;
QDockWidget *searchAndDatabaseDock; QDockWidget *searchAndDatabaseDock;
QDockWidget *cardInfoDock;
QDockWidget *deckAnalyticsDock; QDockWidget *deckAnalyticsDock;
QDockWidget *deckDock;
QDockWidget *filterDock;
QWidget *centralWidget; QWidget *centralWidget;
QMenu *deckAnalyticsMenu;
QAction *aDeckAnalyticsDockVisible, *aDeckAnalyticsDockFloating;
public: public:
explicit TabDeckEditorVisual(TabSupervisor *_tabSupervisor, QWidget *parent = nullptr); explicit TabDeckEditorVisual(TabSupervisor *_tabSupervisor);
~TabDeckEditorVisual() override;
void retranslateUi() override; void retranslateUi() override;
QString getTabText() const override; QString getTabText() const override;
void setDeck(DeckLoader *_deckLoader); void changeModelIndexAndCardInfo(CardInfoPtr activeCard);
void setModified(bool _windowModified); void changeModelIndexToCard(CardInfoPtr activeCard);
bool confirmClose();
void createDeckDock();
void createCardInfoDock();
void createDeckAnalyticsDock(); void createDeckAnalyticsDock();
void createFiltersDock(); void createMenus() override;
void createMenus();
void createSearchAndDatabaseFrame(); void createSearchAndDatabaseFrame();
void createCentralFrame(); void createCentralFrame() override;
public slots: public slots:
void setCurrentCardInfo(CardInfoPtr activeCard); void showPrintingSelector() override;
void changeModelIndexAndCardInfo(CardInfoPtr activeCard);
void processMainboardCardClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance); void processMainboardCardClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance);
void processSideboardCardClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance); void processSideboardCardClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance);
void processCardClickDatabaseDisplay(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance); void processCardClickDatabaseDisplay(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance);
signals:
void deckEditorClosing(TabDeckEditorVisual *tab);
}; };
#endif #endif

View file

@ -38,6 +38,8 @@ TabDeckEditorVisualTabWidget::TabDeckEditorVisualTabWidget(QWidget *parent,
deckAnalytics->setObjectName("deckAnalytics"); deckAnalytics->setObjectName("deckAnalytics");
// deckAnalytics->analyzeManaCurve(); // deckAnalytics->analyzeManaCurve();
// printingSelector = new PrintingSelector(this, this->deckModel);
this->addNewTab(visualDeckView, "Visual Deck View"); this->addNewTab(visualDeckView, "Visual Deck View");
this->addNewTab(visualDatabaseDisplay, "Visual Database Display"); this->addNewTab(visualDatabaseDisplay, "Visual Database Display");
this->addNewTab(deckAnalytics, "Deck Analytics"); this->addNewTab(deckAnalytics, "Deck Analytics");

View file

@ -2,6 +2,7 @@
#define TAB_DECK_EDITOR_VISUAL_TAB_WIDGET_H #define TAB_DECK_EDITOR_VISUAL_TAB_WIDGET_H
#include "../../ui/widgets/deck_analytics/deck_analytics_widget.h" #include "../../ui/widgets/deck_analytics/deck_analytics_widget.h"
#include "../../ui/widgets/printing_selector/printing_selector.h"
#include "../../ui/widgets/visual_database_display/visual_database_display_widget.h" #include "../../ui/widgets/visual_database_display/visual_database_display_widget.h"
#include "../../ui/widgets/visual_deck_editor/visual_deck_editor_widget.h" #include "../../ui/widgets/visual_deck_editor/visual_deck_editor_widget.h"
@ -29,6 +30,7 @@ public:
VisualDeckEditorWidget *visualDeckView; VisualDeckEditorWidget *visualDeckView;
DeckAnalyticsWidget *deckAnalytics; DeckAnalyticsWidget *deckAnalytics;
VisualDatabaseDisplayWidget *visualDatabaseDisplay; VisualDatabaseDisplayWidget *visualDatabaseDisplay;
PrintingSelector *printingSelector;
public slots: public slots:
void onCardChanged(CardInfoPtr activeCard); void onCardChanged(CardInfoPtr activeCard);