mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-18 08:22:15 -07:00
Implement top cards.
This commit is contained in:
parent
c29bdb10b0
commit
65222abba6
11 changed files with 183 additions and 107 deletions
|
|
@ -18,19 +18,26 @@ set(cockatrice_SOURCES
|
||||||
src/client/network/spoiler_background_updater.cpp
|
src/client/network/spoiler_background_updater.cpp
|
||||||
src/client/sound_engine.cpp
|
src/client/sound_engine.cpp
|
||||||
src/client/tabs/abstract_tab_deck_editor.cpp
|
src/client/tabs/abstract_tab_deck_editor.cpp
|
||||||
src/client/tabs/api/edhrec/api_response/edhrec_commander_api_response.cpp
|
|
||||||
src/client/tabs/api/edhrec/api_response/edhrec_commander_api_response_archidekt_links.cpp
|
|
||||||
src/client/tabs/api/edhrec/api_response/edhrec_commander_api_response_average_deck_statistics.cpp
|
|
||||||
src/client/tabs/api/edhrec/api_response/edhrec_commander_api_response_card_container.cpp
|
|
||||||
src/client/tabs/api/edhrec/api_response/edhrec_commander_api_response_card_details.cpp
|
|
||||||
src/client/tabs/api/edhrec/api_response/edhrec_commander_api_response_card_list.cpp
|
|
||||||
src/client/tabs/api/edhrec/api_response/edhrec_commander_api_response_card_prices.cpp
|
|
||||||
src/client/tabs/api/edhrec/api_response/edhrec_commander_api_response_commander_details.cpp
|
|
||||||
src/client/tabs/api/edhrec/edhrec_commander_api_response_card_details_display_widget.cpp
|
|
||||||
src/client/tabs/api/edhrec/edhrec_commander_api_response_card_list_display_widget.cpp
|
|
||||||
src/client/tabs/api/edhrec/edhrec_commander_api_response_commander_details_display_widget.cpp
|
|
||||||
src/client/tabs/api/edhrec/edhrec_commander_api_response_display_widget.cpp
|
|
||||||
src/client/tabs/api/edhrec/tab_edhrec.cpp
|
src/client/tabs/api/edhrec/tab_edhrec.cpp
|
||||||
|
src/client/tabs/api/edhrec/tab_edhrec_main.cpp
|
||||||
|
src/client/tabs/api/edhrec/commander/edhrec_commander_api_response_display_widget.cpp
|
||||||
|
src/client/tabs/api/edhrec/commander/edhrec_commander_api_response_card_details_display_widget.cpp
|
||||||
|
src/client/tabs/api/edhrec/commander/edhrec_commander_api_response_card_list_display_widget.cpp
|
||||||
|
src/client/tabs/api/edhrec/commander/edhrec_commander_api_response_commander_details_display_widget.cpp
|
||||||
|
src/client/tabs/api/edhrec/top_cards/edhrec_top_cards_api_response_display_widget.cpp
|
||||||
|
src/client/tabs/api/edhrec/top_commander/edhrec_top_commanders_api_response_display_widget.cpp
|
||||||
|
src/client/tabs/api/edhrec/top_tags/edhrec_top_tags_api_response_display_widget.cpp
|
||||||
|
src/client/tabs/api/edhrec/api_response/commander/edhrec_commander_api_response_archidekt_links.cpp
|
||||||
|
src/client/tabs/api/edhrec/api_response/commander/edhrec_commander_api_response_average_deck_statistics.cpp
|
||||||
|
src/client/tabs/api/edhrec/api_response/commander/edhrec_commander_api_response_card_details.cpp
|
||||||
|
src/client/tabs/api/edhrec/api_response/commander/edhrec_commander_api_response_card_list.cpp
|
||||||
|
src/client/tabs/api/edhrec/api_response/commander/edhrec_commander_api_response_card_container.cpp
|
||||||
|
src/client/tabs/api/edhrec/api_response/commander/edhrec_commander_api_response_card_prices.cpp
|
||||||
|
src/client/tabs/api/edhrec/api_response/commander/edhrec_commander_api_response_commander_details.cpp
|
||||||
|
src/client/tabs/api/edhrec/api_response/commander/edhrec_commander_api_response.cpp
|
||||||
|
src/client/tabs/api/edhrec/api_response/top_cards/edhrec_top_cards_api_response.cpp
|
||||||
|
src/client/tabs/api/edhrec/api_response/top_commanders/edhrec_top_commanders_api_response.cpp
|
||||||
|
src/client/tabs/api/edhrec/api_response/top_tags/edhrec_top_tags_api_response.cpp
|
||||||
src/client/tabs/tab.cpp
|
src/client/tabs/tab.cpp
|
||||||
src/client/tabs/tab_account.cpp
|
src/client/tabs/tab_account.cpp
|
||||||
src/client/tabs/tab_admin.cpp
|
src/client/tabs/tab_admin.cpp
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
#include "edhrec_top_cards_api_response.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QJsonArray>
|
||||||
|
|
||||||
|
void EdhrecTopCardsApiResponse::fromJson(const QJsonObject &json)
|
||||||
|
{
|
||||||
|
header = json.value("header").toString();
|
||||||
|
description = json.value("description").toString();
|
||||||
|
QJsonObject containerJson = json.value("container").toObject();
|
||||||
|
container.fromJson(containerJson);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EdhrecTopCardsApiResponse::debugPrint() const
|
||||||
|
{
|
||||||
|
qDebug() << "Header:" << header;
|
||||||
|
qDebug() << "Description:" << description;
|
||||||
|
container.debugPrint();
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
#ifndef EDHREC_TOP_CARDS_API_RESPONSE_H
|
||||||
|
#define EDHREC_TOP_CARDS_API_RESPONSE_H
|
||||||
|
|
||||||
|
#include "../commander/edhrec_commander_api_response_card_container.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QJsonObject>
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
// Represents the main structure of the JSON
|
||||||
|
class EdhrecTopCardsApiResponse
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
QString header;
|
||||||
|
QString description;
|
||||||
|
EdhrecCommanderApiResponseCardContainer container;
|
||||||
|
|
||||||
|
void fromJson(const QJsonObject &json);
|
||||||
|
void debugPrint() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // EDHREC_TOP_CARDS_API_RESPONSE_H
|
||||||
|
|
@ -4,9 +4,11 @@
|
||||||
#include "../../../../game/cards/card_database_manager.h"
|
#include "../../../../game/cards/card_database_manager.h"
|
||||||
#include "../../../../game/cards/card_search_model.h"
|
#include "../../../../game/cards/card_search_model.h"
|
||||||
#include "api_response/commander/edhrec_commander_api_response.h"
|
#include "api_response/commander/edhrec_commander_api_response.h"
|
||||||
|
#include "api_response/top_cards/edhrec_top_cards_api_response.h"
|
||||||
#include "api_response/top_commanders/edhrec_top_commanders_api_response.h"
|
#include "api_response/top_commanders/edhrec_top_commanders_api_response.h"
|
||||||
#include "api_response/top_tags/edhrec_top_tags_api_response.h"
|
#include "api_response/top_tags/edhrec_top_tags_api_response.h"
|
||||||
#include "commander/edhrec_commander_api_response_display_widget.h"
|
#include "commander/edhrec_commander_api_response_display_widget.h"
|
||||||
|
#include "top_cards/edhrec_top_cards_api_response_display_widget.h"
|
||||||
#include "top_commander/edhrec_top_commanders_api_response_display_widget.h"
|
#include "top_commander/edhrec_top_commanders_api_response_display_widget.h"
|
||||||
#include "top_tags/edhrec_top_tags_api_response_display_widget.h"
|
#include "top_tags/edhrec_top_tags_api_response_display_widget.h"
|
||||||
|
|
||||||
|
|
@ -50,6 +52,7 @@ TabEdhRecMain::TabEdhRecMain(TabSupervisor *_tabSupervisor) : Tab(_tabSupervisor
|
||||||
navigationContainer->setLayout(navigationLayout);
|
navigationContainer->setLayout(navigationLayout);
|
||||||
|
|
||||||
cardsPushButton = new QPushButton(navigationContainer);
|
cardsPushButton = new QPushButton(navigationContainer);
|
||||||
|
connect(cardsPushButton, &QPushButton::clicked, this, &TabEdhRecMain::getTopCards);
|
||||||
topCommandersPushButton = new QPushButton(navigationContainer);
|
topCommandersPushButton = new QPushButton(navigationContainer);
|
||||||
connect(topCommandersPushButton, &QPushButton::clicked, this, &TabEdhRecMain::getTopCommanders);
|
connect(topCommandersPushButton, &QPushButton::clicked, this, &TabEdhRecMain::getTopCommanders);
|
||||||
tagsPushButton = new QPushButton(navigationContainer);
|
tagsPushButton = new QPushButton(navigationContainer);
|
||||||
|
|
@ -109,6 +112,8 @@ TabEdhRecMain::TabEdhRecMain(TabSupervisor *_tabSupervisor) : Tab(_tabSupervisor
|
||||||
setCentralWidget(container);
|
setCentralWidget(container);
|
||||||
|
|
||||||
TabEdhRecMain::retranslateUi();
|
TabEdhRecMain::retranslateUi();
|
||||||
|
|
||||||
|
getTopCards();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TabEdhRecMain::retranslateUi()
|
void TabEdhRecMain::retranslateUi()
|
||||||
|
|
@ -161,6 +166,13 @@ void TabEdhRecMain::actNavigatePage(QString url)
|
||||||
networkManager->get(request);
|
networkManager->get(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TabEdhRecMain::getTopCards()
|
||||||
|
{
|
||||||
|
QNetworkRequest request{QUrl("https://json.edhrec.com/pages/top/year.json")};
|
||||||
|
|
||||||
|
networkManager->get(request);
|
||||||
|
}
|
||||||
|
|
||||||
void TabEdhRecMain::getTopCommanders()
|
void TabEdhRecMain::getTopCommanders()
|
||||||
{
|
{
|
||||||
QNetworkRequest request{QUrl("https://json.edhrec.com/pages/commanders/year.json")};
|
QNetworkRequest request{QUrl("https://json.edhrec.com/pages/commanders/year.json")};
|
||||||
|
|
@ -208,6 +220,8 @@ void TabEdhRecMain::processApiJson(QNetworkReply *reply)
|
||||||
processCommanderResponse(jsonObj);
|
processCommanderResponse(jsonObj);
|
||||||
} else if (responseUrl.startsWith("https://json.edhrec.com/pages/tags.json")) {
|
} else if (responseUrl.startsWith("https://json.edhrec.com/pages/tags.json")) {
|
||||||
processTopTagsResponse(jsonObj);
|
processTopTagsResponse(jsonObj);
|
||||||
|
} else if (responseUrl.startsWith("https://json.edhrec.com/pages/top/year.json")) {
|
||||||
|
processTopCardsResponse(jsonObj);
|
||||||
} else {
|
} else {
|
||||||
prettyPrintJson(jsonObj, 4);
|
prettyPrintJson(jsonObj, 4);
|
||||||
}
|
}
|
||||||
|
|
@ -215,6 +229,33 @@ void TabEdhRecMain::processApiJson(QNetworkReply *reply)
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TabEdhRecMain::processTopCardsResponse(QJsonObject reply)
|
||||||
|
{
|
||||||
|
EdhrecTopCardsApiResponse deckData;
|
||||||
|
deckData.fromJson(reply);
|
||||||
|
|
||||||
|
// **Remove previous page display to prevent stacking**
|
||||||
|
if (currentPageDisplay) {
|
||||||
|
mainLayout->removeWidget(currentPageDisplay);
|
||||||
|
delete currentPageDisplay;
|
||||||
|
currentPageDisplay = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
// **Create new currentPageDisplay**
|
||||||
|
currentPageDisplay = new QWidget(container);
|
||||||
|
currentPageLayout = new QVBoxLayout(currentPageDisplay);
|
||||||
|
currentPageDisplay->setLayout(currentPageLayout);
|
||||||
|
|
||||||
|
auto display = new EdhrecTopCardsApiResponseDisplayWidget(currentPageDisplay, deckData);
|
||||||
|
currentPageLayout->addWidget(display);
|
||||||
|
|
||||||
|
mainLayout->addWidget(currentPageDisplay);
|
||||||
|
|
||||||
|
// **Ensure layout stays correct**
|
||||||
|
mainLayout->setStretch(0, 0); // Keep navigationContainer at the top
|
||||||
|
mainLayout->setStretch(1, 1); // Make sure currentPageDisplay takes remaining space
|
||||||
|
}
|
||||||
|
|
||||||
void TabEdhRecMain::processTopTagsResponse(QJsonObject reply)
|
void TabEdhRecMain::processTopTagsResponse(QJsonObject reply)
|
||||||
{
|
{
|
||||||
EdhrecTopTagsApiResponse deckData;
|
EdhrecTopTagsApiResponse deckData;
|
||||||
|
|
|
||||||
|
|
@ -29,11 +29,13 @@ public:
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void processApiJson(QNetworkReply *reply);
|
void processApiJson(QNetworkReply *reply);
|
||||||
|
void processTopCardsResponse(QJsonObject reply);
|
||||||
void processTopTagsResponse(QJsonObject reply);
|
void processTopTagsResponse(QJsonObject reply);
|
||||||
void processTopCommandersResponse(QJsonObject reply);
|
void processTopCommandersResponse(QJsonObject reply);
|
||||||
void prettyPrintJson(const QJsonValue &value, int indentLevel);
|
void prettyPrintJson(const QJsonValue &value, int indentLevel);
|
||||||
void setCard(CardInfoPtr _cardToQuery, bool isCommander = false);
|
void setCard(CardInfoPtr _cardToQuery, bool isCommander = false);
|
||||||
void actNavigatePage(QString url);
|
void actNavigatePage(QString url);
|
||||||
|
void getTopCards();
|
||||||
void getTopCommanders();
|
void getTopCommanders();
|
||||||
void getTopTags();
|
void getTopTags();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
#include "edhrec_top_cards_api_response_display_widget.h"
|
||||||
|
|
||||||
|
#include "../../../../ui/widgets/cards/card_info_picture_widget.h"
|
||||||
|
#include "../api_response/top_cards/edhrec_top_cards_api_response.h"
|
||||||
|
#include "../commander/edhrec_commander_api_response_card_list_display_widget.h"
|
||||||
|
|
||||||
|
#include <QListView>
|
||||||
|
#include <QResizeEvent>
|
||||||
|
#include <QScrollArea>
|
||||||
|
#include <QSplitter>
|
||||||
|
#include <QStringListModel>
|
||||||
|
|
||||||
|
EdhrecTopCardsApiResponseDisplayWidget::EdhrecTopCardsApiResponseDisplayWidget(QWidget *parent,
|
||||||
|
EdhrecTopCardsApiResponse response)
|
||||||
|
: QWidget(parent)
|
||||||
|
{
|
||||||
|
layout = new QHBoxLayout(this);
|
||||||
|
setLayout(layout);
|
||||||
|
|
||||||
|
cardDisplayLayout = new QVBoxLayout(this);
|
||||||
|
|
||||||
|
// Add card list widgets
|
||||||
|
auto edhrec_commander_api_response_card_lists = response.container.getCardlists();
|
||||||
|
for (const EdhrecCommanderApiResponseCardList &card_list : edhrec_commander_api_response_card_lists) {
|
||||||
|
auto cardListDisplayWidget = new EdhrecCommanderApiResponseCardListDisplayWidget(this, card_list);
|
||||||
|
cardDisplayLayout->addWidget(cardListDisplayWidget);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a QScrollArea to hold the card display widgets
|
||||||
|
scrollArea = new QScrollArea(this);
|
||||||
|
scrollArea->setWidgetResizable(true);
|
||||||
|
scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
|
||||||
|
scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||||
|
|
||||||
|
// Set the cardDisplayLayout inside the scroll area
|
||||||
|
auto scrollWidget = new QWidget(scrollArea);
|
||||||
|
scrollWidget->setLayout(cardDisplayLayout);
|
||||||
|
scrollArea->setWidget(scrollWidget);
|
||||||
|
|
||||||
|
layout->addWidget(scrollArea);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EdhrecTopCardsApiResponseDisplayWidget::resizeEvent(QResizeEvent *event)
|
||||||
|
{
|
||||||
|
QWidget::resizeEvent(event);
|
||||||
|
layout->invalidate();
|
||||||
|
layout->activate();
|
||||||
|
layout->update();
|
||||||
|
if (scrollArea && scrollArea->widget()) {
|
||||||
|
scrollArea->widget()->resize(event->size());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
#ifndef EDHREC_TOP_CARDS_API_RESPONSE_DISPLAY_WIDGET_H
|
||||||
|
#define EDHREC_TOP_CARDS_API_RESPONSE_DISPLAY_WIDGET_H
|
||||||
|
|
||||||
|
#include "../api_response/top_cards/edhrec_top_cards_api_response.h"
|
||||||
|
|
||||||
|
#include <QScrollArea>
|
||||||
|
#include <QVBoxLayout>
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
class EdhrecTopCardsApiResponseDisplayWidget : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit EdhrecTopCardsApiResponseDisplayWidget(QWidget *parent, EdhrecTopCardsApiResponse response);
|
||||||
|
void resizeEvent(QResizeEvent *event) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
QHBoxLayout *layout;
|
||||||
|
QVBoxLayout *cardDisplayLayout;
|
||||||
|
QScrollArea *scrollArea;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // EDHREC_TOP_CARDS_API_RESPONSE_DISPLAY_WIDGET_H
|
||||||
|
|
@ -21,26 +21,15 @@ EdhrecTopCommandersApiResponseDisplayWidget::EdhrecTopCommandersApiResponseDispl
|
||||||
|
|
||||||
cardDisplayLayout = new QVBoxLayout(this);
|
cardDisplayLayout = new QVBoxLayout(this);
|
||||||
|
|
||||||
// Create a QSplitter to hold the ListView and ScrollArea holding CardListdisplayWidgets side by side
|
|
||||||
auto splitter = new QSplitter(this);
|
|
||||||
splitter->setOrientation(Qt::Horizontal);
|
|
||||||
|
|
||||||
auto listView = new QListView(splitter);
|
|
||||||
listView->setMinimumWidth(50);
|
|
||||||
listView->setMaximumWidth(150);
|
|
||||||
auto listModel = new QStringListModel(this);
|
|
||||||
QStringList widgetNames;
|
|
||||||
|
|
||||||
// Add card list widgets
|
// Add card list widgets
|
||||||
auto edhrec_commander_api_response_card_lists = response.container.getCardlists();
|
auto edhrec_commander_api_response_card_lists = response.container.getCardlists();
|
||||||
for (const EdhrecCommanderApiResponseCardList &card_list : edhrec_commander_api_response_card_lists) {
|
for (const EdhrecCommanderApiResponseCardList &card_list : edhrec_commander_api_response_card_lists) {
|
||||||
auto cardListDisplayWidget = new EdhrecCommanderApiResponseCardListDisplayWidget(this, card_list);
|
auto cardListDisplayWidget = new EdhrecCommanderApiResponseCardListDisplayWidget(this, card_list);
|
||||||
cardDisplayLayout->addWidget(cardListDisplayWidget);
|
cardDisplayLayout->addWidget(cardListDisplayWidget);
|
||||||
widgetNames.append(cardListDisplayWidget->getBannerText());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a QScrollArea to hold the card display widgets
|
// Create a QScrollArea to hold the card display widgets
|
||||||
scrollArea = new QScrollArea(splitter);
|
scrollArea = new QScrollArea(this);
|
||||||
scrollArea->setWidgetResizable(true);
|
scrollArea->setWidgetResizable(true);
|
||||||
scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
|
scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
|
||||||
scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||||
|
|
@ -48,40 +37,9 @@ EdhrecTopCommandersApiResponseDisplayWidget::EdhrecTopCommandersApiResponseDispl
|
||||||
// Set the cardDisplayLayout inside the scroll area
|
// Set the cardDisplayLayout inside the scroll area
|
||||||
auto scrollWidget = new QWidget(scrollArea);
|
auto scrollWidget = new QWidget(scrollArea);
|
||||||
scrollWidget->setLayout(cardDisplayLayout);
|
scrollWidget->setLayout(cardDisplayLayout);
|
||||||
connect(splitter, &QSplitter::splitterMoved, this, &EdhrecTopCommandersApiResponseDisplayWidget::onSplitterChange);
|
|
||||||
scrollArea->setWidget(scrollWidget);
|
scrollArea->setWidget(scrollWidget);
|
||||||
|
|
||||||
// Configure the list view
|
layout->addWidget(scrollArea);
|
||||||
listModel->setStringList(widgetNames);
|
|
||||||
listView->setModel(listModel);
|
|
||||||
listView->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
|
||||||
|
|
||||||
// Connect the list view to ensure the corresponding widget is visible
|
|
||||||
connect(listView, &QListView::clicked, this, [this](const QModelIndex &index) {
|
|
||||||
int widgetIndex = index.row();
|
|
||||||
qDebug() << "clicked: " << widgetIndex;
|
|
||||||
auto targetWidget = cardDisplayLayout->itemAt(widgetIndex)->widget();
|
|
||||||
if (targetWidget) {
|
|
||||||
qDebug() << "Found targetWidget" << targetWidget;
|
|
||||||
// Attempt to cast the parent to QScrollArea
|
|
||||||
auto scrollArea = qobject_cast<QScrollArea *>(this->scrollArea); // Use the scroll area instance
|
|
||||||
if (scrollArea) {
|
|
||||||
qDebug() << "ScrollArea" << scrollArea;
|
|
||||||
scrollArea->ensureWidgetVisible(targetWidget);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Add splitter to the main layout
|
|
||||||
splitter->addWidget(listView);
|
|
||||||
splitter->addWidget(scrollArea);
|
|
||||||
|
|
||||||
layout->addWidget(splitter);
|
|
||||||
}
|
|
||||||
|
|
||||||
void EdhrecTopCommandersApiResponseDisplayWidget::onSplitterChange()
|
|
||||||
{
|
|
||||||
scrollArea->widget()->resize(scrollArea->size());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EdhrecTopCommandersApiResponseDisplayWidget::resizeEvent(QResizeEvent *event)
|
void EdhrecTopCommandersApiResponseDisplayWidget::resizeEvent(QResizeEvent *event)
|
||||||
|
|
|
||||||
|
|
@ -15,9 +15,6 @@ public:
|
||||||
explicit EdhrecTopCommandersApiResponseDisplayWidget(QWidget *parent, EdhrecTopCommandersApiResponse response);
|
explicit EdhrecTopCommandersApiResponseDisplayWidget(QWidget *parent, EdhrecTopCommandersApiResponse response);
|
||||||
void resizeEvent(QResizeEvent *event) override;
|
void resizeEvent(QResizeEvent *event) override;
|
||||||
|
|
||||||
public slots:
|
|
||||||
void onSplitterChange();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QHBoxLayout *layout;
|
QHBoxLayout *layout;
|
||||||
QVBoxLayout *cardDisplayLayout;
|
QVBoxLayout *cardDisplayLayout;
|
||||||
|
|
|
||||||
|
|
@ -20,26 +20,15 @@ EdhrecTopTagsApiResponseDisplayWidget::EdhrecTopTagsApiResponseDisplayWidget(QWi
|
||||||
|
|
||||||
cardDisplayLayout = new QVBoxLayout(this);
|
cardDisplayLayout = new QVBoxLayout(this);
|
||||||
|
|
||||||
// Create a QSplitter to hold the ListView and ScrollArea holding CardListdisplayWidgets side by side
|
|
||||||
auto splitter = new QSplitter(this);
|
|
||||||
splitter->setOrientation(Qt::Horizontal);
|
|
||||||
|
|
||||||
auto listView = new QListView(splitter);
|
|
||||||
listView->setMinimumWidth(50);
|
|
||||||
listView->setMaximumWidth(150);
|
|
||||||
auto listModel = new QStringListModel(this);
|
|
||||||
QStringList widgetNames;
|
|
||||||
|
|
||||||
// Add card list widgets
|
// Add card list widgets
|
||||||
auto edhrec_commander_api_response_card_lists = response.container.getCardlists();
|
auto edhrec_commander_api_response_card_lists = response.container.getCardlists();
|
||||||
for (const EdhrecCommanderApiResponseCardList &card_list : edhrec_commander_api_response_card_lists) {
|
for (const EdhrecCommanderApiResponseCardList &card_list : edhrec_commander_api_response_card_lists) {
|
||||||
auto cardListDisplayWidget = new EdhrecCommanderApiResponseCardListDisplayWidget(this, card_list);
|
auto cardListDisplayWidget = new EdhrecCommanderApiResponseCardListDisplayWidget(this, card_list);
|
||||||
cardDisplayLayout->addWidget(cardListDisplayWidget);
|
cardDisplayLayout->addWidget(cardListDisplayWidget);
|
||||||
widgetNames.append(cardListDisplayWidget->getBannerText());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a QScrollArea to hold the card display widgets
|
// Create a QScrollArea to hold the card display widgets
|
||||||
scrollArea = new QScrollArea(splitter);
|
scrollArea = new QScrollArea(this);
|
||||||
scrollArea->setWidgetResizable(true);
|
scrollArea->setWidgetResizable(true);
|
||||||
scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
|
scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
|
||||||
scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||||
|
|
@ -47,46 +36,14 @@ EdhrecTopTagsApiResponseDisplayWidget::EdhrecTopTagsApiResponseDisplayWidget(QWi
|
||||||
// Set the cardDisplayLayout inside the scroll area
|
// Set the cardDisplayLayout inside the scroll area
|
||||||
auto scrollWidget = new QWidget(scrollArea);
|
auto scrollWidget = new QWidget(scrollArea);
|
||||||
scrollWidget->setLayout(cardDisplayLayout);
|
scrollWidget->setLayout(cardDisplayLayout);
|
||||||
connect(splitter, &QSplitter::splitterMoved, this, &EdhrecTopTagsApiResponseDisplayWidget::onSplitterChange);
|
|
||||||
scrollArea->setWidget(scrollWidget);
|
scrollArea->setWidget(scrollWidget);
|
||||||
|
|
||||||
// Configure the list view
|
layout->addWidget(scrollArea);
|
||||||
listModel->setStringList(widgetNames);
|
|
||||||
listView->setModel(listModel);
|
|
||||||
listView->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
|
||||||
|
|
||||||
// Connect the list view to ensure the corresponding widget is visible
|
|
||||||
connect(listView, &QListView::clicked, this, [this](const QModelIndex &index) {
|
|
||||||
int widgetIndex = index.row();
|
|
||||||
qDebug() << "clicked: " << widgetIndex;
|
|
||||||
auto targetWidget = cardDisplayLayout->itemAt(widgetIndex)->widget();
|
|
||||||
if (targetWidget) {
|
|
||||||
qDebug() << "Found targetWidget" << targetWidget;
|
|
||||||
// Attempt to cast the parent to QScrollArea
|
|
||||||
auto scrollArea = qobject_cast<QScrollArea *>(this->scrollArea); // Use the scroll area instance
|
|
||||||
if (scrollArea) {
|
|
||||||
qDebug() << "ScrollArea" << scrollArea;
|
|
||||||
scrollArea->ensureWidgetVisible(targetWidget);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Add splitter to the main layout
|
|
||||||
splitter->addWidget(listView);
|
|
||||||
splitter->addWidget(scrollArea);
|
|
||||||
|
|
||||||
layout->addWidget(splitter);
|
|
||||||
}
|
|
||||||
|
|
||||||
void EdhrecTopTagsApiResponseDisplayWidget::onSplitterChange()
|
|
||||||
{
|
|
||||||
scrollArea->widget()->resize(scrollArea->size());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EdhrecTopTagsApiResponseDisplayWidget::resizeEvent(QResizeEvent *event)
|
void EdhrecTopTagsApiResponseDisplayWidget::resizeEvent(QResizeEvent *event)
|
||||||
{
|
{
|
||||||
QWidget::resizeEvent(event);
|
QWidget::resizeEvent(event);
|
||||||
qDebug() << event->size();
|
|
||||||
layout->invalidate();
|
layout->invalidate();
|
||||||
layout->activate();
|
layout->activate();
|
||||||
layout->update();
|
layout->update();
|
||||||
|
|
|
||||||
|
|
@ -15,9 +15,6 @@ public:
|
||||||
explicit EdhrecTopTagsApiResponseDisplayWidget(QWidget *parent, EdhrecTopTagsApiResponse response);
|
explicit EdhrecTopTagsApiResponseDisplayWidget(QWidget *parent, EdhrecTopTagsApiResponse response);
|
||||||
void resizeEvent(QResizeEvent *event) override;
|
void resizeEvent(QResizeEvent *event) override;
|
||||||
|
|
||||||
public slots:
|
|
||||||
void onSplitterChange();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QHBoxLayout *layout;
|
QHBoxLayout *layout;
|
||||||
QVBoxLayout *cardDisplayLayout;
|
QVBoxLayout *cardDisplayLayout;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue