From eb4b1e74f1bd8e29dc266d8120bc113ffb5e76ff Mon Sep 17 00:00:00 2001 From: Lee Tran <41343559+leestran1995@users.noreply.github.com> Date: Fri, 21 Sep 2018 09:46:31 -0500 Subject: [PATCH] Disable saving of decks when the deck is empty (#3384) * Disable saving of decks when the deck is empty * Replace tabs with spaces to conform with coding conventions * Remove whitespace at end of line to satisfy the CI robot overlords * Improve logic to check if deck is empty, fix functionality when a deck is loaded * Fix code style issues * Disable more menus when the deck is empty * Streamline code for disabling save menus when the deck is empty * Fix save-disabling when loading a deck from the clipboard * Enable saving deck directly after loading deck --- cockatrice/src/tab_deck_editor.cpp | 29 +++++++++++++++++++++++++++-- cockatrice/src/tab_deck_editor.h | 1 + 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/cockatrice/src/tab_deck_editor.cpp b/cockatrice/src/tab_deck_editor.cpp index 226110e2..d44f8bab 100644 --- a/cockatrice/src/tab_deck_editor.cpp +++ b/cockatrice/src/tab_deck_editor.cpp @@ -337,6 +337,8 @@ void TabDeckEditor::createMenus() connect(aResetLayout, SIGNAL(triggered()), this, SLOT(restartLayout())); viewMenu->addAction(aResetLayout); + setSaveStatus(false); + addTabMenu(viewMenu); } @@ -673,12 +675,14 @@ void TabDeckEditor::updateName(const QString &name) { deckModel->getDeckList()->setName(name); setModified(true); + setSaveStatus(true); } void TabDeckEditor::updateComments() { deckModel->getDeckList()->setComments(commentsEdit->toPlainText()); setModified(true); + setSaveStatus(true); } void TabDeckEditor::updateCardInfoLeft(const QModelIndex ¤t, const QModelIndex & /*previous*/) @@ -739,6 +743,7 @@ void TabDeckEditor::actNewDeck() commentsEdit->setText(QString()); hashLabel->setText(QString()); setModified(false); + setSaveStatus(false); } void TabDeckEditor::actLoadDeck() @@ -753,10 +758,12 @@ void TabDeckEditor::actLoadDeck() DeckLoader::FileFormat fmt = DeckLoader::getFormatFromName(fileName); auto *l = new DeckLoader; - if (l->loadFromFile(fileName, fmt)) + if (l->loadFromFile(fileName, fmt)) { + setSaveStatus(false); setDeck(l); - else + } else delete l; + setSaveStatus(true); } void TabDeckEditor::saveDeckRemoteFinished(const Response &response) @@ -829,6 +836,7 @@ void TabDeckEditor::actLoadDeckFromClipboard() setDeck(dlg.getDeckList()); setModified(true); + setSaveStatus(true); } void TabDeckEditor::actSaveDeckToClipboard() @@ -967,6 +975,7 @@ void TabDeckEditor::actSwapCard() recursiveExpand(newCardIndex); setModified(true); + setSaveStatus(true); } void TabDeckEditor::actAddCard() @@ -975,11 +984,13 @@ void TabDeckEditor::actAddCard() actAddCardToSideboard(); else addCardHelper(DECK_ZONE_MAIN); + setSaveStatus(true); } void TabDeckEditor::actAddCardToSideboard() { addCardHelper(DECK_ZONE_SIDE); + setSaveStatus(true); } void TabDeckEditor::actRemoveCard() @@ -988,6 +999,9 @@ void TabDeckEditor::actRemoveCard() if (!currentIndex.isValid() || deckModel->hasChildren(currentIndex)) return; deckModel->removeRow(currentIndex.row(), currentIndex.parent()); + + DeckLoader *const deck = deckModel->getDeckList(); + setSaveStatus(!deck->isEmpty()); setModified(true); } @@ -1187,3 +1201,14 @@ void TabDeckEditor::saveDbHeaderState() { settingsCache->layouts().setDeckEditorDbHeaderState(databaseView->header()->saveState()); } + +void TabDeckEditor::setSaveStatus(bool newStatus) +{ + aSaveDeck->setEnabled(newStatus); + aSaveDeckAs->setEnabled(newStatus); + aSaveDeckToClipboard->setEnabled(newStatus); + aSaveDeckToClipboardRaw->setEnabled(newStatus); + saveDeckToClipboardMenu->setEnabled(newStatus); + aPrintDeck->setEnabled(newStatus); + analyzeDeckMenu->setEnabled(newStatus); +} diff --git a/cockatrice/src/tab_deck_editor.h b/cockatrice/src/tab_deck_editor.h index 8faca7aa..5aec4f89 100644 --- a/cockatrice/src/tab_deck_editor.h +++ b/cockatrice/src/tab_deck_editor.h @@ -95,6 +95,7 @@ private slots: void dockFloatingTriggered(); void dockTopLevelChanged(bool topLevel); void saveDbHeaderState(); + void setSaveStatus(bool newStatus); private: CardInfoPtr currentCardInfo() const;