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
This commit is contained in:
Lee Tran 2018-09-21 09:46:31 -05:00 committed by Zach H
parent 70005a6f1d
commit eb4b1e74f1
2 changed files with 28 additions and 2 deletions

View file

@ -337,6 +337,8 @@ void TabDeckEditor::createMenus()
connect(aResetLayout, SIGNAL(triggered()), this, SLOT(restartLayout())); connect(aResetLayout, SIGNAL(triggered()), this, SLOT(restartLayout()));
viewMenu->addAction(aResetLayout); viewMenu->addAction(aResetLayout);
setSaveStatus(false);
addTabMenu(viewMenu); addTabMenu(viewMenu);
} }
@ -673,12 +675,14 @@ void TabDeckEditor::updateName(const QString &name)
{ {
deckModel->getDeckList()->setName(name); deckModel->getDeckList()->setName(name);
setModified(true); setModified(true);
setSaveStatus(true);
} }
void TabDeckEditor::updateComments() void TabDeckEditor::updateComments()
{ {
deckModel->getDeckList()->setComments(commentsEdit->toPlainText()); deckModel->getDeckList()->setComments(commentsEdit->toPlainText());
setModified(true); setModified(true);
setSaveStatus(true);
} }
void TabDeckEditor::updateCardInfoLeft(const QModelIndex &current, const QModelIndex & /*previous*/) void TabDeckEditor::updateCardInfoLeft(const QModelIndex &current, const QModelIndex & /*previous*/)
@ -739,6 +743,7 @@ void TabDeckEditor::actNewDeck()
commentsEdit->setText(QString()); commentsEdit->setText(QString());
hashLabel->setText(QString()); hashLabel->setText(QString());
setModified(false); setModified(false);
setSaveStatus(false);
} }
void TabDeckEditor::actLoadDeck() void TabDeckEditor::actLoadDeck()
@ -753,10 +758,12 @@ void TabDeckEditor::actLoadDeck()
DeckLoader::FileFormat fmt = DeckLoader::getFormatFromName(fileName); DeckLoader::FileFormat fmt = DeckLoader::getFormatFromName(fileName);
auto *l = new DeckLoader; auto *l = new DeckLoader;
if (l->loadFromFile(fileName, fmt)) if (l->loadFromFile(fileName, fmt)) {
setSaveStatus(false);
setDeck(l); setDeck(l);
else } else
delete l; delete l;
setSaveStatus(true);
} }
void TabDeckEditor::saveDeckRemoteFinished(const Response &response) void TabDeckEditor::saveDeckRemoteFinished(const Response &response)
@ -829,6 +836,7 @@ void TabDeckEditor::actLoadDeckFromClipboard()
setDeck(dlg.getDeckList()); setDeck(dlg.getDeckList());
setModified(true); setModified(true);
setSaveStatus(true);
} }
void TabDeckEditor::actSaveDeckToClipboard() void TabDeckEditor::actSaveDeckToClipboard()
@ -967,6 +975,7 @@ void TabDeckEditor::actSwapCard()
recursiveExpand(newCardIndex); recursiveExpand(newCardIndex);
setModified(true); setModified(true);
setSaveStatus(true);
} }
void TabDeckEditor::actAddCard() void TabDeckEditor::actAddCard()
@ -975,11 +984,13 @@ void TabDeckEditor::actAddCard()
actAddCardToSideboard(); actAddCardToSideboard();
else else
addCardHelper(DECK_ZONE_MAIN); addCardHelper(DECK_ZONE_MAIN);
setSaveStatus(true);
} }
void TabDeckEditor::actAddCardToSideboard() void TabDeckEditor::actAddCardToSideboard()
{ {
addCardHelper(DECK_ZONE_SIDE); addCardHelper(DECK_ZONE_SIDE);
setSaveStatus(true);
} }
void TabDeckEditor::actRemoveCard() void TabDeckEditor::actRemoveCard()
@ -988,6 +999,9 @@ void TabDeckEditor::actRemoveCard()
if (!currentIndex.isValid() || deckModel->hasChildren(currentIndex)) if (!currentIndex.isValid() || deckModel->hasChildren(currentIndex))
return; return;
deckModel->removeRow(currentIndex.row(), currentIndex.parent()); deckModel->removeRow(currentIndex.row(), currentIndex.parent());
DeckLoader *const deck = deckModel->getDeckList();
setSaveStatus(!deck->isEmpty());
setModified(true); setModified(true);
} }
@ -1187,3 +1201,14 @@ void TabDeckEditor::saveDbHeaderState()
{ {
settingsCache->layouts().setDeckEditorDbHeaderState(databaseView->header()->saveState()); 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);
}

View file

@ -95,6 +95,7 @@ private slots:
void dockFloatingTriggered(); void dockFloatingTriggered();
void dockTopLevelChanged(bool topLevel); void dockTopLevelChanged(bool topLevel);
void saveDbHeaderState(); void saveDbHeaderState();
void setSaveStatus(bool newStatus);
private: private:
CardInfoPtr currentCardInfo() const; CardInfoPtr currentCardInfo() const;