confirmation message box

This commit is contained in:
Max-Wilhelm Bruker 2009-05-27 20:37:28 +02:00
parent 13b6a360d2
commit 9a277ccccf
4 changed files with 62 additions and 14 deletions

View file

@ -182,5 +182,6 @@ bool DeckListModel::insertRows(int row, int count, const QModelIndex &parent)
void DeckListModel::cleanList()
{
deckList->cleanList();
deckList->initZones();
reset();
}

View file

@ -79,24 +79,31 @@ WndDeckEditor::WndDeckEditor(CardDatabase *_db, QWidget *parent)
centralWidget->setLayout(mainLayout);
setCentralWidget(centralWidget);
setWindowTitle(tr("Card database"));
setWindowTitle(tr("Deck editor [*]"));
aNewDeck = new QAction(tr("&New deck"), this);
aNewDeck->setShortcuts(QKeySequence::New);
connect(aNewDeck, SIGNAL(triggered()), this, SLOT(actNewDeck()));
aLoadDeck = new QAction(tr("&Load deck..."), this);
aLoadDeck->setShortcut(tr("Ctrl+L"));
aLoadDeck->setShortcuts(QKeySequence::Open);
connect(aLoadDeck, SIGNAL(triggered()), this, SLOT(actLoadDeck()));
aSaveDeck = new QAction(tr("&Save deck"), this);
aSaveDeck->setShortcut(tr("Ctrl+S"));
aSaveDeck->setShortcuts(QKeySequence::Save);
connect(aSaveDeck, SIGNAL(triggered()), this, SLOT(actSaveDeck()));
aSaveDeckAs = new QAction(tr("&Save deck as..."), this);
aSaveDeckAs->setShortcuts(QKeySequence::SaveAs);
connect(aSaveDeckAs, SIGNAL(triggered()), this, SLOT(actSaveDeckAs()));
aClose = new QAction(tr("&Close"), this);
aClose->setShortcut(tr("Ctrl+Q"));
connect(aClose, SIGNAL(triggered()), this, SLOT(close()));
deckMenu = menuBar()->addMenu(tr("&Deck"));
deckMenu->addAction(aNewDeck);
deckMenu->addAction(aLoadDeck);
deckMenu->addAction(aSaveDeck);
deckMenu->addAction(aSaveDeckAs);
deckMenu->addSeparator();
deckMenu->addAction(aClose);
aAddCard = new QAction(tr("Add card to &maindeck"), this);
connect(aAddCard, SIGNAL(triggered()), this, SLOT(actAddCard()));
@ -144,8 +151,33 @@ void WndDeckEditor::updateSearch(const QString &search)
databaseView->selectionModel()->setCurrentIndex(matches[0], QItemSelectionModel::SelectCurrent);
}
bool WndDeckEditor::confirmClose()
{
if (isWindowModified()) {
QMessageBox::StandardButton ret = QMessageBox::warning(this, tr("Are you sure?"),
tr("The decklist has been modified.\nDo you want to save the changes?"),
QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
if (ret == QMessageBox::Save)
return actSaveDeck();
else if (ret == QMessageBox::Cancel)
return false;
}
return true;
}
void WndDeckEditor::closeEvent(QCloseEvent *event)
{
if (confirmClose())
event->accept();
else
event->ignore();
}
void WndDeckEditor::actNewDeck()
{
if (!confirmClose())
return;
deckModel->cleanList();
nameEdit->setText(QString());
commentsEdit->setText(QString());
@ -154,6 +186,9 @@ void WndDeckEditor::actNewDeck()
void WndDeckEditor::actLoadDeck()
{
if (!confirmClose())
return;
DeckList *l = deckModel->getDeckList();
if (l->loadDialog(this)) {
lastFileName = l->getLastFileName();
@ -164,22 +199,27 @@ void WndDeckEditor::actLoadDeck()
}
}
void WndDeckEditor::actSaveDeck()
bool WndDeckEditor::actSaveDeck()
{
if (lastFileName.isEmpty())
actSaveDeckAs();
else
deckModel->getDeckList()->saveToFile(lastFileName, lastFileFormat);
;
return actSaveDeckAs();
else if (deckModel->getDeckList()->saveToFile(lastFileName, lastFileFormat)) {
setWindowModified(false);
return true;
} else
return false;
}
void WndDeckEditor::actSaveDeckAs()
bool WndDeckEditor::actSaveDeckAs()
{
DeckList *l = deckModel->getDeckList();
if (l->saveDialog(this)) {
lastFileName = l->getLastFileName();
lastFileFormat = l->getLastFileFormat();
}
setWindowModified(false);
return true;
} else
return false;
}
void WndDeckEditor::addCardHelper(int baseRow)
@ -200,6 +240,7 @@ void WndDeckEditor::addCardHelper(int baseRow)
const int count = deckModel->data(numberIndex, Qt::EditRole).toInt();
deckModel->setData(numberIndex, count + 1, Qt::EditRole);
}
setWindowModified(true);
}
void WndDeckEditor::actAddCard()
@ -218,6 +259,7 @@ void WndDeckEditor::actRemoveCard()
if (!currentIndex.isValid())
return;
deckModel->removeRow(currentIndex.row(), currentIndex.parent());
setWindowModified(true);
}
void WndDeckEditor::actIncrement()
@ -228,6 +270,7 @@ void WndDeckEditor::actIncrement()
const QModelIndex numberIndex = currentIndex.sibling(currentIndex.row(), 0);
const int count = deckModel->data(numberIndex, Qt::EditRole).toInt();
deckModel->setData(numberIndex, count + 1, Qt::EditRole);
setWindowModified(true);
}
void WndDeckEditor::actDecrement()
@ -241,4 +284,5 @@ void WndDeckEditor::actDecrement()
deckModel->removeRow(currentIndex.row(), currentIndex.parent());
else
deckModel->setData(numberIndex, count - 1, Qt::EditRole);
setWindowModified(true);
}

View file

@ -22,8 +22,8 @@ private slots:
void actNewDeck();
void actLoadDeck();
void actSaveDeck();
void actSaveDeckAs();
bool actSaveDeck();
bool actSaveDeckAs();
void actAddCard();
void actAddCardToSideboard();
@ -32,6 +32,7 @@ private slots:
void actDecrement();
private:
void addCardHelper(int baseRow);
bool confirmClose();
QString lastFileName;
DeckList::FileFormat lastFileFormat;
@ -45,11 +46,13 @@ private:
QLineEdit *searchEdit, *nameEdit, *commentsEdit;
QMenu *deckMenu;
QAction *aNewDeck, *aLoadDeck, *aSaveDeck, *aSaveDeckAs;
QAction *aNewDeck, *aLoadDeck, *aSaveDeck, *aSaveDeckAs, *aClose;
QAction *aAddCard, *aAddCardToSideboard, *aRemoveCard, *aIncrement, *aDecrement;
public:
WndDeckEditor(CardDatabase *_db, QWidget *parent = 0);
~WndDeckEditor();
protected:
void closeEvent(QCloseEvent *event);
};
#endif

View file

@ -208,7 +208,7 @@ void MainWindow::createMenus()
gameMenu->addAction(aDeckEditor);
gameMenu->addSeparator();
gameMenu->addAction(aExit);
actionsMenu = menuBar()->addMenu(tr("&Actions"));
cardMenu = menuBar()->addMenu(tr("&Card"));