Address comments.

This commit is contained in:
Lukas Brübach 2025-04-16 12:32:50 +02:00
parent 579a361b1a
commit 74ca3cc214
8 changed files with 79 additions and 104 deletions

View file

@ -305,7 +305,7 @@ void TabDeckEditorVisual::loadLayout()
databaseDisplayDockWidget->setMinimumSize(100, 100);
databaseDisplayDockWidget->setMaximumSize(1400, 5000);
QTimer::singleShot(100, this, SLOT(freeDocksSize()));
QTimer::singleShot(100, this, &TabDeckEditorVisual::freeDocksSize);
}
void TabDeckEditorVisual::retranslateUi()
@ -457,6 +457,7 @@ void TabDeckEditorVisual::dockTopLevelChanged(bool topLevel)
if (o == deckAnalyticsDock) {
aDeckAnalyticsDockFloating->setChecked(topLevel);
return;
}
if (o == printingSelectorDockWidget) {

View file

@ -5,11 +5,11 @@
TabDeckEditorVisualTabWidget::TabDeckEditorVisualTabWidget(QWidget *parent,
AbstractTabDeckEditor *_deckEditor,
DeckListModel *model,
CardDatabaseModel *card_database_model,
CardDatabaseDisplayModel *card_database_display_model)
: QTabWidget(parent), deckEditor(_deckEditor), deckModel(model), cardDatabaseModel(card_database_model),
cardDatabaseDisplayModel(card_database_display_model)
DeckListModel *_deckModel,
CardDatabaseModel *_cardDatabaseModel,
CardDatabaseDisplayModel *_cardDatabaseDisplayModel)
: QTabWidget(parent), deckEditor(_deckEditor), deckModel(_deckModel), cardDatabaseModel(_cardDatabaseModel),
cardDatabaseDisplayModel(_cardDatabaseDisplayModel)
{
this->setTabsClosable(true); // Enable tab closing
connect(this, &QTabWidget::tabCloseRequested, this, &TabDeckEditorVisualTabWidget::handleTabClose);
@ -28,7 +28,7 @@ TabDeckEditorVisualTabWidget::TabDeckEditorVisualTabWidget(QWidget *parent,
&AbstractTabDeckEditor::actAddCard);
visualDatabaseDisplay =
new VisualDatabaseDisplayWidget(this, deckEditor, cardDatabaseModel, cardDatabaseDisplayModel);
new VisualDatabaseDisplayWidget(this, deckEditor, _cardDatabaseModel, _cardDatabaseDisplayModel);
visualDatabaseDisplay->setObjectName("visualDatabaseView");
connect(visualDatabaseDisplay, &VisualDatabaseDisplayWidget::cardHoveredDatabaseDisplay, this,
&TabDeckEditorVisualTabWidget::onCardChangedDatabaseDisplay);

View file

@ -15,11 +15,11 @@ class TabDeckEditorVisualTabWidget : public QTabWidget
Q_OBJECT
public:
explicit TabDeckEditorVisualTabWidget(QWidget *parent = nullptr,
AbstractTabDeckEditor *deckEditor = nullptr,
DeckListModel *deckModel = nullptr,
CardDatabaseModel *card_database_model = nullptr,
CardDatabaseDisplayModel *card_database_display_model = nullptr);
explicit TabDeckEditorVisualTabWidget(QWidget *parent,
AbstractTabDeckEditor *_deckEditor,
DeckListModel *_deckModel,
CardDatabaseModel *_cardDatabaseModel,
CardDatabaseDisplayModel *_cardDatabaseDisplayModel);
// Utility functions
void addNewTab(QWidget *widget, const QString &title);

View file

@ -88,7 +88,7 @@ void FlatCardGroupDisplayWidget::updateCardDisplays()
for (CardInfoPictureWithTextOverlayWidget *widget : existingWidgets) {
if (!usedWidgets.contains(widget)) {
flowWidget->layout()->removeWidget(widget);
delete widget;
widget->deleteLater();
}
}

View file

@ -96,28 +96,30 @@ void DeckCardZoneDisplayWidget::addCardGroupIfItDoesNotExist()
}
}
if (!found) {
if (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 == "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);
}
if (found) {
continue;
}
if (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 == "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);
}
}
}
@ -133,7 +135,6 @@ void DeckCardZoneDisplayWidget::deleteCardGroupIfItDoesNotExist()
if (!validGroups.contains(cardGroupDisplayWidget->cardGroupCategory)) {
cardGroupLayout->removeWidget(cardGroupDisplayWidget);
cardGroupDisplayWidget->deleteLater(); // Properly delete the widget after the event loop cycles
} else {
}
}
}

