mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2025-12-05 20:39:59 -08:00
[VDE] Allow visual database display to toggle to table based display. (#6357)
This commit is contained in:
@@ -29,10 +29,23 @@ public:
|
|||||||
CardDatabaseModel *databaseModel;
|
CardDatabaseModel *databaseModel;
|
||||||
CardDatabaseDisplayModel *databaseDisplayModel;
|
CardDatabaseDisplayModel *databaseDisplayModel;
|
||||||
|
|
||||||
|
QTreeView *getDatabaseView()
|
||||||
|
{
|
||||||
|
return databaseView;
|
||||||
|
};
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
ExactCard currentCard() const;
|
ExactCard currentCard() const;
|
||||||
void setFilterTree(FilterTree *filterTree);
|
void setFilterTree(FilterTree *filterTree);
|
||||||
void clearAllDatabaseFilters();
|
void clearAllDatabaseFilters();
|
||||||
|
void updateSearch(const QString &search);
|
||||||
|
void updateCard(const QModelIndex ¤t, const QModelIndex &);
|
||||||
|
void actAddCardToMainDeck();
|
||||||
|
void actAddCardToSideboard();
|
||||||
|
void actDecrementCardFromMainDeck();
|
||||||
|
void actDecrementCardFromSideboard();
|
||||||
|
void databaseCustomMenu(QPoint point);
|
||||||
|
void copyDatabaseCellContents();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void addCardToMainDeck(const ExactCard &card);
|
void addCardToMainDeck(const ExactCard &card);
|
||||||
@@ -51,14 +64,6 @@ private:
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void retranslateUi();
|
void retranslateUi();
|
||||||
void updateSearch(const QString &search);
|
|
||||||
void updateCard(const QModelIndex ¤t, const QModelIndex &);
|
|
||||||
void actAddCardToMainDeck();
|
|
||||||
void actAddCardToSideboard();
|
|
||||||
void actDecrementCardFromMainDeck();
|
|
||||||
void actDecrementCardFromSideboard();
|
|
||||||
void databaseCustomMenu(QPoint point);
|
|
||||||
void copyDatabaseCellContents();
|
|
||||||
void saveDbHeaderState();
|
void saveDbHeaderState();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,8 @@ public:
|
|||||||
void retranslateUi() override;
|
void retranslateUi() override;
|
||||||
[[nodiscard]] QString getTabText() const override
|
[[nodiscard]] QString getTabText() const override
|
||||||
{
|
{
|
||||||
return tr("Visual Database Display");
|
return visualDatabaseDisplayWidget->displayModeButton->isChecked() ? tr("Database Display")
|
||||||
|
: tr("Visual Database Display");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
#include <QHeaderView>
|
#include <QHeaderView>
|
||||||
#include <QScrollBar>
|
#include <QScrollBar>
|
||||||
|
#include <QStyledItemDelegate>
|
||||||
#include <libcockatrice/card/card_info_comparator.h>
|
#include <libcockatrice/card/card_info_comparator.h>
|
||||||
#include <libcockatrice/card/database/card_database.h>
|
#include <libcockatrice/card/database/card_database.h>
|
||||||
#include <libcockatrice/card/database/card_database_manager.h>
|
#include <libcockatrice/card/database/card_database_manager.h>
|
||||||
@@ -60,28 +61,39 @@ VisualDatabaseDisplayWidget::VisualDatabaseDisplayWidget(QWidget *parent,
|
|||||||
setFocusProxy(searchEdit);
|
setFocusProxy(searchEdit);
|
||||||
setFocusPolicy(Qt::ClickFocus);
|
setFocusPolicy(Qt::ClickFocus);
|
||||||
|
|
||||||
|
displayModeButton = new QPushButton(tr("Visual"), this);
|
||||||
|
displayModeButton->setCheckable(true); // Toggle button
|
||||||
|
|
||||||
|
connect(displayModeButton, &QPushButton::toggled, this, &VisualDatabaseDisplayWidget::onDisplayModeChanged);
|
||||||
|
|
||||||
|
displayModeButton->setChecked(false); // Start in Visual mode
|
||||||
|
|
||||||
filterModel = new FilterTreeModel();
|
filterModel = new FilterTreeModel();
|
||||||
filterModel->setObjectName("filterModel");
|
filterModel->setObjectName("filterModel");
|
||||||
|
|
||||||
searchKeySignals.setObjectName("searchKeySignals");
|
searchKeySignals.setObjectName("searchKeySignals");
|
||||||
connect(searchEdit, &QLineEdit::textChanged, this, &VisualDatabaseDisplayWidget::updateSearch);
|
connect(searchEdit, &SearchLineEdit::textChanged, this, &VisualDatabaseDisplayWidget::updateSearch);
|
||||||
/*connect(&searchKeySignals, SIGNAL(onEnter()), this, SLOT(actAddCard()));
|
connect(&searchKeySignals, &KeySignals::onEnter, deckEditor->databaseDisplayDockWidget,
|
||||||
connect(&searchKeySignals, SIGNAL(onCtrlAltEqual()), this, SLOT(actAddCard()));
|
&DeckEditorDatabaseDisplayWidget::actAddCardToMainDeck);
|
||||||
connect(&searchKeySignals, SIGNAL(onCtrlAltRBracket()), this, SLOT(actAddCardToSideboard()));
|
connect(&searchKeySignals, &KeySignals::onCtrlAltEqual, deckEditor->databaseDisplayDockWidget,
|
||||||
connect(&searchKeySignals, SIGNAL(onCtrlAltMinus()), this, SLOT(actDecrementCard()));
|
&DeckEditorDatabaseDisplayWidget::actAddCardToMainDeck);
|
||||||
connect(&searchKeySignals, SIGNAL(onCtrlAltLBracket()), this, SLOT(actDecrementCardFromSideboard()));
|
connect(&searchKeySignals, &KeySignals::onCtrlAltRBracket, deckEditor->databaseDisplayDockWidget,
|
||||||
connect(&searchKeySignals, SIGNAL(onCtrlAltEnter()), this, SLOT(actAddCardToSideboard()));
|
&DeckEditorDatabaseDisplayWidget::actAddCardToSideboard);
|
||||||
connect(&searchKeySignals, SIGNAL(onCtrlEnter()), this, SLOT(actAddCardToSideboard()));
|
connect(&searchKeySignals, &KeySignals::onCtrlAltMinus, deckEditor->databaseDisplayDockWidget,
|
||||||
connect(&searchKeySignals, SIGNAL(onCtrlC()), this, SLOT(copyDatabaseCellContents()));*/
|
&DeckEditorDatabaseDisplayWidget::actDecrementCardFromMainDeck);
|
||||||
|
connect(&searchKeySignals, &KeySignals::onCtrlAltLBracket, deckEditor->databaseDisplayDockWidget,
|
||||||
|
&DeckEditorDatabaseDisplayWidget::actDecrementCardFromSideboard);
|
||||||
|
connect(&searchKeySignals, &KeySignals::onCtrlAltEnter, deckEditor->databaseDisplayDockWidget,
|
||||||
|
&DeckEditorDatabaseDisplayWidget::actAddCardToSideboard);
|
||||||
|
connect(&searchKeySignals, &KeySignals::onCtrlEnter, deckEditor->databaseDisplayDockWidget,
|
||||||
|
&DeckEditorDatabaseDisplayWidget::actAddCardToSideboard);
|
||||||
|
connect(&searchKeySignals, &KeySignals::onCtrlC, deckEditor->databaseDisplayDockWidget,
|
||||||
|
&DeckEditorDatabaseDisplayWidget::copyDatabaseCellContents);
|
||||||
|
connect(help, &QAction::triggered, this, [this] { createSearchSyntaxHelpWindow(searchEdit); });
|
||||||
|
|
||||||
databaseView = new QTreeView(this);
|
databaseView = deckEditor->databaseDisplayDockWidget->getDatabaseView();
|
||||||
databaseView->setObjectName("databaseView");
|
|
||||||
databaseView->setFocusProxy(searchEdit);
|
databaseView->setFocusProxy(searchEdit);
|
||||||
databaseView->setRootIsDecorated(false);
|
|
||||||
databaseView->setItemDelegate(nullptr);
|
databaseView->setItemDelegate(nullptr);
|
||||||
databaseView->setSortingEnabled(true);
|
|
||||||
databaseView->sortByColumn(0, Qt::AscendingOrder);
|
|
||||||
databaseView->setModel(databaseDisplayModel);
|
|
||||||
databaseView->setVisible(false);
|
databaseView->setVisible(false);
|
||||||
|
|
||||||
searchEdit->setTreeView(databaseView);
|
searchEdit->setTreeView(databaseView);
|
||||||
@@ -168,11 +180,14 @@ void VisualDatabaseDisplayWidget::initialize()
|
|||||||
searchLayout->addWidget(colorFilterWidget);
|
searchLayout->addWidget(colorFilterWidget);
|
||||||
searchLayout->addWidget(clearFilterWidget);
|
searchLayout->addWidget(clearFilterWidget);
|
||||||
searchLayout->addWidget(searchEdit);
|
searchLayout->addWidget(searchEdit);
|
||||||
|
searchLayout->addWidget(displayModeButton);
|
||||||
|
|
||||||
mainLayout->addWidget(searchContainer);
|
mainLayout->addWidget(searchContainer);
|
||||||
|
|
||||||
mainLayout->addWidget(filterContainer);
|
mainLayout->addWidget(filterContainer);
|
||||||
|
|
||||||
|
mainLayout->addWidget(databaseView);
|
||||||
|
|
||||||
mainLayout->addWidget(flowWidget);
|
mainLayout->addWidget(flowWidget);
|
||||||
|
|
||||||
mainLayout->addWidget(cardSizeWidget);
|
mainLayout->addWidget(cardSizeWidget);
|
||||||
@@ -213,6 +228,25 @@ void VisualDatabaseDisplayWidget::resizeEvent(QResizeEvent *event)
|
|||||||
loadCurrentPage();
|
loadCurrentPage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VisualDatabaseDisplayWidget::onDisplayModeChanged(bool checked)
|
||||||
|
{
|
||||||
|
if (checked) {
|
||||||
|
// Table mode
|
||||||
|
displayModeButton->setText(tr("Table"));
|
||||||
|
flowWidget->setVisible(false);
|
||||||
|
cardSizeWidget->setVisible(false);
|
||||||
|
databaseView->setItemDelegate(new QStyledItemDelegate(databaseView));
|
||||||
|
databaseView->setVisible(true);
|
||||||
|
} else {
|
||||||
|
// Visual mode
|
||||||
|
displayModeButton->setText(tr("Visual"));
|
||||||
|
flowWidget->setVisible(true);
|
||||||
|
cardSizeWidget->setVisible(true);
|
||||||
|
databaseView->setVisible(false);
|
||||||
|
populateCards();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void VisualDatabaseDisplayWidget::onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance)
|
void VisualDatabaseDisplayWidget::onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance)
|
||||||
{
|
{
|
||||||
emit cardClickedDatabaseDisplay(event, instance);
|
emit cardClickedDatabaseDisplay(event, instance);
|
||||||
@@ -246,17 +280,19 @@ void VisualDatabaseDisplayWidget::updateSearch(const QString &search) const
|
|||||||
|
|
||||||
void VisualDatabaseDisplayWidget::searchModelChanged()
|
void VisualDatabaseDisplayWidget::searchModelChanged()
|
||||||
{
|
{
|
||||||
// Clear the current page and prepare for new data
|
if (flowWidget->isVisible()) {
|
||||||
flowWidget->clearLayout(); // Clear existing cards
|
// Clear the current page and prepare for new data
|
||||||
cards->clear(); // Clear the card list
|
flowWidget->clearLayout(); // Clear existing cards
|
||||||
// Reset scrollbar position to the top after loading new cards
|
cards->clear(); // Clear the card list
|
||||||
if (QScrollBar *scrollBar = flowWidget->scrollArea->verticalScrollBar()) {
|
// Reset scrollbar position to the top after loading new cards
|
||||||
scrollBar->setValue(0); // Reset scrollbar to top
|
if (QScrollBar *scrollBar = flowWidget->scrollArea->verticalScrollBar()) {
|
||||||
}
|
scrollBar->setValue(0); // Reset scrollbar to top
|
||||||
|
}
|
||||||
|
|
||||||
currentPage = 0;
|
currentPage = 0;
|
||||||
loadCurrentPage();
|
loadCurrentPage();
|
||||||
qCDebug(VisualDatabaseDisplayLog) << "Search model changed";
|
qCDebug(VisualDatabaseDisplayLog) << "Search model changed";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VisualDatabaseDisplayWidget::loadCurrentPage()
|
void VisualDatabaseDisplayWidget::loadCurrentPage()
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ public:
|
|||||||
QWidget *searchContainer;
|
QWidget *searchContainer;
|
||||||
QHBoxLayout *searchLayout;
|
QHBoxLayout *searchLayout;
|
||||||
SearchLineEdit *searchEdit;
|
SearchLineEdit *searchEdit;
|
||||||
|
QPushButton *displayModeButton;
|
||||||
FilterTreeModel *filterModel;
|
FilterTreeModel *filterModel;
|
||||||
VisualDatabaseDisplayColorFilterWidget *colorFilterWidget;
|
VisualDatabaseDisplayColorFilterWidget *colorFilterWidget;
|
||||||
|
|
||||||
@@ -76,6 +77,7 @@ protected slots:
|
|||||||
void wheelEvent(QWheelEvent *event) override;
|
void wheelEvent(QWheelEvent *event) override;
|
||||||
void modelDirty() const;
|
void modelDirty() const;
|
||||||
void updateSearch(const QString &search) const;
|
void updateSearch(const QString &search) const;
|
||||||
|
void onDisplayModeChanged(bool checked);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QLabel *databaseLoadIndicator;
|
QLabel *databaseLoadIndicator;
|
||||||
|
|||||||
Reference in New Issue
Block a user