mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-14 22:42:14 -07:00
Actually make widgets track their indices.
This commit is contained in:
parent
59998b38c2
commit
8032e7fea1
13 changed files with 213 additions and 246 deletions
|
|
@ -548,6 +548,14 @@ void FlowLayout::addItem(QLayoutItem *item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FlowLayout::insertWidgetAtIndex(QWidget *toInsert, int index)
|
||||||
|
{
|
||||||
|
addChildWidget(toInsert);
|
||||||
|
items.insert(qBound(0, index, std::max(0, static_cast<int>(items.size()))), new QWidgetItem(toInsert));
|
||||||
|
|
||||||
|
invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Retrieves the count of items in the layout.
|
* @brief Retrieves the count of items in the layout.
|
||||||
* @return The number of layout items.
|
* @return The number of layout items.
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ public:
|
||||||
explicit FlowLayout(QWidget *parent = nullptr);
|
explicit FlowLayout(QWidget *parent = nullptr);
|
||||||
FlowLayout(QWidget *parent, Qt::Orientation _flowDirection, int margin = 0, int hSpacing = 0, int vSpacing = 0);
|
FlowLayout(QWidget *parent, Qt::Orientation _flowDirection, int margin = 0, int hSpacing = 0, int vSpacing = 0);
|
||||||
~FlowLayout() override;
|
~FlowLayout() override;
|
||||||
|
void insertWidgetAtIndex(QWidget *toInsert, int index);
|
||||||
|
|
||||||
QSize calculateMinimumSizeHorizontal() const;
|
QSize calculateMinimumSizeHorizontal() const;
|
||||||
QSize calculateSizeHintVertical() const;
|
QSize calculateSizeHintVertical() const;
|
||||||
|
|
|
||||||
|
|
@ -9,13 +9,14 @@
|
||||||
|
|
||||||
CardGroupDisplayWidget::CardGroupDisplayWidget(QWidget *parent,
|
CardGroupDisplayWidget::CardGroupDisplayWidget(QWidget *parent,
|
||||||
DeckListModel *_deckListModel,
|
DeckListModel *_deckListModel,
|
||||||
|
QPersistentModelIndex _trackedIndex,
|
||||||
QString _zoneName,
|
QString _zoneName,
|
||||||
QString _cardGroupCategory,
|
QString _cardGroupCategory,
|
||||||
QString _activeGroupCriteria,
|
QString _activeGroupCriteria,
|
||||||
QStringList _activeSortCriteria,
|
QStringList _activeSortCriteria,
|
||||||
int bannerOpacity,
|
int bannerOpacity,
|
||||||
CardSizeWidget *_cardSizeWidget)
|
CardSizeWidget *_cardSizeWidget)
|
||||||
: QWidget(parent), deckListModel(_deckListModel), zoneName(_zoneName), cardGroupCategory(_cardGroupCategory),
|
: QWidget(parent), deckListModel(_deckListModel), trackedIndex(_trackedIndex), zoneName(_zoneName), cardGroupCategory(_cardGroupCategory),
|
||||||
activeGroupCriteria(_activeGroupCriteria), activeSortCriteria(_activeSortCriteria),
|
activeGroupCriteria(_activeGroupCriteria), activeSortCriteria(_activeSortCriteria),
|
||||||
cardSizeWidget(_cardSizeWidget)
|
cardSizeWidget(_cardSizeWidget)
|
||||||
{
|
{
|
||||||
|
|
@ -27,41 +28,66 @@ CardGroupDisplayWidget::CardGroupDisplayWidget(QWidget *parent,
|
||||||
|
|
||||||
layout->addWidget(banner);
|
layout->addWidget(banner);
|
||||||
CardGroupDisplayWidget::updateCardDisplays();
|
CardGroupDisplayWidget::updateCardDisplays();
|
||||||
|
|
||||||
|
connect(deckListModel, &QAbstractItemModel::rowsInserted, this, &CardGroupDisplayWidget::onCardAddition);
|
||||||
|
connect(deckListModel, &QAbstractItemModel::rowsRemoved, this, &CardGroupDisplayWidget::onCardRemoval);
|
||||||
|
}
|
||||||
|
|
||||||
|
QWidget* CardGroupDisplayWidget::constructWidgetForIndex(int rowIndex)
|
||||||
|
{
|
||||||
|
QPersistentModelIndex index = QPersistentModelIndex(deckListModel->index(rowIndex, 0, trackedIndex));
|
||||||
|
|
||||||
|
if (indexToWidgetMap.contains(index)) {
|
||||||
|
return indexToWidgetMap[index];
|
||||||
|
}
|
||||||
|
auto cardName = deckListModel->data(index.sibling(index.row(), 1), Qt::EditRole).toString();
|
||||||
|
auto cardProviderId = deckListModel->data(index.sibling(index.row(), 4), Qt::EditRole).toString();
|
||||||
|
qInfo() << cardName;
|
||||||
|
|
||||||
|
auto widget = new CardInfoPictureWithTextOverlayWidget(getLayoutParent(), true);
|
||||||
|
widget->setScaleFactor(cardSizeWidget->getSlider()->value());
|
||||||
|
widget->setCard(CardDatabaseManager::getInstance()->getCardByNameAndProviderId(cardName, cardProviderId));
|
||||||
|
|
||||||
|
connect(widget, &CardInfoPictureWithTextOverlayWidget::imageClicked, this, &CardGroupDisplayWidget::onClick);
|
||||||
|
connect(widget, &CardInfoPictureWithTextOverlayWidget::hoveredOnCard, this, &CardGroupDisplayWidget::onHover);
|
||||||
|
connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, widget, &CardInfoPictureWidget::setScaleFactor);
|
||||||
|
|
||||||
|
indexToWidgetMap.insert(index, widget);
|
||||||
|
return widget;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CardGroupDisplayWidget::updateCardDisplays()
|
void CardGroupDisplayWidget::updateCardDisplays()
|
||||||
{
|
{
|
||||||
|
qInfo() << "Constructing Card Display Widgets for Card Group Display widget";
|
||||||
|
qInfo() << deckListModel->data(trackedIndex.sibling(trackedIndex.row(), 1), Qt::EditRole).toString() << " has "
|
||||||
|
<< deckListModel->rowCount(trackedIndex.sibling(trackedIndex.row(), 0)) << " entries.";
|
||||||
|
for (int i = 0; i < deckListModel->rowCount(trackedIndex); ++i) {
|
||||||
|
addToLayout(constructWidgetForIndex(i));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<CardInfoPtr> CardGroupDisplayWidget::getCardsMatchingGroup(QList<CardInfoPtr> cardsToSort)
|
void CardGroupDisplayWidget::onCardAddition(const QModelIndex &parent, int first, int last)
|
||||||
{
|
{
|
||||||
cardsToSort = sortCardList(cardsToSort, activeSortCriteria, Qt::SortOrder::AscendingOrder);
|
if (parent == trackedIndex) {
|
||||||
|
for (int i = first; i <= last; i++) {
|
||||||
QList<CardInfoPtr> activeList;
|
insertIntoLayout(constructWidgetForIndex(i), i);
|
||||||
for (const CardInfoPtr &info : cardsToSort) {
|
|
||||||
if (info && info->getProperty(activeGroupCriteria) == cardGroupCategory) {
|
|
||||||
activeList.append(info);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return activeList;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<CardInfoPtr> CardGroupDisplayWidget::sortCardList(QList<CardInfoPtr> cardsToSort,
|
void CardGroupDisplayWidget::onCardRemoval(const QModelIndex &parent, int first, int last)
|
||||||
const QStringList properties,
|
|
||||||
Qt::SortOrder order = Qt::AscendingOrder)
|
|
||||||
{
|
{
|
||||||
CardInfoComparator comparator(properties, order);
|
Q_UNUSED(parent);
|
||||||
std::sort(cardsToSort.begin(), cardsToSort.end(), comparator);
|
Q_UNUSED(first);
|
||||||
|
Q_UNUSED(last);
|
||||||
return cardsToSort;
|
if (parent == trackedIndex) {
|
||||||
}
|
for (const QPersistentModelIndex &idx : indexToWidgetMap.keys()) {
|
||||||
|
if (!idx.isValid()) {
|
||||||
void CardGroupDisplayWidget::onActiveSortCriteriaChanged(QStringList _activeSortCriteria)
|
removeFromLayout(indexToWidgetMap.value(idx));
|
||||||
{
|
indexToWidgetMap.value(idx)->deleteLater();
|
||||||
if (activeSortCriteria != _activeSortCriteria) {
|
indexToWidgetMap.remove(idx);
|
||||||
activeSortCriteria = _activeSortCriteria;
|
}
|
||||||
updateCardDisplays(); // Refresh display with new sorting
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ class CardGroupDisplayWidget : public QWidget
|
||||||
public:
|
public:
|
||||||
CardGroupDisplayWidget(QWidget *parent,
|
CardGroupDisplayWidget(QWidget *parent,
|
||||||
DeckListModel *deckListModel,
|
DeckListModel *deckListModel,
|
||||||
|
QPersistentModelIndex trackedIndex,
|
||||||
QString zoneName,
|
QString zoneName,
|
||||||
QString cardGroupCategory,
|
QString cardGroupCategory,
|
||||||
QString activeGroupCriteria,
|
QString activeGroupCriteria,
|
||||||
|
|
@ -25,10 +26,9 @@ public:
|
||||||
int bannerOpacity,
|
int bannerOpacity,
|
||||||
CardSizeWidget *cardSizeWidget);
|
CardSizeWidget *cardSizeWidget);
|
||||||
|
|
||||||
QList<CardInfoPtr> getCardsMatchingGroup(QList<CardInfoPtr> cardsToSort);
|
|
||||||
void resizeEvent(QResizeEvent *event) override;
|
|
||||||
|
|
||||||
DeckListModel *deckListModel;
|
DeckListModel *deckListModel;
|
||||||
|
QPersistentModelIndex trackedIndex;
|
||||||
|
QHash<QPersistentModelIndex, QWidget*> indexToWidgetMap;
|
||||||
QString zoneName;
|
QString zoneName;
|
||||||
QString cardGroupCategory;
|
QString cardGroupCategory;
|
||||||
QString activeGroupCriteria;
|
QString activeGroupCriteria;
|
||||||
|
|
@ -36,11 +36,13 @@ public:
|
||||||
CardSizeWidget *cardSizeWidget;
|
CardSizeWidget *cardSizeWidget;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
QList<CardInfoPtr> sortCardList(QList<CardInfoPtr> cardsToSort, QStringList properties, Qt::SortOrder order);
|
|
||||||
void onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card);
|
void onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card);
|
||||||
void onHover(CardInfoPtr card);
|
void onHover(CardInfoPtr card);
|
||||||
|
virtual QWidget* constructWidgetForIndex(int rowIndex);
|
||||||
virtual void updateCardDisplays();
|
virtual void updateCardDisplays();
|
||||||
void onActiveSortCriteriaChanged(QStringList activeSortCriteria);
|
void onCardAddition(const QModelIndex &parent, int first, int last);
|
||||||
|
void onCardRemoval(const QModelIndex &parent, int first, int last);
|
||||||
|
void resizeEvent(QResizeEvent *event) override;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void cardClicked(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card);
|
void cardClicked(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card);
|
||||||
|
|
@ -49,5 +51,26 @@ signals:
|
||||||
protected:
|
protected:
|
||||||
QVBoxLayout *layout;
|
QVBoxLayout *layout;
|
||||||
BannerWidget *banner;
|
BannerWidget *banner;
|
||||||
|
|
||||||
|
virtual QWidget* getLayoutParent()
|
||||||
|
{
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void addToLayout(QWidget* toAdd)
|
||||||
|
{
|
||||||
|
layout->addWidget(toAdd);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void insertIntoLayout(QWidget *toInsert, int insertAt)
|
||||||
|
{
|
||||||
|
qInfo() << "Default card group insert";
|
||||||
|
layout->insertWidget(insertAt, toInsert);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void removeFromLayout(QWidget* toRemove)
|
||||||
|
{
|
||||||
|
layout->removeWidget(toRemove);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
#endif // CARD_GROUP_DISPLAY_WIDGET_H
|
#endif // CARD_GROUP_DISPLAY_WIDGET_H
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,11 @@
|
||||||
#include "../card_info_picture_with_text_overlay_widget.h"
|
#include "../card_info_picture_with_text_overlay_widget.h"
|
||||||
|
|
||||||
#include <QResizeEvent>
|
#include <QResizeEvent>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
FlatCardGroupDisplayWidget::FlatCardGroupDisplayWidget(QWidget *parent,
|
FlatCardGroupDisplayWidget::FlatCardGroupDisplayWidget(QWidget *parent,
|
||||||
DeckListModel *_deckListModel,
|
DeckListModel *_deckListModel,
|
||||||
|
QPersistentModelIndex _trackedIndex,
|
||||||
QString _zoneName,
|
QString _zoneName,
|
||||||
QString _cardGroupCategory,
|
QString _cardGroupCategory,
|
||||||
QString _activeGroupCriteria,
|
QString _activeGroupCriteria,
|
||||||
|
|
@ -17,6 +19,7 @@ FlatCardGroupDisplayWidget::FlatCardGroupDisplayWidget(QWidget *parent,
|
||||||
CardSizeWidget *_cardSizeWidget)
|
CardSizeWidget *_cardSizeWidget)
|
||||||
: CardGroupDisplayWidget(parent,
|
: CardGroupDisplayWidget(parent,
|
||||||
_deckListModel,
|
_deckListModel,
|
||||||
|
std::move(_trackedIndex),
|
||||||
_zoneName,
|
_zoneName,
|
||||||
_cardGroupCategory,
|
_cardGroupCategory,
|
||||||
_activeGroupCriteria,
|
_activeGroupCriteria,
|
||||||
|
|
@ -29,78 +32,34 @@ FlatCardGroupDisplayWidget::FlatCardGroupDisplayWidget(QWidget *parent,
|
||||||
|
|
||||||
layout->addWidget(flowWidget);
|
layout->addWidget(flowWidget);
|
||||||
FlatCardGroupDisplayWidget::updateCardDisplays();
|
FlatCardGroupDisplayWidget::updateCardDisplays();
|
||||||
connect(deckListModel, &DeckListModel::dataChanged, this, &FlatCardGroupDisplayWidget::updateCardDisplays);
|
// connect(deckListModel, &DeckListModel::dataChanged, this, &FlatCardGroupDisplayWidget::updateCardDisplays);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlatCardGroupDisplayWidget::updateCardDisplays()
|
QWidget* FlatCardGroupDisplayWidget::constructWidgetForIndex(int row)
|
||||||
{
|
{
|
||||||
// Retrieve and sort cards
|
QPersistentModelIndex index = QPersistentModelIndex(deckListModel->index(row, 0, trackedIndex));
|
||||||
QList<CardInfoPtr> cardsInZone = getCardsMatchingGroup(deckListModel->getCardsAsCardInfoPtrsForZone(zoneName));
|
|
||||||
|
|
||||||
// Show or hide widget
|
if (indexToWidgetMap.contains(index)) {
|
||||||
bool shouldBeVisible = !cardsInZone.isEmpty();
|
return indexToWidgetMap[index];
|
||||||
if (shouldBeVisible != isVisible()) {
|
|
||||||
setVisible(shouldBeVisible);
|
|
||||||
}
|
}
|
||||||
|
auto cardName = deckListModel->data(index.sibling(index.row(), 1), Qt::EditRole).toString();
|
||||||
|
auto cardProviderId = deckListModel->data(index.sibling(index.row(), 4), Qt::EditRole).toString();
|
||||||
|
qInfo() << cardName;
|
||||||
|
|
||||||
// Retrieve existing widgets
|
auto widget = new CardInfoPictureWithTextOverlayWidget(flowWidget, true);
|
||||||
QList<CardInfoPictureWithTextOverlayWidget *> existingWidgets =
|
widget->setScaleFactor(cardSizeWidget->getSlider()->value());
|
||||||
flowWidget->findChildren<CardInfoPictureWithTextOverlayWidget *>();
|
widget->setCard(CardDatabaseManager::getInstance()->getCardByNameAndProviderId(cardName, cardProviderId));
|
||||||
|
|
||||||
QHash<QString, QList<CardInfoPictureWithTextOverlayWidget *>> widgetMap;
|
connect(widget, &CardInfoPictureWithTextOverlayWidget::imageClicked, this, &FlatCardGroupDisplayWidget::onClick);
|
||||||
for (CardInfoPictureWithTextOverlayWidget *widget : existingWidgets) {
|
connect(widget, &CardInfoPictureWithTextOverlayWidget::hoveredOnCard, this, &FlatCardGroupDisplayWidget::onHover);
|
||||||
widgetMap[widget->getInfo()->getName()].append(widget);
|
connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, widget, &CardInfoPictureWidget::setScaleFactor);
|
||||||
}
|
|
||||||
|
|
||||||
QList<CardInfoPictureWithTextOverlayWidget *> sortedWidgets;
|
indexToWidgetMap.insert(index, widget);
|
||||||
QSet<CardInfoPictureWithTextOverlayWidget *> usedWidgets;
|
return widget;
|
||||||
|
|
||||||
// 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);
|
|
||||||
widget->deleteLater();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// **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)
|
void FlatCardGroupDisplayWidget::resizeEvent(QResizeEvent *event)
|
||||||
{
|
{
|
||||||
QWidget::resizeEvent(event);
|
QWidget::resizeEvent(event);
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ class FlatCardGroupDisplayWidget : public CardGroupDisplayWidget
|
||||||
public:
|
public:
|
||||||
FlatCardGroupDisplayWidget(QWidget *parent,
|
FlatCardGroupDisplayWidget(QWidget *parent,
|
||||||
DeckListModel *deckListModel,
|
DeckListModel *deckListModel,
|
||||||
|
QPersistentModelIndex trackedIndex,
|
||||||
QString zoneName,
|
QString zoneName,
|
||||||
QString cardGroupCategory,
|
QString cardGroupCategory,
|
||||||
QString activeGroupCriteria,
|
QString activeGroupCriteria,
|
||||||
|
|
@ -18,13 +19,33 @@ public:
|
||||||
int bannerOpacity,
|
int bannerOpacity,
|
||||||
CardSizeWidget *cardSizeWidget);
|
CardSizeWidget *cardSizeWidget);
|
||||||
|
|
||||||
void resizeEvent(QResizeEvent *event) override;
|
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void updateCardDisplays() override;
|
QWidget* constructWidgetForIndex(int row) override;
|
||||||
|
void resizeEvent(QResizeEvent *event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
FlowWidget *flowWidget;
|
FlowWidget *flowWidget;
|
||||||
|
|
||||||
|
QWidget* getLayoutParent() override
|
||||||
|
{
|
||||||
|
return flowWidget;
|
||||||
|
}
|
||||||
|
|
||||||
|
void addToLayout(QWidget* toAdd) override
|
||||||
|
{
|
||||||
|
flowWidget->addWidget(toAdd);
|
||||||
|
}
|
||||||
|
|
||||||
|
void insertIntoLayout(QWidget *toInsert, int insertAt) override
|
||||||
|
{
|
||||||
|
qInfo() << "Flat card group insertion at " << insertAt;
|
||||||
|
flowWidget->insertWidgetAtIndex(toInsert, insertAt);
|
||||||
|
}
|
||||||
|
|
||||||
|
void removeFromLayout(QWidget* toRemove) override
|
||||||
|
{
|
||||||
|
flowWidget->removeWidget(toRemove);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // FLAT_CARD_GROUP_DISPLAY_WIDGET_H
|
#endif // FLAT_CARD_GROUP_DISPLAY_WIDGET_H
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
OverlappedCardGroupDisplayWidget::OverlappedCardGroupDisplayWidget(QWidget *parent,
|
OverlappedCardGroupDisplayWidget::OverlappedCardGroupDisplayWidget(QWidget *parent,
|
||||||
DeckListModel *_deckListModel,
|
DeckListModel *_deckListModel,
|
||||||
|
QPersistentModelIndex _trackedIndex,
|
||||||
QString _zoneName,
|
QString _zoneName,
|
||||||
QString _cardGroupCategory,
|
QString _cardGroupCategory,
|
||||||
QString _activeGroupCriteria,
|
QString _activeGroupCriteria,
|
||||||
|
|
@ -17,6 +18,7 @@ OverlappedCardGroupDisplayWidget::OverlappedCardGroupDisplayWidget(QWidget *pare
|
||||||
CardSizeWidget *_cardSizeWidget)
|
CardSizeWidget *_cardSizeWidget)
|
||||||
: CardGroupDisplayWidget(parent,
|
: CardGroupDisplayWidget(parent,
|
||||||
_deckListModel,
|
_deckListModel,
|
||||||
|
_trackedIndex,
|
||||||
_zoneName,
|
_zoneName,
|
||||||
_cardGroupCategory,
|
_cardGroupCategory,
|
||||||
_activeGroupCriteria,
|
_activeGroupCriteria,
|
||||||
|
|
@ -29,90 +31,11 @@ OverlappedCardGroupDisplayWidget::OverlappedCardGroupDisplayWidget(QWidget *pare
|
||||||
|
|
||||||
layout->addWidget(overlapWidget);
|
layout->addWidget(overlapWidget);
|
||||||
OverlappedCardGroupDisplayWidget::updateCardDisplays();
|
OverlappedCardGroupDisplayWidget::updateCardDisplays();
|
||||||
connect(deckListModel, &DeckListModel::dataChanged, this, &OverlappedCardGroupDisplayWidget::updateCardDisplays);
|
|
||||||
connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, this,
|
connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, this,
|
||||||
[this]() { overlapWidget->adjustMaxColumnsAndRows(); });
|
[this]() { overlapWidget->adjustMaxColumnsAndRows(); });
|
||||||
}
|
}
|
||||||
|
|
||||||
void OverlappedCardGroupDisplayWidget::updateCardDisplays()
|
|
||||||
{
|
|
||||||
overlapWidget->setUpdatesEnabled(false);
|
|
||||||
// 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 =
|
|
||||||
overlapWidget->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(overlapWidget, true);
|
|
||||||
widget->setScaleFactor(cardSizeWidget->getSlider()->value());
|
|
||||||
widget->setCard(card);
|
|
||||||
|
|
||||||
connect(widget, &CardInfoPictureWithTextOverlayWidget::imageClicked, this,
|
|
||||||
&OverlappedCardGroupDisplayWidget::onClick);
|
|
||||||
connect(widget, &CardInfoPictureWithTextOverlayWidget::hoveredOnCard, this,
|
|
||||||
&OverlappedCardGroupDisplayWidget::onHover);
|
|
||||||
connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, widget,
|
|
||||||
&CardInfoPictureWidget::setScaleFactor);
|
|
||||||
|
|
||||||
overlapWidget->addWidget(widget);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store in sorted order
|
|
||||||
sortedWidgets.append(widget);
|
|
||||||
usedWidgets.insert(widget);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove extra widgets
|
|
||||||
for (CardInfoPictureWithTextOverlayWidget *widget : existingWidgets) {
|
|
||||||
if (!usedWidgets.contains(widget)) {
|
|
||||||
overlapWidget->layout()->removeWidget(widget);
|
|
||||||
widget->deleteLater();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// **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) {
|
|
||||||
overlapWidget->addWidget(sortedWidgets[i]); // Reattach in correct order
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ensure proper layering
|
|
||||||
for (CardInfoPictureWithTextOverlayWidget *widget : sortedWidgets) {
|
|
||||||
widget->raise();
|
|
||||||
}
|
|
||||||
|
|
||||||
overlapWidget->adjustMaxColumnsAndRows();
|
|
||||||
overlapWidget->setUpdatesEnabled(true);
|
|
||||||
overlapWidget->update();
|
|
||||||
}
|
|
||||||
|
|
||||||
void OverlappedCardGroupDisplayWidget::resizeEvent(QResizeEvent *event)
|
void OverlappedCardGroupDisplayWidget::resizeEvent(QResizeEvent *event)
|
||||||
{
|
{
|
||||||
QWidget::resizeEvent(event);
|
QWidget::resizeEvent(event);
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ class OverlappedCardGroupDisplayWidget : public CardGroupDisplayWidget
|
||||||
public:
|
public:
|
||||||
OverlappedCardGroupDisplayWidget(QWidget *parent,
|
OverlappedCardGroupDisplayWidget(QWidget *parent,
|
||||||
DeckListModel *deckListModel,
|
DeckListModel *deckListModel,
|
||||||
|
QPersistentModelIndex trackedIndex,
|
||||||
QString zoneName,
|
QString zoneName,
|
||||||
QString cardGroupCategory,
|
QString cardGroupCategory,
|
||||||
QString activeGroupCriteria,
|
QString activeGroupCriteria,
|
||||||
|
|
@ -20,11 +21,23 @@ public:
|
||||||
|
|
||||||
void resizeEvent(QResizeEvent *event) override;
|
void resizeEvent(QResizeEvent *event) override;
|
||||||
|
|
||||||
public slots:
|
|
||||||
void updateCardDisplays() override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
OverlapWidget *overlapWidget;
|
OverlapWidget *overlapWidget;
|
||||||
|
|
||||||
|
QWidget* getLayoutParent() override
|
||||||
|
{
|
||||||
|
return overlapWidget;
|
||||||
|
}
|
||||||
|
|
||||||
|
void addToLayout(QWidget* toAdd) override
|
||||||
|
{
|
||||||
|
overlapWidget->addWidget(toAdd);
|
||||||
|
}
|
||||||
|
|
||||||
|
void removeFromLayout(QWidget* toRemove) override
|
||||||
|
{
|
||||||
|
overlapWidget->removeWidget(toRemove);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // OVERLAPPED_CARD_GROUP_DISPLAY_WIDGET_H
|
#endif // OVERLAPPED_CARD_GROUP_DISPLAY_WIDGET_H
|
||||||
|
|
|
||||||
|
|
@ -35,8 +35,8 @@ DeckCardZoneDisplayWidget::DeckCardZoneDisplayWidget(QWidget *parent,
|
||||||
banner->setBuddy(cardGroupContainer);
|
banner->setBuddy(cardGroupContainer);
|
||||||
|
|
||||||
displayCards();
|
displayCards();
|
||||||
//connect(deckListModel, &DeckListModel::dataChanged, this, &DeckCardZoneDisplayWidget::displayCards);
|
// connect(deckListModel, &DeckListModel::dataChanged, this, &DeckCardZoneDisplayWidget::displayCards);
|
||||||
//connect(deckListModel, &DeckListModel::dataChanged, this, &DeckCardZoneDisplayWidget::decklistDataChanged);
|
// connect(deckListModel, &DeckListModel::dataChanged, this, &DeckCardZoneDisplayWidget::decklistDataChanged);
|
||||||
connect(deckListModel, &QAbstractItemModel::rowsInserted, this, &DeckCardZoneDisplayWidget::onCategoryAddition);
|
connect(deckListModel, &QAbstractItemModel::rowsInserted, this, &DeckCardZoneDisplayWidget::onCategoryAddition);
|
||||||
connect(deckListModel, &QAbstractItemModel::rowsRemoved, this, &DeckCardZoneDisplayWidget::onCategoryRemoval);
|
connect(deckListModel, &QAbstractItemModel::rowsRemoved, this, &DeckCardZoneDisplayWidget::onCategoryRemoval);
|
||||||
}
|
}
|
||||||
|
|
@ -44,35 +44,33 @@ DeckCardZoneDisplayWidget::DeckCardZoneDisplayWidget(QWidget *parent,
|
||||||
void DeckCardZoneDisplayWidget::onCategoryAddition(const QModelIndex &parent, int first, int last)
|
void DeckCardZoneDisplayWidget::onCategoryAddition(const QModelIndex &parent, int first, int last)
|
||||||
{
|
{
|
||||||
if (parent == trackedIndex) {
|
if (parent == trackedIndex) {
|
||||||
|
qInfo() << deckListModel->data(trackedIndex.sibling(trackedIndex.row(), 1), Qt::EditRole).toString() << " zone thinks it has a new category";
|
||||||
for (int i = first; i <= last; i++) {
|
for (int i = first; i <= last; i++) {
|
||||||
QPersistentModelIndex index = QPersistentModelIndex(deckListModel->index(i, 1, trackedIndex));
|
QPersistentModelIndex index = QPersistentModelIndex(deckListModel->index(i, 0, trackedIndex));
|
||||||
|
|
||||||
if (indexToWidgetMap.contains(index)) {
|
if (indexToWidgetMap.contains(index)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
qInfo() << deckListModel->data(index, Qt::EditRole).toString();
|
auto categoryName = deckListModel->data(index.sibling(index.row(), 1), Qt::EditRole).toString();
|
||||||
|
qInfo() << categoryName;
|
||||||
|
|
||||||
if (displayType == "overlap") {
|
if (displayType == "overlap") {
|
||||||
auto *display_widget = new OverlappedCardGroupDisplayWidget(
|
auto *display_widget = new OverlappedCardGroupDisplayWidget(
|
||||||
cardGroupContainer, deckListModel, zoneName, deckListModel->data(index, Qt::EditRole).toString(), activeGroupCriteria, activeSortCriteria,
|
cardGroupContainer, deckListModel, index, zoneName, categoryName,
|
||||||
subBannerOpacity, cardSizeWidget);
|
activeGroupCriteria, activeSortCriteria, subBannerOpacity, cardSizeWidget);
|
||||||
connect(display_widget, SIGNAL(cardClicked(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)), this,
|
connect(display_widget, SIGNAL(cardClicked(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)),
|
||||||
SLOT(onClick(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)));
|
this, SLOT(onClick(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)));
|
||||||
connect(display_widget, SIGNAL(cardHovered(CardInfoPtr)), this, SLOT(onHover(CardInfoPtr)));
|
connect(display_widget, SIGNAL(cardHovered(CardInfoPtr)), this, SLOT(onHover(CardInfoPtr)));
|
||||||
connect(this, &DeckCardZoneDisplayWidget::activeSortCriteriaChanged, display_widget,
|
|
||||||
&CardGroupDisplayWidget::onActiveSortCriteriaChanged);
|
|
||||||
cardGroupLayout->addWidget(display_widget);
|
cardGroupLayout->addWidget(display_widget);
|
||||||
indexToWidgetMap.insert(index, display_widget);
|
indexToWidgetMap.insert(index, display_widget);
|
||||||
} else if (displayType == "flat") {
|
} else if (displayType == "flat") {
|
||||||
auto *display_widget = new FlatCardGroupDisplayWidget(cardGroupContainer, deckListModel, zoneName,
|
auto *display_widget = new FlatCardGroupDisplayWidget(
|
||||||
deckListModel->data(index, Qt::EditRole).toString(), activeGroupCriteria, activeSortCriteria,
|
cardGroupContainer, deckListModel, index, zoneName, categoryName,
|
||||||
subBannerOpacity, cardSizeWidget);
|
activeGroupCriteria, activeSortCriteria, subBannerOpacity, cardSizeWidget);
|
||||||
connect(display_widget, SIGNAL(cardClicked(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)), this,
|
connect(display_widget, SIGNAL(cardClicked(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)),
|
||||||
SLOT(onClick(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)));
|
this, SLOT(onClick(QMouseEvent *, CardInfoPictureWithTextOverlayWidget *)));
|
||||||
connect(display_widget, SIGNAL(cardHovered(CardInfoPtr)), this, SLOT(onHover(CardInfoPtr)));
|
connect(display_widget, SIGNAL(cardHovered(CardInfoPtr)), this, SLOT(onHover(CardInfoPtr)));
|
||||||
connect(this, &DeckCardZoneDisplayWidget::activeSortCriteriaChanged, display_widget,
|
|
||||||
&CardGroupDisplayWidget::onActiveSortCriteriaChanged);
|
|
||||||
cardGroupLayout->addWidget(display_widget);
|
cardGroupLayout->addWidget(display_widget);
|
||||||
indexToWidgetMap.insert(index, display_widget);
|
indexToWidgetMap.insert(index, display_widget);
|
||||||
}
|
}
|
||||||
|
|
@ -115,6 +113,37 @@ void DeckCardZoneDisplayWidget::onHover(CardInfoPtr card)
|
||||||
|
|
||||||
void DeckCardZoneDisplayWidget::displayCards()
|
void DeckCardZoneDisplayWidget::displayCards()
|
||||||
{
|
{
|
||||||
|
qInfo() << "Constructing Group Display Widgets for Zone Display widget";
|
||||||
|
qInfo() << deckListModel->data(trackedIndex.sibling(trackedIndex.row(), 1), Qt::EditRole).toString() << " has " << deckListModel->rowCount(trackedIndex.sibling(trackedIndex.row(), 0)) << " entries.";
|
||||||
|
for (int i = 0; i < deckListModel->rowCount(trackedIndex); ++i) {
|
||||||
|
QPersistentModelIndex index = QPersistentModelIndex(deckListModel->index(i, 0, trackedIndex));
|
||||||
|
|
||||||
|
if (indexToWidgetMap.contains(index)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto categoryName = deckListModel->data(index.sibling(index.row(), 1), Qt::EditRole).toString();
|
||||||
|
qInfo() << categoryName;
|
||||||
|
|
||||||
|
if (displayType == "overlap") {
|
||||||
|
auto *display_widget = new OverlappedCardGroupDisplayWidget(
|
||||||
|
cardGroupContainer, deckListModel, index, zoneName, categoryName,
|
||||||
|
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)));
|
||||||
|
cardGroupLayout->addWidget(display_widget);
|
||||||
|
indexToWidgetMap.insert(index, display_widget);
|
||||||
|
} else if (displayType == "flat") {
|
||||||
|
auto *display_widget = new FlatCardGroupDisplayWidget(
|
||||||
|
cardGroupContainer, deckListModel, index, zoneName, categoryName,
|
||||||
|
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)));
|
||||||
|
cardGroupLayout->addWidget(display_widget);
|
||||||
|
indexToWidgetMap.insert(index, display_widget);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeckCardZoneDisplayWidget::refreshDisplayType(const DisplayType &_displayType)
|
void DeckCardZoneDisplayWidget::refreshDisplayType(const DisplayType &_displayType)
|
||||||
|
|
@ -130,6 +159,8 @@ void DeckCardZoneDisplayWidget::refreshDisplayType(const DisplayType &_displayTy
|
||||||
delete item;
|
delete item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
indexToWidgetMap.clear();
|
||||||
|
|
||||||
// We gotta wait for all the deleteLater's to finish so we fire after the next event cycle
|
// We gotta wait for all the deleteLater's to finish so we fire after the next event cycle
|
||||||
|
|
||||||
auto timer = new QTimer(this);
|
auto timer = new QTimer(this);
|
||||||
|
|
@ -138,51 +169,6 @@ void DeckCardZoneDisplayWidget::refreshDisplayType(const DisplayType &_displayTy
|
||||||
timer->start();
|
timer->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeckCardZoneDisplayWidget::addCardGroupIfItDoesNotExist()
|
|
||||||
{
|
|
||||||
QList<CardGroupDisplayWidget *> cardGroupsDisplayWidgets =
|
|
||||||
cardGroupContainer->findChildren<CardGroupDisplayWidget *>();
|
|
||||||
|
|
||||||
QList<QString> cardGroups = getGroupCriteriaValueList();
|
|
||||||
|
|
||||||
for (QString cardGroup : cardGroups) {
|
|
||||||
bool found = false;
|
|
||||||
for (CardGroupDisplayWidget *cardGroupDisplayWidget : cardGroupsDisplayWidgets) {
|
|
||||||
if (cardGroupDisplayWidget->cardGroupCategory == cardGroup) {
|
|
||||||
found = true;
|
|
||||||
cardGroupDisplayWidget->updateCardDisplays();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (found) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (displayType == DisplayType::Overlap) {
|
|
||||||
auto *display_widget = new OverlappedCardGroupDisplayWidget(
|
|
||||||
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);
|
|
||||||
} else if (displayType == 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::onActiveGroupCriteriaChanged(QString _activeGroupCriteria)
|
void DeckCardZoneDisplayWidget::onActiveGroupCriteriaChanged(QString _activeGroupCriteria)
|
||||||
{
|
{
|
||||||
activeGroupCriteria = _activeGroupCriteria;
|
activeGroupCriteria = _activeGroupCriteria;
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,6 @@ public slots:
|
||||||
void onHover(CardInfoPtr card);
|
void onHover(CardInfoPtr card);
|
||||||
void displayCards();
|
void displayCards();
|
||||||
void refreshDisplayType(const DisplayType &displayType);
|
void refreshDisplayType(const DisplayType &displayType);
|
||||||
void addCardGroupIfItDoesNotExist();
|
|
||||||
void onActiveGroupCriteriaChanged(QString activeGroupCriteria);
|
void onActiveGroupCriteriaChanged(QString activeGroupCriteria);
|
||||||
void onActiveSortCriteriaChanged(QStringList activeSortCriteria);
|
void onActiveSortCriteriaChanged(QStringList activeSortCriteria);
|
||||||
QList<QString> getGroupCriteriaValueList();
|
QList<QString> getGroupCriteriaValueList();
|
||||||
|
|
|
||||||
|
|
@ -88,6 +88,12 @@ void FlowWidget::addWidget(QWidget *widget_to_add) const
|
||||||
flowLayout->addWidget(widget_to_add);
|
flowLayout->addWidget(widget_to_add);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FlowWidget::insertWidgetAtIndex(QWidget *toInsert, int index)
|
||||||
|
{
|
||||||
|
flowLayout->insertWidgetAtIndex(toInsert, index);
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
void FlowWidget::removeWidget(QWidget *widgetToRemove) const
|
void FlowWidget::removeWidget(QWidget *widgetToRemove) const
|
||||||
{
|
{
|
||||||
flowLayout->removeWidget(widgetToRemove);
|
flowLayout->removeWidget(widgetToRemove);
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ public:
|
||||||
Qt::ScrollBarPolicy horizontalPolicy,
|
Qt::ScrollBarPolicy horizontalPolicy,
|
||||||
Qt::ScrollBarPolicy verticalPolicy);
|
Qt::ScrollBarPolicy verticalPolicy);
|
||||||
void addWidget(QWidget *widget_to_add) const;
|
void addWidget(QWidget *widget_to_add) const;
|
||||||
|
void insertWidgetAtIndex(QWidget *toInsert, int index);
|
||||||
void removeWidget(QWidget *widgetToRemove) const;
|
void removeWidget(QWidget *widgetToRemove) const;
|
||||||
void clearLayout();
|
void clearLayout();
|
||||||
[[nodiscard]] int count() const;
|
[[nodiscard]] int count() const;
|
||||||
|
|
|
||||||
|
|
@ -203,16 +203,16 @@ void VisualDeckEditorWidget::onCardAddition(const QModelIndex &parent, int first
|
||||||
{
|
{
|
||||||
if (parent == deckListModel->getRoot()) {
|
if (parent == deckListModel->getRoot()) {
|
||||||
for (int i = first; i <= last; i++) {
|
for (int i = first; i <= last; i++) {
|
||||||
QPersistentModelIndex index = QPersistentModelIndex(deckListModel->index(i, 1, deckListModel->getRoot()));
|
QPersistentModelIndex index = QPersistentModelIndex(deckListModel->index(i, 0, deckListModel->getRoot()));
|
||||||
|
|
||||||
if (indexToWidgetMap.contains(index)) {
|
if (indexToWidgetMap.contains(index)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
qInfo() << deckListModel->data(index, Qt::EditRole).toString();
|
qInfo() << "Created zone for " << deckListModel->data(index.sibling(index.row(), 1), Qt::EditRole).toString();
|
||||||
|
|
||||||
DeckCardZoneDisplayWidget *zoneDisplayWidget = new DeckCardZoneDisplayWidget(
|
DeckCardZoneDisplayWidget *zoneDisplayWidget = new DeckCardZoneDisplayWidget(
|
||||||
zoneContainer, deckListModel, index, deckListModel->data(index, Qt::EditRole).toString(), activeGroupCriteria,
|
zoneContainer, deckListModel, index, deckListModel->data(index.sibling(index.row(), 1), Qt::EditRole).toString(), activeGroupCriteria,
|
||||||
activeSortCriteria, 20, 10, cardSizeWidget);
|
activeSortCriteria, 20, 10, cardSizeWidget);
|
||||||
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardHovered, this, &VisualDeckEditorWidget::onHover);
|
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardHovered, this, &VisualDeckEditorWidget::onHover);
|
||||||
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardClicked, this, &VisualDeckEditorWidget::onCardClick);
|
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardClicked, this, &VisualDeckEditorWidget::onCardClick);
|
||||||
|
|
@ -222,6 +222,7 @@ void VisualDeckEditorWidget::onCardAddition(const QModelIndex &parent, int first
|
||||||
&DeckCardZoneDisplayWidget::onActiveGroupCriteriaChanged);
|
&DeckCardZoneDisplayWidget::onActiveGroupCriteriaChanged);
|
||||||
connect(this, &VisualDeckEditorWidget::displayTypeChanged, zoneDisplayWidget,
|
connect(this, &VisualDeckEditorWidget::displayTypeChanged, zoneDisplayWidget,
|
||||||
&DeckCardZoneDisplayWidget::refreshDisplayType);
|
&DeckCardZoneDisplayWidget::refreshDisplayType);
|
||||||
|
zoneDisplayWidget->refreshDisplayType(currentDisplayType == DisplayType::Flat ? "flat" : "overlap");
|
||||||
zoneContainerLayout->addWidget(zoneDisplayWidget);
|
zoneContainerLayout->addWidget(zoneDisplayWidget);
|
||||||
|
|
||||||
indexToWidgetMap.insert(index, zoneDisplayWidget);
|
indexToWidgetMap.insert(index, zoneDisplayWidget);
|
||||||
|
|
@ -247,16 +248,16 @@ void VisualDeckEditorWidget::constructZoneWidgetsFromDeckListModel()
|
||||||
{
|
{
|
||||||
qInfo() << "Constructing zone widgets";
|
qInfo() << "Constructing zone widgets";
|
||||||
for (int i = 0; i < deckListModel->rowCount(deckListModel->parent(QModelIndex())); ++i) {
|
for (int i = 0; i < deckListModel->rowCount(deckListModel->parent(QModelIndex())); ++i) {
|
||||||
QPersistentModelIndex index = QPersistentModelIndex(deckListModel->index(i, 1, deckListModel->getRoot()));
|
QPersistentModelIndex index = QPersistentModelIndex(deckListModel->index(i, 0, deckListModel->getRoot()));
|
||||||
|
|
||||||
if (indexToWidgetMap.contains(index)) {
|
if (indexToWidgetMap.contains(index)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
qInfo() << deckListModel->data(index, Qt::EditRole).toString();
|
qInfo() << deckListModel->data(index.sibling(index.row(), 1), Qt::EditRole).toString();
|
||||||
|
|
||||||
DeckCardZoneDisplayWidget *zoneDisplayWidget = new DeckCardZoneDisplayWidget(
|
DeckCardZoneDisplayWidget *zoneDisplayWidget = new DeckCardZoneDisplayWidget(
|
||||||
zoneContainer, deckListModel, index, deckListModel->data(index, Qt::EditRole).toString(), activeGroupCriteria,
|
zoneContainer, deckListModel, index, deckListModel->data(index.sibling(index.row(), 1), Qt::EditRole).toString(), activeGroupCriteria,
|
||||||
activeSortCriteria, 20, 10, cardSizeWidget);
|
activeSortCriteria, 20, 10, cardSizeWidget);
|
||||||
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardHovered, this, &VisualDeckEditorWidget::onHover);
|
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardHovered, this, &VisualDeckEditorWidget::onHover);
|
||||||
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardClicked, this, &VisualDeckEditorWidget::onCardClick);
|
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardClicked, this, &VisualDeckEditorWidget::onCardClick);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue