mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2025-12-05 20:39:59 -08:00
[TagsDisplayWidget] cleanup refactor (#6394)
* Make fields private * Move method to static * clean up code * move code
This commit is contained in:
@@ -71,74 +71,36 @@ static QStringList getAllFiles(const QString &filePath)
|
|||||||
return allFiles;
|
return allFiles;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool confirmOverwriteIfExists(QWidget *parent, const QString &filePath)
|
/**
|
||||||
|
* Gets all tags that appear in the deck folder
|
||||||
|
*/
|
||||||
|
static QStringList findAllKnownTags()
|
||||||
{
|
{
|
||||||
QFileInfo fileInfo(filePath);
|
QStringList allFiles = getAllFiles(SettingsCache::instance().getDeckPath());
|
||||||
QString newFileName = QDir::toNativeSeparators(fileInfo.path() + "/" + fileInfo.completeBaseName() + ".cod");
|
|
||||||
|
|
||||||
if (QFile::exists(newFileName)) {
|
QStringList knownTags;
|
||||||
QMessageBox::StandardButton reply =
|
auto loader = DeckLoader(nullptr);
|
||||||
QMessageBox::question(parent, QObject::tr("Overwrite Existing File?"),
|
for (const QString &file : allFiles) {
|
||||||
QObject::tr("A .cod version of this deck already exists. Overwrite it?"),
|
loader.loadFromFile(file, DeckLoader::getFormatFromName(file), false);
|
||||||
QMessageBox::Yes | QMessageBox::No);
|
QStringList tags = loader.getDeckList()->getTags();
|
||||||
return reply == QMessageBox::Yes;
|
knownTags.append(tags);
|
||||||
|
knownTags.removeDuplicates();
|
||||||
}
|
}
|
||||||
return true; // Safe to proceed
|
|
||||||
|
return knownTags;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeckPreviewDeckTagsDisplayWidget::openTagEditDlg()
|
void DeckPreviewDeckTagsDisplayWidget::openTagEditDlg()
|
||||||
{
|
{
|
||||||
if (qobject_cast<DeckPreviewWidget *>(parentWidget())) {
|
if (qobject_cast<DeckPreviewWidget *>(parentWidget())) {
|
||||||
auto *deckPreviewWidget = qobject_cast<DeckPreviewWidget *>(parentWidget());
|
auto *deckPreviewWidget = qobject_cast<DeckPreviewWidget *>(parentWidget());
|
||||||
QStringList knownTags = deckPreviewWidget->visualDeckStorageWidget->tagFilterWidget->getAllKnownTags();
|
|
||||||
QStringList activeTags = deckList->getTags();
|
|
||||||
|
|
||||||
bool canAddTags = true;
|
bool canAddTags = promptFileConversionIfRequired(deckPreviewWidget);
|
||||||
|
|
||||||
if (DeckLoader::getFormatFromName(deckPreviewWidget->filePath) != DeckLoader::CockatriceFormat) {
|
|
||||||
canAddTags = false;
|
|
||||||
// Retrieve saved preference if the prompt is disabled
|
|
||||||
if (!SettingsCache::instance().getVisualDeckStoragePromptForConversion()) {
|
|
||||||
if (SettingsCache::instance().getVisualDeckStorageAlwaysConvert()) {
|
|
||||||
|
|
||||||
if (!confirmOverwriteIfExists(this, deckPreviewWidget->filePath))
|
|
||||||
return;
|
|
||||||
|
|
||||||
deckPreviewWidget->deckLoader->convertToCockatriceFormat(deckPreviewWidget->filePath);
|
|
||||||
deckPreviewWidget->filePath = deckPreviewWidget->deckLoader->getLastLoadInfo().fileName;
|
|
||||||
deckPreviewWidget->refreshBannerCardText();
|
|
||||||
canAddTags = true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Show the dialog to the user
|
|
||||||
DialogConvertDeckToCodFormat conversionDialog(parentWidget());
|
|
||||||
if (conversionDialog.exec() == QDialog::Accepted) {
|
|
||||||
|
|
||||||
if (!confirmOverwriteIfExists(this, deckPreviewWidget->filePath))
|
|
||||||
return;
|
|
||||||
|
|
||||||
deckPreviewWidget->deckLoader->convertToCockatriceFormat(deckPreviewWidget->filePath);
|
|
||||||
deckPreviewWidget->filePath = deckPreviewWidget->deckLoader->getLastLoadInfo().fileName;
|
|
||||||
deckPreviewWidget->refreshBannerCardText();
|
|
||||||
canAddTags = true;
|
|
||||||
|
|
||||||
if (conversionDialog.dontAskAgain()) {
|
|
||||||
SettingsCache::instance().setVisualDeckStoragePromptForConversion(false);
|
|
||||||
SettingsCache::instance().setVisualDeckStorageAlwaysConvert(true);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
SettingsCache::instance().setVisualDeckStorageAlwaysConvert(false);
|
|
||||||
|
|
||||||
if (conversionDialog.dontAskAgain()) {
|
|
||||||
SettingsCache::instance().setVisualDeckStoragePromptForConversion(false);
|
|
||||||
} else {
|
|
||||||
SettingsCache::instance().setVisualDeckStoragePromptForConversion(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (canAddTags) {
|
if (canAddTags) {
|
||||||
|
QStringList knownTags = deckPreviewWidget->visualDeckStorageWidget->tagFilterWidget->getAllKnownTags();
|
||||||
|
QStringList activeTags = deckList->getTags();
|
||||||
|
|
||||||
DeckPreviewTagDialog dialog(knownTags, activeTags);
|
DeckPreviewTagDialog dialog(knownTags, activeTags);
|
||||||
if (dialog.exec() == QDialog::Accepted) {
|
if (dialog.exec() == QDialog::Accepted) {
|
||||||
QStringList updatedTags = dialog.getActiveTags();
|
QStringList updatedTags = dialog.getActiveTags();
|
||||||
@@ -159,16 +121,8 @@ void DeckPreviewDeckTagsDisplayWidget::openTagEditDlg()
|
|||||||
}
|
}
|
||||||
if (qobject_cast<AbstractTabDeckEditor *>(currentParent)) {
|
if (qobject_cast<AbstractTabDeckEditor *>(currentParent)) {
|
||||||
auto *deckEditor = qobject_cast<AbstractTabDeckEditor *>(currentParent);
|
auto *deckEditor = qobject_cast<AbstractTabDeckEditor *>(currentParent);
|
||||||
QStringList knownTags;
|
|
||||||
QStringList allFiles = getAllFiles(SettingsCache::instance().getDeckPath());
|
|
||||||
DeckLoader loader(this);
|
|
||||||
for (const QString &file : allFiles) {
|
|
||||||
loader.loadFromFile(file, DeckLoader::getFormatFromName(file), false);
|
|
||||||
QStringList tags = loader.getDeckList()->getTags();
|
|
||||||
knownTags.append(tags);
|
|
||||||
knownTags.removeDuplicates();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
QStringList knownTags = findAllKnownTags();
|
||||||
QStringList activeTags = deckList->getTags();
|
QStringList activeTags = deckList->getTags();
|
||||||
|
|
||||||
DeckPreviewTagDialog dialog(knownTags, activeTags);
|
DeckPreviewTagDialog dialog(knownTags, activeTags);
|
||||||
@@ -181,3 +135,74 @@ void DeckPreviewDeckTagsDisplayWidget::openTagEditDlg()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool confirmOverwriteIfExists(QWidget *parent, const QString &filePath)
|
||||||
|
{
|
||||||
|
QFileInfo fileInfo(filePath);
|
||||||
|
QString newFileName = QDir::toNativeSeparators(fileInfo.path() + "/" + fileInfo.completeBaseName() + ".cod");
|
||||||
|
|
||||||
|
if (QFile::exists(newFileName)) {
|
||||||
|
QMessageBox::StandardButton reply =
|
||||||
|
QMessageBox::question(parent, QObject::tr("Overwrite Existing File?"),
|
||||||
|
QObject::tr("A .cod version of this deck already exists. Overwrite it?"),
|
||||||
|
QMessageBox::Yes | QMessageBox::No);
|
||||||
|
return reply == QMessageBox::Yes;
|
||||||
|
}
|
||||||
|
return true; // Safe to proceed
|
||||||
|
}
|
||||||
|
|
||||||
|
static void convertFileToCockatriceFormat(DeckPreviewWidget *deckPreviewWidget)
|
||||||
|
{
|
||||||
|
deckPreviewWidget->deckLoader->convertToCockatriceFormat(deckPreviewWidget->filePath);
|
||||||
|
deckPreviewWidget->filePath = deckPreviewWidget->deckLoader->getLastLoadInfo().fileName;
|
||||||
|
deckPreviewWidget->refreshBannerCardText();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the deck's file format supports tags.
|
||||||
|
* If not, then prompt the user for file conversion.
|
||||||
|
* @return whether the resulting file can support adding tags
|
||||||
|
*/
|
||||||
|
bool DeckPreviewDeckTagsDisplayWidget::promptFileConversionIfRequired(DeckPreviewWidget *deckPreviewWidget)
|
||||||
|
{
|
||||||
|
if (DeckLoader::getFormatFromName(deckPreviewWidget->filePath) == DeckLoader::CockatriceFormat) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retrieve saved preference if the prompt is disabled
|
||||||
|
if (!SettingsCache::instance().getVisualDeckStoragePromptForConversion()) {
|
||||||
|
if (!SettingsCache::instance().getVisualDeckStorageAlwaysConvert()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!confirmOverwriteIfExists(this, deckPreviewWidget->filePath)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
convertFileToCockatriceFormat(deckPreviewWidget);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Show the dialog to the user
|
||||||
|
DialogConvertDeckToCodFormat conversionDialog(parentWidget());
|
||||||
|
if (conversionDialog.exec() != QDialog::Accepted) {
|
||||||
|
SettingsCache::instance().setVisualDeckStoragePromptForConversion(!conversionDialog.dontAskAgain());
|
||||||
|
SettingsCache::instance().setVisualDeckStorageAlwaysConvert(false);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try to convert file
|
||||||
|
if (!confirmOverwriteIfExists(this, deckPreviewWidget->filePath)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
convertFileToCockatriceFormat(deckPreviewWidget);
|
||||||
|
|
||||||
|
if (conversionDialog.dontAskAgain()) {
|
||||||
|
SettingsCache::instance().setVisualDeckStoragePromptForConversion(false);
|
||||||
|
SettingsCache::instance().setVisualDeckStorageAlwaysConvert(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
@@ -12,21 +12,23 @@
|
|||||||
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
|
||||||
inline bool confirmOverwriteIfExists(QWidget *parent, const QString &filePath);
|
|
||||||
|
|
||||||
class DeckPreviewWidget;
|
class DeckPreviewWidget;
|
||||||
class DeckPreviewDeckTagsDisplayWidget : public QWidget
|
class DeckPreviewDeckTagsDisplayWidget : public QWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
|
DeckList *deckList;
|
||||||
|
FlowWidget *flowWidget;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit DeckPreviewDeckTagsDisplayWidget(QWidget *_parent, DeckList *_deckList);
|
explicit DeckPreviewDeckTagsDisplayWidget(QWidget *_parent, DeckList *_deckList);
|
||||||
void setDeckList(DeckList *_deckList);
|
void setDeckList(DeckList *_deckList);
|
||||||
void refreshTags();
|
void refreshTags();
|
||||||
DeckList *deckList;
|
|
||||||
FlowWidget *flowWidget;
|
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void openTagEditDlg();
|
void openTagEditDlg();
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool promptFileConversionIfRequired(DeckPreviewWidget *deckPreviewWidget);
|
||||||
};
|
};
|
||||||
#endif // DECK_PREVIEW_DECK_TAGS_DISPLAY_WIDGET_H
|
#endif // DECK_PREVIEW_DECK_TAGS_DISPLAY_WIDGET_H
|
||||||
|
|||||||
Reference in New Issue
Block a user