mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-08 17:13:57 -07:00
[TagDisplayWidget] Refactor to just store tags and use signals (#6395)
This commit is contained in:
parent
f0be6972cc
commit
95c3434205
6 changed files with 59 additions and 49 deletions
|
|
@ -154,8 +154,10 @@ void DeckEditorDeckDockWidget::createDeckDock()
|
||||||
&DeckEditorDeckDockWidget::setBannerCard);
|
&DeckEditorDeckDockWidget::setBannerCard);
|
||||||
bannerCardComboBox->setHidden(!SettingsCache::instance().getDeckEditorBannerCardComboBoxVisible());
|
bannerCardComboBox->setHidden(!SettingsCache::instance().getDeckEditorBannerCardComboBoxVisible());
|
||||||
|
|
||||||
deckTagsDisplayWidget = new DeckPreviewDeckTagsDisplayWidget(this, deckModel->getDeckList());
|
deckTagsDisplayWidget = new DeckPreviewDeckTagsDisplayWidget(this, deckModel->getDeckList()->getTags());
|
||||||
deckTagsDisplayWidget->setHidden(!SettingsCache::instance().getDeckEditorTagsWidgetVisible());
|
deckTagsDisplayWidget->setHidden(!SettingsCache::instance().getDeckEditorTagsWidgetVisible());
|
||||||
|
connect(deckTagsDisplayWidget, &DeckPreviewDeckTagsDisplayWidget::tagsChanged, this,
|
||||||
|
&DeckEditorDeckDockWidget::setTags);
|
||||||
|
|
||||||
activeGroupCriteriaLabel = new QLabel(this);
|
activeGroupCriteriaLabel = new QLabel(this);
|
||||||
|
|
||||||
|
|
@ -383,6 +385,13 @@ void DeckEditorDeckDockWidget::setBannerCard(int /* changedIndex */)
|
||||||
emit deckModified();
|
emit deckModified();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DeckEditorDeckDockWidget::setTags(const QStringList &tags)
|
||||||
|
{
|
||||||
|
deckModel->getDeckList()->setTags(tags);
|
||||||
|
deckEditor->setModified(true);
|
||||||
|
emit deckModified();
|
||||||
|
}
|
||||||
|
|
||||||
void DeckEditorDeckDockWidget::syncDeckListBannerCardWithComboBox()
|
void DeckEditorDeckDockWidget::syncDeckListBannerCardWithComboBox()
|
||||||
{
|
{
|
||||||
auto [name, id] = bannerCardComboBox->currentData().value<QPair<QString, QString>>();
|
auto [name, id] = bannerCardComboBox->currentData().value<QPair<QString, QString>>();
|
||||||
|
|
@ -451,7 +460,7 @@ void DeckEditorDeckDockWidget::syncDisplayWidgetsToModel()
|
||||||
sortDeckModelToDeckView();
|
sortDeckModelToDeckView();
|
||||||
expandAll();
|
expandAll();
|
||||||
|
|
||||||
deckTagsDisplayWidget->setDeckList(deckModel->getDeckList());
|
deckTagsDisplayWidget->setTags(deckModel->getDeckList()->getTags());
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeckEditorDeckDockWidget::sortDeckModelToDeckView()
|
void DeckEditorDeckDockWidget::sortDeckModelToDeckView()
|
||||||
|
|
@ -484,7 +493,7 @@ void DeckEditorDeckDockWidget::cleanDeck()
|
||||||
emit deckModified();
|
emit deckModified();
|
||||||
emit deckChanged();
|
emit deckChanged();
|
||||||
updateBannerCardComboBox();
|
updateBannerCardComboBox();
|
||||||
deckTagsDisplayWidget->setDeckList(deckModel->getDeckList());
|
deckTagsDisplayWidget->setTags(deckModel->getDeckList()->getTags());
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeckEditorDeckDockWidget::recursiveExpand(const QModelIndex &index)
|
void DeckEditorDeckDockWidget::recursiveExpand(const QModelIndex &index)
|
||||||
|
|
|
||||||
|
|
@ -112,6 +112,7 @@ private slots:
|
||||||
void updateName(const QString &name);
|
void updateName(const QString &name);
|
||||||
void updateComments();
|
void updateComments();
|
||||||
void setBannerCard(int);
|
void setBannerCard(int);
|
||||||
|
void setTags(const QStringList &tags);
|
||||||
void syncDeckListBannerCardWithComboBox();
|
void syncDeckListBannerCardWithComboBox();
|
||||||
void updateHash();
|
void updateHash();
|
||||||
void refreshShortcuts();
|
void refreshShortcuts();
|
||||||
|
|
|
||||||
|
|
@ -13,8 +13,8 @@
|
||||||
#include <QHBoxLayout>
|
#include <QHBoxLayout>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
|
|
||||||
DeckPreviewDeckTagsDisplayWidget::DeckPreviewDeckTagsDisplayWidget(QWidget *_parent, DeckList *_deckList)
|
DeckPreviewDeckTagsDisplayWidget::DeckPreviewDeckTagsDisplayWidget(QWidget *_parent, const QStringList &_tags)
|
||||||
: QWidget(_parent), deckList(nullptr)
|
: QWidget(_parent), currentTags(_tags)
|
||||||
{
|
{
|
||||||
|
|
||||||
setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
|
setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
|
||||||
|
|
@ -27,16 +27,14 @@ DeckPreviewDeckTagsDisplayWidget::DeckPreviewDeckTagsDisplayWidget(QWidget *_par
|
||||||
|
|
||||||
flowWidget = new FlowWidget(this, Qt::Horizontal, Qt::ScrollBarAlwaysOff, Qt::ScrollBarAsNeeded);
|
flowWidget = new FlowWidget(this, Qt::Horizontal, Qt::ScrollBarAlwaysOff, Qt::ScrollBarAsNeeded);
|
||||||
|
|
||||||
if (_deckList) {
|
|
||||||
setDeckList(_deckList);
|
|
||||||
}
|
|
||||||
|
|
||||||
layout->addWidget(flowWidget);
|
layout->addWidget(flowWidget);
|
||||||
|
|
||||||
|
refreshTags();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeckPreviewDeckTagsDisplayWidget::setDeckList(DeckList *_deckList)
|
void DeckPreviewDeckTagsDisplayWidget::setTags(const QStringList &_tags)
|
||||||
{
|
{
|
||||||
deckList = _deckList;
|
currentTags = _tags;
|
||||||
refreshTags();
|
refreshTags();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -44,7 +42,7 @@ void DeckPreviewDeckTagsDisplayWidget::refreshTags()
|
||||||
{
|
{
|
||||||
flowWidget->clearLayout();
|
flowWidget->clearLayout();
|
||||||
|
|
||||||
for (const QString &tag : deckList->getTags()) {
|
for (const QString &tag : currentTags) {
|
||||||
flowWidget->addWidget(new DeckPreviewTagDisplayWidget(this, tag));
|
flowWidget->addWidget(new DeckPreviewTagDisplayWidget(this, tag));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -93,46 +91,19 @@ static QStringList findAllKnownTags()
|
||||||
void DeckPreviewDeckTagsDisplayWidget::openTagEditDlg()
|
void DeckPreviewDeckTagsDisplayWidget::openTagEditDlg()
|
||||||
{
|
{
|
||||||
if (qobject_cast<DeckPreviewWidget *>(parentWidget())) {
|
if (qobject_cast<DeckPreviewWidget *>(parentWidget())) {
|
||||||
|
// If we're the child of a DeckPreviewWidget, then we need to handle conversion
|
||||||
auto *deckPreviewWidget = qobject_cast<DeckPreviewWidget *>(parentWidget());
|
auto *deckPreviewWidget = qobject_cast<DeckPreviewWidget *>(parentWidget());
|
||||||
|
|
||||||
bool canAddTags = promptFileConversionIfRequired(deckPreviewWidget);
|
bool canAddTags = promptFileConversionIfRequired(deckPreviewWidget);
|
||||||
|
|
||||||
if (canAddTags) {
|
if (canAddTags) {
|
||||||
QStringList knownTags = deckPreviewWidget->visualDeckStorageWidget->tagFilterWidget->getAllKnownTags();
|
QStringList knownTags = deckPreviewWidget->visualDeckStorageWidget->tagFilterWidget->getAllKnownTags();
|
||||||
QStringList activeTags = deckList->getTags();
|
execTagDialog(knownTags);
|
||||||
|
|
||||||
DeckPreviewTagDialog dialog(knownTags, activeTags);
|
|
||||||
if (dialog.exec() == QDialog::Accepted) {
|
|
||||||
QStringList updatedTags = dialog.getActiveTags();
|
|
||||||
deckList->setTags(updatedTags);
|
|
||||||
deckPreviewWidget->deckLoader->saveToFile(deckPreviewWidget->filePath, DeckLoader::CockatriceFormat);
|
|
||||||
refreshTags();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (parentWidget()) {
|
|
||||||
// If we're the child of an AbstractTabDeckEditor, we are buried under a ton of childWidgets in the
|
|
||||||
// DeckInfoDock.
|
|
||||||
QWidget *currentParent = parentWidget();
|
|
||||||
while (currentParent) {
|
|
||||||
if (qobject_cast<AbstractTabDeckEditor *>(currentParent)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
currentParent = currentParent->parentWidget();
|
|
||||||
}
|
|
||||||
if (qobject_cast<AbstractTabDeckEditor *>(currentParent)) {
|
|
||||||
auto *deckEditor = qobject_cast<AbstractTabDeckEditor *>(currentParent);
|
|
||||||
|
|
||||||
QStringList knownTags = findAllKnownTags();
|
|
||||||
QStringList activeTags = deckList->getTags();
|
|
||||||
|
|
||||||
DeckPreviewTagDialog dialog(knownTags, activeTags);
|
|
||||||
if (dialog.exec() == QDialog::Accepted) {
|
|
||||||
QStringList updatedTags = dialog.getActiveTags();
|
|
||||||
deckList->setTags(updatedTags);
|
|
||||||
deckEditor->setModified(true);
|
|
||||||
refreshTags();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
// If we're the child of an AbstractTabDeckEditor, then we don't bother with conversion
|
||||||
|
QStringList knownTags = findAllKnownTags();
|
||||||
|
execTagDialog(knownTags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -205,4 +176,16 @@ bool DeckPreviewDeckTagsDisplayWidget::promptFileConversionIfRequired(DeckPrevie
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DeckPreviewDeckTagsDisplayWidget::execTagDialog(const QStringList &knownTags)
|
||||||
|
{
|
||||||
|
DeckPreviewTagDialog dialog(knownTags, currentTags);
|
||||||
|
if (dialog.exec() == QDialog::Accepted) {
|
||||||
|
QStringList updatedTags = dialog.getActiveTags();
|
||||||
|
if (updatedTags != currentTags) {
|
||||||
|
setTags(updatedTags);
|
||||||
|
emit tagsChanged(updatedTags);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -17,12 +17,12 @@ class DeckPreviewDeckTagsDisplayWidget : public QWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
DeckList *deckList;
|
QStringList currentTags;
|
||||||
FlowWidget *flowWidget;
|
FlowWidget *flowWidget;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit DeckPreviewDeckTagsDisplayWidget(QWidget *_parent, DeckList *_deckList);
|
explicit DeckPreviewDeckTagsDisplayWidget(QWidget *_parent, const QStringList &_tags);
|
||||||
void setDeckList(DeckList *_deckList);
|
void setTags(const QStringList &_tags);
|
||||||
void refreshTags();
|
void refreshTags();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
@ -30,5 +30,13 @@ public slots:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool promptFileConversionIfRequired(DeckPreviewWidget *deckPreviewWidget);
|
bool promptFileConversionIfRequired(DeckPreviewWidget *deckPreviewWidget);
|
||||||
|
void execTagDialog(const QStringList &knownTags);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
/**
|
||||||
|
* Emitted when the tags have changed due to user interaction.
|
||||||
|
* @param tags The new list of tags.
|
||||||
|
*/
|
||||||
|
void tagsChanged(const QStringList &tags);
|
||||||
};
|
};
|
||||||
#endif // DECK_PREVIEW_DECK_TAGS_DISPLAY_WIDGET_H
|
#endif // DECK_PREVIEW_DECK_TAGS_DISPLAY_WIDGET_H
|
||||||
|
|
|
||||||
|
|
@ -83,7 +83,8 @@ void DeckPreviewWidget::initializeUi(const bool deckLoadSuccess)
|
||||||
setFilePath(deckLoader->getLastLoadInfo().fileName);
|
setFilePath(deckLoader->getLastLoadInfo().fileName);
|
||||||
|
|
||||||
colorIdentityWidget = new ColorIdentityWidget(this, getColorIdentity());
|
colorIdentityWidget = new ColorIdentityWidget(this, getColorIdentity());
|
||||||
deckTagsDisplayWidget = new DeckPreviewDeckTagsDisplayWidget(this, deckLoader->getDeckList());
|
deckTagsDisplayWidget = new DeckPreviewDeckTagsDisplayWidget(this, deckLoader->getDeckList()->getTags());
|
||||||
|
connect(deckTagsDisplayWidget, &DeckPreviewDeckTagsDisplayWidget::tagsChanged, this, &DeckPreviewWidget::setTags);
|
||||||
|
|
||||||
bannerCardLabel = new QLabel(this);
|
bannerCardLabel = new QLabel(this);
|
||||||
bannerCardLabel->setObjectName("bannerCardLabel");
|
bannerCardLabel->setObjectName("bannerCardLabel");
|
||||||
|
|
@ -307,6 +308,12 @@ void DeckPreviewWidget::imageDoubleClickedEvent(QMouseEvent *event, DeckPreviewC
|
||||||
emit deckLoadRequested(filePath);
|
emit deckLoadRequested(filePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DeckPreviewWidget::setTags(const QStringList &tags)
|
||||||
|
{
|
||||||
|
deckLoader->getDeckList()->setTags(tags);
|
||||||
|
deckLoader->saveToFile(filePath, DeckLoader::CockatriceFormat);
|
||||||
|
}
|
||||||
|
|
||||||
QMenu *DeckPreviewWidget::createRightClickMenu()
|
QMenu *DeckPreviewWidget::createRightClickMenu()
|
||||||
{
|
{
|
||||||
auto *menu = new QMenu(this);
|
auto *menu = new QMenu(this);
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,8 @@ private:
|
||||||
void addSetBannerCardMenu(QMenu *menu);
|
void addSetBannerCardMenu(QMenu *menu);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
void setTags(const QStringList &tags);
|
||||||
|
|
||||||
void actRenameDeck();
|
void actRenameDeck();
|
||||||
void actRenameFile();
|
void actRenameFile();
|
||||||
void actDeleteFile();
|
void actDeleteFile();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue