mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-18 08:22:15 -07:00
Add a splitter and a list view to jump to the card list displays.
This commit is contained in:
parent
9089eeecf2
commit
cb71b33a2b
7 changed files with 91 additions and 27 deletions
|
|
@ -13,7 +13,7 @@ EdhrecCommanderApiResponseCardListDisplayWidget::EdhrecCommanderApiResponseCardL
|
||||||
layout = new QVBoxLayout(this);
|
layout = new QVBoxLayout(this);
|
||||||
setLayout(layout);
|
setLayout(layout);
|
||||||
|
|
||||||
auto header = new BannerWidget(this, toDisplay.header);
|
header = new BannerWidget(this, toDisplay.header);
|
||||||
|
|
||||||
flowWidget = new FlowWidget(this, Qt::Horizontal, Qt::ScrollBarAlwaysOff, Qt::ScrollBarAlwaysOff);
|
flowWidget = new FlowWidget(this, Qt::Horizontal, Qt::ScrollBarAlwaysOff, Qt::ScrollBarAlwaysOff);
|
||||||
header->setBuddy(flowWidget);
|
header->setBuddy(flowWidget);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
#ifndef EDHREC_COMMANDER_API_RESPONSE_CARD_LIST_DISPLAY_WIDGET_H
|
#ifndef EDHREC_COMMANDER_API_RESPONSE_CARD_LIST_DISPLAY_WIDGET_H
|
||||||
#define EDHREC_COMMANDER_API_RESPONSE_CARD_LIST_DISPLAY_WIDGET_H
|
#define EDHREC_COMMANDER_API_RESPONSE_CARD_LIST_DISPLAY_WIDGET_H
|
||||||
|
|
||||||
|
#include "../../../ui/widgets/general/display/banner_widget.h"
|
||||||
#include "../../../ui/widgets/general/layout_containers/flow_widget.h"
|
#include "../../../ui/widgets/general/layout_containers/flow_widget.h"
|
||||||
#include "api_response/edhrec_commander_api_response_card_list.h"
|
#include "api_response/edhrec_commander_api_response_card_list.h"
|
||||||
|
|
||||||
|
|
@ -15,9 +16,14 @@ public:
|
||||||
explicit EdhrecCommanderApiResponseCardListDisplayWidget(QWidget *parent,
|
explicit EdhrecCommanderApiResponseCardListDisplayWidget(QWidget *parent,
|
||||||
EdhrecCommanderApiResponseCardList toDisplay);
|
EdhrecCommanderApiResponseCardList toDisplay);
|
||||||
void resizeEvent(QResizeEvent *event) override;
|
void resizeEvent(QResizeEvent *event) override;
|
||||||
|
[[nodiscard]] QString getBannerText() const
|
||||||
|
{
|
||||||
|
return header->getText();
|
||||||
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QVBoxLayout *layout;
|
QVBoxLayout *layout;
|
||||||
|
BannerWidget *header;
|
||||||
FlowWidget *flowWidget;
|
FlowWidget *flowWidget;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,25 +6,86 @@
|
||||||
#include "edhrec_commander_api_response_card_list_display_widget.h"
|
#include "edhrec_commander_api_response_card_list_display_widget.h"
|
||||||
#include "edhrec_commander_api_response_commander_details_display_widget.h"
|
#include "edhrec_commander_api_response_commander_details_display_widget.h"
|
||||||
|
|
||||||
|
#include <QListView>
|
||||||
#include <QResizeEvent>
|
#include <QResizeEvent>
|
||||||
|
#include <QScrollArea>
|
||||||
|
#include <QSplitter>
|
||||||
|
#include <QStringListModel>
|
||||||
|
|
||||||
EdhrecCommanderApiResponseDisplayWidget::EdhrecCommanderApiResponseDisplayWidget(QWidget *parent,
|
EdhrecCommanderApiResponseDisplayWidget::EdhrecCommanderApiResponseDisplayWidget(QWidget *parent,
|
||||||
EdhrecCommanderApiResponse response)
|
EdhrecCommanderApiResponse response)
|
||||||
: QWidget(parent)
|
: QWidget(parent)
|
||||||
{
|
{
|
||||||
layout = new QVBoxLayout(this);
|
layout = new QHBoxLayout(this);
|
||||||
setLayout(layout);
|
setLayout(layout);
|
||||||
|
|
||||||
layout->setAlignment(Qt::AlignHCenter);
|
cardDisplayLayout = new QVBoxLayout(this);
|
||||||
|
|
||||||
|
// Create a QSplitter to hold the ListView and ScrollArea side by side
|
||||||
|
auto splitter = new QSplitter(this);
|
||||||
|
splitter->setOrientation(Qt::Horizontal); // Horizontal splitter to divide ListView and ScrollArea
|
||||||
|
|
||||||
|
// Create the list view
|
||||||
|
auto listView = new QListView(splitter); // Set list view as part of the splitter
|
||||||
|
auto listModel = new QStringListModel(this);
|
||||||
|
QStringList widgetNames;
|
||||||
|
|
||||||
|
// Add commander details
|
||||||
auto commanderPicture = new EdhrecCommanderResponseCommanderDetailsDisplayWidget(this, response.container.getCommanderDetails());
|
auto commanderPicture = new EdhrecCommanderResponseCommanderDetailsDisplayWidget(this, response.container.getCommanderDetails());
|
||||||
layout->addWidget(commanderPicture);
|
cardDisplayLayout->addWidget(commanderPicture);
|
||||||
|
widgetNames.append("Commander Details");
|
||||||
|
|
||||||
|
// Add card list widgets
|
||||||
auto edhrec_commander_api_response_card_lists = response.container.getCardlists();
|
auto edhrec_commander_api_response_card_lists = response.container.getCardlists();
|
||||||
foreach (EdhrecCommanderApiResponseCardList card_list, edhrec_commander_api_response_card_lists) {
|
foreach (EdhrecCommanderApiResponseCardList card_list, edhrec_commander_api_response_card_lists) {
|
||||||
auto cardListDisplayWidget = new EdhrecCommanderApiResponseCardListDisplayWidget(this, card_list);
|
auto cardListDisplayWidget = new EdhrecCommanderApiResponseCardListDisplayWidget(this, card_list);
|
||||||
layout->addWidget(cardListDisplayWidget);
|
cardDisplayLayout->addWidget(cardListDisplayWidget);
|
||||||
|
widgetNames.append(cardListDisplayWidget->getBannerText());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create a QScrollArea to hold the card display widgets
|
||||||
|
scrollArea = new QScrollArea(splitter); // Set scroll area as part of the splitter
|
||||||
|
scrollArea->setWidgetResizable(true);
|
||||||
|
scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
|
||||||
|
scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||||
|
|
||||||
|
// Set the cardDisplayLayout inside the scroll area
|
||||||
|
auto scrollWidget = new QWidget(scrollArea); // Create a QWidget to contain the layout
|
||||||
|
scrollWidget->setLayout(cardDisplayLayout); // Set the layout for the widget
|
||||||
|
connect(splitter, &QSplitter::splitterMoved, this, &EdhrecCommanderApiResponseDisplayWidget::onSplitterChange);
|
||||||
|
scrollArea->setWidget(scrollWidget); // Set the widget inside the scroll area
|
||||||
|
|
||||||
|
// Configure the list view
|
||||||
|
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); // Add listView to the splitter
|
||||||
|
splitter->addWidget(scrollArea); // Add scrollArea to the splitter
|
||||||
|
|
||||||
|
layout->addWidget(splitter); // Add the splitter to the main layout
|
||||||
|
}
|
||||||
|
|
||||||
|
void EdhrecCommanderApiResponseDisplayWidget::onSplitterChange()
|
||||||
|
{
|
||||||
|
scrollArea->widget()->resize(scrollArea->size());
|
||||||
}
|
}
|
||||||
|
|
||||||
void EdhrecCommanderApiResponseDisplayWidget::resizeEvent(QResizeEvent *event)
|
void EdhrecCommanderApiResponseDisplayWidget::resizeEvent(QResizeEvent *event)
|
||||||
|
|
@ -34,4 +95,9 @@ void EdhrecCommanderApiResponseDisplayWidget::resizeEvent(QResizeEvent *event)
|
||||||
layout->invalidate();
|
layout->invalidate();
|
||||||
layout->activate();
|
layout->activate();
|
||||||
layout->update();
|
layout->update();
|
||||||
}
|
if (scrollArea) {
|
||||||
|
if (scrollArea->widget()) {
|
||||||
|
scrollArea->widget()->resize(event->size());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include "api_response/edhrec_commander_api_response.h"
|
#include "api_response/edhrec_commander_api_response.h"
|
||||||
|
|
||||||
|
#include <QScrollArea>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
|
||||||
|
|
@ -14,8 +15,13 @@ public:
|
||||||
explicit EdhrecCommanderApiResponseDisplayWidget(QWidget *parent, EdhrecCommanderApiResponse response);
|
explicit EdhrecCommanderApiResponseDisplayWidget(QWidget *parent, EdhrecCommanderApiResponse response);
|
||||||
void resizeEvent(QResizeEvent *event) override;
|
void resizeEvent(QResizeEvent *event) override;
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void onSplitterChange();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QVBoxLayout *layout;
|
QHBoxLayout *layout;
|
||||||
|
QVBoxLayout *cardDisplayLayout;
|
||||||
|
QScrollArea *scrollArea;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // EDHREC_COMMANDER_API_RESPONSE_DISPLAY_WIDGET_H
|
#endif // EDHREC_COMMANDER_API_RESPONSE_DISPLAY_WIDGET_H
|
||||||
|
|
|
||||||
|
|
@ -14,13 +14,7 @@
|
||||||
|
|
||||||
TabEdhRec::TabEdhRec(TabSupervisor *_tabSupervisor) : Tab(_tabSupervisor)
|
TabEdhRec::TabEdhRec(TabSupervisor *_tabSupervisor) : Tab(_tabSupervisor)
|
||||||
{
|
{
|
||||||
scrollArea = new QScrollArea(this);
|
|
||||||
scrollArea->setWidgetResizable(true);
|
|
||||||
scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
|
|
||||||
scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
|
||||||
|
|
||||||
networkManager = new QNetworkAccessManager(this);
|
networkManager = new QNetworkAccessManager(this);
|
||||||
setCentralWidget(scrollArea);
|
|
||||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0))
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0))
|
||||||
networkManager->setTransferTimeout(); // Use Qt's default timeout
|
networkManager->setTransferTimeout(); // Use Qt's default timeout
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -29,16 +23,6 @@ TabEdhRec::TabEdhRec(TabSupervisor *_tabSupervisor) : Tab(_tabSupervisor)
|
||||||
connect(networkManager, SIGNAL(finished(QNetworkReply *)), this, SLOT(processApiJson(QNetworkReply *)));
|
connect(networkManager, SIGNAL(finished(QNetworkReply *)), this, SLOT(processApiJson(QNetworkReply *)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void TabEdhRec::resizeEvent(QResizeEvent *event)
|
|
||||||
{
|
|
||||||
QWidget::resizeEvent(event);
|
|
||||||
if (scrollArea) {
|
|
||||||
if (scrollArea->widget()) {
|
|
||||||
scrollArea->widget()->resize(event->size());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void TabEdhRec::retranslateUi()
|
void TabEdhRec::retranslateUi()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
@ -91,9 +75,9 @@ void TabEdhRec::processApiJson(QNetworkReply *reply)
|
||||||
EdhrecCommanderApiResponse deckData;
|
EdhrecCommanderApiResponse deckData;
|
||||||
deckData.fromJson(jsonObj);
|
deckData.fromJson(jsonObj);
|
||||||
|
|
||||||
displayWidget = new EdhrecCommanderApiResponseDisplayWidget(scrollArea, deckData);
|
displayWidget = new EdhrecCommanderApiResponseDisplayWidget(this, deckData);
|
||||||
// flowWidget->addWidget(displayWidget);
|
// flowWidget->addWidget(displayWidget);
|
||||||
scrollArea->setWidget(displayWidget);
|
setCentralWidget(displayWidget);
|
||||||
|
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
update();
|
update();
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,6 @@ class TabEdhRec : public Tab
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit TabEdhRec(TabSupervisor *_tabSupervisor);
|
explicit TabEdhRec(TabSupervisor *_tabSupervisor);
|
||||||
void resizeEvent(QResizeEvent *event);
|
|
||||||
|
|
||||||
void retranslateUi() override;
|
void retranslateUi() override;
|
||||||
QString getTabText() const override
|
QString getTabText() const override
|
||||||
|
|
@ -31,7 +30,6 @@ public slots:
|
||||||
void setCard(CardInfoPtr _cardToQuery, bool isCommander = false);
|
void setCard(CardInfoPtr _cardToQuery, bool isCommander = false);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QScrollArea *scrollArea;
|
|
||||||
CardInfoPtr cardToQuery;
|
CardInfoPtr cardToQuery;
|
||||||
EdhrecCommanderApiResponseDisplayWidget *displayWidget;
|
EdhrecCommanderApiResponseDisplayWidget *displayWidget;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,10 @@ public:
|
||||||
{
|
{
|
||||||
buddy = _buddy;
|
buddy = _buddy;
|
||||||
}
|
}
|
||||||
|
QString getText() const
|
||||||
|
{
|
||||||
|
return bannerLabel->text();
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void paintEvent(QPaintEvent *event) override;
|
void paintEvent(QPaintEvent *event) override;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue