mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-01-21 17:13:22 -08:00
Merge pull request #772 from ctrlaltca/trice_saveonclose_2ndtry
cockatrice: ask to save modified decks on close; fix #759
This commit is contained in:
@@ -379,6 +379,7 @@ void TabDeckEditor::updateHash()
|
||||
bool TabDeckEditor::confirmClose()
|
||||
{
|
||||
if (modified) {
|
||||
tabSupervisor->setCurrentWidget(this);
|
||||
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);
|
||||
|
||||
@@ -75,7 +75,6 @@ private:
|
||||
void offsetCountAtIndex(const QModelIndex &idx, int offset);
|
||||
void decrementCardHelper(QString zoneName);
|
||||
void recursiveExpand(const QModelIndex &index);
|
||||
bool confirmClose();
|
||||
|
||||
CardDatabaseModel *databaseModel;
|
||||
CardDatabaseDisplayModel *databaseDisplayModel;
|
||||
@@ -110,6 +109,7 @@ public:
|
||||
QString getTabText() const;
|
||||
void setDeck(DeckLoader *_deckLoader);
|
||||
void setModified(bool _windowModified);
|
||||
bool confirmClose();
|
||||
public slots:
|
||||
void closeRequest();
|
||||
signals:
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include "settingscache.h"
|
||||
#include <QDebug>
|
||||
#include <QPainter>
|
||||
#include <QMessageBox>
|
||||
|
||||
#include "pb/room_commands.pb.h"
|
||||
#include "pb/room_event.pb.h"
|
||||
@@ -130,6 +131,23 @@ void TabSupervisor::retranslateUi()
|
||||
}
|
||||
}
|
||||
|
||||
bool TabSupervisor::closeRequest()
|
||||
{
|
||||
if (getGameCount()) {
|
||||
if (QMessageBox::question(this, tr("Are you sure?"), tr("There are still open games. Are you sure you want to quit?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::No) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
foreach(TabDeckEditor *tab, deckEditorTabs)
|
||||
{
|
||||
if(!tab->confirmClose())
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
AbstractClient *TabSupervisor::getClient() const
|
||||
{
|
||||
return localClients.isEmpty() ? client : localClients.first();
|
||||
|
||||
@@ -71,6 +71,7 @@ public:
|
||||
AbstractClient *getClient() const;
|
||||
const QMap<int, TabRoom *> &getRoomTabs() const { return roomTabs; }
|
||||
bool getAdminLocked() const;
|
||||
bool closeRequest();
|
||||
signals:
|
||||
void setMenu(const QList<QMenu *> &newMenuList = QList<QMenu *>());
|
||||
void localGameEnded();
|
||||
|
||||
@@ -423,12 +423,19 @@ MainWindow::~MainWindow()
|
||||
|
||||
void MainWindow::closeEvent(QCloseEvent *event)
|
||||
{
|
||||
if (tabSupervisor->getGameCount()) {
|
||||
if (QMessageBox::question(this, tr("Are you sure?"), tr("There are still open games. Are you sure you want to quit?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::No) {
|
||||
event->ignore();
|
||||
return;
|
||||
}
|
||||
// workaround Qt bug where closeEvent gets called twice
|
||||
static bool bClosingDown=false;
|
||||
if(bClosingDown)
|
||||
return;
|
||||
bClosingDown=true;
|
||||
|
||||
if (!tabSupervisor->closeRequest())
|
||||
{
|
||||
event->ignore();
|
||||
bClosingDown=false;
|
||||
return;
|
||||
}
|
||||
|
||||
event->accept();
|
||||
settingsCache->setMainWindowGeometry(saveGeometry());
|
||||
tabSupervisor->deleteLater();
|
||||
|
||||
Reference in New Issue
Block a user