mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-17 07:52:16 -07:00
Allow toggling between flat and overlap style and resizing the cards themselves.
This commit is contained in:
parent
4b868e7478
commit
a0e6a5bbe5
11 changed files with 401 additions and 133 deletions
|
|
@ -0,0 +1,80 @@
|
||||||
|
#include "card_group_display_widget.h"
|
||||||
|
|
||||||
|
#include "../../../../../deck/deck_list_model.h"
|
||||||
|
#include "../../../../../game/cards/card_database_manager.h"
|
||||||
|
#include "../../../../../utility/card_info_comparator.h"
|
||||||
|
#include "../card_info_picture_with_text_overlay_widget.h"
|
||||||
|
|
||||||
|
#include <QResizeEvent>
|
||||||
|
|
||||||
|
CardGroupDisplayWidget::CardGroupDisplayWidget(QWidget *parent,
|
||||||
|
DeckListModel *_deckListModel,
|
||||||
|
QString _zoneName,
|
||||||
|
QString _cardGroupCategory,
|
||||||
|
QString _activeGroupCriteria,
|
||||||
|
QStringList _activeSortCriteria,
|
||||||
|
int bannerOpacity,
|
||||||
|
CardSizeWidget *_cardSizeWidget)
|
||||||
|
: QWidget(parent), deckListModel(_deckListModel), zoneName(_zoneName), cardGroupCategory(_cardGroupCategory),
|
||||||
|
activeGroupCriteria(_activeGroupCriteria), activeSortCriteria(_activeSortCriteria), cardSizeWidget(_cardSizeWidget)
|
||||||
|
{
|
||||||
|
layout = new QVBoxLayout(this);
|
||||||
|
setLayout(layout);
|
||||||
|
setMinimumSize(QSize(0, 0));
|
||||||
|
|
||||||
|
banner = new BannerWidget(this, cardGroupCategory, Qt::Orientation::Vertical, bannerOpacity);
|
||||||
|
|
||||||
|
layout->addWidget(banner);
|
||||||
|
updateCardDisplays();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CardGroupDisplayWidget::updateCardDisplays(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<CardInfoPtr> CardGroupDisplayWidget::getCardsMatchingGroup(QList<CardInfoPtr> cardsToSort)
|
||||||
|
{
|
||||||
|
cardsToSort = sortCardList(cardsToSort, activeSortCriteria, Qt::SortOrder::AscendingOrder);
|
||||||
|
|
||||||
|
QList<CardInfoPtr> activeList;
|
||||||
|
for (const CardInfoPtr &info : cardsToSort) {
|
||||||
|
if (info && info->getProperty(activeGroupCriteria) == cardGroupCategory) {
|
||||||
|
activeList.append(info);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return activeList;
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<CardInfoPtr> CardGroupDisplayWidget::sortCardList(QList<CardInfoPtr> cardsToSort,
|
||||||
|
const QStringList properties,
|
||||||
|
Qt::SortOrder order = Qt::AscendingOrder)
|
||||||
|
{
|
||||||
|
CardInfoComparator comparator(properties, order);
|
||||||
|
std::sort(cardsToSort.begin(), cardsToSort.end(), comparator);
|
||||||
|
|
||||||
|
return cardsToSort;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CardGroupDisplayWidget::onActiveSortCriteriaChanged(QStringList _activeSortCriteria)
|
||||||
|
{
|
||||||
|
if (activeSortCriteria != _activeSortCriteria) {
|
||||||
|
activeSortCriteria = _activeSortCriteria;
|
||||||
|
updateCardDisplays(); // Refresh display with new sorting
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CardGroupDisplayWidget::onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card)
|
||||||
|
{
|
||||||
|
emit cardClicked(event, card);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CardGroupDisplayWidget::onHover(CardInfoPtr card)
|
||||||
|
{
|
||||||
|
emit cardHovered(card);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CardGroupDisplayWidget::resizeEvent(QResizeEvent *event)
|
||||||
|
{
|
||||||
|
QWidget::resizeEvent(event);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,53 @@
|
||||||
|
#ifndef CARD_GROUP_DISPLAY_WIDGET_H
|
||||||
|
#define CARD_GROUP_DISPLAY_WIDGET_H
|
||||||
|
|
||||||
|
#include "../../../../../deck/deck_list_model.h"
|
||||||
|
#include "../../../../../game/cards/card_database.h"
|
||||||
|
#include "../../general/display/banner_widget.h"
|
||||||
|
#include "../card_info_picture_with_text_overlay_widget.h"
|
||||||
|
#include "../card_size_widget.h"
|
||||||
|
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QVBoxLayout>
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
class CardGroupDisplayWidget : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
CardGroupDisplayWidget(QWidget *parent,
|
||||||
|
DeckListModel *deckListModel,
|
||||||
|
QString zoneName,
|
||||||
|
QString cardGroupCategory,
|
||||||
|
QString activeGroupCriteria,
|
||||||
|
QStringList activeSortCriteria,
|
||||||
|
int bannerOpacity,
|
||||||
|
CardSizeWidget *cardSizeWidget);
|
||||||
|
|
||||||
|
QList<CardInfoPtr> getCardsMatchingGroup(QList<CardInfoPtr> cardsToSort);
|
||||||
|
void resizeEvent(QResizeEvent *event) override;
|
||||||
|
|
||||||
|
DeckListModel *deckListModel;
|
||||||
|
QString zoneName;
|
||||||
|
QString cardGroupCategory;
|
||||||
|
QString activeGroupCriteria;
|
||||||
|
QStringList activeSortCriteria;
|
||||||
|
CardSizeWidget *cardSizeWidget;
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
QList<CardInfoPtr> sortCardList(QList<CardInfoPtr> cardsToSort, QStringList properties, Qt::SortOrder order);
|
||||||
|
void onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card);
|
||||||
|
void onHover(CardInfoPtr card);
|
||||||
|
virtual void updateCardDisplays();
|
||||||
|
void onActiveSortCriteriaChanged(QStringList activeSortCriteria);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void cardClicked(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card);
|
||||||
|
void cardHovered(CardInfoPtr card);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
QVBoxLayout *layout;
|
||||||
|
BannerWidget *banner;
|
||||||
|
};
|
||||||
|
#endif // CARD_GROUP_DISPLAY_WIDGET_H
|
||||||
|
|
@ -0,0 +1,99 @@
|
||||||
|
#include "flat_card_group_display_widget.h"
|
||||||
|
|
||||||
|
#include "../../../../../deck/deck_list_model.h"
|
||||||
|
#include "../../../../../game/cards/card_database_manager.h"
|
||||||
|
#include "../../../../../utility/card_info_comparator.h"
|
||||||
|
#include "../card_info_picture_with_text_overlay_widget.h"
|
||||||
|
|
||||||
|
#include <QResizeEvent>
|
||||||
|
|
||||||
|
FlatCardGroupDisplayWidget::FlatCardGroupDisplayWidget(QWidget *parent,
|
||||||
|
DeckListModel *_deckListModel,
|
||||||
|
QString _zoneName,
|
||||||
|
QString _cardGroupCategory,
|
||||||
|
QString _activeGroupCriteria,
|
||||||
|
QStringList _activeSortCriteria,
|
||||||
|
int bannerOpacity,
|
||||||
|
CardSizeWidget *_cardSizeWidget)
|
||||||
|
: CardGroupDisplayWidget(parent, _deckListModel, _zoneName, _cardGroupCategory, _activeGroupCriteria, _activeSortCriteria, bannerOpacity, _cardSizeWidget)
|
||||||
|
{
|
||||||
|
flowWidget = new FlowWidget(this, Qt::Horizontal, Qt::ScrollBarAlwaysOff, Qt::ScrollBarAlwaysOff);
|
||||||
|
banner->setBuddy(flowWidget);
|
||||||
|
|
||||||
|
layout->addWidget(flowWidget);
|
||||||
|
FlatCardGroupDisplayWidget::updateCardDisplays();
|
||||||
|
connect(deckListModel, &DeckListModel::dataChanged, this, &FlatCardGroupDisplayWidget::updateCardDisplays);
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlatCardGroupDisplayWidget::updateCardDisplays()
|
||||||
|
{
|
||||||
|
// Retrieve and sort cards
|
||||||
|
QList<CardInfoPtr> cardsInZone = getCardsMatchingGroup(deckListModel->getCardsAsCardInfoPtrsForZone(zoneName));
|
||||||
|
|
||||||
|
// Show or hide widget
|
||||||
|
bool shouldBeVisible = !cardsInZone.isEmpty();
|
||||||
|
if (shouldBeVisible != isVisible()) {
|
||||||
|
setVisible(shouldBeVisible);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retrieve existing widgets
|
||||||
|
QList<CardInfoPictureWithTextOverlayWidget *> existingWidgets =
|
||||||
|
flowWidget->findChildren<CardInfoPictureWithTextOverlayWidget *>();
|
||||||
|
|
||||||
|
QHash<QString, QList<CardInfoPictureWithTextOverlayWidget *>> widgetMap;
|
||||||
|
for (CardInfoPictureWithTextOverlayWidget *widget : existingWidgets) {
|
||||||
|
widgetMap[widget->getInfo()->getName()].append(widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<CardInfoPictureWithTextOverlayWidget *> sortedWidgets;
|
||||||
|
QSet<CardInfoPictureWithTextOverlayWidget *> usedWidgets;
|
||||||
|
|
||||||
|
// Ensure widgets are ordered to match the sorted cards
|
||||||
|
for (const CardInfoPtr &card : cardsInZone) {
|
||||||
|
QString name = card->getName();
|
||||||
|
CardInfoPictureWithTextOverlayWidget *widget = nullptr;
|
||||||
|
|
||||||
|
if (!widgetMap[name].isEmpty()) {
|
||||||
|
// Reuse an existing widget
|
||||||
|
widget = widgetMap[name].takeFirst();
|
||||||
|
} else {
|
||||||
|
// Create a new widget if needed
|
||||||
|
widget = new CardInfoPictureWithTextOverlayWidget(flowWidget, true);
|
||||||
|
widget->setScaleFactor(cardSizeWidget->getSlider()->value());
|
||||||
|
widget->setCard(card);
|
||||||
|
|
||||||
|
connect(widget, &CardInfoPictureWithTextOverlayWidget::imageClicked, this,
|
||||||
|
&FlatCardGroupDisplayWidget::onClick);
|
||||||
|
connect(widget, &CardInfoPictureWithTextOverlayWidget::hoveredOnCard, this,
|
||||||
|
&FlatCardGroupDisplayWidget::onHover);
|
||||||
|
connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, widget, &CardInfoPictureWidget::setScaleFactor);
|
||||||
|
|
||||||
|
flowWidget->addWidget(widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Store in sorted order
|
||||||
|
sortedWidgets.append(widget);
|
||||||
|
usedWidgets.insert(widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove extra widgets
|
||||||
|
for (CardInfoPictureWithTextOverlayWidget *widget : existingWidgets) {
|
||||||
|
if (!usedWidgets.contains(widget)) {
|
||||||
|
flowWidget->layout()->removeWidget(widget);
|
||||||
|
delete widget;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// **Reorder widgets in place**
|
||||||
|
for (int i = 0; i < sortedWidgets.size(); ++i) {
|
||||||
|
sortedWidgets[i]->setParent(nullptr); // Temporarily detach
|
||||||
|
}
|
||||||
|
for (int i = 0; i < sortedWidgets.size(); ++i) {
|
||||||
|
flowWidget->addWidget(sortedWidgets[i]); // Reattach in correct order
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FlatCardGroupDisplayWidget::resizeEvent(QResizeEvent *event)
|
||||||
|
{
|
||||||
|
QWidget::resizeEvent(event);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
#ifndef FLAT_CARD_GROUP_DISPLAY_WIDGET_H
|
||||||
|
#define FLAT_CARD_GROUP_DISPLAY_WIDGET_H
|
||||||
|
|
||||||
|
#include "../../general/layout_containers/flow_widget.h"
|
||||||
|
#include "card_group_display_widget.h"
|
||||||
|
|
||||||
|
class FlatCardGroupDisplayWidget : public CardGroupDisplayWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
FlatCardGroupDisplayWidget(QWidget *parent,
|
||||||
|
DeckListModel *deckListModel,
|
||||||
|
QString zoneName,
|
||||||
|
QString cardGroupCategory,
|
||||||
|
QString activeGroupCriteria,
|
||||||
|
QStringList activeSortCriteria,
|
||||||
|
int bannerOpacity,
|
||||||
|
CardSizeWidget *cardSizeWidget);
|
||||||
|
|
||||||
|
void resizeEvent(QResizeEvent *event) override;
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void updateCardDisplays() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
FlowWidget *flowWidget;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // FLAT_CARD_GROUP_DISPLAY_WIDGET_H
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
#include "overlapped_card_group_display_widget.h"
|
#include "overlapped_card_group_display_widget.h"
|
||||||
|
|
||||||
#include "../../../../deck/deck_list_model.h"
|
#include "../../../../../deck/deck_list_model.h"
|
||||||
#include "../../../../game/cards/card_database_manager.h"
|
#include "../../../../../game/cards/card_database_manager.h"
|
||||||
#include "../../../../utility/card_info_comparator.h"
|
#include "../../../../../utility/card_info_comparator.h"
|
||||||
#include "card_info_picture_with_text_overlay_widget.h"
|
#include "../card_info_picture_with_text_overlay_widget.h"
|
||||||
|
|
||||||
#include <QResizeEvent>
|
#include <QResizeEvent>
|
||||||
|
|
||||||
|
|
@ -13,22 +13,25 @@ OverlappedCardGroupDisplayWidget::OverlappedCardGroupDisplayWidget(QWidget *pare
|
||||||
QString _cardGroupCategory,
|
QString _cardGroupCategory,
|
||||||
QString _activeGroupCriteria,
|
QString _activeGroupCriteria,
|
||||||
QStringList _activeSortCriteria,
|
QStringList _activeSortCriteria,
|
||||||
int bannerOpacity)
|
int bannerOpacity,
|
||||||
: QWidget(parent), deckListModel(_deckListModel), zoneName(_zoneName), cardGroupCategory(_cardGroupCategory),
|
CardSizeWidget *_cardSizeWidget)
|
||||||
activeGroupCriteria(_activeGroupCriteria), activeSortCriteria(_activeSortCriteria)
|
: CardGroupDisplayWidget(parent,
|
||||||
|
_deckListModel,
|
||||||
|
_zoneName,
|
||||||
|
_cardGroupCategory,
|
||||||
|
_activeGroupCriteria,
|
||||||
|
_activeSortCriteria,
|
||||||
|
bannerOpacity,
|
||||||
|
_cardSizeWidget)
|
||||||
{
|
{
|
||||||
layout = new QVBoxLayout(this);
|
|
||||||
setLayout(layout);
|
|
||||||
setMinimumSize(QSize(0, 0));
|
|
||||||
|
|
||||||
banner = new BannerWidget(this, cardGroupCategory, Qt::Orientation::Vertical, bannerOpacity);
|
|
||||||
overlapWidget = new OverlapWidget(this, 80, 1, 1, Qt::Vertical, true);
|
overlapWidget = new OverlapWidget(this, 80, 1, 1, Qt::Vertical, true);
|
||||||
banner->setBuddy(overlapWidget);
|
banner->setBuddy(overlapWidget);
|
||||||
|
|
||||||
layout->addWidget(banner);
|
|
||||||
layout->addWidget(overlapWidget);
|
layout->addWidget(overlapWidget);
|
||||||
updateCardDisplays();
|
OverlappedCardGroupDisplayWidget::updateCardDisplays();
|
||||||
connect(deckListModel, &DeckListModel::dataChanged, this, &OverlappedCardGroupDisplayWidget::updateCardDisplays);
|
connect(deckListModel, &DeckListModel::dataChanged, this, &OverlappedCardGroupDisplayWidget::updateCardDisplays);
|
||||||
|
connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, this,
|
||||||
|
[this]() { overlapWidget->adjustMaxColumnsAndRows(); });
|
||||||
}
|
}
|
||||||
|
|
||||||
void OverlappedCardGroupDisplayWidget::updateCardDisplays()
|
void OverlappedCardGroupDisplayWidget::updateCardDisplays()
|
||||||
|
|
@ -65,12 +68,15 @@ void OverlappedCardGroupDisplayWidget::updateCardDisplays()
|
||||||
} else {
|
} else {
|
||||||
// Create a new widget if needed
|
// Create a new widget if needed
|
||||||
widget = new CardInfoPictureWithTextOverlayWidget(overlapWidget, true);
|
widget = new CardInfoPictureWithTextOverlayWidget(overlapWidget, true);
|
||||||
|
widget->setScaleFactor(cardSizeWidget->getSlider()->value());
|
||||||
widget->setCard(card);
|
widget->setCard(card);
|
||||||
|
|
||||||
connect(widget, &CardInfoPictureWithTextOverlayWidget::imageClicked, this,
|
connect(widget, &CardInfoPictureWithTextOverlayWidget::imageClicked, this,
|
||||||
&OverlappedCardGroupDisplayWidget::onClick);
|
&OverlappedCardGroupDisplayWidget::onClick);
|
||||||
connect(widget, &CardInfoPictureWithTextOverlayWidget::hoveredOnCard, this,
|
connect(widget, &CardInfoPictureWithTextOverlayWidget::hoveredOnCard, this,
|
||||||
&OverlappedCardGroupDisplayWidget::onHover);
|
&OverlappedCardGroupDisplayWidget::onHover);
|
||||||
|
connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, widget,
|
||||||
|
&CardInfoPictureWidget::setScaleFactor);
|
||||||
|
|
||||||
overlapWidget->addWidget(widget);
|
overlapWidget->addWidget(widget);
|
||||||
}
|
}
|
||||||
|
|
@ -104,48 +110,6 @@ void OverlappedCardGroupDisplayWidget::updateCardDisplays()
|
||||||
overlapWidget->adjustMaxColumnsAndRows();
|
overlapWidget->adjustMaxColumnsAndRows();
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<CardInfoPtr> OverlappedCardGroupDisplayWidget::getCardsMatchingGroup(QList<CardInfoPtr> cardsToSort)
|
|
||||||
{
|
|
||||||
cardsToSort = sortCardList(cardsToSort, activeSortCriteria, Qt::SortOrder::AscendingOrder);
|
|
||||||
|
|
||||||
QList<CardInfoPtr> activeList;
|
|
||||||
for (const CardInfoPtr &info : cardsToSort) {
|
|
||||||
if (info && info->getProperty(activeGroupCriteria) == cardGroupCategory) {
|
|
||||||
activeList.append(info);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return activeList;
|
|
||||||
}
|
|
||||||
|
|
||||||
QList<CardInfoPtr> OverlappedCardGroupDisplayWidget::sortCardList(QList<CardInfoPtr> cardsToSort,
|
|
||||||
const QStringList properties,
|
|
||||||
Qt::SortOrder order = Qt::AscendingOrder)
|
|
||||||
{
|
|
||||||
CardInfoComparator comparator(properties, order);
|
|
||||||
std::sort(cardsToSort.begin(), cardsToSort.end(), comparator);
|
|
||||||
|
|
||||||
return cardsToSort;
|
|
||||||
}
|
|
||||||
|
|
||||||
void OverlappedCardGroupDisplayWidget::onActiveSortCriteriaChanged(QStringList _activeSortCriteria)
|
|
||||||
{
|
|
||||||
if (activeSortCriteria != _activeSortCriteria) {
|
|
||||||
activeSortCriteria = _activeSortCriteria;
|
|
||||||
updateCardDisplays(); // Refresh display with new sorting
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void OverlappedCardGroupDisplayWidget::onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card)
|
|
||||||
{
|
|
||||||
emit cardClicked(event, card);
|
|
||||||
}
|
|
||||||
|
|
||||||
void OverlappedCardGroupDisplayWidget::onHover(CardInfoPtr card)
|
|
||||||
{
|
|
||||||
emit cardHovered(card);
|
|
||||||
}
|
|
||||||
|
|
||||||
void OverlappedCardGroupDisplayWidget::resizeEvent(QResizeEvent *event)
|
void OverlappedCardGroupDisplayWidget::resizeEvent(QResizeEvent *event)
|
||||||
{
|
{
|
||||||
QWidget::resizeEvent(event);
|
QWidget::resizeEvent(event);
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
#ifndef OVERLAPPED_CARD_GROUP_DISPLAY_WIDGET_H
|
||||||
|
#define OVERLAPPED_CARD_GROUP_DISPLAY_WIDGET_H
|
||||||
|
|
||||||
|
#include "../../general/layout_containers/overlap_widget.h"
|
||||||
|
#include "card_group_display_widget.h"
|
||||||
|
|
||||||
|
class OverlappedCardGroupDisplayWidget : public CardGroupDisplayWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
OverlappedCardGroupDisplayWidget(QWidget *parent,
|
||||||
|
DeckListModel *deckListModel,
|
||||||
|
QString zoneName,
|
||||||
|
QString cardGroupCategory,
|
||||||
|
QString activeGroupCriteria,
|
||||||
|
QStringList activeSortCriteria,
|
||||||
|
int bannerOpacity,
|
||||||
|
CardSizeWidget *cardSizeWidget);
|
||||||
|
|
||||||
|
void resizeEvent(QResizeEvent *event) override;
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void updateCardDisplays() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
OverlapWidget *overlapWidget;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // OVERLAPPED_CARD_GROUP_DISPLAY_WIDGET_H
|
||||||
|
|
@ -2,7 +2,8 @@
|
||||||
|
|
||||||
#include "../../../../deck/deck_list_model.h"
|
#include "../../../../deck/deck_list_model.h"
|
||||||
#include "../../../../utility/card_info_comparator.h"
|
#include "../../../../utility/card_info_comparator.h"
|
||||||
#include "overlapped_card_group_display_widget.h"
|
#include "card_group_display_widgets/flat_card_group_display_widget.h"
|
||||||
|
#include "card_group_display_widgets/overlapped_card_group_display_widget.h"
|
||||||
|
|
||||||
#include <QResizeEvent>
|
#include <QResizeEvent>
|
||||||
|
|
||||||
|
|
@ -12,9 +13,11 @@ DeckCardZoneDisplayWidget::DeckCardZoneDisplayWidget(QWidget *parent,
|
||||||
QString _activeGroupCriteria,
|
QString _activeGroupCriteria,
|
||||||
QStringList _activeSortCriteria,
|
QStringList _activeSortCriteria,
|
||||||
int bannerOpacity,
|
int bannerOpacity,
|
||||||
int subBannerOpacity)
|
int subBannerOpacity,
|
||||||
|
CardSizeWidget *_cardSizeWidget)
|
||||||
: QWidget(parent), deckListModel(_deckListModel), zoneName(_zoneName), activeGroupCriteria(_activeGroupCriteria),
|
: QWidget(parent), deckListModel(_deckListModel), zoneName(_zoneName), activeGroupCriteria(_activeGroupCriteria),
|
||||||
activeSortCriteria(_activeSortCriteria), bannerOpacity(bannerOpacity), subBannerOpacity(subBannerOpacity)
|
activeSortCriteria(_activeSortCriteria), bannerOpacity(bannerOpacity), subBannerOpacity(subBannerOpacity),
|
||||||
|
cardSizeWidget(_cardSizeWidget)
|
||||||
{
|
{
|
||||||
layout = new QVBoxLayout(this);
|
layout = new QVBoxLayout(this);
|
||||||
setLayout(layout);
|
setLayout(layout);
|
||||||
|
|
@ -57,43 +60,76 @@ void DeckCardZoneDisplayWidget::displayCards()
|
||||||
deleteCardGroupIfItDoesNotExist();
|
deleteCardGroupIfItDoesNotExist();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DeckCardZoneDisplayWidget::refreshDisplayType(const QString &_displayType)
|
||||||
|
{
|
||||||
|
displayType = _displayType;
|
||||||
|
QLayoutItem *item;
|
||||||
|
while ((item = cardGroupLayout->takeAt(0)) != nullptr) {
|
||||||
|
if (item->widget()) {
|
||||||
|
item->widget()->deleteLater();
|
||||||
|
} else if (item->layout()) {
|
||||||
|
delete item->layout();
|
||||||
|
}
|
||||||
|
delete item;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We gotta wait for all the deleteLater's to finish so we fire after the next event cycle
|
||||||
|
|
||||||
|
auto timer = new QTimer(this);
|
||||||
|
timer->setSingleShot(true);
|
||||||
|
connect(timer, &QTimer::timeout, this, [this]() { displayCards(); });
|
||||||
|
timer->start();
|
||||||
|
}
|
||||||
|
|
||||||
void DeckCardZoneDisplayWidget::addCardGroupIfItDoesNotExist()
|
void DeckCardZoneDisplayWidget::addCardGroupIfItDoesNotExist()
|
||||||
{
|
{
|
||||||
QList<OverlappedCardGroupDisplayWidget *> cardGroupsDisplayWidgets =
|
QList<CardGroupDisplayWidget *> cardGroupsDisplayWidgets =
|
||||||
cardGroupContainer->findChildren<OverlappedCardGroupDisplayWidget *>();
|
cardGroupContainer->findChildren<CardGroupDisplayWidget *>();
|
||||||
|
|
||||||
QList<QString> cardGroups = getGroupCriteriaValueList();
|
QList<QString> cardGroups = getGroupCriteriaValueList();
|
||||||
|
|
||||||
for (QString cardGroup : cardGroups) {
|
for (QString cardGroup : cardGroups) {
|
||||||
bool found = false;
|
bool found = false;
|
||||||
for (OverlappedCardGroupDisplayWidget *cardGroupDisplayWidget : cardGroupsDisplayWidgets) {
|
for (CardGroupDisplayWidget *cardGroupDisplayWidget : cardGroupsDisplayWidgets) {
|
||||||
if (cardGroupDisplayWidget->cardGroupCategory == cardGroup) {
|
if (cardGroupDisplayWidget->cardGroupCategory == cardGroup) {
|
||||||
found = true;
|
found = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!found) {
|
if (!found) {
|
||||||
OverlappedCardGroupDisplayWidget *display_widget =
|
if (displayType == "overlap") {
|
||||||
new OverlappedCardGroupDisplayWidget(cardGroupContainer, deckListModel, zoneName, cardGroup,
|
auto *display_widget = new OverlappedCardGroupDisplayWidget(
|
||||||
activeGroupCriteria, activeSortCriteria, subBannerOpacity);
|
cardGroupContainer, deckListModel, zoneName, cardGroup, activeGroupCriteria, activeSortCriteria,
|
||||||
connect(display_widget, SIGNAL(cardClicked(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)), this,
|
subBannerOpacity, cardSizeWidget);
|
||||||
SLOT(onClick(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)));
|
connect(display_widget, SIGNAL(cardClicked(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)),
|
||||||
connect(display_widget, SIGNAL(cardHovered(CardInfoPtr)), this, SLOT(onHover(CardInfoPtr)));
|
this, SLOT(onClick(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)));
|
||||||
connect(this, &DeckCardZoneDisplayWidget::activeSortCriteriaChanged, display_widget,
|
connect(display_widget, SIGNAL(cardHovered(CardInfoPtr)), this, SLOT(onHover(CardInfoPtr)));
|
||||||
&OverlappedCardGroupDisplayWidget::onActiveSortCriteriaChanged);
|
connect(this, &DeckCardZoneDisplayWidget::activeSortCriteriaChanged, display_widget,
|
||||||
cardGroupLayout->addWidget(display_widget);
|
&CardGroupDisplayWidget::onActiveSortCriteriaChanged);
|
||||||
|
cardGroupLayout->addWidget(display_widget);
|
||||||
|
} else if (displayType == "flat") {
|
||||||
|
auto *display_widget = new FlatCardGroupDisplayWidget(
|
||||||
|
cardGroupContainer, deckListModel, zoneName, cardGroup, activeGroupCriteria, activeSortCriteria,
|
||||||
|
subBannerOpacity, cardSizeWidget);
|
||||||
|
connect(display_widget, SIGNAL(cardClicked(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)),
|
||||||
|
this, SLOT(onClick(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)));
|
||||||
|
connect(display_widget, SIGNAL(cardHovered(CardInfoPtr)), this, SLOT(onHover(CardInfoPtr)));
|
||||||
|
connect(this, &DeckCardZoneDisplayWidget::activeSortCriteriaChanged, display_widget,
|
||||||
|
&CardGroupDisplayWidget::onActiveSortCriteriaChanged);
|
||||||
|
cardGroupLayout->addWidget(display_widget);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeckCardZoneDisplayWidget::deleteCardGroupIfItDoesNotExist()
|
void DeckCardZoneDisplayWidget::deleteCardGroupIfItDoesNotExist()
|
||||||
{
|
{
|
||||||
QList<OverlappedCardGroupDisplayWidget *> cardGroupsDisplayWidgets =
|
QList<CardGroupDisplayWidget *> cardGroupsDisplayWidgets =
|
||||||
cardGroupContainer->findChildren<OverlappedCardGroupDisplayWidget *>();
|
cardGroupContainer->findChildren<CardGroupDisplayWidget *>();
|
||||||
|
|
||||||
QList<QString> validGroups = getGroupCriteriaValueList();
|
QList<QString> validGroups = getGroupCriteriaValueList();
|
||||||
|
|
||||||
for (OverlappedCardGroupDisplayWidget *cardGroupDisplayWidget : cardGroupsDisplayWidgets) {
|
for (CardGroupDisplayWidget *cardGroupDisplayWidget : cardGroupsDisplayWidgets) {
|
||||||
if (!validGroups.contains(cardGroupDisplayWidget->cardGroupCategory)) {
|
if (!validGroups.contains(cardGroupDisplayWidget->cardGroupCategory)) {
|
||||||
cardGroupLayout->removeWidget(cardGroupDisplayWidget);
|
cardGroupLayout->removeWidget(cardGroupDisplayWidget);
|
||||||
cardGroupDisplayWidget->deleteLater(); // Properly delete the widget after the event loop cycles
|
cardGroupDisplayWidget->deleteLater(); // Properly delete the widget after the event loop cycles
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
#include "../general/display/banner_widget.h"
|
#include "../general/display/banner_widget.h"
|
||||||
#include "../general/layout_containers/overlap_widget.h"
|
#include "../general/layout_containers/overlap_widget.h"
|
||||||
#include "card_info_picture_with_text_overlay_widget.h"
|
#include "card_info_picture_with_text_overlay_widget.h"
|
||||||
|
#include "card_size_widget.h"
|
||||||
|
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
|
@ -21,7 +22,8 @@ public:
|
||||||
QString activeGroupCriteria,
|
QString activeGroupCriteria,
|
||||||
QStringList activeSortCriteria,
|
QStringList activeSortCriteria,
|
||||||
int bannerOpacity,
|
int bannerOpacity,
|
||||||
int subBannerOpacity);
|
int subBannerOpacity,
|
||||||
|
CardSizeWidget *_cardSizeWidget);
|
||||||
DeckListModel *deckListModel;
|
DeckListModel *deckListModel;
|
||||||
QString zoneName;
|
QString zoneName;
|
||||||
void addCardsToOverlapWidget();
|
void addCardsToOverlapWidget();
|
||||||
|
|
@ -31,6 +33,7 @@ public slots:
|
||||||
void onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card);
|
void onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card);
|
||||||
void onHover(CardInfoPtr card);
|
void onHover(CardInfoPtr card);
|
||||||
void displayCards();
|
void displayCards();
|
||||||
|
void refreshDisplayType(const QString &displayType);
|
||||||
void addCardGroupIfItDoesNotExist();
|
void addCardGroupIfItDoesNotExist();
|
||||||
void deleteCardGroupIfItDoesNotExist();
|
void deleteCardGroupIfItDoesNotExist();
|
||||||
void onActiveGroupCriteriaChanged(QString activeGroupCriteria);
|
void onActiveGroupCriteriaChanged(QString activeGroupCriteria);
|
||||||
|
|
@ -45,12 +48,14 @@ signals:
|
||||||
private:
|
private:
|
||||||
QString activeGroupCriteria;
|
QString activeGroupCriteria;
|
||||||
QStringList activeSortCriteria;
|
QStringList activeSortCriteria;
|
||||||
|
int bannerOpacity = 20;
|
||||||
|
int subBannerOpacity = 10;
|
||||||
|
CardSizeWidget *cardSizeWidget;
|
||||||
QVBoxLayout *layout;
|
QVBoxLayout *layout;
|
||||||
BannerWidget *banner;
|
BannerWidget *banner;
|
||||||
QWidget *cardGroupContainer;
|
QWidget *cardGroupContainer;
|
||||||
QVBoxLayout *cardGroupLayout;
|
QVBoxLayout *cardGroupLayout;
|
||||||
int bannerOpacity = 20;
|
QString displayType = "flat";
|
||||||
int subBannerOpacity = 10;
|
|
||||||
OverlapWidget *overlapWidget;
|
OverlapWidget *overlapWidget;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,53 +0,0 @@
|
||||||
#ifndef OVERLAPPED_CARD_GROUP_DISPLAY_WIDGET_H
|
|
||||||
#define OVERLAPPED_CARD_GROUP_DISPLAY_WIDGET_H
|
|
||||||
|
|
||||||
#include "../../../../deck/deck_list_model.h"
|
|
||||||
#include "../../../../game/cards/card_database.h"
|
|
||||||
#include "../general/display/banner_widget.h"
|
|
||||||
#include "../general/layout_containers/overlap_widget.h"
|
|
||||||
#include "card_info_picture_with_text_overlay_widget.h"
|
|
||||||
|
|
||||||
#include <QLabel>
|
|
||||||
#include <QVBoxLayout>
|
|
||||||
#include <QWidget>
|
|
||||||
|
|
||||||
class OverlappedCardGroupDisplayWidget : public QWidget
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
OverlappedCardGroupDisplayWidget(QWidget *parent,
|
|
||||||
DeckListModel *deckListModel,
|
|
||||||
QString zoneName,
|
|
||||||
QString cardGroupCategory,
|
|
||||||
QString activeGroupCriteria,
|
|
||||||
QStringList activeSortCriteria,
|
|
||||||
int bannerOpacity);
|
|
||||||
|
|
||||||
QList<CardInfoPtr> getCardsMatchingGroup(QList<CardInfoPtr> cardsToSort);
|
|
||||||
void resizeEvent(QResizeEvent *event) override;
|
|
||||||
|
|
||||||
DeckListModel *deckListModel;
|
|
||||||
QString zoneName;
|
|
||||||
QString cardGroupCategory;
|
|
||||||
QString activeGroupCriteria;
|
|
||||||
QStringList activeSortCriteria;
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
QList<CardInfoPtr> sortCardList(QList<CardInfoPtr> cardsToSort, QStringList properties, Qt::SortOrder order);
|
|
||||||
void onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card);
|
|
||||||
void onHover(CardInfoPtr card);
|
|
||||||
void updateCardDisplays();
|
|
||||||
void onActiveSortCriteriaChanged(QStringList activeSortCriteria);
|
|
||||||
|
|
||||||
signals:
|
|
||||||
void cardClicked(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card);
|
|
||||||
void cardHovered(CardInfoPtr card);
|
|
||||||
|
|
||||||
private:
|
|
||||||
QVBoxLayout *layout;
|
|
||||||
BannerWidget *banner;
|
|
||||||
OverlapWidget *overlapWidget;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // OVERLAPPED_CARD_GROUP_DISPLAY_WIDGET_H
|
|
||||||
|
|
@ -15,6 +15,7 @@
|
||||||
#include "../general/layout_containers/flow_widget.h"
|
#include "../general/layout_containers/flow_widget.h"
|
||||||
#include "../general/layout_containers/overlap_control_widget.h"
|
#include "../general/layout_containers/overlap_control_widget.h"
|
||||||
|
|
||||||
|
#include <QCheckBox>
|
||||||
#include <QCompleter>
|
#include <QCompleter>
|
||||||
#include <QHBoxLayout>
|
#include <QHBoxLayout>
|
||||||
#include <QLineEdit>
|
#include <QLineEdit>
|
||||||
|
|
@ -151,8 +152,12 @@ VisualDeckEditorWidget::VisualDeckEditorWidget(QWidget *parent, DeckListModel *_
|
||||||
sortCriteriaButton->addSettingsWidget(sortLabel);
|
sortCriteriaButton->addSettingsWidget(sortLabel);
|
||||||
sortCriteriaButton->addSettingsWidget(sortByListWidget);
|
sortCriteriaButton->addSettingsWidget(sortByListWidget);
|
||||||
|
|
||||||
|
displayTypeButton = new QCheckBox(this);
|
||||||
|
connect(displayTypeButton, &QCheckBox::toggled, this, &VisualDeckEditorWidget::updateDisplayType);
|
||||||
|
|
||||||
groupAndSortLayout->addWidget(groupByComboBox);
|
groupAndSortLayout->addWidget(groupByComboBox);
|
||||||
groupAndSortLayout->addWidget(sortCriteriaButton);
|
groupAndSortLayout->addWidget(sortCriteriaButton);
|
||||||
|
groupAndSortLayout->addWidget(displayTypeButton);
|
||||||
|
|
||||||
scrollArea = new QScrollArea();
|
scrollArea = new QScrollArea();
|
||||||
scrollArea->setWidgetResizable(true);
|
scrollArea->setWidgetResizable(true);
|
||||||
|
|
@ -170,11 +175,11 @@ VisualDeckEditorWidget::VisualDeckEditorWidget(QWidget *parent, DeckListModel *_
|
||||||
|
|
||||||
updateZoneWidgets();
|
updateZoneWidgets();
|
||||||
|
|
||||||
// overlapControlWidget = new OverlapControlWidget(80, 1, 1, Qt::Vertical, this);
|
cardSizeWidget = new CardSizeWidget(this);
|
||||||
|
|
||||||
mainLayout->addWidget(groupAndSortContainer);
|
mainLayout->addWidget(groupAndSortContainer);
|
||||||
mainLayout->addWidget(scrollArea);
|
mainLayout->addWidget(scrollArea);
|
||||||
// mainLayout->addWidget(overlapControlWidget);
|
mainLayout->addWidget(cardSizeWidget);
|
||||||
|
|
||||||
retranslateUi();
|
retranslateUi();
|
||||||
}
|
}
|
||||||
|
|
@ -191,6 +196,16 @@ void VisualDeckEditorWidget::updateZoneWidgets()
|
||||||
deleteZoneIfDoesNotExist();
|
deleteZoneIfDoesNotExist();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VisualDeckEditorWidget::updateDisplayType()
|
||||||
|
{
|
||||||
|
if (displayTypeButton->checkState() == Qt::Checked) {
|
||||||
|
emit displayTypeChanged("flat");
|
||||||
|
} else {
|
||||||
|
qDebug() << displayTypeButton->checkState();
|
||||||
|
emit displayTypeChanged("overlap");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void VisualDeckEditorWidget::addZoneIfDoesNotExist()
|
void VisualDeckEditorWidget::addZoneIfDoesNotExist()
|
||||||
{
|
{
|
||||||
QList<DeckCardZoneDisplayWidget *> cardZoneDisplayWidgets =
|
QList<DeckCardZoneDisplayWidget *> cardZoneDisplayWidgets =
|
||||||
|
|
@ -205,7 +220,7 @@ void VisualDeckEditorWidget::addZoneIfDoesNotExist()
|
||||||
|
|
||||||
if (!found) {
|
if (!found) {
|
||||||
DeckCardZoneDisplayWidget *zoneDisplayWidget = new DeckCardZoneDisplayWidget(
|
DeckCardZoneDisplayWidget *zoneDisplayWidget = new DeckCardZoneDisplayWidget(
|
||||||
zoneContainer, deckListModel, zone, activeGroupCriteria, activeSortCriteria, 20, 10);
|
zoneContainer, deckListModel, zone, activeGroupCriteria, activeSortCriteria, 20, 10, cardSizeWidget);
|
||||||
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardHovered, this, &VisualDeckEditorWidget::onHover);
|
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardHovered, this, &VisualDeckEditorWidget::onHover);
|
||||||
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardClicked, this,
|
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardClicked, this,
|
||||||
&VisualDeckEditorWidget::onCardClick);
|
&VisualDeckEditorWidget::onCardClick);
|
||||||
|
|
@ -213,6 +228,8 @@ void VisualDeckEditorWidget::addZoneIfDoesNotExist()
|
||||||
&DeckCardZoneDisplayWidget::onActiveSortCriteriaChanged);
|
&DeckCardZoneDisplayWidget::onActiveSortCriteriaChanged);
|
||||||
connect(this, &VisualDeckEditorWidget::activeGroupCriteriaChanged, zoneDisplayWidget,
|
connect(this, &VisualDeckEditorWidget::activeGroupCriteriaChanged, zoneDisplayWidget,
|
||||||
&DeckCardZoneDisplayWidget::onActiveGroupCriteriaChanged);
|
&DeckCardZoneDisplayWidget::onActiveGroupCriteriaChanged);
|
||||||
|
connect(this, &VisualDeckEditorWidget::displayTypeChanged, zoneDisplayWidget,
|
||||||
|
&DeckCardZoneDisplayWidget::refreshDisplayType);
|
||||||
zoneContainerLayout->addWidget(zoneDisplayWidget);
|
zoneContainerLayout->addWidget(zoneDisplayWidget);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,10 +6,12 @@
|
||||||
#include "../../../../game/cards/card_database.h"
|
#include "../../../../game/cards/card_database.h"
|
||||||
#include "../../../../game/cards/card_database_model.h"
|
#include "../../../../game/cards/card_database_model.h"
|
||||||
#include "../cards/card_info_picture_with_text_overlay_widget.h"
|
#include "../cards/card_info_picture_with_text_overlay_widget.h"
|
||||||
|
#include "../cards/card_size_widget.h"
|
||||||
#include "../general/layout_containers/flow_widget.h"
|
#include "../general/layout_containers/flow_widget.h"
|
||||||
#include "../general/layout_containers/overlap_control_widget.h"
|
#include "../general/layout_containers/overlap_control_widget.h"
|
||||||
#include "../quick_settings/settings_button_widget.h"
|
#include "../quick_settings/settings_button_widget.h"
|
||||||
|
|
||||||
|
#include <QCheckBox>
|
||||||
#include <QListWidget>
|
#include <QListWidget>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
|
@ -26,9 +28,12 @@ public:
|
||||||
|
|
||||||
void setDeckList(const DeckList &_deckListModel);
|
void setDeckList(const DeckList &_deckListModel);
|
||||||
|
|
||||||
|
CardSizeWidget *cardSizeWidget;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void decklistDataChanged(QModelIndex topLeft, QModelIndex bottomRight);
|
void decklistDataChanged(QModelIndex topLeft, QModelIndex bottomRight);
|
||||||
void updateZoneWidgets();
|
void updateZoneWidgets();
|
||||||
|
void updateDisplayType();
|
||||||
void addZoneIfDoesNotExist();
|
void addZoneIfDoesNotExist();
|
||||||
void deleteZoneIfDoesNotExist();
|
void deleteZoneIfDoesNotExist();
|
||||||
|
|
||||||
|
|
@ -38,6 +43,7 @@ signals:
|
||||||
void activeSortCriteriaChanged(QStringList activeSortCriteria);
|
void activeSortCriteriaChanged(QStringList activeSortCriteria);
|
||||||
void cardClicked(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance, QString zoneName);
|
void cardClicked(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance, QString zoneName);
|
||||||
void cardAdditionRequested(CardInfoPtr card);
|
void cardAdditionRequested(CardInfoPtr card);
|
||||||
|
void displayTypeChanged(QString displayType);
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
void onHover(CardInfoPtr hoveredCard);
|
void onHover(CardInfoPtr hoveredCard);
|
||||||
|
|
@ -56,6 +62,7 @@ private:
|
||||||
CardCompleterProxyModel *proxyModel;
|
CardCompleterProxyModel *proxyModel;
|
||||||
QCompleter *completer;
|
QCompleter *completer;
|
||||||
QPushButton *searchPushButton;
|
QPushButton *searchPushButton;
|
||||||
|
QCheckBox *displayTypeButton;
|
||||||
QWidget *groupAndSortContainer;
|
QWidget *groupAndSortContainer;
|
||||||
QHBoxLayout *groupAndSortLayout;
|
QHBoxLayout *groupAndSortLayout;
|
||||||
QComboBox *groupByComboBox;
|
QComboBox *groupByComboBox;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue