mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-14 22:42:14 -07:00
Functional stuff.
This commit is contained in:
parent
d6f3f876c3
commit
b0b244a342
10 changed files with 167 additions and 82 deletions
|
|
@ -28,17 +28,17 @@ CardGroupDisplayWidget::CardGroupDisplayWidget(QWidget *parent,
|
||||||
|
|
||||||
layout->addWidget(banner);
|
layout->addWidget(banner);
|
||||||
qInfo() << "Tracked index (default CardGroupDisplayWidget): " << cardGroupCategory << " (" << zoneName << ")"
|
qInfo() << "Tracked index (default CardGroupDisplayWidget): " << cardGroupCategory << " (" << zoneName << ")"
|
||||||
<< "_trackedIndex.isValid()=" << _trackedIndex.isValid()
|
<< "_trackedIndex.isValid()=" << _trackedIndex.isValid() << "row=" << _trackedIndex.row()
|
||||||
<< "row=" << _trackedIndex.row()
|
<< "column=" << _trackedIndex.column() << "parent(row)=" << _trackedIndex.parent().row()
|
||||||
<< "column=" << _trackedIndex.column()
|
|
||||||
<< "parent(row)=" << _trackedIndex.parent().row()
|
|
||||||
<< "parent(column)=" << _trackedIndex.parent().column();
|
<< "parent(column)=" << _trackedIndex.parent().column();
|
||||||
|
|
||||||
connect(deckListModel, &QAbstractItemModel::rowsInserted, this, &CardGroupDisplayWidget::onCardAddition);
|
// CardGroupDisplayWidget::updateCardDisplays();
|
||||||
connect(deckListModel, &QAbstractItemModel::rowsRemoved, this, &CardGroupDisplayWidget::onCardRemoval);
|
|
||||||
|
// connect(deckListModel, &QAbstractItemModel::rowsInserted, this, &CardGroupDisplayWidget::onCardAddition);
|
||||||
|
// connect(deckListModel, &QAbstractItemModel::rowsRemoved, this, &CardGroupDisplayWidget::onCardRemoval);
|
||||||
}
|
}
|
||||||
|
|
||||||
QWidget* CardGroupDisplayWidget::constructWidgetForIndex(int rowIndex)
|
QWidget *CardGroupDisplayWidget::constructWidgetForIndex(int rowIndex)
|
||||||
{
|
{
|
||||||
QPersistentModelIndex index = QPersistentModelIndex(deckListModel->index(rowIndex, 0, trackedIndex));
|
QPersistentModelIndex index = QPersistentModelIndex(deckListModel->index(rowIndex, 0, trackedIndex));
|
||||||
|
|
||||||
|
|
@ -73,12 +73,14 @@ void CardGroupDisplayWidget::updateCardDisplays()
|
||||||
|
|
||||||
void CardGroupDisplayWidget::onCardAddition(const QModelIndex &parent, int first, int last)
|
void CardGroupDisplayWidget::onCardAddition(const QModelIndex &parent, int first, int last)
|
||||||
{
|
{
|
||||||
|
if (!trackedIndex.isValid()) {
|
||||||
|
emit cleanupRequested(this);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (parent == trackedIndex) {
|
if (parent == trackedIndex) {
|
||||||
qInfo() << "Tracked index (default CardGroupDisplayWidget): " << cardGroupCategory << " (" << zoneName << ")"
|
qInfo() << "Tracked index (default CardGroupDisplayWidget): " << cardGroupCategory << " (" << zoneName << ")"
|
||||||
<< "_trackedIndex.isValid()=" << trackedIndex.isValid()
|
<< "_trackedIndex.isValid()=" << trackedIndex.isValid() << "row=" << trackedIndex.row()
|
||||||
<< "row=" << trackedIndex.row()
|
<< "column=" << trackedIndex.column() << "parent(row)=" << trackedIndex.parent().row()
|
||||||
<< "column=" << trackedIndex.column()
|
|
||||||
<< "parent(row)=" << trackedIndex.parent().row()
|
|
||||||
<< "parent(column)=" << trackedIndex.parent().column();
|
<< "parent(column)=" << trackedIndex.parent().column();
|
||||||
qInfo() << "Card addition to " << cardGroupCategory;
|
qInfo() << "Card addition to " << cardGroupCategory;
|
||||||
for (int i = first; i <= last; i++) {
|
for (int i = first; i <= last; i++) {
|
||||||
|
|
@ -101,6 +103,9 @@ void CardGroupDisplayWidget::onCardRemoval(const QModelIndex &parent, int first,
|
||||||
indexToWidgetMap.remove(idx);
|
indexToWidgetMap.remove(idx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!trackedIndex.isValid()) {
|
||||||
|
emit cleanupRequested(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,7 @@ public slots:
|
||||||
signals:
|
signals:
|
||||||
void cardClicked(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card);
|
void cardClicked(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card);
|
||||||
void cardHovered(CardInfoPtr card);
|
void cardHovered(CardInfoPtr card);
|
||||||
|
void cleanupRequested(CardGroupDisplayWidget *cardGroupDisplayWidget);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QVBoxLayout *layout;
|
QVBoxLayout *layout;
|
||||||
|
|
|
||||||
|
|
@ -31,12 +31,24 @@ FlatCardGroupDisplayWidget::FlatCardGroupDisplayWidget(QWidget *parent,
|
||||||
banner->setBuddy(flowWidget);
|
banner->setBuddy(flowWidget);
|
||||||
|
|
||||||
layout->addWidget(flowWidget);
|
layout->addWidget(flowWidget);
|
||||||
|
|
||||||
|
for (const QPersistentModelIndex &idx : indexToWidgetMap.keys()) {
|
||||||
|
FlatCardGroupDisplayWidget::removeFromLayout(indexToWidgetMap.value(idx));
|
||||||
|
indexToWidgetMap.value(idx)->deleteLater();
|
||||||
|
indexToWidgetMap.remove(idx);
|
||||||
|
}
|
||||||
|
|
||||||
qInfo() << "Initialized a flat CardGroupDisplayWidget";
|
qInfo() << "Initialized a flat CardGroupDisplayWidget";
|
||||||
FlatCardGroupDisplayWidget::updateCardDisplays();
|
FlatCardGroupDisplayWidget::updateCardDisplays();
|
||||||
// connect(deckListModel, &DeckListModel::dataChanged, this, &FlatCardGroupDisplayWidget::updateCardDisplays);
|
// connect(deckListModel, &DeckListModel::dataChanged, this, &FlatCardGroupDisplayWidget::updateCardDisplays);
|
||||||
|
disconnect(deckListModel, &QAbstractItemModel::rowsInserted, this, &CardGroupDisplayWidget::onCardAddition);
|
||||||
|
disconnect(deckListModel, &QAbstractItemModel::rowsRemoved, this, &CardGroupDisplayWidget::onCardRemoval);
|
||||||
|
|
||||||
|
connect(deckListModel, &QAbstractItemModel::rowsInserted, this, &FlatCardGroupDisplayWidget::onCardAddition);
|
||||||
|
connect(deckListModel, &QAbstractItemModel::rowsRemoved, this, &FlatCardGroupDisplayWidget::onCardRemoval);
|
||||||
}
|
}
|
||||||
|
|
||||||
QWidget* FlatCardGroupDisplayWidget::constructWidgetForIndex(int row)
|
QWidget *FlatCardGroupDisplayWidget::constructWidgetForIndex(int row)
|
||||||
{
|
{
|
||||||
QPersistentModelIndex index = QPersistentModelIndex(deckListModel->index(row, 0, trackedIndex));
|
QPersistentModelIndex index = QPersistentModelIndex(deckListModel->index(row, 0, trackedIndex));
|
||||||
|
|
||||||
|
|
@ -59,8 +71,6 @@ QWidget* FlatCardGroupDisplayWidget::constructWidgetForIndex(int row)
|
||||||
return widget;
|
return widget;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void FlatCardGroupDisplayWidget::resizeEvent(QResizeEvent *event)
|
void FlatCardGroupDisplayWidget::resizeEvent(QResizeEvent *event)
|
||||||
{
|
{
|
||||||
QWidget::resizeEvent(event);
|
QWidget::resizeEvent(event);
|
||||||
|
|
|
||||||
|
|
@ -30,11 +30,24 @@ OverlappedCardGroupDisplayWidget::OverlappedCardGroupDisplayWidget(QWidget *pare
|
||||||
banner->setBuddy(overlapWidget);
|
banner->setBuddy(overlapWidget);
|
||||||
|
|
||||||
layout->addWidget(overlapWidget);
|
layout->addWidget(overlapWidget);
|
||||||
|
|
||||||
|
for (const QPersistentModelIndex &idx : indexToWidgetMap.keys()) {
|
||||||
|
OverlappedCardGroupDisplayWidget::removeFromLayout(indexToWidgetMap.value(idx));
|
||||||
|
indexToWidgetMap.value(idx)->deleteLater();
|
||||||
|
indexToWidgetMap.remove(idx);
|
||||||
|
}
|
||||||
|
|
||||||
qInfo() << "Initialized an overlap CardGroupDisplayWidget";
|
qInfo() << "Initialized an overlap CardGroupDisplayWidget";
|
||||||
OverlappedCardGroupDisplayWidget::updateCardDisplays();
|
OverlappedCardGroupDisplayWidget::updateCardDisplays();
|
||||||
|
|
||||||
connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, this,
|
connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, this,
|
||||||
[this]() { overlapWidget->adjustMaxColumnsAndRows(); });
|
[this]() { overlapWidget->adjustMaxColumnsAndRows(); });
|
||||||
|
|
||||||
|
disconnect(deckListModel, &QAbstractItemModel::rowsInserted, this, &CardGroupDisplayWidget::onCardAddition);
|
||||||
|
disconnect(deckListModel, &QAbstractItemModel::rowsRemoved, this, &CardGroupDisplayWidget::onCardRemoval);
|
||||||
|
|
||||||
|
connect(deckListModel, &QAbstractItemModel::rowsInserted, this, &OverlappedCardGroupDisplayWidget::onCardAddition);
|
||||||
|
connect(deckListModel, &QAbstractItemModel::rowsRemoved, this, &OverlappedCardGroupDisplayWidget::onCardRemoval);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OverlappedCardGroupDisplayWidget::resizeEvent(QResizeEvent *event)
|
void OverlappedCardGroupDisplayWidget::resizeEvent(QResizeEvent *event)
|
||||||
|
|
|
||||||
|
|
@ -45,50 +45,80 @@ DeckCardZoneDisplayWidget::DeckCardZoneDisplayWidget(QWidget *parent,
|
||||||
<< "parent(row)=" << _trackedIndex.parent().row() << "parent(column)=" << _trackedIndex.parent().column()
|
<< "parent(row)=" << _trackedIndex.parent().row() << "parent(column)=" << _trackedIndex.parent().column()
|
||||||
<< "parent(valid)=" << _trackedIndex.parent().isValid();
|
<< "parent(valid)=" << _trackedIndex.parent().isValid();
|
||||||
}
|
}
|
||||||
qInfo() << "Cleaning up invalid card group " << displayWidget->cardGroupCategory << " from " << displayWidget->zoneName;
|
|
||||||
|
void DeckCardZoneDisplayWidget::cleanupInvalidCardGroup(CardGroupDisplayWidget *displayWidget)
|
||||||
|
{
|
||||||
|
qInfo() << "Cleaning up invalid card group " << displayWidget->cardGroupCategory << " from "
|
||||||
|
<< displayWidget->zoneName;
|
||||||
|
cardGroupLayout->removeWidget(displayWidget);
|
||||||
|
for (auto idx : indexToWidgetMap.keys()) {
|
||||||
|
if (!idx.isValid()) {
|
||||||
|
indexToWidgetMap.remove(idx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
displayWidget->deleteLater();
|
||||||
qInfo() << "Cleaned.";
|
qInfo() << "Cleaned.";
|
||||||
|
}
|
||||||
|
|
||||||
|
void DeckCardZoneDisplayWidget::constructAppropriateWidget(QPersistentModelIndex index)
|
||||||
|
{
|
||||||
|
auto categoryName = deckListModel->data(index.sibling(index.row(), 1), Qt::EditRole).toString();
|
||||||
|
if (indexToWidgetMap.contains(index)) {
|
||||||
qInfo() << categoryName << " is already contained in the index to widget map";
|
qInfo() << categoryName << " is already contained in the index to widget map";
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
qInfo() << categoryName << " needs a widget";
|
qInfo() << categoryName << " needs a widget";
|
||||||
|
}
|
||||||
|
if (displayType == "overlap") {
|
||||||
qInfo() << "It's getting an overlap widget.";
|
qInfo() << "It's getting an overlap widget.";
|
||||||
|
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)));
|
||||||
|
connect(display_widget, &CardGroupDisplayWidget::cleanupRequested, this,
|
||||||
|
&DeckCardZoneDisplayWidget::cleanupInvalidCardGroup);
|
||||||
|
cardGroupLayout->addWidget(display_widget);
|
||||||
|
indexToWidgetMap.insert(index, display_widget);
|
||||||
|
} else if (displayType == "flat") {
|
||||||
qInfo() << "Getting a flat widget for christmas";
|
qInfo() << "Getting a flat widget for christmas";
|
||||||
|
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)));
|
||||||
|
connect(display_widget, &CardGroupDisplayWidget::cleanupRequested, this,
|
||||||
|
&DeckCardZoneDisplayWidget::cleanupInvalidCardGroup);
|
||||||
|
cardGroupLayout->addWidget(display_widget);
|
||||||
|
indexToWidgetMap.insert(index, display_widget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DeckCardZoneDisplayWidget::displayCards()
|
||||||
|
{
|
||||||
qInfo() << "Constructing Group Display Widgets for Zone Display widget";
|
qInfo() << "Constructing Group Display Widgets for Zone Display widget";
|
||||||
qInfo() << deckListModel->data(trackedIndex.sibling(trackedIndex.row(), 1), Qt::EditRole).toString() << " has "
|
qInfo() << deckListModel->data(trackedIndex.sibling(trackedIndex.row(), 1), Qt::EditRole).toString() << " has "
|
||||||
<< deckListModel->rowCount(trackedIndex.sibling(trackedIndex.row(), 0)) << " entries.";
|
<< 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));
|
||||||
|
constructAppropriateWidget(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void DeckCardZoneDisplayWidget::onCategoryAddition(const QModelIndex &parent, int first, int last)
|
void DeckCardZoneDisplayWidget::onCategoryAddition(const QModelIndex &parent, int first, int last)
|
||||||
{
|
{
|
||||||
|
if (!trackedIndex.isValid()) {
|
||||||
|
emit requestCleanup(this);
|
||||||
|
}
|
||||||
if (parent == trackedIndex) {
|
if (parent == trackedIndex) {
|
||||||
qInfo() << deckListModel->data(trackedIndex.sibling(trackedIndex.row(), 1), Qt::EditRole).toString()
|
qInfo() << deckListModel->data(trackedIndex.sibling(trackedIndex.row(), 1), Qt::EditRole).toString()
|
||||||
<< " zone thinks it has a new category";
|
<< " 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, 0, trackedIndex));
|
QPersistentModelIndex index = QPersistentModelIndex(deckListModel->index(i, 0, trackedIndex));
|
||||||
|
|
||||||
if (indexToWidgetMap.contains(index)) {
|
constructAppropriateWidget(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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -105,6 +135,9 @@ void DeckCardZoneDisplayWidget::onCategoryRemoval(const QModelIndex &parent, int
|
||||||
indexToWidgetMap.remove(idx);
|
indexToWidgetMap.remove(idx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!trackedIndex.isValid()) {
|
||||||
|
emit requestCleanup(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeckCardZoneDisplayWidget::resizeEvent(QResizeEvent *event)
|
void DeckCardZoneDisplayWidget::resizeEvent(QResizeEvent *event)
|
||||||
|
|
@ -126,42 +159,7 @@ void DeckCardZoneDisplayWidget::onHover(CardInfoPtr card)
|
||||||
emit cardHovered(card);
|
emit cardHovered(card);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeckCardZoneDisplayWidget::displayCards()
|
void DeckCardZoneDisplayWidget::refreshDisplayType(const QString &_displayType)
|
||||||
{
|
|
||||||
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)
|
|
||||||
{
|
{
|
||||||
displayType = _displayType;
|
displayType = _displayType;
|
||||||
QLayoutItem *item;
|
QLayoutItem *item;
|
||||||
|
|
|
||||||
|
|
@ -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 "../visual_deck_editor/visual_deck_editor_widget.h"
|
#include "../visual_deck_editor/visual_deck_editor_widget.h"
|
||||||
|
#include "card_group_display_widgets/card_group_display_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 "card_size_widget.h"
|
||||||
|
|
||||||
|
|
@ -36,6 +37,8 @@ public:
|
||||||
public slots:
|
public slots:
|
||||||
void onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card);
|
void onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card);
|
||||||
void onHover(CardInfoPtr card);
|
void onHover(CardInfoPtr card);
|
||||||
|
void cleanupInvalidCardGroup(CardGroupDisplayWidget *displayWidget);
|
||||||
|
void constructAppropriateWidget(QPersistentModelIndex index);
|
||||||
void displayCards();
|
void displayCards();
|
||||||
void refreshDisplayType(const DisplayType &displayType);
|
void refreshDisplayType(const DisplayType &displayType);
|
||||||
void onActiveGroupCriteriaChanged(QString activeGroupCriteria);
|
void onActiveGroupCriteriaChanged(QString activeGroupCriteria);
|
||||||
|
|
@ -48,6 +51,7 @@ signals:
|
||||||
void cardClicked(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card, QString zoneName);
|
void cardClicked(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card, QString zoneName);
|
||||||
void cardHovered(CardInfoPtr card);
|
void cardHovered(CardInfoPtr card);
|
||||||
void activeSortCriteriaChanged(QStringList activeSortCriteria);
|
void activeSortCriteriaChanged(QStringList activeSortCriteria);
|
||||||
|
void requestCleanup(DeckCardZoneDisplayWidget *displayWidget);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString activeGroupCriteria;
|
QString activeGroupCriteria;
|
||||||
|
|
|
||||||
|
|
@ -198,8 +198,19 @@ void VisualDeckEditorWidget::retranslateUi()
|
||||||
displayTypeButton->setToolTip(
|
displayTypeButton->setToolTip(
|
||||||
tr("Change how cards are displayed within zones (i.e. overlapped or fully visible.)"));
|
tr("Change how cards are displayed within zones (i.e. overlapped or fully visible.)"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VisualDeckEditorWidget::cleanupInvalidZones(DeckCardZoneDisplayWidget *displayWidget)
|
||||||
|
{
|
||||||
qInfo() << "Cleaning up invalid card zone " << displayWidget->zoneName;
|
qInfo() << "Cleaning up invalid card zone " << displayWidget->zoneName;
|
||||||
|
zoneContainerLayout->removeWidget(displayWidget);
|
||||||
|
for (auto idx : indexToWidgetMap.keys()) {
|
||||||
|
if (!idx.isValid()) {
|
||||||
|
indexToWidgetMap.remove(idx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
displayWidget->deleteLater();
|
||||||
qInfo() << "Cleaned.";
|
qInfo() << "Cleaned.";
|
||||||
|
}
|
||||||
|
|
||||||
void VisualDeckEditorWidget::onCardAddition(const QModelIndex &parent, int first, int last)
|
void VisualDeckEditorWidget::onCardAddition(const QModelIndex &parent, int first, int last)
|
||||||
{
|
{
|
||||||
|
|
@ -218,6 +229,8 @@ void VisualDeckEditorWidget::onCardAddition(const QModelIndex &parent, int first
|
||||||
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);
|
||||||
|
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::requestCleanup, this,
|
||||||
|
&VisualDeckEditorWidget::cleanupInvalidZones);
|
||||||
connect(this, &VisualDeckEditorWidget::activeSortCriteriaChanged, zoneDisplayWidget,
|
connect(this, &VisualDeckEditorWidget::activeSortCriteriaChanged, zoneDisplayWidget,
|
||||||
&DeckCardZoneDisplayWidget::onActiveSortCriteriaChanged);
|
&DeckCardZoneDisplayWidget::onActiveSortCriteriaChanged);
|
||||||
connect(this, &VisualDeckEditorWidget::activeGroupCriteriaChanged, zoneDisplayWidget,
|
connect(this, &VisualDeckEditorWidget::activeGroupCriteriaChanged, zoneDisplayWidget,
|
||||||
|
|
@ -249,7 +262,7 @@ void VisualDeckEditorWidget::onCardRemoval(const QModelIndex &parent, int first,
|
||||||
void VisualDeckEditorWidget::constructZoneWidgetsFromDeckListModel()
|
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, 0, deckListModel->getRoot()));
|
QPersistentModelIndex index = QPersistentModelIndex(deckListModel->index(i, 0, deckListModel->getRoot()));
|
||||||
|
|
||||||
if (indexToWidgetMap.contains(index)) {
|
if (indexToWidgetMap.contains(index)) {
|
||||||
|
|
@ -263,6 +276,8 @@ void VisualDeckEditorWidget::constructZoneWidgetsFromDeckListModel()
|
||||||
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);
|
||||||
|
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::requestCleanup, this,
|
||||||
|
&VisualDeckEditorWidget::cleanupInvalidZones);
|
||||||
connect(this, &VisualDeckEditorWidget::activeSortCriteriaChanged, zoneDisplayWidget,
|
connect(this, &VisualDeckEditorWidget::activeSortCriteriaChanged, zoneDisplayWidget,
|
||||||
&DeckCardZoneDisplayWidget::onActiveSortCriteriaChanged);
|
&DeckCardZoneDisplayWidget::onActiveSortCriteriaChanged);
|
||||||
connect(this, &VisualDeckEditorWidget::activeGroupCriteriaChanged, zoneDisplayWidget,
|
connect(this, &VisualDeckEditorWidget::activeGroupCriteriaChanged, zoneDisplayWidget,
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <qscrollarea.h>
|
#include <qscrollarea.h>
|
||||||
|
|
||||||
|
class DeckCardZoneDisplayWidget;
|
||||||
enum class DisplayType
|
enum class DisplayType
|
||||||
{
|
{
|
||||||
Flat,
|
Flat,
|
||||||
|
|
@ -41,6 +42,7 @@ public slots:
|
||||||
void decklistDataChanged(QModelIndex topLeft, QModelIndex bottomRight);
|
void decklistDataChanged(QModelIndex topLeft, QModelIndex bottomRight);
|
||||||
void updateZoneWidgets();
|
void updateZoneWidgets();
|
||||||
void updateDisplayType();
|
void updateDisplayType();
|
||||||
|
void cleanupInvalidZones(DeckCardZoneDisplayWidget *displayWidget);
|
||||||
void onCardAddition(const QModelIndex &parent, int first, int last);
|
void onCardAddition(const QModelIndex &parent, int first, int last);
|
||||||
void onCardRemoval(const QModelIndex &parent, int first, int last);
|
void onCardRemoval(const QModelIndex &parent, int first, int last);
|
||||||
void constructZoneWidgetsFromDeckListModel();
|
void constructZoneWidgetsFromDeckListModel();
|
||||||
|
|
|
||||||
|
|
@ -410,7 +410,10 @@ QModelIndex DeckListModel::addCard(const QString &cardName,
|
||||||
if (!cardNode) {
|
if (!cardNode) {
|
||||||
auto *decklistCard = deckList->addCard(cardInfo->getName(), zoneName, cardSetName,
|
auto *decklistCard = deckList->addCard(cardInfo->getName(), zoneName, cardSetName,
|
||||||
cardInfoSet.getProperty("num"), cardInfoSet.getProperty("uuid"));
|
cardInfoSet.getProperty("num"), cardInfoSet.getProperty("uuid"));
|
||||||
beginInsertRows(parentIndex, static_cast<int>(cardTypeNode->size()), static_cast<int>(cardTypeNode->size()));
|
// Determine the correct index
|
||||||
|
int insertRow = findSortedInsertRow(cardTypeNode, cardNode);
|
||||||
|
|
||||||
|
beginInsertRows(parentIndex, insertRow, insertRow);
|
||||||
cardNode = new DecklistModelCardNode(decklistCard, cardTypeNode);
|
cardNode = new DecklistModelCardNode(decklistCard, cardTypeNode);
|
||||||
endInsertRows();
|
endInsertRows();
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -420,11 +423,44 @@ QModelIndex DeckListModel::addCard(const QString &cardName,
|
||||||
cardNode->setCardProviderId(cardInfoSet.getProperty("uuid"));
|
cardNode->setCardProviderId(cardInfoSet.getProperty("uuid"));
|
||||||
deckList->refreshDeckHash();
|
deckList->refreshDeckHash();
|
||||||
}
|
}
|
||||||
sort(lastKnownColumn, lastKnownOrder);
|
// sort(lastKnownColumn, lastKnownOrder);
|
||||||
emitRecursiveUpdates(parentIndex);
|
emitRecursiveUpdates(parentIndex);
|
||||||
return nodeToIndex(cardNode);
|
return nodeToIndex(cardNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int DeckListModel::findSortedInsertRow(InnerDecklistNode *parent, AbstractDecklistNode *newNode) const
|
||||||
|
{
|
||||||
|
auto *newCard = dynamic_cast<const DecklistModelCardNode *>(newNode);
|
||||||
|
if (!newCard)
|
||||||
|
return parent->size(); // fallback: append at end
|
||||||
|
|
||||||
|
for (int i = 0; i < parent->size(); ++i) {
|
||||||
|
auto *existingCard = dynamic_cast<const DecklistModelCardNode *>(parent->at(i));
|
||||||
|
if (!existingCard)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
bool lessThan = false;
|
||||||
|
switch (lastKnownColumn) {
|
||||||
|
case 0: // ByNumber
|
||||||
|
lessThan = lastKnownOrder == Qt::AscendingOrder
|
||||||
|
? newCard->getCardCollectorNumber() < existingCard->getCardCollectorNumber()
|
||||||
|
: newCard->getCardCollectorNumber() > existingCard->getCardCollectorNumber();
|
||||||
|
break;
|
||||||
|
case 1: // ByName
|
||||||
|
default:
|
||||||
|
lessThan = lastKnownOrder == Qt::AscendingOrder
|
||||||
|
? newCard->getName().localeAwareCompare(existingCard->getName()) < 0
|
||||||
|
: newCard->getName().localeAwareCompare(existingCard->getName()) > 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lessThan)
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent->size(); // insert at end if no earlier match
|
||||||
|
}
|
||||||
|
|
||||||
QModelIndex DeckListModel::nodeToIndex(AbstractDecklistNode *node) const
|
QModelIndex DeckListModel::nodeToIndex(AbstractDecklistNode *node) const
|
||||||
{
|
{
|
||||||
if (node == nullptr || node == root) {
|
if (node == nullptr || node == root) {
|
||||||
|
|
|
||||||
|
|
@ -115,6 +115,7 @@ public:
|
||||||
const CardInfoPerSet &cardInfoSet,
|
const CardInfoPerSet &cardInfoSet,
|
||||||
const QString &zoneName,
|
const QString &zoneName,
|
||||||
bool abAddAnyway = false);
|
bool abAddAnyway = false);
|
||||||
|
int findSortedInsertRow(InnerDecklistNode *parent, AbstractDecklistNode *newNode) const;
|
||||||
void sort(int column, Qt::SortOrder order) override;
|
void sort(int column, Qt::SortOrder order) override;
|
||||||
void cleanList();
|
void cleanList();
|
||||||
DeckLoader *getDeckList() const
|
DeckLoader *getDeckList() const
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue