Properly handle close events.

This commit is contained in:
Jim Evins
2016-05-15 16:15:32 -04:00
parent a30af8eeab
commit 1819a02d50
3 changed files with 59 additions and 39 deletions
+1 -36
View File
@@ -195,42 +195,7 @@ void File::print( MainWindow *window )
///
void File::close( MainWindow *window )
{
bool closeFlag = true;
if ( !window->isEmpty() )
{
QMessageBox msgBox;
msgBox.setText( tr("The document ") + window->model()->shortName() + tr(" has been modified.") );
msgBox.setInformativeText( tr("Do you want to save your changes?") );
msgBox.setStandardButtons( QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel );
msgBox.setDefaultButton( QMessageBox::Save );
int ret = msgBox.exec();
switch (ret) {
case QMessageBox::Save:
// Save was clicked
closeFlag = save( window );
break;
case QMessageBox::Discard:
// Don't Save was clicked
closeFlag = true;
break;
case QMessageBox::Cancel:
// Cancel was clicked
closeFlag = false;
break;
default:
// should never be reached
closeFlag = false;
break;
}
}
if ( closeFlag )
{
window->close();
}
}
@@ -241,6 +206,6 @@ void File::exit()
{
foreach ( MainWindow* window, MainWindow::windowList() )
{
close( window );
window->close();
}
}
+53
View File
@@ -33,6 +33,7 @@
#include <QListWidget>
#include <QStackedWidget>
#include <QLabel>
#include <QMessageBox>
#include <QDebug>
#include "libglabels/Db.h"
@@ -221,8 +222,15 @@ QList<MainWindow*> MainWindow::windowList()
///
void MainWindow::closeEvent( QCloseEvent *event )
{
if ( isOkToClose() )
{
writeSettings();
event->accept();
}
else
{
event->ignore();
}
}
@@ -921,6 +929,51 @@ void MainWindow::writeSettings()
}
///
/// Is it ok to close window?
///
bool MainWindow::isOkToClose()
{
bool ok = true;
if ( !this->isEmpty() )
{
if ( mModel->isModified() )
{
QString msg = tr("Save changes to project \"%1\" before closing?").arg( mModel->shortName() );
QString info = tr("Your changes will be lost if you don't save them.");
int ret = QMessageBox::warning( this,
tr( "Save project?" ),
"<b>" + msg + "</b><p>" + info + "</p>",
(QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel),
QMessageBox::Save );
switch (ret) {
case QMessageBox::Save:
// Save was clicked
ok = File::save( this );
break;
case QMessageBox::Discard:
// Don't Save was clicked
ok = true;
break;
case QMessageBox::Cancel:
// Cancel was clicked
ok = false;
break;
default:
// should never be reached
ok = false;
break;
}
}
}
return ok;
}
///
/// Change page
///
+2
View File
@@ -179,6 +179,8 @@ private:
void readSettings();
void writeSettings();
bool isOkToClose();
/////////////////////////////////////
// Private Data