View file

@ -123,11 +123,7 @@ VisualDeckEditorWidget::VisualDeckEditorWidget(QWidget *parent, DeckListModel *_
groupAndSortContainer->setLayout(groupAndSortLayout);
groupByComboBox = new QComboBox();
QStringList groupProperties;
groupProperties << "maintype"
<< "colors"
<< "cmc"
<< "name";
QStringList groupProperties = {"maintype", "colors", "cmc", "name"};
groupByComboBox->addItems(groupProperties);
groupByComboBox->setMinimumWidth(300);
connect(groupByComboBox, QOverload<const QString &>::of(&QComboBox::currentTextChanged), this,
@ -137,6 +133,7 @@ VisualDeckEditorWidget::VisualDeckEditorWidget(QWidget *parent, DeckListModel *_
sortCriteriaButton = new SettingsButtonWidget(this);
sortLabel = new QLabel(sortCriteriaButton);
sortLabel->setWordWrap(true);
QStringList sortProperties = {"colors", "cmc", "name", "maintype"};
sortByListWidget = new QListWidget();
@ -151,7 +148,6 @@ VisualDeckEditorWidget::VisualDeckEditorWidget(QWidget *parent, DeckListModel *_
connect(sortByListWidget->model(), &QAbstractItemModel::rowsMoved, this,
&VisualDeckEditorWidget::actChangeActiveSortCriteria);
// connect(sortByListWidget, &QListWidget::itemChanged, this, &VisualDeckEditorWidget::actChangeActiveSortCriteria);
actChangeActiveSortCriteria();
sortByListWidget->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
@ -193,7 +189,7 @@ VisualDeckEditorWidget::VisualDeckEditorWidget(QWidget *parent, DeckListModel *_
void VisualDeckEditorWidget::retranslateUi()
{
sortLabel->setText(tr("Click and drag to change\nthe sort order within the groups"));
sortLabel->setText(tr("Click and drag to change the sort order within the groups"));
searchPushButton->setText(tr("Quick search and add card"));
displayTypeButton->setText(tr("Flat Layout"));
}
@ -206,12 +202,19 @@ void VisualDeckEditorWidget::updateZoneWidgets()
void VisualDeckEditorWidget::updateDisplayType()
{
if (displayTypeButton->text() == tr("Overlap Layout")) {
emit displayTypeChanged("flat");
displayTypeButton->setText("Flat Layout");
} else {
emit displayTypeChanged("overlap");
displayTypeButton->setText(tr("Overlap Layout"));
// Toggle the display type
currentDisplayType = (currentDisplayType == DisplayType::Overlap) ? DisplayType::Flat : DisplayType::Overlap;
// Update UI and emit signal
switch (currentDisplayType) {
case DisplayType::Flat:
emit displayTypeChanged("flat");
displayTypeButton->setText(tr("Flat Layout"));
break;
case DisplayType::Overlap:
emit displayTypeChanged("overlap");
displayTypeButton->setText(tr("Overlap Layout"));
break;
}
}
@ -224,23 +227,24 @@ void VisualDeckEditorWidget::addZoneIfDoesNotExist()
for (DeckCardZoneDisplayWidget *displayWidget : cardZoneDisplayWidgets) {
if (displayWidget->zoneName == zone) {
found = true;
break;
}
}
if (!found) {
DeckCardZoneDisplayWidget *zoneDisplayWidget = new DeckCardZoneDisplayWidget(
zoneContainer, deckListModel, zone, activeGroupCriteria, activeSortCriteria, 20, 10, cardSizeWidget);
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardHovered, this, &VisualDeckEditorWidget::onHover);
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardClicked, this,
&VisualDeckEditorWidget::onCardClick);
connect(this, &VisualDeckEditorWidget::activeSortCriteriaChanged, zoneDisplayWidget,
&DeckCardZoneDisplayWidget::onActiveSortCriteriaChanged);
connect(this, &VisualDeckEditorWidget::activeGroupCriteriaChanged, zoneDisplayWidget,
&DeckCardZoneDisplayWidget::onActiveGroupCriteriaChanged);
connect(this, &VisualDeckEditorWidget::displayTypeChanged, zoneDisplayWidget,
&DeckCardZoneDisplayWidget::refreshDisplayType);
zoneContainerLayout->addWidget(zoneDisplayWidget);
if (found) {
continue;
}
DeckCardZoneDisplayWidget *zoneDisplayWidget = new DeckCardZoneDisplayWidget(
zoneContainer, deckListModel, zone, activeGroupCriteria, activeSortCriteria, 20, 10, cardSizeWidget);
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardHovered, this, &VisualDeckEditorWidget::onHover);
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardClicked, this, &VisualDeckEditorWidget::onCardClick);
connect(this, &VisualDeckEditorWidget::activeSortCriteriaChanged, zoneDisplayWidget,
&DeckCardZoneDisplayWidget::onActiveSortCriteriaChanged);
connect(this, &VisualDeckEditorWidget::activeGroupCriteriaChanged, zoneDisplayWidget,
&DeckCardZoneDisplayWidget::onActiveGroupCriteriaChanged);
connect(this, &VisualDeckEditorWidget::displayTypeChanged, zoneDisplayWidget,
&DeckCardZoneDisplayWidget::refreshDisplayType);
zoneContainerLayout->addWidget(zoneDisplayWidget);
}
}
@ -251,9 +255,9 @@ void VisualDeckEditorWidget::deleteZoneIfDoesNotExist()
for (DeckCardZoneDisplayWidget *displayWidget : cardZoneDisplayWidgets) {
bool found = false;
for (const QString &zone : *deckListModel->getZones()) {
if (displayWidget->zoneName == zone) {
found = true;
break;
}
}
@ -291,49 +295,13 @@ void VisualDeckEditorWidget::actChangeActiveSortCriteria()
void VisualDeckEditorWidget::decklistDataChanged(QModelIndex topLeft, QModelIndex bottomRight)
{
// Might use these at some point.
(void)topLeft;
(void)bottomRight;
Q_UNUSED(topLeft);
Q_UNUSED(bottomRight);
// Necessary to delay this in this manner else the updateDisplay will nuke widgets while their onClick event
// hasn't returned yet. Interval of 0 means QT will schedule this after the current event loop has finished.
updateZoneWidgets();
}
/*void VisualDeckEditorWidget::sortCards()
{
QStringList sortCriteria;
sortCriteria.append(activeSortCriteria);
this->sortCardList(sortCriteria, Qt::SortOrder::AscendingOrder);
QString lastSortCriteriaValue = "";
overlapCategories = new QWidget(scrollArea);
overlapCategoriesLayout = new QVBoxLayout(overlapCategories);
OverlapWidget *printings_group_widget = new OverlapWidget(80, 1, 1, Qt::Vertical, overlapCategories);
overlap_control_widget->connectOverlapWidget(printings_group_widget);
for (int i = 0; i < cards->size(); i++) {
CardInfoPtr info = cards->at(i);
if (info) {
if (info->getProperty(activeSortCriteria) != lastSortCriteriaValue) {
printings_group_widget->adjustMaxColumnsAndRows();
lastSortCriteriaValue = info->getProperty(activeSortCriteria);
printings_group_widget = new OverlapWidget(80, 1, 1, Qt::Vertical, overlapCategories);
overlapCategoriesLayout->addWidget(printings_group_widget);
overlap_control_widget->connectOverlapWidget(printings_group_widget);
}
CardInfoPictureWithTextOverlayWidget* display = new
CardInfoPictureWithTextOverlayWidget(printings_group_widget, true);
display->setCard(info);
printings_group_widget->addWidget(display);
update();
} else {
qDebug() << "Card not found in database!";
}
}
printings_group_widget->adjustMaxColumnsAndRows();
scrollArea->setWidget(overlapCategories);
update();
}*/
void VisualDeckEditorWidget::onHover(CardInfoPtr hoveredCard)
{
emit activeCardChanged(hoveredCard);

View file

@ -17,6 +17,12 @@
#include <QWidget>
#include <qscrollarea.h>
enum class DisplayType
{
Flat,
Overlap
};
class VisualDeckEditorWidget : public QWidget
{
Q_OBJECT
@ -62,6 +68,7 @@ private:
CardCompleterProxyModel *proxyModel;
QCompleter *completer;
QPushButton *searchPushButton;
DisplayType currentDisplayType = DisplayType::Overlap;
QPushButton *displayTypeButton;
QWidget *groupAndSortContainer;
QHBoxLayout *groupAndSortLayout;

View file

@ -66,8 +66,6 @@ void CardSearchModel::updateSearchResults(const QString &query)
emit dataChanged(index(0, 0), index(rowCount() - 1, 0));
emit layoutChanged();
for (SearchResult &result : searchResults) {
qDebug() << result.card->getName();
}
endResetModel();
}